From 1e7d519685da99a520d1c3c45279886a286fbb64 Mon Sep 17 00:00:00 2001 From: Yemel Jardi Date: Fri, 25 Jul 2014 13:48:25 -0300 Subject: [PATCH] Remove framework files --- mobile/CordovaLib/AndroidManifest.xml | 23 - mobile/CordovaLib/build.xml | 92 - mobile/CordovaLib/local.properties | 10 - mobile/CordovaLib/proguard-project.txt | 20 - mobile/CordovaLib/project.properties | 17 - .../src/com/squareup/okhttp/Address.java | 140 - .../src/com/squareup/okhttp/Connection.java | 335 - .../com/squareup/okhttp/ConnectionPool.java | 274 - .../src/com/squareup/okhttp/Dispatcher.java | 86 - .../src/com/squareup/okhttp/Failure.java | 59 - .../squareup/okhttp/HttpResponseCache.java | 722 - .../src/com/squareup/okhttp/Job.java | 232 - .../src/com/squareup/okhttp/MediaType.java | 120 - .../com/squareup/okhttp/OkAuthenticator.java | 123 - .../src/com/squareup/okhttp/OkHttpClient.java | 408 - .../com/squareup/okhttp/OkResponseCache.java | 56 - .../src/com/squareup/okhttp/Request.java | 284 - .../src/com/squareup/okhttp/Response.java | 290 - .../com/squareup/okhttp/ResponseSource.java | 37 - .../src/com/squareup/okhttp/Route.java | 91 - .../com/squareup/okhttp/RouteDatabase.java | 57 - .../com/squareup/okhttp/TunnelRequest.java | 75 - .../okhttp/internal/AbstractOutputStream.java | 45 - .../com/squareup/okhttp/internal/Base64.java | 164 - .../okhttp/internal/DiskLruCache.java | 926 -- .../src/com/squareup/okhttp/internal/Dns.java | 33 - .../internal/FaultRecoveringOutputStream.java | 163 - .../okhttp/internal/NamedRunnable.java | 40 - .../squareup/okhttp/internal/Platform.java | 370 - .../okhttp/internal/StrictLineReader.java | 207 - .../com/squareup/okhttp/internal/Util.java | 394 - .../http/AbstractHttpInputStream.java | 107 - .../okhttp/internal/http/HeaderParser.java | 112 - .../internal/http/HttpAuthenticator.java | 166 - .../okhttp/internal/http/HttpDate.java | 88 - .../okhttp/internal/http/HttpEngine.java | 686 - .../okhttp/internal/http/HttpTransport.java | 497 - .../internal/http/HttpURLConnectionImpl.java | 590 - .../okhttp/internal/http/HttpsEngine.java | 72 - .../internal/http/HttpsURLConnectionImpl.java | 366 - .../internal/http/OkResponseCacheAdapter.java | 57 - .../squareup/okhttp/internal/http/Policy.java | 49 - .../okhttp/internal/http/RawHeaders.java | 447 - .../okhttp/internal/http/RequestHeaders.java | 317 - .../okhttp/internal/http/ResponseHeaders.java | 512 - .../internal/http/RetryableOutputStream.java | 75 - .../okhttp/internal/http/RouteSelector.java | 269 - .../okhttp/internal/http/SpdyTransport.java | 103 - .../okhttp/internal/http/Transport.java | 64 - .../http/UnknownLengthHttpInputStream.java | 63 - .../okhttp/internal/spdy/ErrorCode.java | 83 - .../okhttp/internal/spdy/FrameReader.java | 55 - .../okhttp/internal/spdy/FrameWriter.java | 43 - .../okhttp/internal/spdy/HeadersMode.java | 49 - .../squareup/okhttp/internal/spdy/Hpack.java | 387 - .../okhttp/internal/spdy/Http20Draft06.java | 385 - .../internal/spdy/IncomingStreamHandler.java | 36 - .../internal/spdy/NameValueBlockReader.java | 139 - .../squareup/okhttp/internal/spdy/Ping.java | 71 - .../okhttp/internal/spdy/Settings.java | 187 - .../squareup/okhttp/internal/spdy/Spdy3.java | 463 - .../okhttp/internal/spdy/SpdyConnection.java | 599 - .../okhttp/internal/spdy/SpdyStream.java | 684 - .../okhttp/internal/spdy/Variant.java | 37 - .../internal/tls/DistinguishedNameParser.java | 407 - .../internal/tls/OkHostnameVerifier.java | 194 - .../src/org/apache/cordova/App.java | 295 - .../apache/cordova/AuthenticationToken.java | 69 - .../org/apache/cordova/CallbackContext.java | 144 - .../src/org/apache/cordova/Config.java | 233 - .../org/apache/cordova/CordovaActivity.java | 1241 -- .../src/org/apache/cordova/CordovaArgs.java | 113 - .../apache/cordova/CordovaChromeClient.java | 409 - .../org/apache/cordova/CordovaInterface.java | 72 - .../src/org/apache/cordova/CordovaPlugin.java | 191 - .../apache/cordova/CordovaResourceApi.java | 444 - .../org/apache/cordova/CordovaWebView.java | 946 -- .../apache/cordova/CordovaWebViewClient.java | 367 - .../org/apache/cordova/DirectoryManager.java | 162 - .../src/org/apache/cordova/DroidGap.java | 34 - .../src/org/apache/cordova/ExifHelper.java | 186 - .../src/org/apache/cordova/ExposedJsApi.java | 82 - .../src/org/apache/cordova/FileHelper.java | 163 - .../cordova/IceCreamCordovaWebViewClient.java | 101 - .../src/org/apache/cordova/JSONUtils.java | 43 - .../src/org/apache/cordova/LOG.java | 234 - .../LinearLayoutSoftKeyboardDetect.java | 105 - .../cordova/NativeToJsMessageQueue.java | 518 - .../src/org/apache/cordova/PluginEntry.java | 132 - .../src/org/apache/cordova/PluginManager.java | 461 - .../src/org/apache/cordova/PluginResult.java | 179 - .../src/org/apache/cordova/ScrollEvent.java | 67 - .../src/org/apache/cordova/Whitelist.java | 170 - .../xwalk_core_library/AndroidManifest.xml | 9 - .../xwalk_core_library/ant.properties | 17 - .../CordovaLib/xwalk_core_library/build.xml | 29 - .../libs/armeabi-v7a/libxwalkcore.so | Bin 26250444 -> 0 bytes .../libs/xwalk_core_library_java.jar | Bin 2200656 -> 0 bytes .../xwalk_core_library/local.properties | 10 - .../xwalk_core_library/proguard-project.txt | 20 - .../xwalk_core_library/project.properties | 15 - .../res/drawable-hdpi/bubble.9.png | Bin 580 -> 0 bytes .../res/drawable-hdpi/bubble_arrow_up.png | Bin 263 -> 0 bytes .../color_picker_advanced_select_handle.png | Bin 1800 -> 0 bytes .../dropdown_popup_background_down.9.png | Bin 341 -> 0 bytes .../dropdown_popup_background_up.9.png | Bin 354 -> 0 bytes .../ic_menu_search_holo_light.png | Bin 801 -> 0 bytes .../ic_menu_share_holo_light.png | Bin 408 -> 0 bytes .../res/drawable-hdpi/ondemand_overlay.9.png | Bin 4965 -> 0 bytes .../drawable-hdpi/pageinfo_warning_major.png | Bin 1327 -> 0 bytes .../res/drawable-xhdpi/bubble.9.png | Bin 742 -> 0 bytes .../res/drawable-xhdpi/bubble_arrow_up.png | Bin 313 -> 0 bytes .../color_picker_advanced_select_handle.png | Bin 2422 -> 0 bytes .../dropdown_popup_background_down.9.png | Bin 514 -> 0 bytes .../dropdown_popup_background_up.9.png | Bin 501 -> 0 bytes .../ic_menu_search_holo_light.png | Bin 1131 -> 0 bytes .../ic_menu_share_holo_light.png | Bin 597 -> 0 bytes .../res/drawable-xhdpi/ondemand_overlay.9.png | Bin 6331 -> 0 bytes .../drawable-xhdpi/pageinfo_warning_major.png | Bin 1715 -> 0 bytes .../res/drawable/bubble.9.png | Bin 262 -> 0 bytes .../res/drawable/bubble_arrow_up.png | Bin 99 -> 0 bytes .../res/drawable/color_button_background.xml | 36 - .../color_picker_advanced_select_handle.png | Bin 1176 -> 0 bytes .../res/drawable/color_picker_border.xml | 12 - .../drawable/dropdown_popup_background.xml | 13 - .../dropdown_popup_background_down.9.png | Bin 289 -> 0 bytes .../dropdown_popup_background_up.9.png | Bin 288 -> 0 bytes .../drawable/ic_menu_search_holo_light.png | Bin 538 -> 0 bytes .../res/drawable/ic_menu_share_holo_light.png | Bin 297 -> 0 bytes .../res/drawable/ondemand_overlay.9.png | Bin 3097 -> 0 bytes .../res/drawable/pageinfo_warning_major.png | Bin 877 -> 0 bytes .../layout-land/date_time_picker_dialog.xml | 33 - .../color_picker_advanced_component.xml | 46 - .../color_picker_dialog_content.xml | 51 - .../layout-v17/color_picker_dialog_title.xml | 41 - .../res/layout-v17/date_time_suggestion.xml | 35 - .../res/layout-v17/dropdown_item.xml | 32 - .../multi_field_time_picker_dialog.xml | 122 - .../res/layout-v17/two_field_date_picker.xml | 48 - .../layout-v17/validation_message_bubble.xml | 71 - .../color_picker_advanced_component.xml | 46 - .../layout/color_picker_dialog_content.xml | 51 - .../res/layout/color_picker_dialog_title.xml | 41 - ...content_multi_field_time_picker_dialog.xml | 50 - .../layout/content_two_field_date_picker.xml | 33 - .../content_validation_message_bubble.xml | 47 - .../res/layout/date_time_picker_dialog.xml | 33 - .../res/layout/date_time_suggestion.xml | 35 - .../res/layout/dropdown_item.xml | 32 - .../layout/multi_field_time_picker_dialog.xml | 122 - .../res/layout/two_field_date_picker.xml | 48 - .../ui_color_picker_advanced_component.xml | 30 - .../layout/ui_color_picker_dialog_content.xml | 36 - .../layout/ui_color_picker_dialog_title.xml | 25 - .../res/layout/ui_date_time_suggestion.xml | 16 - .../res/layout/ui_dropdown_item.xml | 17 - .../res/layout/validation_message_bubble.xml | 71 - .../res/menu/select_action_menu.xml | 50 - .../res/mipmap-hdpi/app_icon.png | Bin 3097 -> 0 bytes .../res/mipmap-mdpi/app_icon.png | Bin 1977 -> 0 bytes .../res/mipmap-xhdpi/app_icon.png | Bin 4068 -> 0 bytes .../res/mipmap-xxhdpi/app_icon.png | Bin 6223 -> 0 bytes .../res/raw/device_capabilities_api.js | 38 - .../res/raw/launch_screen_api.js | 9 - .../res/raw/presentation_api.js | 144 - .../xwalk_core_library/res/raw/xwalk.pak | Bin 687412 -> 0 bytes .../res/values-am/android_content_strings.xml | 38 - .../res/values-am/android_ui_strings.xml | 21 - .../res/values-ar/android_content_strings.xml | 38 - .../res/values-ar/android_ui_strings.xml | 21 - .../res/values-bg/android_content_strings.xml | 38 - .../res/values-bg/android_ui_strings.xml | 21 - .../res/values-ca/android_content_strings.xml | 38 - .../res/values-ca/android_ui_strings.xml | 21 - .../res/values-cs/android_content_strings.xml | 38 - .../res/values-cs/android_ui_strings.xml | 21 - .../res/values-da/android_content_strings.xml | 38 - .../res/values-da/android_ui_strings.xml | 21 - .../res/values-de/android_content_strings.xml | 38 - .../res/values-de/android_ui_strings.xml | 21 - .../res/values-el/android_content_strings.xml | 38 - .../res/values-el/android_ui_strings.xml | 21 - .../values-en-rGB/android_content_strings.xml | 38 - .../res/values-en-rGB/android_ui_strings.xml | 21 - .../values-es-rUS/android_content_strings.xml | 38 - .../res/values-es-rUS/android_ui_strings.xml | 21 - .../res/values-es/android_content_strings.xml | 38 - .../res/values-es/android_ui_strings.xml | 21 - .../res/values-fa/android_content_strings.xml | 38 - .../res/values-fa/android_ui_strings.xml | 21 - .../res/values-fi/android_content_strings.xml | 38 - .../res/values-fi/android_ui_strings.xml | 21 - .../res/values-fr/android_content_strings.xml | 38 - .../res/values-fr/android_ui_strings.xml | 21 - .../res/values-hi/android_content_strings.xml | 38 - .../res/values-hi/android_ui_strings.xml | 21 - .../res/values-hr/android_content_strings.xml | 38 - .../res/values-hr/android_ui_strings.xml | 21 - .../res/values-hu/android_content_strings.xml | 38 - .../res/values-hu/android_ui_strings.xml | 21 - .../res/values-in/android_content_strings.xml | 38 - .../res/values-in/android_ui_strings.xml | 21 - .../res/values-it/android_content_strings.xml | 38 - .../res/values-it/android_ui_strings.xml | 21 - .../res/values-iw/android_content_strings.xml | 38 - .../res/values-iw/android_ui_strings.xml | 21 - .../res/values-ja/android_content_strings.xml | 38 - .../res/values-ja/android_ui_strings.xml | 21 - .../res/values-ko/android_content_strings.xml | 38 - .../res/values-ko/android_ui_strings.xml | 21 - .../res/values-lt/android_content_strings.xml | 38 - .../res/values-lt/android_ui_strings.xml | 21 - .../res/values-lv/android_content_strings.xml | 38 - .../res/values-lv/android_ui_strings.xml | 21 - .../res/values-nb/android_content_strings.xml | 38 - .../res/values-nb/android_ui_strings.xml | 21 - .../res/values-nl/android_content_strings.xml | 38 - .../res/values-nl/android_ui_strings.xml | 21 - .../res/values-pl/android_content_strings.xml | 38 - .../res/values-pl/android_ui_strings.xml | 21 - .../values-pt-rBR/android_content_strings.xml | 38 - .../res/values-pt-rBR/android_ui_strings.xml | 21 - .../values-pt-rPT/android_content_strings.xml | 38 - .../res/values-pt-rPT/android_ui_strings.xml | 21 - .../res/values-ro/android_content_strings.xml | 38 - .../res/values-ro/android_ui_strings.xml | 21 - .../res/values-ru/android_content_strings.xml | 38 - .../res/values-ru/android_ui_strings.xml | 21 - .../res/values-sk/android_content_strings.xml | 38 - .../res/values-sk/android_ui_strings.xml | 21 - .../res/values-sl/android_content_strings.xml | 38 - .../res/values-sl/android_ui_strings.xml | 21 - .../res/values-sr/android_content_strings.xml | 38 - .../res/values-sr/android_ui_strings.xml | 21 - .../res/values-sv/android_content_strings.xml | 38 - .../res/values-sv/android_ui_strings.xml | 21 - .../res/values-sw/android_content_strings.xml | 38 - .../res/values-sw/android_ui_strings.xml | 21 - .../res/values-th/android_content_strings.xml | 38 - .../res/values-th/android_ui_strings.xml | 21 - .../res/values-tl/android_content_strings.xml | 38 - .../res/values-tl/android_ui_strings.xml | 21 - .../res/values-tr/android_content_strings.xml | 38 - .../res/values-tr/android_ui_strings.xml | 21 - .../res/values-uk/android_content_strings.xml | 38 - .../res/values-uk/android_ui_strings.xml | 21 - .../res/values-v17/content_styles.xml | 13 - .../res/values-v17/styles.xml | 13 - .../res/values-vi/android_content_strings.xml | 38 - .../res/values-vi/android_ui_strings.xml | 21 - .../values-zh-rCN/android_content_strings.xml | 38 - .../res/values-zh-rCN/android_ui_strings.xml | 21 - .../values-zh-rTW/android_content_strings.xml | 38 - .../res/values-zh-rTW/android_ui_strings.xml | 21 - .../res/values/android_content_strings.xml | 38 - .../res/values/android_ui_strings.xml | 21 - .../res/values/android_xwalk_strings.xml | 20 - .../xwalk_core_library/res/values/attrs.xml | 11 - .../xwalk_core_library/res/values/colors.xml | 13 - .../res/values/content_dimens.xml | 11 - .../res/values/content_strings.xml | 16 - .../res/values/content_styles.xml | 22 - .../xwalk_core_library/res/values/dimens.xml | 26 - .../xwalk_core_library/res/values/strings.xml | 16 - .../xwalk_core_library/res/values/styles.xml | 19 - .../xwalk_core_library/res/values/values.xml | 10 - .../values/xwalk_core_internal_strings.xml | 16 - .../res/values/xwalk_resources_list.xml | 7 - .../xwalk_core_library/src/README.md | 5 - mobile/cordova/android_sdk_version | 29 - mobile/cordova/build.bat | 26 - mobile/cordova/check_reqs | 31 - mobile/cordova/clean | 36 - mobile/cordova/clean.bat | 26 - mobile/cordova/defaults.xml | 32 - mobile/cordova/lib/android_sdk_version.js | 65 - mobile/cordova/lib/appinfo.js | 41 - mobile/cordova/lib/build.js | 113 - mobile/cordova/lib/check_reqs.js | 96 - mobile/cordova/lib/clean.js | 39 - mobile/cordova/lib/device.js | 86 - mobile/cordova/lib/emulator.js | 324 - mobile/cordova/lib/exec.js | 41 - mobile/cordova/lib/install-device | 42 - mobile/cordova/lib/install-device.bat | 26 - mobile/cordova/lib/install-emulator | 38 - mobile/cordova/lib/install-emulator.bat | 26 - mobile/cordova/lib/list-devices | 33 - mobile/cordova/lib/list-devices.bat | 26 - mobile/cordova/lib/list-emulator-images | 32 - mobile/cordova/lib/list-emulator-images.bat | 26 - mobile/cordova/lib/list-started-emulators | 32 - mobile/cordova/lib/list-started-emulators.bat | 26 - mobile/cordova/lib/log.js | 57 - mobile/cordova/lib/run.js | 139 - mobile/cordova/lib/spawn.js | 49 - mobile/cordova/lib/start-emulator | 39 - mobile/cordova/lib/start-emulator.bat | 26 - mobile/cordova/log | 36 - mobile/cordova/log.bat | 26 - mobile/cordova/plugins/android.json | 569 - .../.fetch.json | 1 - .../README.md | 110 - .../plugin.xml | 285 - .../spec/barcodescanner.tests.js | 57 - .../spec/html/HtmlReporter.js | 101 - .../spec/html/HtmlReporterHelpers.js | 60 - .../spec/html/ReporterView.js | 164 - .../spec/html/SpecView.js | 79 - .../spec/html/SuiteView.js | 22 - .../spec/html/TrivialReporter.js | 192 - .../spec/index.html | 75 - .../spec/jasmine.css | 81 - .../spec/jasmine.js | 2530 ---- .../spec/test-runner.js | 62 - .../src/android/LibraryProject/.gitignore | 1 - .../LibraryProject/AndroidManifest.xml | 175 - .../src/android/LibraryProject/ant.properties | 21 - .../assets/html-de/about1d.html | 15 - .../assets/html-de/about2d.html | 26 - .../LibraryProject/assets/html-de/index.html | 23 - .../assets/html-de/scanning.html | 19 - .../assets/html-de/sharing.html | 14 - .../assets/html-de/whatsnew.html | 15 - .../assets/html-en/about1d.html | 15 - .../assets/html-en/about2d.html | 26 - .../LibraryProject/assets/html-en/index.html | 23 - .../assets/html-en/scanning.html | 19 - .../assets/html-en/sharing.html | 14 - .../assets/html-en/whatsnew.html | 15 - .../assets/html-es/about1d.html | 15 - .../assets/html-es/about2d.html | 26 - .../LibraryProject/assets/html-es/index.html | 23 - .../assets/html-es/scanning.html | 19 - .../assets/html-es/sharing.html | 14 - .../assets/html-es/whatsnew.html | 15 - .../assets/html-fr/about1d.html | 15 - .../assets/html-fr/about2d.html | 26 - .../LibraryProject/assets/html-fr/index.html | 23 - .../assets/html-fr/scanning.html | 19 - .../assets/html-fr/sharing.html | 14 - .../assets/html-fr/whatsnew.html | 15 - .../assets/html-it/about1d.html | 15 - .../assets/html-it/about2d.html | 26 - .../LibraryProject/assets/html-it/index.html | 23 - .../assets/html-it/scanning.html | 19 - .../assets/html-it/sharing.html | 14 - .../assets/html-it/whatsnew.html | 15 - .../assets/html-ja/about1d.html | 15 - .../assets/html-ja/about2d.html | 26 - .../LibraryProject/assets/html-ja/index.html | 23 - .../assets/html-ja/scanning.html | 19 - .../assets/html-ja/sharing.html | 14 - .../assets/html-ja/whatsnew.html | 15 - .../assets/html-ko/about1d.html | 15 - .../assets/html-ko/about2d.html | 26 - .../LibraryProject/assets/html-ko/index.html | 23 - .../assets/html-ko/scanning.html | 19 - .../assets/html-ko/sharing.html | 14 - .../assets/html-ko/whatsnew.html | 15 - .../assets/html-nl/about1d.html | 15 - .../assets/html-nl/about2d.html | 26 - .../LibraryProject/assets/html-nl/index.html | 23 - .../assets/html-nl/scanning.html | 19 - .../assets/html-nl/sharing.html | 14 - .../assets/html-nl/whatsnew.html | 15 - .../assets/html-pt/about1d.html | 15 - .../assets/html-pt/about2d.html | 26 - .../LibraryProject/assets/html-pt/index.html | 23 - .../assets/html-pt/scanning.html | 19 - .../assets/html-pt/sharing.html | 14 - .../assets/html-pt/whatsnew.html | 15 - .../assets/html-ru/about1d.html | 15 - .../assets/html-ru/about2d.html | 26 - .../LibraryProject/assets/html-ru/index.html | 23 - .../assets/html-ru/scanning.html | 19 - .../assets/html-ru/sharing.html | 14 - .../assets/html-ru/whatsnew.html | 15 - .../assets/html-zh-rCN/about1d.html | 15 - .../assets/html-zh-rCN/about2d.html | 26 - .../assets/html-zh-rCN/index.html | 23 - .../assets/html-zh-rCN/scanning.html | 19 - .../assets/html-zh-rCN/sharing.html | 14 - .../assets/html-zh-rCN/whatsnew.html | 15 - .../assets/html-zh-rTW/about1d.html | 15 - .../assets/html-zh-rTW/about2d.html | 26 - .../assets/html-zh-rTW/index.html | 23 - .../assets/html-zh-rTW/scanning.html | 19 - .../assets/html-zh-rTW/sharing.html | 14 - .../assets/html-zh-rTW/whatsnew.html | 15 - .../LibraryProject/assets/images/big-1d.png | Bin 2467 -> 0 bytes .../assets/images/big-datamatrix.png | Bin 2208 -> 0 bytes .../LibraryProject/assets/images/big-qr.png | Bin 477 -> 0 bytes .../assets/images/contact-results-screen.jpg | Bin 15932 -> 0 bytes .../LibraryProject/assets/images/demo-no.png | Bin 4566 -> 0 bytes .../LibraryProject/assets/images/demo-yes.png | Bin 3031 -> 0 bytes .../assets/images/scan-example.png | Bin 8927 -> 0 bytes .../assets/images/scan-from-phone.png | Bin 3207 -> 0 bytes .../assets/images/search-book-contents.jpg | Bin 24193 -> 0 bytes .../android/LibraryProject/assets/style.css | 10 - .../src/android/LibraryProject/build.xml | 108 - .../proguard-android-optimize.txt | 69 - .../android/LibraryProject/project.properties | 15 - .../res/drawable-hdpi/launcher_icon.png | Bin 3731 -> 0 bytes .../res/drawable-hdpi/shopper_icon.png | Bin 1483 -> 0 bytes .../res/drawable-xhdpi/launcher_icon.png | Bin 8720 -> 0 bytes .../res/drawable-xxhdpi/launcher_icon.png | Bin 12941 -> 0 bytes .../res/drawable/launcher_icon.png | Bin 2222 -> 0 bytes .../res/drawable/share_via_barcode.png | Bin 3207 -> 0 bytes .../res/drawable/shopper_icon.png | Bin 1326 -> 0 bytes .../LibraryProject/res/layout-land/encode.xml | 48 - .../LibraryProject/res/layout-land/share.xml | 90 - .../res/layout-ldpi/capture.xml | 219 - .../res/layout/bookmark_picker_list_item.xml | 34 - .../LibraryProject/res/layout/capture.xml | 218 - .../LibraryProject/res/layout/encode.xml | 49 - .../LibraryProject/res/layout/help.xml | 50 - .../res/layout/history_list_item.xml | 22 - .../res/layout/search_book_contents.xml | 51 - .../layout/search_book_contents_header.xml | 23 - .../layout/search_book_contents_list_item.xml | 38 - .../LibraryProject/res/layout/share.xml | 96 - .../LibraryProject/res/menu/capture.xml | 19 - .../LibraryProject/res/menu/encode.xml | 19 - .../LibraryProject/res/menu/history.xml | 26 - .../android/LibraryProject/res/raw/beep.ogg | Bin 6401 -> 0 bytes .../LibraryProject/res/values-ar/strings.xml | 139 - .../LibraryProject/res/values-bg/strings.xml | 139 - .../LibraryProject/res/values-ca/strings.xml | 139 - .../LibraryProject/res/values-cs/strings.xml | 139 - .../LibraryProject/res/values-da/strings.xml | 139 - .../LibraryProject/res/values-de/strings.xml | 139 - .../LibraryProject/res/values-el/strings.xml | 139 - .../LibraryProject/res/values-es/strings.xml | 139 - .../LibraryProject/res/values-eu/strings.xml | 139 - .../LibraryProject/res/values-fi/strings.xml | 139 - .../LibraryProject/res/values-fr/strings.xml | 139 - .../LibraryProject/res/values-he/strings.xml | 139 - .../LibraryProject/res/values-hi/strings.xml | 139 - .../LibraryProject/res/values-hu/strings.xml | 139 - .../LibraryProject/res/values-id/strings.xml | 139 - .../LibraryProject/res/values-it/strings.xml | 139 - .../LibraryProject/res/values-iw/strings.xml | 139 - .../LibraryProject/res/values-ja/strings.xml | 139 - .../LibraryProject/res/values-ko/strings.xml | 139 - .../LibraryProject/res/values-nl/strings.xml | 139 - .../LibraryProject/res/values-pl/strings.xml | 139 - .../LibraryProject/res/values-pt/strings.xml | 139 - .../LibraryProject/res/values-ru/strings.xml | 139 - .../LibraryProject/res/values-sk/strings.xml | 138 - .../LibraryProject/res/values-sl/strings.xml | 139 - .../LibraryProject/res/values-sv/strings.xml | 139 - .../LibraryProject/res/values-tr/strings.xml | 139 - .../res/values-zh-rCN/strings.xml | 139 - .../res/values-zh-rTW/strings.xml | 139 - .../LibraryProject/res/values/arrays.xml | 35 - .../LibraryProject/res/values/colors.xml | 29 - .../LibraryProject/res/values/dimens.xml | 5 - .../android/LibraryProject/res/values/ids.xml | 25 - .../LibraryProject/res/values/strings.xml | 139 - .../LibraryProject/res/xml/preferences.xml | 102 - .../src/com/google/zxing/BarcodeFormat.java | 77 - .../src/com/google/zxing/Binarizer.java | 85 - .../src/com/google/zxing/BinaryBitmap.java | 139 - .../com/google/zxing/ChecksumException.java | 37 - .../src/com/google/zxing/DecodeHintType.java | 74 - .../src/com/google/zxing/EncodeHintType.java | 62 - .../src/com/google/zxing/FakeR.java | 35 - .../src/com/google/zxing/FormatException.java | 38 - .../src/com/google/zxing/LuminanceSource.java | 149 - .../com/google/zxing/MultiFormatReader.java | 179 - .../com/google/zxing/MultiFormatWriter.java | 89 - .../com/google/zxing/NotFoundException.java | 37 - .../zxing/PlanarYUVLuminanceSource.java | 153 - .../com/google/zxing/RGBLuminanceSource.java | 142 - .../src/com/google/zxing/Reader.java | 65 - .../src/com/google/zxing/ReaderException.java | 40 - .../src/com/google/zxing/Result.java | 133 - .../com/google/zxing/ResultMetadataType.java | 80 - .../src/com/google/zxing/ResultPoint.java | 134 - .../com/google/zxing/ResultPointCallback.java | 29 - .../src/com/google/zxing/Writer.java | 56 - .../src/com/google/zxing/WriterException.java | 38 - .../zxing/aztec/AztecDetectorResult.java | 52 - .../com/google/zxing/aztec/AztecReader.java | 93 - .../google/zxing/aztec/decoder/Decoder.java | 472 - .../google/zxing/aztec/detector/Detector.java | 624 - .../zxing/client/android/BeepManager.java | 113 - .../zxing/client/android/CaptureActivity.java | 749 - .../android/CaptureActivityHandler.java | 150 - .../google/zxing/client/android/Contents.java | 114 - .../client/android/DecodeFormatManager.java | 100 - .../zxing/client/android/DecodeHandler.java | 119 - .../zxing/client/android/DecodeThread.java | 97 - .../zxing/client/android/FinishListener.java | 49 - .../zxing/client/android/HelpActivity.java | 139 - .../zxing/client/android/HttpHelper.java | 223 - .../zxing/client/android/InactivityTimer.java | 109 - .../zxing/client/android/IntentSource.java | 26 - .../google/zxing/client/android/Intents.java | 261 - .../zxing/client/android/LocaleManager.java | 178 - .../client/android/PreferencesActivity.java | 101 - .../ViewfinderResultPointCallback.java | 35 - .../zxing/client/android/ViewfinderView.java | 193 - .../android/book/BrowseBookListener.java | 61 - .../book/SearchBookContentsActivity.java | 282 - .../book/SearchBookContentsAdapter.java | 64 - .../book/SearchBookContentsListItem.java | 87 - .../book/SearchBookContentsResult.java | 66 - .../android/camera/AutoFocusManager.java | 116 - .../camera/CameraConfigurationManager.java | 264 - .../client/android/camera/CameraManager.java | 305 - .../android/camera/PreviewCallback.java | 56 - .../exposure/DefaultExposureInterface.java | 28 - .../camera/exposure/ExposureInterface.java | 30 - .../camera/exposure/ExposureManager.java | 28 - .../exposure/FroyoExposureInterface.java | 52 - .../open/DefaultOpenCameraInterface.java | 34 - .../open/GingerbreadOpenCameraInterface.java | 66 - .../camera/open/OpenCameraInterface.java | 29 - .../camera/open/OpenCameraManager.java | 32 - .../common/PlatformSupportManager.java | 94 - .../executor/AsyncTaskExecInterface.java | 25 - .../common/executor/AsyncTaskExecManager.java | 28 - .../DefaultAsyncTaskExecInterface.java | 32 - .../HoneycombAsyncTaskExecInterface.java | 34 - .../client/android/encode/ContactEncoder.java | 93 - .../client/android/encode/EncodeActivity.java | 238 - .../client/android/encode/Formatter.java | 28 - .../android/encode/MECARDContactEncoder.java | 96 - .../client/android/encode/QRCodeEncoder.java | 364 - .../android/encode/VCardContactEncoder.java | 90 - .../client/android/history/DBHelper.java | 60 - .../android/history/HistoryActivity.java | 160 - .../client/android/history/HistoryItem.java | 50 - .../android/history/HistoryItemAdapter.java | 74 - .../android/history/HistoryManager.java | 353 - .../client/android/pref/BSPlusPreference.java | 61 - .../result/AddressBookResultHandler.java | 218 - .../android/result/CalendarResultHandler.java | 188 - .../result/EmailAddressResultHandler.java | 73 - .../android/result/GeoResultHandler.java | 68 - .../android/result/ISBNResultHandler.java | 85 - .../android/result/ProductResultHandler.java | 81 - .../android/result/ResultButtonListener.java | 41 - .../client/android/result/ResultHandler.java | 528 - .../android/result/ResultHandlerFactory.java | 64 - .../android/result/SMSResultHandler.java | 85 - .../android/result/TelResultHandler.java | 83 - .../android/result/TextResultHandler.java | 77 - .../android/result/URIResultHandler.java | 101 - .../android/result/WifiResultHandler.java | 86 - .../supplement/BookResultInfoRetriever.java | 125 - .../ProductResultInfoRetriever.java | 75 - .../supplement/SupplementalInfoRetriever.java | 146 - .../result/supplement/TitleRetriever.java | 68 - .../supplement/URIResultInfoRetriever.java | 64 - .../android/share/AppPickerActivity.java | 74 - .../client/android/share/BookmarkAdapter.java | 85 - .../android/share/BookmarkPickerActivity.java | 79 - .../android/share/LoadPackagesAsyncTask.java | 107 - .../client/android/share/ShareActivity.java | 303 - .../client/android/wifi/NetworkType.java | 41 - .../android/wifi/WifiConfigManager.java | 225 - .../result/AbstractDoCoMoResultParser.java | 39 - .../result/AddressBookAUResultParser.java | 89 - .../result/AddressBookDoCoMoResultParser.java | 90 - .../result/AddressBookParsedResult.java | 164 - .../client/result/BizcardResultParser.java | 98 - .../result/BookmarkDoCoMoResultParser.java | 41 - .../client/result/CalendarParsedResult.java | 199 - .../result/EmailAddressParsedResult.java | 65 - .../result/EmailAddressResultParser.java | 62 - .../result/EmailDoCoMoResultParser.java | 63 - .../result/ExpandedProductParsedResult.java | 197 - .../result/ExpandedProductResultParser.java | 195 - .../zxing/client/result/GeoParsedResult.java | 101 - .../zxing/client/result/GeoResultParser.java | 73 - .../zxing/client/result/ISBNParsedResult.java | 40 - .../zxing/client/result/ISBNResultParser.java | 50 - .../zxing/client/result/ParsedResult.java | 74 - .../zxing/client/result/ParsedResultType.java | 39 - .../client/result/ProductParsedResult.java | 50 - .../client/result/ProductResultParser.java | 59 - .../zxing/client/result/ResultParser.java | 244 - .../client/result/SMSMMSResultParser.java | 109 - .../zxing/client/result/SMSParsedResult.java | 111 - .../client/result/SMSTOMMSTOResultParser.java | 52 - .../zxing/client/result/SMTPResultParser.java | 53 - .../zxing/client/result/TelParsedResult.java | 55 - .../zxing/client/result/TelResultParser.java | 42 - .../zxing/client/result/TextParsedResult.java | 49 - .../zxing/client/result/URIParsedResult.java | 99 - .../zxing/client/result/URIResultParser.java | 59 - .../client/result/URLTOResultParser.java | 45 - .../client/result/VCardResultParser.java | 341 - .../client/result/VEventResultParser.java | 114 - .../zxing/client/result/WifiParsedResult.java | 67 - .../zxing/client/result/WifiResultParser.java | 51 - .../src/com/google/zxing/common/BitArray.java | 321 - .../com/google/zxing/common/BitMatrix.java | 311 - .../com/google/zxing/common/BitSource.java | 111 - .../google/zxing/common/CharacterSetECI.java | 118 - .../google/zxing/common/DecoderResult.java | 61 - .../zxing/common/DefaultGridSampler.java | 88 - .../google/zxing/common/DetectorResult.java | 46 - .../common/GlobalHistogramBinarizer.java | 196 - .../com/google/zxing/common/GridSampler.java | 154 - .../google/zxing/common/HybridBinarizer.java | 237 - .../zxing/common/PerspectiveTransform.java | 157 - .../com/google/zxing/common/StringUtils.java | 213 - .../zxing/common/detector/MathUtils.java | 44 - .../detector/MonochromeRectangleDetector.java | 215 - .../detector/WhiteRectangleDetector.java | 333 - .../zxing/common/reedsolomon/GenericGF.java | 181 - .../common/reedsolomon/GenericGFPoly.java | 264 - .../reedsolomon/ReedSolomonDecoder.java | 191 - .../reedsolomon/ReedSolomonEncoder.java | 76 - .../reedsolomon/ReedSolomonException.java | 31 - .../zxing/datamatrix/DataMatrixReader.java | 162 - .../datamatrix/decoder/BitMatrixParser.java | 440 - .../zxing/datamatrix/decoder/DataBlock.java | 117 - .../decoder/DecodedBitStreamParser.java | 494 - .../zxing/datamatrix/decoder/Decoder.java | 136 - .../zxing/datamatrix/decoder/Version.java | 237 - .../zxing/datamatrix/detector/Detector.java | 440 - .../google/zxing/maxicode/MaxiCodeReader.java | 125 - .../maxicode/decoder/BitMatrixParser.java | 88 - .../decoder/DecodedBitStreamParser.java | 193 - .../zxing/maxicode/decoder/Decoder.java | 114 - .../google/zxing/multi/ByQuadrantReader.java | 100 - .../multi/GenericMultipleBarcodeReader.java | 156 - .../zxing/multi/MultipleBarcodeReader.java | 39 - .../zxing/multi/qrcode/QRCodeMultiReader.java | 82 - .../multi/qrcode/detector/MultiDetector.java | 73 - .../detector/MultiFinderPatternFinder.java | 317 - .../com/google/zxing/oned/CodaBarReader.java | 329 - .../com/google/zxing/oned/CodaBarWriter.java | 116 - .../com/google/zxing/oned/Code128Reader.java | 464 - .../com/google/zxing/oned/Code128Writer.java | 203 - .../com/google/zxing/oned/Code39Reader.java | 317 - .../com/google/zxing/oned/Code39Writer.java | 86 - .../com/google/zxing/oned/Code93Reader.java | 263 - .../com/google/zxing/oned/EAN13Reader.java | 138 - .../com/google/zxing/oned/EAN13Writer.java | 94 - .../src/com/google/zxing/oned/EAN8Reader.java | 75 - .../src/com/google/zxing/oned/EAN8Writer.java | 84 - .../zxing/oned/EANManufacturerOrgSupport.java | 171 - .../src/com/google/zxing/oned/ITFReader.java | 347 - .../src/com/google/zxing/oned/ITFWriter.java | 76 - .../zxing/oned/MultiFormatOneDReader.java | 111 - .../zxing/oned/MultiFormatUPCEANReader.java | 122 - .../src/com/google/zxing/oned/OneDReader.java | 303 - .../zxing/oned/OneDimensionalCodeWriter.java | 130 - .../src/com/google/zxing/oned/UPCAReader.java | 86 - .../src/com/google/zxing/oned/UPCAWriter.java | 73 - .../zxing/oned/UPCEANExtension2Support.java | 112 - .../zxing/oned/UPCEANExtension5Support.java | 181 - .../zxing/oned/UPCEANExtensionSupport.java | 40 - .../com/google/zxing/oned/UPCEANReader.java | 362 - .../com/google/zxing/oned/UPCEANWriter.java | 34 - .../src/com/google/zxing/oned/UPCEReader.java | 157 - .../zxing/oned/rss/AbstractRSSReader.java | 133 - .../google/zxing/oned/rss/DataCharacter.java | 37 - .../google/zxing/oned/rss/FinderPattern.java | 48 - .../src/com/google/zxing/oned/rss/Pair.java | 41 - .../google/zxing/oned/rss/RSS14Reader.java | 473 - .../com/google/zxing/oned/rss/RSSUtils.java | 156 - .../oned/rss/expanded/BitArrayBuilder.java | 85 - .../zxing/oned/rss/expanded/ExpandedPair.java | 71 - .../oned/rss/expanded/RSSExpandedReader.java | 577 - .../expanded/decoders/AI013103decoder.java | 49 - .../expanded/decoders/AI01320xDecoder.java | 57 - .../expanded/decoders/AI01392xDecoder.java | 67 - .../expanded/decoders/AI01393xDecoder.java | 77 - .../expanded/decoders/AI013x0x1xDecoder.java | 109 - .../expanded/decoders/AI013x0xDecoder.java | 57 - .../expanded/decoders/AI01AndOtherAIs.java | 57 - .../rss/expanded/decoders/AI01decoder.java | 81 - .../expanded/decoders/AI01weightDecoder.java | 60 - .../decoders/AbstractExpandedDecoder.java | 92 - .../rss/expanded/decoders/AnyAIDecoder.java | 49 - .../expanded/decoders/BlockParsedResult.java | 54 - .../decoders/CurrentParsingState.java | 83 - .../rss/expanded/decoders/DecodedChar.java | 52 - .../expanded/decoders/DecodedInformation.java | 64 - .../rss/expanded/decoders/DecodedNumeric.java | 79 - .../rss/expanded/decoders/DecodedObject.java | 44 - .../rss/expanded/decoders/FieldParser.java | 290 - .../decoders/GeneralAppIdDecoder.java | 472 - .../com/google/zxing/pdf417/PDF417Reader.java | 194 - .../zxing/pdf417/decoder/BitMatrixParser.java | 932 -- .../decoder/DecodedBitStreamParser.java | 554 - .../google/zxing/pdf417/decoder/Decoder.java | 137 - .../pdf417/decoder/ec/ErrorCorrection.java | 176 - .../zxing/pdf417/decoder/ec/ModulusGF.java | 110 - .../zxing/pdf417/decoder/ec/ModulusPoly.java | 260 - .../zxing/pdf417/detector/Detector.java | 553 - .../zxing/pdf417/encoder/BarcodeMatrix.java | 78 - .../zxing/pdf417/encoder/BarcodeRow.java | 85 - .../zxing/pdf417/encoder/Compaction.java | 26 - .../zxing/pdf417/encoder/Dimensions.java | 54 - .../google/zxing/pdf417/encoder/PDF417.java | 783 - .../pdf417/encoder/PDF417ErrorCorrection.java | 204 - .../encoder/PDF417HighLevelEncoder.java | 561 - .../zxing/pdf417/encoder/PDF417Writer.java | 175 - .../com/google/zxing/qrcode/QRCodeReader.java | 181 - .../com/google/zxing/qrcode/QRCodeWriter.java | 120 - .../zxing/qrcode/decoder/BitMatrixParser.java | 205 - .../zxing/qrcode/decoder/DataBlock.java | 122 - .../google/zxing/qrcode/decoder/DataMask.java | 163 - .../decoder/DecodedBitStreamParser.java | 347 - .../google/zxing/qrcode/decoder/Decoder.java | 146 - .../qrcode/decoder/ErrorCorrectionLevel.java | 60 - .../qrcode/decoder/FormatInformation.java | 172 - .../com/google/zxing/qrcode/decoder/Mode.java | 102 - .../google/zxing/qrcode/decoder/Version.java | 578 - .../qrcode/detector/AlignmentPattern.java | 59 - .../detector/AlignmentPatternFinder.java | 277 - .../zxing/qrcode/detector/Detector.java | 399 - .../zxing/qrcode/detector/FinderPattern.java | 80 - .../qrcode/detector/FinderPatternFinder.java | 585 - .../qrcode/detector/FinderPatternInfo.java | 49 - .../zxing/qrcode/encoder/BlockPair.java | 37 - .../zxing/qrcode/encoder/ByteMatrix.java | 98 - .../google/zxing/qrcode/encoder/Encoder.java | 582 - .../google/zxing/qrcode/encoder/MaskUtil.java | 218 - .../zxing/qrcode/encoder/MatrixUtil.java | 482 - .../google/zxing/qrcode/encoder/QRCode.java | 108 - .../src/android/README.md | 91 - ...e.zxing.client.android.captureactivity.jar | Bin 619420 -> 0 bytes .../barcodescanner/BarcodeScanner.java | 169 - .../src/ios/CDVBarcodeScanner.mm | 858 -- .../src/ios/scannerOverlay.xib | 185 - .../src/ios/zxing-all-in-one.cpp | 11982 ---------------- .../src/ios/zxing-all-in-one.h | 5007 ------- .../www/barcodescanner.js | 87 - .../.fetch.json | 1 - .../CHANGELOG.md | 57 - .../LICENSE | 202 - .../README.md | 282 - .../plugin.xml | 87 - .../src/android/AttachmentProvider.java | 115 - .../src/android/EmailComposer.java | 413 - .../src/ios/APPEmailComposer.h | 33 - .../src/ios/APPEmailComposer.m | 486 - .../src/wp8/EmailComposer.cs | 142 - .../src/wp8/Options.cs | 76 - .../www/email_composer.js | 107 - .../.fetch.json | 1 - .../org.apache.cordova.splashscreen/LICENSE | 202 - .../org.apache.cordova.splashscreen/NOTICE | 5 - .../org.apache.cordova.splashscreen/README.md | 22 - .../RELEASENOTES.md | 59 - .../doc/index.md | 94 - .../plugin.xml | 124 - .../src/android/SplashScreen.java | 43 - .../src/blackberry10/index.js | 28 - .../src/ios/CDVSplashScreen.h | 33 - .../src/ios/CDVSplashScreen.m | 252 - .../src/tizen/SplashScreenProxy.js | 43 - .../src/ubuntu/splashscreen.cpp | 42 - .../src/ubuntu/splashscreen.h | 52 - .../src/wp/SplashScreen.cs | 69 - .../www/splashscreen.js | 33 - .../www/windows8/SplashScreenProxy.js | 106 - .../org.apache.cordova.vibration/.fetch.json | 1 - .../CONTRIBUTING.md | 37 - .../org.apache.cordova.vibration/LICENSE | 202 - .../org.apache.cordova.vibration/NOTICE | 7 - .../org.apache.cordova.vibration/README.md | 23 - .../RELEASENOTES.md | 69 - .../doc/de/index.md | 87 - .../doc/es/index.md | 87 - .../doc/fr/index.md | 87 - .../org.apache.cordova.vibration/doc/index.md | 87 - .../doc/it/index.md | 87 - .../doc/ja/index.md | 87 - .../doc/ko/index.md | 87 - .../doc/pl/index.md | 87 - .../doc/ru/index.md | 87 - .../doc/zh/index.md | 87 - .../org.apache.cordova.vibration/plugin.xml | 136 - .../src/android/Vibration.java | 124 - .../src/blackberry10/index.js | 80 - .../src/blackberry10/native/.cproject | 509 - .../native/device/libVibration.so | Bin 417305 -> 0 bytes .../src/blackberry10/native/public/plugin.cpp | 341 - .../src/blackberry10/native/public/plugin.h | 91 - .../blackberry10/native/public/tokenizer.cpp | 222 - .../blackberry10/native/public/tokenizer.h | 55 - .../native/simulator/libVibration.so | Bin 404571 -> 0 bytes .../blackberry10/native/src/vibration_js.cpp | 116 - .../blackberry10/native/src/vibration_js.hpp | 42 - .../src/firefoxos/VibrationProxy.js | 35 - .../src/ios/CDVVibration.h | 29 - .../src/ios/CDVVibration.m | 29 - .../src/tizen/VibrationProxy.js | 30 - .../src/ubuntu/vibration.cpp | 38 - .../src/ubuntu/vibration.h | 47 - .../src/wp/Vibration.cs | 57 - .../www/blackberry10/vibrate.js | 26 - .../www/vibration.js | 72 - mobile/cordova/run | 37 - mobile/cordova/run.bat | 26 - mobile/cordova/version | 25 - mobile/cordova/version.bat | 26 - 807 files changed, 104591 deletions(-) delete mode 100755 mobile/CordovaLib/AndroidManifest.xml delete mode 100644 mobile/CordovaLib/build.xml delete mode 100644 mobile/CordovaLib/local.properties delete mode 100644 mobile/CordovaLib/proguard-project.txt delete mode 100644 mobile/CordovaLib/project.properties delete mode 100755 mobile/CordovaLib/src/com/squareup/okhttp/Address.java delete mode 100755 mobile/CordovaLib/src/com/squareup/okhttp/Connection.java delete mode 100755 mobile/CordovaLib/src/com/squareup/okhttp/ConnectionPool.java delete mode 100755 mobile/CordovaLib/src/com/squareup/okhttp/Dispatcher.java delete mode 100755 mobile/CordovaLib/src/com/squareup/okhttp/Failure.java delete mode 100755 mobile/CordovaLib/src/com/squareup/okhttp/HttpResponseCache.java delete mode 100755 mobile/CordovaLib/src/com/squareup/okhttp/Job.java delete mode 100755 mobile/CordovaLib/src/com/squareup/okhttp/MediaType.java delete mode 100755 mobile/CordovaLib/src/com/squareup/okhttp/OkAuthenticator.java delete mode 100755 mobile/CordovaLib/src/com/squareup/okhttp/OkHttpClient.java delete mode 100755 mobile/CordovaLib/src/com/squareup/okhttp/OkResponseCache.java delete mode 100755 mobile/CordovaLib/src/com/squareup/okhttp/Request.java delete mode 100755 mobile/CordovaLib/src/com/squareup/okhttp/Response.java delete mode 100755 mobile/CordovaLib/src/com/squareup/okhttp/ResponseSource.java delete mode 100755 mobile/CordovaLib/src/com/squareup/okhttp/Route.java delete mode 100755 mobile/CordovaLib/src/com/squareup/okhttp/RouteDatabase.java delete mode 100755 mobile/CordovaLib/src/com/squareup/okhttp/TunnelRequest.java delete mode 100755 mobile/CordovaLib/src/com/squareup/okhttp/internal/AbstractOutputStream.java delete mode 100755 mobile/CordovaLib/src/com/squareup/okhttp/internal/Base64.java delete mode 100755 mobile/CordovaLib/src/com/squareup/okhttp/internal/DiskLruCache.java delete mode 100755 mobile/CordovaLib/src/com/squareup/okhttp/internal/Dns.java delete mode 100755 mobile/CordovaLib/src/com/squareup/okhttp/internal/FaultRecoveringOutputStream.java delete mode 100755 mobile/CordovaLib/src/com/squareup/okhttp/internal/NamedRunnable.java delete mode 100755 mobile/CordovaLib/src/com/squareup/okhttp/internal/Platform.java delete mode 100755 mobile/CordovaLib/src/com/squareup/okhttp/internal/StrictLineReader.java delete mode 100755 mobile/CordovaLib/src/com/squareup/okhttp/internal/Util.java delete mode 100755 mobile/CordovaLib/src/com/squareup/okhttp/internal/http/AbstractHttpInputStream.java delete mode 100755 mobile/CordovaLib/src/com/squareup/okhttp/internal/http/HeaderParser.java delete mode 100755 mobile/CordovaLib/src/com/squareup/okhttp/internal/http/HttpAuthenticator.java delete mode 100755 mobile/CordovaLib/src/com/squareup/okhttp/internal/http/HttpDate.java delete mode 100755 mobile/CordovaLib/src/com/squareup/okhttp/internal/http/HttpEngine.java delete mode 100755 mobile/CordovaLib/src/com/squareup/okhttp/internal/http/HttpTransport.java delete mode 100755 mobile/CordovaLib/src/com/squareup/okhttp/internal/http/HttpURLConnectionImpl.java delete mode 100755 mobile/CordovaLib/src/com/squareup/okhttp/internal/http/HttpsEngine.java delete mode 100755 mobile/CordovaLib/src/com/squareup/okhttp/internal/http/HttpsURLConnectionImpl.java delete mode 100755 mobile/CordovaLib/src/com/squareup/okhttp/internal/http/OkResponseCacheAdapter.java delete mode 100755 mobile/CordovaLib/src/com/squareup/okhttp/internal/http/Policy.java delete mode 100755 mobile/CordovaLib/src/com/squareup/okhttp/internal/http/RawHeaders.java delete mode 100755 mobile/CordovaLib/src/com/squareup/okhttp/internal/http/RequestHeaders.java delete mode 100755 mobile/CordovaLib/src/com/squareup/okhttp/internal/http/ResponseHeaders.java delete mode 100755 mobile/CordovaLib/src/com/squareup/okhttp/internal/http/RetryableOutputStream.java delete mode 100755 mobile/CordovaLib/src/com/squareup/okhttp/internal/http/RouteSelector.java delete mode 100755 mobile/CordovaLib/src/com/squareup/okhttp/internal/http/SpdyTransport.java delete mode 100755 mobile/CordovaLib/src/com/squareup/okhttp/internal/http/Transport.java delete mode 100755 mobile/CordovaLib/src/com/squareup/okhttp/internal/http/UnknownLengthHttpInputStream.java delete mode 100755 mobile/CordovaLib/src/com/squareup/okhttp/internal/spdy/ErrorCode.java delete mode 100755 mobile/CordovaLib/src/com/squareup/okhttp/internal/spdy/FrameReader.java delete mode 100755 mobile/CordovaLib/src/com/squareup/okhttp/internal/spdy/FrameWriter.java delete mode 100755 mobile/CordovaLib/src/com/squareup/okhttp/internal/spdy/HeadersMode.java delete mode 100755 mobile/CordovaLib/src/com/squareup/okhttp/internal/spdy/Hpack.java delete mode 100755 mobile/CordovaLib/src/com/squareup/okhttp/internal/spdy/Http20Draft06.java delete mode 100755 mobile/CordovaLib/src/com/squareup/okhttp/internal/spdy/IncomingStreamHandler.java delete mode 100755 mobile/CordovaLib/src/com/squareup/okhttp/internal/spdy/NameValueBlockReader.java delete mode 100755 mobile/CordovaLib/src/com/squareup/okhttp/internal/spdy/Ping.java delete mode 100755 mobile/CordovaLib/src/com/squareup/okhttp/internal/spdy/Settings.java delete mode 100755 mobile/CordovaLib/src/com/squareup/okhttp/internal/spdy/Spdy3.java delete mode 100755 mobile/CordovaLib/src/com/squareup/okhttp/internal/spdy/SpdyConnection.java delete mode 100755 mobile/CordovaLib/src/com/squareup/okhttp/internal/spdy/SpdyStream.java delete mode 100755 mobile/CordovaLib/src/com/squareup/okhttp/internal/spdy/Variant.java delete mode 100755 mobile/CordovaLib/src/com/squareup/okhttp/internal/tls/DistinguishedNameParser.java delete mode 100755 mobile/CordovaLib/src/com/squareup/okhttp/internal/tls/OkHostnameVerifier.java delete mode 100755 mobile/CordovaLib/src/org/apache/cordova/App.java delete mode 100644 mobile/CordovaLib/src/org/apache/cordova/AuthenticationToken.java delete mode 100644 mobile/CordovaLib/src/org/apache/cordova/CallbackContext.java delete mode 100644 mobile/CordovaLib/src/org/apache/cordova/Config.java delete mode 100755 mobile/CordovaLib/src/org/apache/cordova/CordovaActivity.java delete mode 100644 mobile/CordovaLib/src/org/apache/cordova/CordovaArgs.java delete mode 100755 mobile/CordovaLib/src/org/apache/cordova/CordovaChromeClient.java delete mode 100755 mobile/CordovaLib/src/org/apache/cordova/CordovaInterface.java delete mode 100644 mobile/CordovaLib/src/org/apache/cordova/CordovaPlugin.java delete mode 100644 mobile/CordovaLib/src/org/apache/cordova/CordovaResourceApi.java delete mode 100755 mobile/CordovaLib/src/org/apache/cordova/CordovaWebView.java delete mode 100755 mobile/CordovaLib/src/org/apache/cordova/CordovaWebViewClient.java delete mode 100644 mobile/CordovaLib/src/org/apache/cordova/DirectoryManager.java delete mode 100644 mobile/CordovaLib/src/org/apache/cordova/DroidGap.java delete mode 100644 mobile/CordovaLib/src/org/apache/cordova/ExifHelper.java delete mode 100755 mobile/CordovaLib/src/org/apache/cordova/ExposedJsApi.java delete mode 100644 mobile/CordovaLib/src/org/apache/cordova/FileHelper.java delete mode 100644 mobile/CordovaLib/src/org/apache/cordova/IceCreamCordovaWebViewClient.java delete mode 100644 mobile/CordovaLib/src/org/apache/cordova/JSONUtils.java delete mode 100755 mobile/CordovaLib/src/org/apache/cordova/LOG.java delete mode 100755 mobile/CordovaLib/src/org/apache/cordova/LinearLayoutSoftKeyboardDetect.java delete mode 100755 mobile/CordovaLib/src/org/apache/cordova/NativeToJsMessageQueue.java delete mode 100755 mobile/CordovaLib/src/org/apache/cordova/PluginEntry.java delete mode 100755 mobile/CordovaLib/src/org/apache/cordova/PluginManager.java delete mode 100755 mobile/CordovaLib/src/org/apache/cordova/PluginResult.java delete mode 100644 mobile/CordovaLib/src/org/apache/cordova/ScrollEvent.java delete mode 100644 mobile/CordovaLib/src/org/apache/cordova/Whitelist.java delete mode 100644 mobile/CordovaLib/xwalk_core_library/AndroidManifest.xml delete mode 100644 mobile/CordovaLib/xwalk_core_library/ant.properties delete mode 100644 mobile/CordovaLib/xwalk_core_library/build.xml delete mode 100755 mobile/CordovaLib/xwalk_core_library/libs/armeabi-v7a/libxwalkcore.so delete mode 100644 mobile/CordovaLib/xwalk_core_library/libs/xwalk_core_library_java.jar delete mode 100644 mobile/CordovaLib/xwalk_core_library/local.properties delete mode 100644 mobile/CordovaLib/xwalk_core_library/proguard-project.txt delete mode 100644 mobile/CordovaLib/xwalk_core_library/project.properties delete mode 100644 mobile/CordovaLib/xwalk_core_library/res/drawable-hdpi/bubble.9.png delete mode 100644 mobile/CordovaLib/xwalk_core_library/res/drawable-hdpi/bubble_arrow_up.png delete mode 100644 mobile/CordovaLib/xwalk_core_library/res/drawable-hdpi/color_picker_advanced_select_handle.png delete mode 100644 mobile/CordovaLib/xwalk_core_library/res/drawable-hdpi/dropdown_popup_background_down.9.png delete mode 100644 mobile/CordovaLib/xwalk_core_library/res/drawable-hdpi/dropdown_popup_background_up.9.png delete mode 100644 mobile/CordovaLib/xwalk_core_library/res/drawable-hdpi/ic_menu_search_holo_light.png delete mode 100644 mobile/CordovaLib/xwalk_core_library/res/drawable-hdpi/ic_menu_share_holo_light.png delete mode 100644 mobile/CordovaLib/xwalk_core_library/res/drawable-hdpi/ondemand_overlay.9.png delete mode 100644 mobile/CordovaLib/xwalk_core_library/res/drawable-hdpi/pageinfo_warning_major.png delete mode 100644 mobile/CordovaLib/xwalk_core_library/res/drawable-xhdpi/bubble.9.png delete mode 100644 mobile/CordovaLib/xwalk_core_library/res/drawable-xhdpi/bubble_arrow_up.png delete mode 100644 mobile/CordovaLib/xwalk_core_library/res/drawable-xhdpi/color_picker_advanced_select_handle.png delete mode 100644 mobile/CordovaLib/xwalk_core_library/res/drawable-xhdpi/dropdown_popup_background_down.9.png delete mode 100644 mobile/CordovaLib/xwalk_core_library/res/drawable-xhdpi/dropdown_popup_background_up.9.png delete mode 100644 mobile/CordovaLib/xwalk_core_library/res/drawable-xhdpi/ic_menu_search_holo_light.png delete mode 100644 mobile/CordovaLib/xwalk_core_library/res/drawable-xhdpi/ic_menu_share_holo_light.png delete mode 100644 mobile/CordovaLib/xwalk_core_library/res/drawable-xhdpi/ondemand_overlay.9.png delete mode 100644 mobile/CordovaLib/xwalk_core_library/res/drawable-xhdpi/pageinfo_warning_major.png delete mode 100644 mobile/CordovaLib/xwalk_core_library/res/drawable/bubble.9.png delete mode 100644 mobile/CordovaLib/xwalk_core_library/res/drawable/bubble_arrow_up.png delete mode 100644 mobile/CordovaLib/xwalk_core_library/res/drawable/color_button_background.xml delete mode 100644 mobile/CordovaLib/xwalk_core_library/res/drawable/color_picker_advanced_select_handle.png delete mode 100644 mobile/CordovaLib/xwalk_core_library/res/drawable/color_picker_border.xml delete mode 100644 mobile/CordovaLib/xwalk_core_library/res/drawable/dropdown_popup_background.xml delete mode 100644 mobile/CordovaLib/xwalk_core_library/res/drawable/dropdown_popup_background_down.9.png delete mode 100644 mobile/CordovaLib/xwalk_core_library/res/drawable/dropdown_popup_background_up.9.png delete mode 100644 mobile/CordovaLib/xwalk_core_library/res/drawable/ic_menu_search_holo_light.png delete mode 100644 mobile/CordovaLib/xwalk_core_library/res/drawable/ic_menu_share_holo_light.png delete mode 100644 mobile/CordovaLib/xwalk_core_library/res/drawable/ondemand_overlay.9.png delete mode 100644 mobile/CordovaLib/xwalk_core_library/res/drawable/pageinfo_warning_major.png delete mode 100644 mobile/CordovaLib/xwalk_core_library/res/layout-land/date_time_picker_dialog.xml delete mode 100644 mobile/CordovaLib/xwalk_core_library/res/layout-v17/color_picker_advanced_component.xml delete mode 100644 mobile/CordovaLib/xwalk_core_library/res/layout-v17/color_picker_dialog_content.xml delete mode 100644 mobile/CordovaLib/xwalk_core_library/res/layout-v17/color_picker_dialog_title.xml delete mode 100644 mobile/CordovaLib/xwalk_core_library/res/layout-v17/date_time_suggestion.xml delete mode 100644 mobile/CordovaLib/xwalk_core_library/res/layout-v17/dropdown_item.xml delete mode 100644 mobile/CordovaLib/xwalk_core_library/res/layout-v17/multi_field_time_picker_dialog.xml delete mode 100644 mobile/CordovaLib/xwalk_core_library/res/layout-v17/two_field_date_picker.xml delete mode 100644 mobile/CordovaLib/xwalk_core_library/res/layout-v17/validation_message_bubble.xml delete mode 100644 mobile/CordovaLib/xwalk_core_library/res/layout/color_picker_advanced_component.xml delete mode 100644 mobile/CordovaLib/xwalk_core_library/res/layout/color_picker_dialog_content.xml delete mode 100644 mobile/CordovaLib/xwalk_core_library/res/layout/color_picker_dialog_title.xml delete mode 100644 mobile/CordovaLib/xwalk_core_library/res/layout/content_multi_field_time_picker_dialog.xml delete mode 100644 mobile/CordovaLib/xwalk_core_library/res/layout/content_two_field_date_picker.xml delete mode 100644 mobile/CordovaLib/xwalk_core_library/res/layout/content_validation_message_bubble.xml delete mode 100644 mobile/CordovaLib/xwalk_core_library/res/layout/date_time_picker_dialog.xml delete mode 100644 mobile/CordovaLib/xwalk_core_library/res/layout/date_time_suggestion.xml delete mode 100644 mobile/CordovaLib/xwalk_core_library/res/layout/dropdown_item.xml delete mode 100644 mobile/CordovaLib/xwalk_core_library/res/layout/multi_field_time_picker_dialog.xml delete mode 100644 mobile/CordovaLib/xwalk_core_library/res/layout/two_field_date_picker.xml delete mode 100644 mobile/CordovaLib/xwalk_core_library/res/layout/ui_color_picker_advanced_component.xml delete mode 100644 mobile/CordovaLib/xwalk_core_library/res/layout/ui_color_picker_dialog_content.xml delete mode 100644 mobile/CordovaLib/xwalk_core_library/res/layout/ui_color_picker_dialog_title.xml delete mode 100644 mobile/CordovaLib/xwalk_core_library/res/layout/ui_date_time_suggestion.xml delete mode 100644 mobile/CordovaLib/xwalk_core_library/res/layout/ui_dropdown_item.xml delete mode 100644 mobile/CordovaLib/xwalk_core_library/res/layout/validation_message_bubble.xml delete mode 100644 mobile/CordovaLib/xwalk_core_library/res/menu/select_action_menu.xml delete mode 100644 mobile/CordovaLib/xwalk_core_library/res/mipmap-hdpi/app_icon.png delete mode 100644 mobile/CordovaLib/xwalk_core_library/res/mipmap-mdpi/app_icon.png delete mode 100644 mobile/CordovaLib/xwalk_core_library/res/mipmap-xhdpi/app_icon.png delete mode 100644 mobile/CordovaLib/xwalk_core_library/res/mipmap-xxhdpi/app_icon.png delete mode 100644 mobile/CordovaLib/xwalk_core_library/res/raw/device_capabilities_api.js delete mode 100644 mobile/CordovaLib/xwalk_core_library/res/raw/launch_screen_api.js delete mode 100644 mobile/CordovaLib/xwalk_core_library/res/raw/presentation_api.js delete mode 100644 mobile/CordovaLib/xwalk_core_library/res/raw/xwalk.pak delete mode 100644 mobile/CordovaLib/xwalk_core_library/res/values-am/android_content_strings.xml delete mode 100644 mobile/CordovaLib/xwalk_core_library/res/values-am/android_ui_strings.xml delete mode 100644 mobile/CordovaLib/xwalk_core_library/res/values-ar/android_content_strings.xml delete mode 100644 mobile/CordovaLib/xwalk_core_library/res/values-ar/android_ui_strings.xml delete mode 100644 mobile/CordovaLib/xwalk_core_library/res/values-bg/android_content_strings.xml delete mode 100644 mobile/CordovaLib/xwalk_core_library/res/values-bg/android_ui_strings.xml delete mode 100644 mobile/CordovaLib/xwalk_core_library/res/values-ca/android_content_strings.xml delete mode 100644 mobile/CordovaLib/xwalk_core_library/res/values-ca/android_ui_strings.xml delete mode 100644 mobile/CordovaLib/xwalk_core_library/res/values-cs/android_content_strings.xml delete mode 100644 mobile/CordovaLib/xwalk_core_library/res/values-cs/android_ui_strings.xml delete mode 100644 mobile/CordovaLib/xwalk_core_library/res/values-da/android_content_strings.xml delete mode 100644 mobile/CordovaLib/xwalk_core_library/res/values-da/android_ui_strings.xml delete mode 100644 mobile/CordovaLib/xwalk_core_library/res/values-de/android_content_strings.xml delete mode 100644 mobile/CordovaLib/xwalk_core_library/res/values-de/android_ui_strings.xml delete mode 100644 mobile/CordovaLib/xwalk_core_library/res/values-el/android_content_strings.xml delete mode 100644 mobile/CordovaLib/xwalk_core_library/res/values-el/android_ui_strings.xml delete mode 100644 mobile/CordovaLib/xwalk_core_library/res/values-en-rGB/android_content_strings.xml delete mode 100644 mobile/CordovaLib/xwalk_core_library/res/values-en-rGB/android_ui_strings.xml delete mode 100644 mobile/CordovaLib/xwalk_core_library/res/values-es-rUS/android_content_strings.xml delete mode 100644 mobile/CordovaLib/xwalk_core_library/res/values-es-rUS/android_ui_strings.xml delete mode 100644 mobile/CordovaLib/xwalk_core_library/res/values-es/android_content_strings.xml delete mode 100644 mobile/CordovaLib/xwalk_core_library/res/values-es/android_ui_strings.xml delete mode 100644 mobile/CordovaLib/xwalk_core_library/res/values-fa/android_content_strings.xml delete mode 100644 mobile/CordovaLib/xwalk_core_library/res/values-fa/android_ui_strings.xml delete mode 100644 mobile/CordovaLib/xwalk_core_library/res/values-fi/android_content_strings.xml delete mode 100644 mobile/CordovaLib/xwalk_core_library/res/values-fi/android_ui_strings.xml delete mode 100644 mobile/CordovaLib/xwalk_core_library/res/values-fr/android_content_strings.xml delete mode 100644 mobile/CordovaLib/xwalk_core_library/res/values-fr/android_ui_strings.xml delete mode 100644 mobile/CordovaLib/xwalk_core_library/res/values-hi/android_content_strings.xml delete mode 100644 mobile/CordovaLib/xwalk_core_library/res/values-hi/android_ui_strings.xml delete mode 100644 mobile/CordovaLib/xwalk_core_library/res/values-hr/android_content_strings.xml delete mode 100644 mobile/CordovaLib/xwalk_core_library/res/values-hr/android_ui_strings.xml delete mode 100644 mobile/CordovaLib/xwalk_core_library/res/values-hu/android_content_strings.xml delete mode 100644 mobile/CordovaLib/xwalk_core_library/res/values-hu/android_ui_strings.xml delete mode 100644 mobile/CordovaLib/xwalk_core_library/res/values-in/android_content_strings.xml delete mode 100644 mobile/CordovaLib/xwalk_core_library/res/values-in/android_ui_strings.xml delete mode 100644 mobile/CordovaLib/xwalk_core_library/res/values-it/android_content_strings.xml delete mode 100644 mobile/CordovaLib/xwalk_core_library/res/values-it/android_ui_strings.xml delete mode 100644 mobile/CordovaLib/xwalk_core_library/res/values-iw/android_content_strings.xml delete mode 100644 mobile/CordovaLib/xwalk_core_library/res/values-iw/android_ui_strings.xml delete mode 100644 mobile/CordovaLib/xwalk_core_library/res/values-ja/android_content_strings.xml delete mode 100644 mobile/CordovaLib/xwalk_core_library/res/values-ja/android_ui_strings.xml delete mode 100644 mobile/CordovaLib/xwalk_core_library/res/values-ko/android_content_strings.xml delete mode 100644 mobile/CordovaLib/xwalk_core_library/res/values-ko/android_ui_strings.xml delete mode 100644 mobile/CordovaLib/xwalk_core_library/res/values-lt/android_content_strings.xml delete mode 100644 mobile/CordovaLib/xwalk_core_library/res/values-lt/android_ui_strings.xml delete mode 100644 mobile/CordovaLib/xwalk_core_library/res/values-lv/android_content_strings.xml delete mode 100644 mobile/CordovaLib/xwalk_core_library/res/values-lv/android_ui_strings.xml delete mode 100644 mobile/CordovaLib/xwalk_core_library/res/values-nb/android_content_strings.xml delete mode 100644 mobile/CordovaLib/xwalk_core_library/res/values-nb/android_ui_strings.xml delete mode 100644 mobile/CordovaLib/xwalk_core_library/res/values-nl/android_content_strings.xml delete mode 100644 mobile/CordovaLib/xwalk_core_library/res/values-nl/android_ui_strings.xml delete mode 100644 mobile/CordovaLib/xwalk_core_library/res/values-pl/android_content_strings.xml delete mode 100644 mobile/CordovaLib/xwalk_core_library/res/values-pl/android_ui_strings.xml delete mode 100644 mobile/CordovaLib/xwalk_core_library/res/values-pt-rBR/android_content_strings.xml delete mode 100644 mobile/CordovaLib/xwalk_core_library/res/values-pt-rBR/android_ui_strings.xml delete mode 100644 mobile/CordovaLib/xwalk_core_library/res/values-pt-rPT/android_content_strings.xml delete mode 100644 mobile/CordovaLib/xwalk_core_library/res/values-pt-rPT/android_ui_strings.xml delete mode 100644 mobile/CordovaLib/xwalk_core_library/res/values-ro/android_content_strings.xml delete mode 100644 mobile/CordovaLib/xwalk_core_library/res/values-ro/android_ui_strings.xml delete mode 100644 mobile/CordovaLib/xwalk_core_library/res/values-ru/android_content_strings.xml delete mode 100644 mobile/CordovaLib/xwalk_core_library/res/values-ru/android_ui_strings.xml delete mode 100644 mobile/CordovaLib/xwalk_core_library/res/values-sk/android_content_strings.xml delete mode 100644 mobile/CordovaLib/xwalk_core_library/res/values-sk/android_ui_strings.xml delete mode 100644 mobile/CordovaLib/xwalk_core_library/res/values-sl/android_content_strings.xml delete mode 100644 mobile/CordovaLib/xwalk_core_library/res/values-sl/android_ui_strings.xml delete mode 100644 mobile/CordovaLib/xwalk_core_library/res/values-sr/android_content_strings.xml delete mode 100644 mobile/CordovaLib/xwalk_core_library/res/values-sr/android_ui_strings.xml delete mode 100644 mobile/CordovaLib/xwalk_core_library/res/values-sv/android_content_strings.xml delete mode 100644 mobile/CordovaLib/xwalk_core_library/res/values-sv/android_ui_strings.xml delete mode 100644 mobile/CordovaLib/xwalk_core_library/res/values-sw/android_content_strings.xml delete mode 100644 mobile/CordovaLib/xwalk_core_library/res/values-sw/android_ui_strings.xml delete mode 100644 mobile/CordovaLib/xwalk_core_library/res/values-th/android_content_strings.xml delete mode 100644 mobile/CordovaLib/xwalk_core_library/res/values-th/android_ui_strings.xml delete mode 100644 mobile/CordovaLib/xwalk_core_library/res/values-tl/android_content_strings.xml delete mode 100644 mobile/CordovaLib/xwalk_core_library/res/values-tl/android_ui_strings.xml delete mode 100644 mobile/CordovaLib/xwalk_core_library/res/values-tr/android_content_strings.xml delete mode 100644 mobile/CordovaLib/xwalk_core_library/res/values-tr/android_ui_strings.xml delete mode 100644 mobile/CordovaLib/xwalk_core_library/res/values-uk/android_content_strings.xml delete mode 100644 mobile/CordovaLib/xwalk_core_library/res/values-uk/android_ui_strings.xml delete mode 100644 mobile/CordovaLib/xwalk_core_library/res/values-v17/content_styles.xml delete mode 100644 mobile/CordovaLib/xwalk_core_library/res/values-v17/styles.xml delete mode 100644 mobile/CordovaLib/xwalk_core_library/res/values-vi/android_content_strings.xml delete mode 100644 mobile/CordovaLib/xwalk_core_library/res/values-vi/android_ui_strings.xml delete mode 100644 mobile/CordovaLib/xwalk_core_library/res/values-zh-rCN/android_content_strings.xml delete mode 100644 mobile/CordovaLib/xwalk_core_library/res/values-zh-rCN/android_ui_strings.xml delete mode 100644 mobile/CordovaLib/xwalk_core_library/res/values-zh-rTW/android_content_strings.xml delete mode 100644 mobile/CordovaLib/xwalk_core_library/res/values-zh-rTW/android_ui_strings.xml delete mode 100644 mobile/CordovaLib/xwalk_core_library/res/values/android_content_strings.xml delete mode 100644 mobile/CordovaLib/xwalk_core_library/res/values/android_ui_strings.xml delete mode 100644 mobile/CordovaLib/xwalk_core_library/res/values/android_xwalk_strings.xml delete mode 100644 mobile/CordovaLib/xwalk_core_library/res/values/attrs.xml delete mode 100644 mobile/CordovaLib/xwalk_core_library/res/values/colors.xml delete mode 100644 mobile/CordovaLib/xwalk_core_library/res/values/content_dimens.xml delete mode 100644 mobile/CordovaLib/xwalk_core_library/res/values/content_strings.xml delete mode 100644 mobile/CordovaLib/xwalk_core_library/res/values/content_styles.xml delete mode 100644 mobile/CordovaLib/xwalk_core_library/res/values/dimens.xml delete mode 100644 mobile/CordovaLib/xwalk_core_library/res/values/strings.xml delete mode 100644 mobile/CordovaLib/xwalk_core_library/res/values/styles.xml delete mode 100644 mobile/CordovaLib/xwalk_core_library/res/values/values.xml delete mode 100644 mobile/CordovaLib/xwalk_core_library/res/values/xwalk_core_internal_strings.xml delete mode 100644 mobile/CordovaLib/xwalk_core_library/res/values/xwalk_resources_list.xml delete mode 100644 mobile/CordovaLib/xwalk_core_library/src/README.md delete mode 100755 mobile/cordova/android_sdk_version delete mode 100644 mobile/cordova/build.bat delete mode 100755 mobile/cordova/check_reqs delete mode 100755 mobile/cordova/clean delete mode 100644 mobile/cordova/clean.bat delete mode 100644 mobile/cordova/defaults.xml delete mode 100755 mobile/cordova/lib/android_sdk_version.js delete mode 100644 mobile/cordova/lib/appinfo.js delete mode 100644 mobile/cordova/lib/build.js delete mode 100644 mobile/cordova/lib/check_reqs.js delete mode 100644 mobile/cordova/lib/clean.js delete mode 100644 mobile/cordova/lib/device.js delete mode 100644 mobile/cordova/lib/emulator.js delete mode 100644 mobile/cordova/lib/exec.js delete mode 100755 mobile/cordova/lib/install-device delete mode 100644 mobile/cordova/lib/install-device.bat delete mode 100755 mobile/cordova/lib/install-emulator delete mode 100644 mobile/cordova/lib/install-emulator.bat delete mode 100755 mobile/cordova/lib/list-devices delete mode 100644 mobile/cordova/lib/list-devices.bat delete mode 100755 mobile/cordova/lib/list-emulator-images delete mode 100644 mobile/cordova/lib/list-emulator-images.bat delete mode 100755 mobile/cordova/lib/list-started-emulators delete mode 100644 mobile/cordova/lib/list-started-emulators.bat delete mode 100644 mobile/cordova/lib/log.js delete mode 100644 mobile/cordova/lib/run.js delete mode 100644 mobile/cordova/lib/spawn.js delete mode 100755 mobile/cordova/lib/start-emulator delete mode 100644 mobile/cordova/lib/start-emulator.bat delete mode 100755 mobile/cordova/log delete mode 100644 mobile/cordova/log.bat delete mode 100644 mobile/cordova/plugins/android.json delete mode 100644 mobile/cordova/plugins/com.phonegap.plugins.barcodescanner/.fetch.json delete mode 100644 mobile/cordova/plugins/com.phonegap.plugins.barcodescanner/README.md delete mode 100644 mobile/cordova/plugins/com.phonegap.plugins.barcodescanner/plugin.xml delete mode 100644 mobile/cordova/plugins/com.phonegap.plugins.barcodescanner/spec/barcodescanner.tests.js delete mode 100644 mobile/cordova/plugins/com.phonegap.plugins.barcodescanner/spec/html/HtmlReporter.js delete mode 100644 mobile/cordova/plugins/com.phonegap.plugins.barcodescanner/spec/html/HtmlReporterHelpers.js delete mode 100644 mobile/cordova/plugins/com.phonegap.plugins.barcodescanner/spec/html/ReporterView.js delete mode 100644 mobile/cordova/plugins/com.phonegap.plugins.barcodescanner/spec/html/SpecView.js delete mode 100644 mobile/cordova/plugins/com.phonegap.plugins.barcodescanner/spec/html/SuiteView.js delete mode 100644 mobile/cordova/plugins/com.phonegap.plugins.barcodescanner/spec/html/TrivialReporter.js delete mode 100644 mobile/cordova/plugins/com.phonegap.plugins.barcodescanner/spec/index.html delete mode 100644 mobile/cordova/plugins/com.phonegap.plugins.barcodescanner/spec/jasmine.css delete mode 100644 mobile/cordova/plugins/com.phonegap.plugins.barcodescanner/spec/jasmine.js delete mode 100644 mobile/cordova/plugins/com.phonegap.plugins.barcodescanner/spec/test-runner.js delete mode 100644 mobile/cordova/plugins/com.phonegap.plugins.barcodescanner/src/android/LibraryProject/.gitignore delete mode 100644 mobile/cordova/plugins/com.phonegap.plugins.barcodescanner/src/android/LibraryProject/AndroidManifest.xml delete mode 100644 mobile/cordova/plugins/com.phonegap.plugins.barcodescanner/src/android/LibraryProject/ant.properties delete mode 100644 mobile/cordova/plugins/com.phonegap.plugins.barcodescanner/src/android/LibraryProject/assets/html-de/about1d.html delete mode 100644 mobile/cordova/plugins/com.phonegap.plugins.barcodescanner/src/android/LibraryProject/assets/html-de/about2d.html delete mode 100644 mobile/cordova/plugins/com.phonegap.plugins.barcodescanner/src/android/LibraryProject/assets/html-de/index.html delete mode 100644 mobile/cordova/plugins/com.phonegap.plugins.barcodescanner/src/android/LibraryProject/assets/html-de/scanning.html delete mode 100644 mobile/cordova/plugins/com.phonegap.plugins.barcodescanner/src/android/LibraryProject/assets/html-de/sharing.html delete mode 100644 mobile/cordova/plugins/com.phonegap.plugins.barcodescanner/src/android/LibraryProject/assets/html-de/whatsnew.html delete mode 100644 mobile/cordova/plugins/com.phonegap.plugins.barcodescanner/src/android/LibraryProject/assets/html-en/about1d.html delete mode 100644 mobile/cordova/plugins/com.phonegap.plugins.barcodescanner/src/android/LibraryProject/assets/html-en/about2d.html delete mode 100644 mobile/cordova/plugins/com.phonegap.plugins.barcodescanner/src/android/LibraryProject/assets/html-en/index.html delete mode 100644 mobile/cordova/plugins/com.phonegap.plugins.barcodescanner/src/android/LibraryProject/assets/html-en/scanning.html delete mode 100644 mobile/cordova/plugins/com.phonegap.plugins.barcodescanner/src/android/LibraryProject/assets/html-en/sharing.html delete mode 100644 mobile/cordova/plugins/com.phonegap.plugins.barcodescanner/src/android/LibraryProject/assets/html-en/whatsnew.html delete mode 100644 mobile/cordova/plugins/com.phonegap.plugins.barcodescanner/src/android/LibraryProject/assets/html-es/about1d.html delete mode 100644 mobile/cordova/plugins/com.phonegap.plugins.barcodescanner/src/android/LibraryProject/assets/html-es/about2d.html delete mode 100644 mobile/cordova/plugins/com.phonegap.plugins.barcodescanner/src/android/LibraryProject/assets/html-es/index.html delete mode 100644 mobile/cordova/plugins/com.phonegap.plugins.barcodescanner/src/android/LibraryProject/assets/html-es/scanning.html delete mode 100644 mobile/cordova/plugins/com.phonegap.plugins.barcodescanner/src/android/LibraryProject/assets/html-es/sharing.html delete mode 100644 mobile/cordova/plugins/com.phonegap.plugins.barcodescanner/src/android/LibraryProject/assets/html-es/whatsnew.html delete mode 100644 mobile/cordova/plugins/com.phonegap.plugins.barcodescanner/src/android/LibraryProject/assets/html-fr/about1d.html delete mode 100644 mobile/cordova/plugins/com.phonegap.plugins.barcodescanner/src/android/LibraryProject/assets/html-fr/about2d.html delete mode 100644 mobile/cordova/plugins/com.phonegap.plugins.barcodescanner/src/android/LibraryProject/assets/html-fr/index.html delete mode 100644 mobile/cordova/plugins/com.phonegap.plugins.barcodescanner/src/android/LibraryProject/assets/html-fr/scanning.html delete mode 100644 mobile/cordova/plugins/com.phonegap.plugins.barcodescanner/src/android/LibraryProject/assets/html-fr/sharing.html delete mode 100644 mobile/cordova/plugins/com.phonegap.plugins.barcodescanner/src/android/LibraryProject/assets/html-fr/whatsnew.html delete mode 100644 mobile/cordova/plugins/com.phonegap.plugins.barcodescanner/src/android/LibraryProject/assets/html-it/about1d.html delete mode 100644 mobile/cordova/plugins/com.phonegap.plugins.barcodescanner/src/android/LibraryProject/assets/html-it/about2d.html delete mode 100644 mobile/cordova/plugins/com.phonegap.plugins.barcodescanner/src/android/LibraryProject/assets/html-it/index.html delete mode 100644 mobile/cordova/plugins/com.phonegap.plugins.barcodescanner/src/android/LibraryProject/assets/html-it/scanning.html delete mode 100644 mobile/cordova/plugins/com.phonegap.plugins.barcodescanner/src/android/LibraryProject/assets/html-it/sharing.html delete mode 100644 mobile/cordova/plugins/com.phonegap.plugins.barcodescanner/src/android/LibraryProject/assets/html-it/whatsnew.html delete mode 100644 mobile/cordova/plugins/com.phonegap.plugins.barcodescanner/src/android/LibraryProject/assets/html-ja/about1d.html delete mode 100644 mobile/cordova/plugins/com.phonegap.plugins.barcodescanner/src/android/LibraryProject/assets/html-ja/about2d.html delete mode 100644 mobile/cordova/plugins/com.phonegap.plugins.barcodescanner/src/android/LibraryProject/assets/html-ja/index.html delete mode 100644 mobile/cordova/plugins/com.phonegap.plugins.barcodescanner/src/android/LibraryProject/assets/html-ja/scanning.html delete mode 100644 mobile/cordova/plugins/com.phonegap.plugins.barcodescanner/src/android/LibraryProject/assets/html-ja/sharing.html delete mode 100644 mobile/cordova/plugins/com.phonegap.plugins.barcodescanner/src/android/LibraryProject/assets/html-ja/whatsnew.html delete mode 100644 mobile/cordova/plugins/com.phonegap.plugins.barcodescanner/src/android/LibraryProject/assets/html-ko/about1d.html delete mode 100644 mobile/cordova/plugins/com.phonegap.plugins.barcodescanner/src/android/LibraryProject/assets/html-ko/about2d.html delete mode 100644 mobile/cordova/plugins/com.phonegap.plugins.barcodescanner/src/android/LibraryProject/assets/html-ko/index.html delete mode 100644 mobile/cordova/plugins/com.phonegap.plugins.barcodescanner/src/android/LibraryProject/assets/html-ko/scanning.html delete mode 100644 mobile/cordova/plugins/com.phonegap.plugins.barcodescanner/src/android/LibraryProject/assets/html-ko/sharing.html delete mode 100644 mobile/cordova/plugins/com.phonegap.plugins.barcodescanner/src/android/LibraryProject/assets/html-ko/whatsnew.html delete mode 100644 mobile/cordova/plugins/com.phonegap.plugins.barcodescanner/src/android/LibraryProject/assets/html-nl/about1d.html delete mode 100644 mobile/cordova/plugins/com.phonegap.plugins.barcodescanner/src/android/LibraryProject/assets/html-nl/about2d.html delete mode 100644 mobile/cordova/plugins/com.phonegap.plugins.barcodescanner/src/android/LibraryProject/assets/html-nl/index.html delete mode 100644 mobile/cordova/plugins/com.phonegap.plugins.barcodescanner/src/android/LibraryProject/assets/html-nl/scanning.html delete mode 100644 mobile/cordova/plugins/com.phonegap.plugins.barcodescanner/src/android/LibraryProject/assets/html-nl/sharing.html delete mode 100644 mobile/cordova/plugins/com.phonegap.plugins.barcodescanner/src/android/LibraryProject/assets/html-nl/whatsnew.html delete mode 100644 mobile/cordova/plugins/com.phonegap.plugins.barcodescanner/src/android/LibraryProject/assets/html-pt/about1d.html delete mode 100644 mobile/cordova/plugins/com.phonegap.plugins.barcodescanner/src/android/LibraryProject/assets/html-pt/about2d.html delete mode 100644 mobile/cordova/plugins/com.phonegap.plugins.barcodescanner/src/android/LibraryProject/assets/html-pt/index.html delete mode 100644 mobile/cordova/plugins/com.phonegap.plugins.barcodescanner/src/android/LibraryProject/assets/html-pt/scanning.html delete mode 100644 mobile/cordova/plugins/com.phonegap.plugins.barcodescanner/src/android/LibraryProject/assets/html-pt/sharing.html delete mode 100644 mobile/cordova/plugins/com.phonegap.plugins.barcodescanner/src/android/LibraryProject/assets/html-pt/whatsnew.html delete mode 100644 mobile/cordova/plugins/com.phonegap.plugins.barcodescanner/src/android/LibraryProject/assets/html-ru/about1d.html delete mode 100644 mobile/cordova/plugins/com.phonegap.plugins.barcodescanner/src/android/LibraryProject/assets/html-ru/about2d.html delete mode 100644 mobile/cordova/plugins/com.phonegap.plugins.barcodescanner/src/android/LibraryProject/assets/html-ru/index.html delete mode 100644 mobile/cordova/plugins/com.phonegap.plugins.barcodescanner/src/android/LibraryProject/assets/html-ru/scanning.html delete mode 100644 mobile/cordova/plugins/com.phonegap.plugins.barcodescanner/src/android/LibraryProject/assets/html-ru/sharing.html delete mode 100644 mobile/cordova/plugins/com.phonegap.plugins.barcodescanner/src/android/LibraryProject/assets/html-ru/whatsnew.html delete mode 100644 mobile/cordova/plugins/com.phonegap.plugins.barcodescanner/src/android/LibraryProject/assets/html-zh-rCN/about1d.html delete mode 100644 mobile/cordova/plugins/com.phonegap.plugins.barcodescanner/src/android/LibraryProject/assets/html-zh-rCN/about2d.html delete mode 100644 mobile/cordova/plugins/com.phonegap.plugins.barcodescanner/src/android/LibraryProject/assets/html-zh-rCN/index.html delete mode 100644 mobile/cordova/plugins/com.phonegap.plugins.barcodescanner/src/android/LibraryProject/assets/html-zh-rCN/scanning.html delete mode 100644 mobile/cordova/plugins/com.phonegap.plugins.barcodescanner/src/android/LibraryProject/assets/html-zh-rCN/sharing.html delete mode 100644 mobile/cordova/plugins/com.phonegap.plugins.barcodescanner/src/android/LibraryProject/assets/html-zh-rCN/whatsnew.html delete mode 100644 mobile/cordova/plugins/com.phonegap.plugins.barcodescanner/src/android/LibraryProject/assets/html-zh-rTW/about1d.html delete mode 100644 mobile/cordova/plugins/com.phonegap.plugins.barcodescanner/src/android/LibraryProject/assets/html-zh-rTW/about2d.html delete mode 100644 mobile/cordova/plugins/com.phonegap.plugins.barcodescanner/src/android/LibraryProject/assets/html-zh-rTW/index.html delete mode 100644 mobile/cordova/plugins/com.phonegap.plugins.barcodescanner/src/android/LibraryProject/assets/html-zh-rTW/scanning.html delete mode 100644 mobile/cordova/plugins/com.phonegap.plugins.barcodescanner/src/android/LibraryProject/assets/html-zh-rTW/sharing.html delete mode 100644 mobile/cordova/plugins/com.phonegap.plugins.barcodescanner/src/android/LibraryProject/assets/html-zh-rTW/whatsnew.html delete mode 100644 mobile/cordova/plugins/com.phonegap.plugins.barcodescanner/src/android/LibraryProject/assets/images/big-1d.png delete mode 100644 mobile/cordova/plugins/com.phonegap.plugins.barcodescanner/src/android/LibraryProject/assets/images/big-datamatrix.png delete mode 100644 mobile/cordova/plugins/com.phonegap.plugins.barcodescanner/src/android/LibraryProject/assets/images/big-qr.png delete mode 100644 mobile/cordova/plugins/com.phonegap.plugins.barcodescanner/src/android/LibraryProject/assets/images/contact-results-screen.jpg delete mode 100644 mobile/cordova/plugins/com.phonegap.plugins.barcodescanner/src/android/LibraryProject/assets/images/demo-no.png delete mode 100644 mobile/cordova/plugins/com.phonegap.plugins.barcodescanner/src/android/LibraryProject/assets/images/demo-yes.png delete mode 100644 mobile/cordova/plugins/com.phonegap.plugins.barcodescanner/src/android/LibraryProject/assets/images/scan-example.png delete mode 100644 mobile/cordova/plugins/com.phonegap.plugins.barcodescanner/src/android/LibraryProject/assets/images/scan-from-phone.png delete mode 100644 mobile/cordova/plugins/com.phonegap.plugins.barcodescanner/src/android/LibraryProject/assets/images/search-book-contents.jpg delete mode 100644 mobile/cordova/plugins/com.phonegap.plugins.barcodescanner/src/android/LibraryProject/assets/style.css delete mode 100644 mobile/cordova/plugins/com.phonegap.plugins.barcodescanner/src/android/LibraryProject/build.xml delete mode 100644 mobile/cordova/plugins/com.phonegap.plugins.barcodescanner/src/android/LibraryProject/proguard-android-optimize.txt delete mode 100644 mobile/cordova/plugins/com.phonegap.plugins.barcodescanner/src/android/LibraryProject/project.properties delete mode 100644 mobile/cordova/plugins/com.phonegap.plugins.barcodescanner/src/android/LibraryProject/res/drawable-hdpi/launcher_icon.png delete mode 100644 mobile/cordova/plugins/com.phonegap.plugins.barcodescanner/src/android/LibraryProject/res/drawable-hdpi/shopper_icon.png delete mode 100644 mobile/cordova/plugins/com.phonegap.plugins.barcodescanner/src/android/LibraryProject/res/drawable-xhdpi/launcher_icon.png delete mode 100644 mobile/cordova/plugins/com.phonegap.plugins.barcodescanner/src/android/LibraryProject/res/drawable-xxhdpi/launcher_icon.png delete mode 100644 mobile/cordova/plugins/com.phonegap.plugins.barcodescanner/src/android/LibraryProject/res/drawable/launcher_icon.png delete mode 100644 mobile/cordova/plugins/com.phonegap.plugins.barcodescanner/src/android/LibraryProject/res/drawable/share_via_barcode.png delete mode 100644 mobile/cordova/plugins/com.phonegap.plugins.barcodescanner/src/android/LibraryProject/res/drawable/shopper_icon.png delete mode 100644 mobile/cordova/plugins/com.phonegap.plugins.barcodescanner/src/android/LibraryProject/res/layout-land/encode.xml delete mode 100644 mobile/cordova/plugins/com.phonegap.plugins.barcodescanner/src/android/LibraryProject/res/layout-land/share.xml delete mode 100644 mobile/cordova/plugins/com.phonegap.plugins.barcodescanner/src/android/LibraryProject/res/layout-ldpi/capture.xml delete mode 100644 mobile/cordova/plugins/com.phonegap.plugins.barcodescanner/src/android/LibraryProject/res/layout/bookmark_picker_list_item.xml delete mode 100644 mobile/cordova/plugins/com.phonegap.plugins.barcodescanner/src/android/LibraryProject/res/layout/capture.xml delete mode 100644 mobile/cordova/plugins/com.phonegap.plugins.barcodescanner/src/android/LibraryProject/res/layout/encode.xml delete mode 100644 mobile/cordova/plugins/com.phonegap.plugins.barcodescanner/src/android/LibraryProject/res/layout/help.xml delete mode 100644 mobile/cordova/plugins/com.phonegap.plugins.barcodescanner/src/android/LibraryProject/res/layout/history_list_item.xml delete mode 100644 mobile/cordova/plugins/com.phonegap.plugins.barcodescanner/src/android/LibraryProject/res/layout/search_book_contents.xml delete mode 100644 mobile/cordova/plugins/com.phonegap.plugins.barcodescanner/src/android/LibraryProject/res/layout/search_book_contents_header.xml delete mode 100644 mobile/cordova/plugins/com.phonegap.plugins.barcodescanner/src/android/LibraryProject/res/layout/search_book_contents_list_item.xml delete mode 100644 mobile/cordova/plugins/com.phonegap.plugins.barcodescanner/src/android/LibraryProject/res/layout/share.xml delete mode 100644 mobile/cordova/plugins/com.phonegap.plugins.barcodescanner/src/android/LibraryProject/res/menu/capture.xml delete mode 100644 mobile/cordova/plugins/com.phonegap.plugins.barcodescanner/src/android/LibraryProject/res/menu/encode.xml delete mode 100644 mobile/cordova/plugins/com.phonegap.plugins.barcodescanner/src/android/LibraryProject/res/menu/history.xml delete mode 100644 mobile/cordova/plugins/com.phonegap.plugins.barcodescanner/src/android/LibraryProject/res/raw/beep.ogg delete mode 100644 mobile/cordova/plugins/com.phonegap.plugins.barcodescanner/src/android/LibraryProject/res/values-ar/strings.xml delete mode 100644 mobile/cordova/plugins/com.phonegap.plugins.barcodescanner/src/android/LibraryProject/res/values-bg/strings.xml delete mode 100644 mobile/cordova/plugins/com.phonegap.plugins.barcodescanner/src/android/LibraryProject/res/values-ca/strings.xml delete mode 100644 mobile/cordova/plugins/com.phonegap.plugins.barcodescanner/src/android/LibraryProject/res/values-cs/strings.xml delete mode 100644 mobile/cordova/plugins/com.phonegap.plugins.barcodescanner/src/android/LibraryProject/res/values-da/strings.xml delete mode 100644 mobile/cordova/plugins/com.phonegap.plugins.barcodescanner/src/android/LibraryProject/res/values-de/strings.xml delete mode 100644 mobile/cordova/plugins/com.phonegap.plugins.barcodescanner/src/android/LibraryProject/res/values-el/strings.xml delete mode 100644 mobile/cordova/plugins/com.phonegap.plugins.barcodescanner/src/android/LibraryProject/res/values-es/strings.xml delete mode 100644 mobile/cordova/plugins/com.phonegap.plugins.barcodescanner/src/android/LibraryProject/res/values-eu/strings.xml delete mode 100644 mobile/cordova/plugins/com.phonegap.plugins.barcodescanner/src/android/LibraryProject/res/values-fi/strings.xml delete mode 100644 mobile/cordova/plugins/com.phonegap.plugins.barcodescanner/src/android/LibraryProject/res/values-fr/strings.xml delete mode 100644 mobile/cordova/plugins/com.phonegap.plugins.barcodescanner/src/android/LibraryProject/res/values-he/strings.xml delete mode 100644 mobile/cordova/plugins/com.phonegap.plugins.barcodescanner/src/android/LibraryProject/res/values-hi/strings.xml delete mode 100644 mobile/cordova/plugins/com.phonegap.plugins.barcodescanner/src/android/LibraryProject/res/values-hu/strings.xml delete mode 100644 mobile/cordova/plugins/com.phonegap.plugins.barcodescanner/src/android/LibraryProject/res/values-id/strings.xml delete mode 100644 mobile/cordova/plugins/com.phonegap.plugins.barcodescanner/src/android/LibraryProject/res/values-it/strings.xml delete mode 100644 mobile/cordova/plugins/com.phonegap.plugins.barcodescanner/src/android/LibraryProject/res/values-iw/strings.xml delete mode 100644 mobile/cordova/plugins/com.phonegap.plugins.barcodescanner/src/android/LibraryProject/res/values-ja/strings.xml delete mode 100644 mobile/cordova/plugins/com.phonegap.plugins.barcodescanner/src/android/LibraryProject/res/values-ko/strings.xml delete mode 100644 mobile/cordova/plugins/com.phonegap.plugins.barcodescanner/src/android/LibraryProject/res/values-nl/strings.xml delete mode 100644 mobile/cordova/plugins/com.phonegap.plugins.barcodescanner/src/android/LibraryProject/res/values-pl/strings.xml delete mode 100644 mobile/cordova/plugins/com.phonegap.plugins.barcodescanner/src/android/LibraryProject/res/values-pt/strings.xml delete mode 100644 mobile/cordova/plugins/com.phonegap.plugins.barcodescanner/src/android/LibraryProject/res/values-ru/strings.xml delete mode 100644 mobile/cordova/plugins/com.phonegap.plugins.barcodescanner/src/android/LibraryProject/res/values-sk/strings.xml delete mode 100644 mobile/cordova/plugins/com.phonegap.plugins.barcodescanner/src/android/LibraryProject/res/values-sl/strings.xml delete mode 100644 mobile/cordova/plugins/com.phonegap.plugins.barcodescanner/src/android/LibraryProject/res/values-sv/strings.xml delete mode 100644 mobile/cordova/plugins/com.phonegap.plugins.barcodescanner/src/android/LibraryProject/res/values-tr/strings.xml delete mode 100644 mobile/cordova/plugins/com.phonegap.plugins.barcodescanner/src/android/LibraryProject/res/values-zh-rCN/strings.xml delete mode 100644 mobile/cordova/plugins/com.phonegap.plugins.barcodescanner/src/android/LibraryProject/res/values-zh-rTW/strings.xml delete mode 100644 mobile/cordova/plugins/com.phonegap.plugins.barcodescanner/src/android/LibraryProject/res/values/arrays.xml delete mode 100644 mobile/cordova/plugins/com.phonegap.plugins.barcodescanner/src/android/LibraryProject/res/values/colors.xml delete mode 100644 mobile/cordova/plugins/com.phonegap.plugins.barcodescanner/src/android/LibraryProject/res/values/dimens.xml delete mode 100644 mobile/cordova/plugins/com.phonegap.plugins.barcodescanner/src/android/LibraryProject/res/values/ids.xml delete mode 100644 mobile/cordova/plugins/com.phonegap.plugins.barcodescanner/src/android/LibraryProject/res/values/strings.xml delete mode 100644 mobile/cordova/plugins/com.phonegap.plugins.barcodescanner/src/android/LibraryProject/res/xml/preferences.xml delete mode 100644 mobile/cordova/plugins/com.phonegap.plugins.barcodescanner/src/android/LibraryProject/src/com/google/zxing/BarcodeFormat.java delete mode 100644 mobile/cordova/plugins/com.phonegap.plugins.barcodescanner/src/android/LibraryProject/src/com/google/zxing/Binarizer.java delete mode 100644 mobile/cordova/plugins/com.phonegap.plugins.barcodescanner/src/android/LibraryProject/src/com/google/zxing/BinaryBitmap.java delete mode 100644 mobile/cordova/plugins/com.phonegap.plugins.barcodescanner/src/android/LibraryProject/src/com/google/zxing/ChecksumException.java delete mode 100644 mobile/cordova/plugins/com.phonegap.plugins.barcodescanner/src/android/LibraryProject/src/com/google/zxing/DecodeHintType.java delete mode 100644 mobile/cordova/plugins/com.phonegap.plugins.barcodescanner/src/android/LibraryProject/src/com/google/zxing/EncodeHintType.java delete mode 100644 mobile/cordova/plugins/com.phonegap.plugins.barcodescanner/src/android/LibraryProject/src/com/google/zxing/FakeR.java delete mode 100644 mobile/cordova/plugins/com.phonegap.plugins.barcodescanner/src/android/LibraryProject/src/com/google/zxing/FormatException.java delete mode 100644 mobile/cordova/plugins/com.phonegap.plugins.barcodescanner/src/android/LibraryProject/src/com/google/zxing/LuminanceSource.java delete mode 100644 mobile/cordova/plugins/com.phonegap.plugins.barcodescanner/src/android/LibraryProject/src/com/google/zxing/MultiFormatReader.java delete mode 100644 mobile/cordova/plugins/com.phonegap.plugins.barcodescanner/src/android/LibraryProject/src/com/google/zxing/MultiFormatWriter.java delete mode 100644 mobile/cordova/plugins/com.phonegap.plugins.barcodescanner/src/android/LibraryProject/src/com/google/zxing/NotFoundException.java delete mode 100644 mobile/cordova/plugins/com.phonegap.plugins.barcodescanner/src/android/LibraryProject/src/com/google/zxing/PlanarYUVLuminanceSource.java delete mode 100644 mobile/cordova/plugins/com.phonegap.plugins.barcodescanner/src/android/LibraryProject/src/com/google/zxing/RGBLuminanceSource.java delete mode 100644 mobile/cordova/plugins/com.phonegap.plugins.barcodescanner/src/android/LibraryProject/src/com/google/zxing/Reader.java delete mode 100644 mobile/cordova/plugins/com.phonegap.plugins.barcodescanner/src/android/LibraryProject/src/com/google/zxing/ReaderException.java delete mode 100644 mobile/cordova/plugins/com.phonegap.plugins.barcodescanner/src/android/LibraryProject/src/com/google/zxing/Result.java delete mode 100644 mobile/cordova/plugins/com.phonegap.plugins.barcodescanner/src/android/LibraryProject/src/com/google/zxing/ResultMetadataType.java delete mode 100644 mobile/cordova/plugins/com.phonegap.plugins.barcodescanner/src/android/LibraryProject/src/com/google/zxing/ResultPoint.java delete mode 100644 mobile/cordova/plugins/com.phonegap.plugins.barcodescanner/src/android/LibraryProject/src/com/google/zxing/ResultPointCallback.java delete mode 100644 mobile/cordova/plugins/com.phonegap.plugins.barcodescanner/src/android/LibraryProject/src/com/google/zxing/Writer.java delete mode 100644 mobile/cordova/plugins/com.phonegap.plugins.barcodescanner/src/android/LibraryProject/src/com/google/zxing/WriterException.java delete mode 100644 mobile/cordova/plugins/com.phonegap.plugins.barcodescanner/src/android/LibraryProject/src/com/google/zxing/aztec/AztecDetectorResult.java delete mode 100644 mobile/cordova/plugins/com.phonegap.plugins.barcodescanner/src/android/LibraryProject/src/com/google/zxing/aztec/AztecReader.java delete mode 100644 mobile/cordova/plugins/com.phonegap.plugins.barcodescanner/src/android/LibraryProject/src/com/google/zxing/aztec/decoder/Decoder.java delete mode 100644 mobile/cordova/plugins/com.phonegap.plugins.barcodescanner/src/android/LibraryProject/src/com/google/zxing/aztec/detector/Detector.java delete mode 100644 mobile/cordova/plugins/com.phonegap.plugins.barcodescanner/src/android/LibraryProject/src/com/google/zxing/client/android/BeepManager.java delete mode 100644 mobile/cordova/plugins/com.phonegap.plugins.barcodescanner/src/android/LibraryProject/src/com/google/zxing/client/android/CaptureActivity.java delete mode 100644 mobile/cordova/plugins/com.phonegap.plugins.barcodescanner/src/android/LibraryProject/src/com/google/zxing/client/android/CaptureActivityHandler.java delete mode 100644 mobile/cordova/plugins/com.phonegap.plugins.barcodescanner/src/android/LibraryProject/src/com/google/zxing/client/android/Contents.java delete mode 100644 mobile/cordova/plugins/com.phonegap.plugins.barcodescanner/src/android/LibraryProject/src/com/google/zxing/client/android/DecodeFormatManager.java delete mode 100644 mobile/cordova/plugins/com.phonegap.plugins.barcodescanner/src/android/LibraryProject/src/com/google/zxing/client/android/DecodeHandler.java delete mode 100644 mobile/cordova/plugins/com.phonegap.plugins.barcodescanner/src/android/LibraryProject/src/com/google/zxing/client/android/DecodeThread.java delete mode 100644 mobile/cordova/plugins/com.phonegap.plugins.barcodescanner/src/android/LibraryProject/src/com/google/zxing/client/android/FinishListener.java delete mode 100644 mobile/cordova/plugins/com.phonegap.plugins.barcodescanner/src/android/LibraryProject/src/com/google/zxing/client/android/HelpActivity.java delete mode 100644 mobile/cordova/plugins/com.phonegap.plugins.barcodescanner/src/android/LibraryProject/src/com/google/zxing/client/android/HttpHelper.java delete mode 100644 mobile/cordova/plugins/com.phonegap.plugins.barcodescanner/src/android/LibraryProject/src/com/google/zxing/client/android/InactivityTimer.java delete mode 100644 mobile/cordova/plugins/com.phonegap.plugins.barcodescanner/src/android/LibraryProject/src/com/google/zxing/client/android/IntentSource.java delete mode 100644 mobile/cordova/plugins/com.phonegap.plugins.barcodescanner/src/android/LibraryProject/src/com/google/zxing/client/android/Intents.java delete mode 100644 mobile/cordova/plugins/com.phonegap.plugins.barcodescanner/src/android/LibraryProject/src/com/google/zxing/client/android/LocaleManager.java delete mode 100644 mobile/cordova/plugins/com.phonegap.plugins.barcodescanner/src/android/LibraryProject/src/com/google/zxing/client/android/PreferencesActivity.java delete mode 100644 mobile/cordova/plugins/com.phonegap.plugins.barcodescanner/src/android/LibraryProject/src/com/google/zxing/client/android/ViewfinderResultPointCallback.java delete mode 100644 mobile/cordova/plugins/com.phonegap.plugins.barcodescanner/src/android/LibraryProject/src/com/google/zxing/client/android/ViewfinderView.java delete mode 100644 mobile/cordova/plugins/com.phonegap.plugins.barcodescanner/src/android/LibraryProject/src/com/google/zxing/client/android/book/BrowseBookListener.java delete mode 100644 mobile/cordova/plugins/com.phonegap.plugins.barcodescanner/src/android/LibraryProject/src/com/google/zxing/client/android/book/SearchBookContentsActivity.java delete mode 100644 mobile/cordova/plugins/com.phonegap.plugins.barcodescanner/src/android/LibraryProject/src/com/google/zxing/client/android/book/SearchBookContentsAdapter.java delete mode 100644 mobile/cordova/plugins/com.phonegap.plugins.barcodescanner/src/android/LibraryProject/src/com/google/zxing/client/android/book/SearchBookContentsListItem.java delete mode 100644 mobile/cordova/plugins/com.phonegap.plugins.barcodescanner/src/android/LibraryProject/src/com/google/zxing/client/android/book/SearchBookContentsResult.java delete mode 100644 mobile/cordova/plugins/com.phonegap.plugins.barcodescanner/src/android/LibraryProject/src/com/google/zxing/client/android/camera/AutoFocusManager.java delete mode 100644 mobile/cordova/plugins/com.phonegap.plugins.barcodescanner/src/android/LibraryProject/src/com/google/zxing/client/android/camera/CameraConfigurationManager.java delete mode 100644 mobile/cordova/plugins/com.phonegap.plugins.barcodescanner/src/android/LibraryProject/src/com/google/zxing/client/android/camera/CameraManager.java delete mode 100644 mobile/cordova/plugins/com.phonegap.plugins.barcodescanner/src/android/LibraryProject/src/com/google/zxing/client/android/camera/PreviewCallback.java delete mode 100644 mobile/cordova/plugins/com.phonegap.plugins.barcodescanner/src/android/LibraryProject/src/com/google/zxing/client/android/camera/exposure/DefaultExposureInterface.java delete mode 100644 mobile/cordova/plugins/com.phonegap.plugins.barcodescanner/src/android/LibraryProject/src/com/google/zxing/client/android/camera/exposure/ExposureInterface.java delete mode 100644 mobile/cordova/plugins/com.phonegap.plugins.barcodescanner/src/android/LibraryProject/src/com/google/zxing/client/android/camera/exposure/ExposureManager.java delete mode 100644 mobile/cordova/plugins/com.phonegap.plugins.barcodescanner/src/android/LibraryProject/src/com/google/zxing/client/android/camera/exposure/FroyoExposureInterface.java delete mode 100644 mobile/cordova/plugins/com.phonegap.plugins.barcodescanner/src/android/LibraryProject/src/com/google/zxing/client/android/camera/open/DefaultOpenCameraInterface.java delete mode 100644 mobile/cordova/plugins/com.phonegap.plugins.barcodescanner/src/android/LibraryProject/src/com/google/zxing/client/android/camera/open/GingerbreadOpenCameraInterface.java delete mode 100644 mobile/cordova/plugins/com.phonegap.plugins.barcodescanner/src/android/LibraryProject/src/com/google/zxing/client/android/camera/open/OpenCameraInterface.java delete mode 100644 mobile/cordova/plugins/com.phonegap.plugins.barcodescanner/src/android/LibraryProject/src/com/google/zxing/client/android/camera/open/OpenCameraManager.java delete mode 100644 mobile/cordova/plugins/com.phonegap.plugins.barcodescanner/src/android/LibraryProject/src/com/google/zxing/client/android/common/PlatformSupportManager.java delete mode 100644 mobile/cordova/plugins/com.phonegap.plugins.barcodescanner/src/android/LibraryProject/src/com/google/zxing/client/android/common/executor/AsyncTaskExecInterface.java delete mode 100644 mobile/cordova/plugins/com.phonegap.plugins.barcodescanner/src/android/LibraryProject/src/com/google/zxing/client/android/common/executor/AsyncTaskExecManager.java delete mode 100644 mobile/cordova/plugins/com.phonegap.plugins.barcodescanner/src/android/LibraryProject/src/com/google/zxing/client/android/common/executor/DefaultAsyncTaskExecInterface.java delete mode 100644 mobile/cordova/plugins/com.phonegap.plugins.barcodescanner/src/android/LibraryProject/src/com/google/zxing/client/android/common/executor/HoneycombAsyncTaskExecInterface.java delete mode 100644 mobile/cordova/plugins/com.phonegap.plugins.barcodescanner/src/android/LibraryProject/src/com/google/zxing/client/android/encode/ContactEncoder.java delete mode 100644 mobile/cordova/plugins/com.phonegap.plugins.barcodescanner/src/android/LibraryProject/src/com/google/zxing/client/android/encode/EncodeActivity.java delete mode 100644 mobile/cordova/plugins/com.phonegap.plugins.barcodescanner/src/android/LibraryProject/src/com/google/zxing/client/android/encode/Formatter.java delete mode 100644 mobile/cordova/plugins/com.phonegap.plugins.barcodescanner/src/android/LibraryProject/src/com/google/zxing/client/android/encode/MECARDContactEncoder.java delete mode 100644 mobile/cordova/plugins/com.phonegap.plugins.barcodescanner/src/android/LibraryProject/src/com/google/zxing/client/android/encode/QRCodeEncoder.java delete mode 100644 mobile/cordova/plugins/com.phonegap.plugins.barcodescanner/src/android/LibraryProject/src/com/google/zxing/client/android/encode/VCardContactEncoder.java delete mode 100644 mobile/cordova/plugins/com.phonegap.plugins.barcodescanner/src/android/LibraryProject/src/com/google/zxing/client/android/history/DBHelper.java delete mode 100644 mobile/cordova/plugins/com.phonegap.plugins.barcodescanner/src/android/LibraryProject/src/com/google/zxing/client/android/history/HistoryActivity.java delete mode 100644 mobile/cordova/plugins/com.phonegap.plugins.barcodescanner/src/android/LibraryProject/src/com/google/zxing/client/android/history/HistoryItem.java delete mode 100644 mobile/cordova/plugins/com.phonegap.plugins.barcodescanner/src/android/LibraryProject/src/com/google/zxing/client/android/history/HistoryItemAdapter.java delete mode 100644 mobile/cordova/plugins/com.phonegap.plugins.barcodescanner/src/android/LibraryProject/src/com/google/zxing/client/android/history/HistoryManager.java delete mode 100644 mobile/cordova/plugins/com.phonegap.plugins.barcodescanner/src/android/LibraryProject/src/com/google/zxing/client/android/pref/BSPlusPreference.java delete mode 100644 mobile/cordova/plugins/com.phonegap.plugins.barcodescanner/src/android/LibraryProject/src/com/google/zxing/client/android/result/AddressBookResultHandler.java delete mode 100644 mobile/cordova/plugins/com.phonegap.plugins.barcodescanner/src/android/LibraryProject/src/com/google/zxing/client/android/result/CalendarResultHandler.java delete mode 100644 mobile/cordova/plugins/com.phonegap.plugins.barcodescanner/src/android/LibraryProject/src/com/google/zxing/client/android/result/EmailAddressResultHandler.java delete mode 100644 mobile/cordova/plugins/com.phonegap.plugins.barcodescanner/src/android/LibraryProject/src/com/google/zxing/client/android/result/GeoResultHandler.java delete mode 100644 mobile/cordova/plugins/com.phonegap.plugins.barcodescanner/src/android/LibraryProject/src/com/google/zxing/client/android/result/ISBNResultHandler.java delete mode 100644 mobile/cordova/plugins/com.phonegap.plugins.barcodescanner/src/android/LibraryProject/src/com/google/zxing/client/android/result/ProductResultHandler.java delete mode 100644 mobile/cordova/plugins/com.phonegap.plugins.barcodescanner/src/android/LibraryProject/src/com/google/zxing/client/android/result/ResultButtonListener.java delete mode 100644 mobile/cordova/plugins/com.phonegap.plugins.barcodescanner/src/android/LibraryProject/src/com/google/zxing/client/android/result/ResultHandler.java delete mode 100644 mobile/cordova/plugins/com.phonegap.plugins.barcodescanner/src/android/LibraryProject/src/com/google/zxing/client/android/result/ResultHandlerFactory.java delete mode 100644 mobile/cordova/plugins/com.phonegap.plugins.barcodescanner/src/android/LibraryProject/src/com/google/zxing/client/android/result/SMSResultHandler.java delete mode 100644 mobile/cordova/plugins/com.phonegap.plugins.barcodescanner/src/android/LibraryProject/src/com/google/zxing/client/android/result/TelResultHandler.java delete mode 100644 mobile/cordova/plugins/com.phonegap.plugins.barcodescanner/src/android/LibraryProject/src/com/google/zxing/client/android/result/TextResultHandler.java delete mode 100644 mobile/cordova/plugins/com.phonegap.plugins.barcodescanner/src/android/LibraryProject/src/com/google/zxing/client/android/result/URIResultHandler.java delete mode 100644 mobile/cordova/plugins/com.phonegap.plugins.barcodescanner/src/android/LibraryProject/src/com/google/zxing/client/android/result/WifiResultHandler.java delete mode 100644 mobile/cordova/plugins/com.phonegap.plugins.barcodescanner/src/android/LibraryProject/src/com/google/zxing/client/android/result/supplement/BookResultInfoRetriever.java delete mode 100644 mobile/cordova/plugins/com.phonegap.plugins.barcodescanner/src/android/LibraryProject/src/com/google/zxing/client/android/result/supplement/ProductResultInfoRetriever.java delete mode 100644 mobile/cordova/plugins/com.phonegap.plugins.barcodescanner/src/android/LibraryProject/src/com/google/zxing/client/android/result/supplement/SupplementalInfoRetriever.java delete mode 100644 mobile/cordova/plugins/com.phonegap.plugins.barcodescanner/src/android/LibraryProject/src/com/google/zxing/client/android/result/supplement/TitleRetriever.java delete mode 100644 mobile/cordova/plugins/com.phonegap.plugins.barcodescanner/src/android/LibraryProject/src/com/google/zxing/client/android/result/supplement/URIResultInfoRetriever.java delete mode 100644 mobile/cordova/plugins/com.phonegap.plugins.barcodescanner/src/android/LibraryProject/src/com/google/zxing/client/android/share/AppPickerActivity.java delete mode 100644 mobile/cordova/plugins/com.phonegap.plugins.barcodescanner/src/android/LibraryProject/src/com/google/zxing/client/android/share/BookmarkAdapter.java delete mode 100644 mobile/cordova/plugins/com.phonegap.plugins.barcodescanner/src/android/LibraryProject/src/com/google/zxing/client/android/share/BookmarkPickerActivity.java delete mode 100644 mobile/cordova/plugins/com.phonegap.plugins.barcodescanner/src/android/LibraryProject/src/com/google/zxing/client/android/share/LoadPackagesAsyncTask.java delete mode 100644 mobile/cordova/plugins/com.phonegap.plugins.barcodescanner/src/android/LibraryProject/src/com/google/zxing/client/android/share/ShareActivity.java delete mode 100644 mobile/cordova/plugins/com.phonegap.plugins.barcodescanner/src/android/LibraryProject/src/com/google/zxing/client/android/wifi/NetworkType.java delete mode 100644 mobile/cordova/plugins/com.phonegap.plugins.barcodescanner/src/android/LibraryProject/src/com/google/zxing/client/android/wifi/WifiConfigManager.java delete mode 100644 mobile/cordova/plugins/com.phonegap.plugins.barcodescanner/src/android/LibraryProject/src/com/google/zxing/client/result/AbstractDoCoMoResultParser.java delete mode 100644 mobile/cordova/plugins/com.phonegap.plugins.barcodescanner/src/android/LibraryProject/src/com/google/zxing/client/result/AddressBookAUResultParser.java delete mode 100644 mobile/cordova/plugins/com.phonegap.plugins.barcodescanner/src/android/LibraryProject/src/com/google/zxing/client/result/AddressBookDoCoMoResultParser.java delete mode 100644 mobile/cordova/plugins/com.phonegap.plugins.barcodescanner/src/android/LibraryProject/src/com/google/zxing/client/result/AddressBookParsedResult.java delete mode 100644 mobile/cordova/plugins/com.phonegap.plugins.barcodescanner/src/android/LibraryProject/src/com/google/zxing/client/result/BizcardResultParser.java delete mode 100644 mobile/cordova/plugins/com.phonegap.plugins.barcodescanner/src/android/LibraryProject/src/com/google/zxing/client/result/BookmarkDoCoMoResultParser.java delete mode 100644 mobile/cordova/plugins/com.phonegap.plugins.barcodescanner/src/android/LibraryProject/src/com/google/zxing/client/result/CalendarParsedResult.java delete mode 100644 mobile/cordova/plugins/com.phonegap.plugins.barcodescanner/src/android/LibraryProject/src/com/google/zxing/client/result/EmailAddressParsedResult.java delete mode 100644 mobile/cordova/plugins/com.phonegap.plugins.barcodescanner/src/android/LibraryProject/src/com/google/zxing/client/result/EmailAddressResultParser.java delete mode 100644 mobile/cordova/plugins/com.phonegap.plugins.barcodescanner/src/android/LibraryProject/src/com/google/zxing/client/result/EmailDoCoMoResultParser.java delete mode 100644 mobile/cordova/plugins/com.phonegap.plugins.barcodescanner/src/android/LibraryProject/src/com/google/zxing/client/result/ExpandedProductParsedResult.java delete mode 100644 mobile/cordova/plugins/com.phonegap.plugins.barcodescanner/src/android/LibraryProject/src/com/google/zxing/client/result/ExpandedProductResultParser.java delete mode 100644 mobile/cordova/plugins/com.phonegap.plugins.barcodescanner/src/android/LibraryProject/src/com/google/zxing/client/result/GeoParsedResult.java delete mode 100644 mobile/cordova/plugins/com.phonegap.plugins.barcodescanner/src/android/LibraryProject/src/com/google/zxing/client/result/GeoResultParser.java delete mode 100644 mobile/cordova/plugins/com.phonegap.plugins.barcodescanner/src/android/LibraryProject/src/com/google/zxing/client/result/ISBNParsedResult.java delete mode 100644 mobile/cordova/plugins/com.phonegap.plugins.barcodescanner/src/android/LibraryProject/src/com/google/zxing/client/result/ISBNResultParser.java delete mode 100644 mobile/cordova/plugins/com.phonegap.plugins.barcodescanner/src/android/LibraryProject/src/com/google/zxing/client/result/ParsedResult.java delete mode 100644 mobile/cordova/plugins/com.phonegap.plugins.barcodescanner/src/android/LibraryProject/src/com/google/zxing/client/result/ParsedResultType.java delete mode 100644 mobile/cordova/plugins/com.phonegap.plugins.barcodescanner/src/android/LibraryProject/src/com/google/zxing/client/result/ProductParsedResult.java delete mode 100644 mobile/cordova/plugins/com.phonegap.plugins.barcodescanner/src/android/LibraryProject/src/com/google/zxing/client/result/ProductResultParser.java delete mode 100644 mobile/cordova/plugins/com.phonegap.plugins.barcodescanner/src/android/LibraryProject/src/com/google/zxing/client/result/ResultParser.java delete mode 100644 mobile/cordova/plugins/com.phonegap.plugins.barcodescanner/src/android/LibraryProject/src/com/google/zxing/client/result/SMSMMSResultParser.java delete mode 100644 mobile/cordova/plugins/com.phonegap.plugins.barcodescanner/src/android/LibraryProject/src/com/google/zxing/client/result/SMSParsedResult.java delete mode 100644 mobile/cordova/plugins/com.phonegap.plugins.barcodescanner/src/android/LibraryProject/src/com/google/zxing/client/result/SMSTOMMSTOResultParser.java delete mode 100644 mobile/cordova/plugins/com.phonegap.plugins.barcodescanner/src/android/LibraryProject/src/com/google/zxing/client/result/SMTPResultParser.java delete mode 100644 mobile/cordova/plugins/com.phonegap.plugins.barcodescanner/src/android/LibraryProject/src/com/google/zxing/client/result/TelParsedResult.java delete mode 100644 mobile/cordova/plugins/com.phonegap.plugins.barcodescanner/src/android/LibraryProject/src/com/google/zxing/client/result/TelResultParser.java delete mode 100644 mobile/cordova/plugins/com.phonegap.plugins.barcodescanner/src/android/LibraryProject/src/com/google/zxing/client/result/TextParsedResult.java delete mode 100644 mobile/cordova/plugins/com.phonegap.plugins.barcodescanner/src/android/LibraryProject/src/com/google/zxing/client/result/URIParsedResult.java delete mode 100644 mobile/cordova/plugins/com.phonegap.plugins.barcodescanner/src/android/LibraryProject/src/com/google/zxing/client/result/URIResultParser.java delete mode 100644 mobile/cordova/plugins/com.phonegap.plugins.barcodescanner/src/android/LibraryProject/src/com/google/zxing/client/result/URLTOResultParser.java delete mode 100644 mobile/cordova/plugins/com.phonegap.plugins.barcodescanner/src/android/LibraryProject/src/com/google/zxing/client/result/VCardResultParser.java delete mode 100644 mobile/cordova/plugins/com.phonegap.plugins.barcodescanner/src/android/LibraryProject/src/com/google/zxing/client/result/VEventResultParser.java delete mode 100644 mobile/cordova/plugins/com.phonegap.plugins.barcodescanner/src/android/LibraryProject/src/com/google/zxing/client/result/WifiParsedResult.java delete mode 100644 mobile/cordova/plugins/com.phonegap.plugins.barcodescanner/src/android/LibraryProject/src/com/google/zxing/client/result/WifiResultParser.java delete mode 100644 mobile/cordova/plugins/com.phonegap.plugins.barcodescanner/src/android/LibraryProject/src/com/google/zxing/common/BitArray.java delete mode 100644 mobile/cordova/plugins/com.phonegap.plugins.barcodescanner/src/android/LibraryProject/src/com/google/zxing/common/BitMatrix.java delete mode 100644 mobile/cordova/plugins/com.phonegap.plugins.barcodescanner/src/android/LibraryProject/src/com/google/zxing/common/BitSource.java delete mode 100644 mobile/cordova/plugins/com.phonegap.plugins.barcodescanner/src/android/LibraryProject/src/com/google/zxing/common/CharacterSetECI.java delete mode 100644 mobile/cordova/plugins/com.phonegap.plugins.barcodescanner/src/android/LibraryProject/src/com/google/zxing/common/DecoderResult.java delete mode 100644 mobile/cordova/plugins/com.phonegap.plugins.barcodescanner/src/android/LibraryProject/src/com/google/zxing/common/DefaultGridSampler.java delete mode 100644 mobile/cordova/plugins/com.phonegap.plugins.barcodescanner/src/android/LibraryProject/src/com/google/zxing/common/DetectorResult.java delete mode 100644 mobile/cordova/plugins/com.phonegap.plugins.barcodescanner/src/android/LibraryProject/src/com/google/zxing/common/GlobalHistogramBinarizer.java delete mode 100644 mobile/cordova/plugins/com.phonegap.plugins.barcodescanner/src/android/LibraryProject/src/com/google/zxing/common/GridSampler.java delete mode 100644 mobile/cordova/plugins/com.phonegap.plugins.barcodescanner/src/android/LibraryProject/src/com/google/zxing/common/HybridBinarizer.java delete mode 100644 mobile/cordova/plugins/com.phonegap.plugins.barcodescanner/src/android/LibraryProject/src/com/google/zxing/common/PerspectiveTransform.java delete mode 100644 mobile/cordova/plugins/com.phonegap.plugins.barcodescanner/src/android/LibraryProject/src/com/google/zxing/common/StringUtils.java delete mode 100644 mobile/cordova/plugins/com.phonegap.plugins.barcodescanner/src/android/LibraryProject/src/com/google/zxing/common/detector/MathUtils.java delete mode 100644 mobile/cordova/plugins/com.phonegap.plugins.barcodescanner/src/android/LibraryProject/src/com/google/zxing/common/detector/MonochromeRectangleDetector.java delete mode 100644 mobile/cordova/plugins/com.phonegap.plugins.barcodescanner/src/android/LibraryProject/src/com/google/zxing/common/detector/WhiteRectangleDetector.java delete mode 100644 mobile/cordova/plugins/com.phonegap.plugins.barcodescanner/src/android/LibraryProject/src/com/google/zxing/common/reedsolomon/GenericGF.java delete mode 100644 mobile/cordova/plugins/com.phonegap.plugins.barcodescanner/src/android/LibraryProject/src/com/google/zxing/common/reedsolomon/GenericGFPoly.java delete mode 100644 mobile/cordova/plugins/com.phonegap.plugins.barcodescanner/src/android/LibraryProject/src/com/google/zxing/common/reedsolomon/ReedSolomonDecoder.java delete mode 100644 mobile/cordova/plugins/com.phonegap.plugins.barcodescanner/src/android/LibraryProject/src/com/google/zxing/common/reedsolomon/ReedSolomonEncoder.java delete mode 100644 mobile/cordova/plugins/com.phonegap.plugins.barcodescanner/src/android/LibraryProject/src/com/google/zxing/common/reedsolomon/ReedSolomonException.java delete mode 100644 mobile/cordova/plugins/com.phonegap.plugins.barcodescanner/src/android/LibraryProject/src/com/google/zxing/datamatrix/DataMatrixReader.java delete mode 100644 mobile/cordova/plugins/com.phonegap.plugins.barcodescanner/src/android/LibraryProject/src/com/google/zxing/datamatrix/decoder/BitMatrixParser.java delete mode 100644 mobile/cordova/plugins/com.phonegap.plugins.barcodescanner/src/android/LibraryProject/src/com/google/zxing/datamatrix/decoder/DataBlock.java delete mode 100644 mobile/cordova/plugins/com.phonegap.plugins.barcodescanner/src/android/LibraryProject/src/com/google/zxing/datamatrix/decoder/DecodedBitStreamParser.java delete mode 100644 mobile/cordova/plugins/com.phonegap.plugins.barcodescanner/src/android/LibraryProject/src/com/google/zxing/datamatrix/decoder/Decoder.java delete mode 100644 mobile/cordova/plugins/com.phonegap.plugins.barcodescanner/src/android/LibraryProject/src/com/google/zxing/datamatrix/decoder/Version.java delete mode 100644 mobile/cordova/plugins/com.phonegap.plugins.barcodescanner/src/android/LibraryProject/src/com/google/zxing/datamatrix/detector/Detector.java delete mode 100644 mobile/cordova/plugins/com.phonegap.plugins.barcodescanner/src/android/LibraryProject/src/com/google/zxing/maxicode/MaxiCodeReader.java delete mode 100644 mobile/cordova/plugins/com.phonegap.plugins.barcodescanner/src/android/LibraryProject/src/com/google/zxing/maxicode/decoder/BitMatrixParser.java delete mode 100644 mobile/cordova/plugins/com.phonegap.plugins.barcodescanner/src/android/LibraryProject/src/com/google/zxing/maxicode/decoder/DecodedBitStreamParser.java delete mode 100644 mobile/cordova/plugins/com.phonegap.plugins.barcodescanner/src/android/LibraryProject/src/com/google/zxing/maxicode/decoder/Decoder.java delete mode 100644 mobile/cordova/plugins/com.phonegap.plugins.barcodescanner/src/android/LibraryProject/src/com/google/zxing/multi/ByQuadrantReader.java delete mode 100644 mobile/cordova/plugins/com.phonegap.plugins.barcodescanner/src/android/LibraryProject/src/com/google/zxing/multi/GenericMultipleBarcodeReader.java delete mode 100644 mobile/cordova/plugins/com.phonegap.plugins.barcodescanner/src/android/LibraryProject/src/com/google/zxing/multi/MultipleBarcodeReader.java delete mode 100644 mobile/cordova/plugins/com.phonegap.plugins.barcodescanner/src/android/LibraryProject/src/com/google/zxing/multi/qrcode/QRCodeMultiReader.java delete mode 100644 mobile/cordova/plugins/com.phonegap.plugins.barcodescanner/src/android/LibraryProject/src/com/google/zxing/multi/qrcode/detector/MultiDetector.java delete mode 100644 mobile/cordova/plugins/com.phonegap.plugins.barcodescanner/src/android/LibraryProject/src/com/google/zxing/multi/qrcode/detector/MultiFinderPatternFinder.java delete mode 100644 mobile/cordova/plugins/com.phonegap.plugins.barcodescanner/src/android/LibraryProject/src/com/google/zxing/oned/CodaBarReader.java delete mode 100644 mobile/cordova/plugins/com.phonegap.plugins.barcodescanner/src/android/LibraryProject/src/com/google/zxing/oned/CodaBarWriter.java delete mode 100644 mobile/cordova/plugins/com.phonegap.plugins.barcodescanner/src/android/LibraryProject/src/com/google/zxing/oned/Code128Reader.java delete mode 100644 mobile/cordova/plugins/com.phonegap.plugins.barcodescanner/src/android/LibraryProject/src/com/google/zxing/oned/Code128Writer.java delete mode 100644 mobile/cordova/plugins/com.phonegap.plugins.barcodescanner/src/android/LibraryProject/src/com/google/zxing/oned/Code39Reader.java delete mode 100644 mobile/cordova/plugins/com.phonegap.plugins.barcodescanner/src/android/LibraryProject/src/com/google/zxing/oned/Code39Writer.java delete mode 100644 mobile/cordova/plugins/com.phonegap.plugins.barcodescanner/src/android/LibraryProject/src/com/google/zxing/oned/Code93Reader.java delete mode 100644 mobile/cordova/plugins/com.phonegap.plugins.barcodescanner/src/android/LibraryProject/src/com/google/zxing/oned/EAN13Reader.java delete mode 100644 mobile/cordova/plugins/com.phonegap.plugins.barcodescanner/src/android/LibraryProject/src/com/google/zxing/oned/EAN13Writer.java delete mode 100644 mobile/cordova/plugins/com.phonegap.plugins.barcodescanner/src/android/LibraryProject/src/com/google/zxing/oned/EAN8Reader.java delete mode 100644 mobile/cordova/plugins/com.phonegap.plugins.barcodescanner/src/android/LibraryProject/src/com/google/zxing/oned/EAN8Writer.java delete mode 100644 mobile/cordova/plugins/com.phonegap.plugins.barcodescanner/src/android/LibraryProject/src/com/google/zxing/oned/EANManufacturerOrgSupport.java delete mode 100644 mobile/cordova/plugins/com.phonegap.plugins.barcodescanner/src/android/LibraryProject/src/com/google/zxing/oned/ITFReader.java delete mode 100644 mobile/cordova/plugins/com.phonegap.plugins.barcodescanner/src/android/LibraryProject/src/com/google/zxing/oned/ITFWriter.java delete mode 100644 mobile/cordova/plugins/com.phonegap.plugins.barcodescanner/src/android/LibraryProject/src/com/google/zxing/oned/MultiFormatOneDReader.java delete mode 100644 mobile/cordova/plugins/com.phonegap.plugins.barcodescanner/src/android/LibraryProject/src/com/google/zxing/oned/MultiFormatUPCEANReader.java delete mode 100644 mobile/cordova/plugins/com.phonegap.plugins.barcodescanner/src/android/LibraryProject/src/com/google/zxing/oned/OneDReader.java delete mode 100644 mobile/cordova/plugins/com.phonegap.plugins.barcodescanner/src/android/LibraryProject/src/com/google/zxing/oned/OneDimensionalCodeWriter.java delete mode 100644 mobile/cordova/plugins/com.phonegap.plugins.barcodescanner/src/android/LibraryProject/src/com/google/zxing/oned/UPCAReader.java delete mode 100644 mobile/cordova/plugins/com.phonegap.plugins.barcodescanner/src/android/LibraryProject/src/com/google/zxing/oned/UPCAWriter.java delete mode 100644 mobile/cordova/plugins/com.phonegap.plugins.barcodescanner/src/android/LibraryProject/src/com/google/zxing/oned/UPCEANExtension2Support.java delete mode 100644 mobile/cordova/plugins/com.phonegap.plugins.barcodescanner/src/android/LibraryProject/src/com/google/zxing/oned/UPCEANExtension5Support.java delete mode 100644 mobile/cordova/plugins/com.phonegap.plugins.barcodescanner/src/android/LibraryProject/src/com/google/zxing/oned/UPCEANExtensionSupport.java delete mode 100644 mobile/cordova/plugins/com.phonegap.plugins.barcodescanner/src/android/LibraryProject/src/com/google/zxing/oned/UPCEANReader.java delete mode 100644 mobile/cordova/plugins/com.phonegap.plugins.barcodescanner/src/android/LibraryProject/src/com/google/zxing/oned/UPCEANWriter.java delete mode 100644 mobile/cordova/plugins/com.phonegap.plugins.barcodescanner/src/android/LibraryProject/src/com/google/zxing/oned/UPCEReader.java delete mode 100644 mobile/cordova/plugins/com.phonegap.plugins.barcodescanner/src/android/LibraryProject/src/com/google/zxing/oned/rss/AbstractRSSReader.java delete mode 100644 mobile/cordova/plugins/com.phonegap.plugins.barcodescanner/src/android/LibraryProject/src/com/google/zxing/oned/rss/DataCharacter.java delete mode 100644 mobile/cordova/plugins/com.phonegap.plugins.barcodescanner/src/android/LibraryProject/src/com/google/zxing/oned/rss/FinderPattern.java delete mode 100644 mobile/cordova/plugins/com.phonegap.plugins.barcodescanner/src/android/LibraryProject/src/com/google/zxing/oned/rss/Pair.java delete mode 100644 mobile/cordova/plugins/com.phonegap.plugins.barcodescanner/src/android/LibraryProject/src/com/google/zxing/oned/rss/RSS14Reader.java delete mode 100644 mobile/cordova/plugins/com.phonegap.plugins.barcodescanner/src/android/LibraryProject/src/com/google/zxing/oned/rss/RSSUtils.java delete mode 100644 mobile/cordova/plugins/com.phonegap.plugins.barcodescanner/src/android/LibraryProject/src/com/google/zxing/oned/rss/expanded/BitArrayBuilder.java delete mode 100644 mobile/cordova/plugins/com.phonegap.plugins.barcodescanner/src/android/LibraryProject/src/com/google/zxing/oned/rss/expanded/ExpandedPair.java delete mode 100644 mobile/cordova/plugins/com.phonegap.plugins.barcodescanner/src/android/LibraryProject/src/com/google/zxing/oned/rss/expanded/RSSExpandedReader.java delete mode 100644 mobile/cordova/plugins/com.phonegap.plugins.barcodescanner/src/android/LibraryProject/src/com/google/zxing/oned/rss/expanded/decoders/AI013103decoder.java delete mode 100644 mobile/cordova/plugins/com.phonegap.plugins.barcodescanner/src/android/LibraryProject/src/com/google/zxing/oned/rss/expanded/decoders/AI01320xDecoder.java delete mode 100644 mobile/cordova/plugins/com.phonegap.plugins.barcodescanner/src/android/LibraryProject/src/com/google/zxing/oned/rss/expanded/decoders/AI01392xDecoder.java delete mode 100644 mobile/cordova/plugins/com.phonegap.plugins.barcodescanner/src/android/LibraryProject/src/com/google/zxing/oned/rss/expanded/decoders/AI01393xDecoder.java delete mode 100644 mobile/cordova/plugins/com.phonegap.plugins.barcodescanner/src/android/LibraryProject/src/com/google/zxing/oned/rss/expanded/decoders/AI013x0x1xDecoder.java delete mode 100644 mobile/cordova/plugins/com.phonegap.plugins.barcodescanner/src/android/LibraryProject/src/com/google/zxing/oned/rss/expanded/decoders/AI013x0xDecoder.java delete mode 100644 mobile/cordova/plugins/com.phonegap.plugins.barcodescanner/src/android/LibraryProject/src/com/google/zxing/oned/rss/expanded/decoders/AI01AndOtherAIs.java delete mode 100644 mobile/cordova/plugins/com.phonegap.plugins.barcodescanner/src/android/LibraryProject/src/com/google/zxing/oned/rss/expanded/decoders/AI01decoder.java delete mode 100644 mobile/cordova/plugins/com.phonegap.plugins.barcodescanner/src/android/LibraryProject/src/com/google/zxing/oned/rss/expanded/decoders/AI01weightDecoder.java delete mode 100644 mobile/cordova/plugins/com.phonegap.plugins.barcodescanner/src/android/LibraryProject/src/com/google/zxing/oned/rss/expanded/decoders/AbstractExpandedDecoder.java delete mode 100644 mobile/cordova/plugins/com.phonegap.plugins.barcodescanner/src/android/LibraryProject/src/com/google/zxing/oned/rss/expanded/decoders/AnyAIDecoder.java delete mode 100644 mobile/cordova/plugins/com.phonegap.plugins.barcodescanner/src/android/LibraryProject/src/com/google/zxing/oned/rss/expanded/decoders/BlockParsedResult.java delete mode 100644 mobile/cordova/plugins/com.phonegap.plugins.barcodescanner/src/android/LibraryProject/src/com/google/zxing/oned/rss/expanded/decoders/CurrentParsingState.java delete mode 100644 mobile/cordova/plugins/com.phonegap.plugins.barcodescanner/src/android/LibraryProject/src/com/google/zxing/oned/rss/expanded/decoders/DecodedChar.java delete mode 100644 mobile/cordova/plugins/com.phonegap.plugins.barcodescanner/src/android/LibraryProject/src/com/google/zxing/oned/rss/expanded/decoders/DecodedInformation.java delete mode 100644 mobile/cordova/plugins/com.phonegap.plugins.barcodescanner/src/android/LibraryProject/src/com/google/zxing/oned/rss/expanded/decoders/DecodedNumeric.java delete mode 100644 mobile/cordova/plugins/com.phonegap.plugins.barcodescanner/src/android/LibraryProject/src/com/google/zxing/oned/rss/expanded/decoders/DecodedObject.java delete mode 100644 mobile/cordova/plugins/com.phonegap.plugins.barcodescanner/src/android/LibraryProject/src/com/google/zxing/oned/rss/expanded/decoders/FieldParser.java delete mode 100644 mobile/cordova/plugins/com.phonegap.plugins.barcodescanner/src/android/LibraryProject/src/com/google/zxing/oned/rss/expanded/decoders/GeneralAppIdDecoder.java delete mode 100644 mobile/cordova/plugins/com.phonegap.plugins.barcodescanner/src/android/LibraryProject/src/com/google/zxing/pdf417/PDF417Reader.java delete mode 100644 mobile/cordova/plugins/com.phonegap.plugins.barcodescanner/src/android/LibraryProject/src/com/google/zxing/pdf417/decoder/BitMatrixParser.java delete mode 100644 mobile/cordova/plugins/com.phonegap.plugins.barcodescanner/src/android/LibraryProject/src/com/google/zxing/pdf417/decoder/DecodedBitStreamParser.java delete mode 100644 mobile/cordova/plugins/com.phonegap.plugins.barcodescanner/src/android/LibraryProject/src/com/google/zxing/pdf417/decoder/Decoder.java delete mode 100644 mobile/cordova/plugins/com.phonegap.plugins.barcodescanner/src/android/LibraryProject/src/com/google/zxing/pdf417/decoder/ec/ErrorCorrection.java delete mode 100644 mobile/cordova/plugins/com.phonegap.plugins.barcodescanner/src/android/LibraryProject/src/com/google/zxing/pdf417/decoder/ec/ModulusGF.java delete mode 100644 mobile/cordova/plugins/com.phonegap.plugins.barcodescanner/src/android/LibraryProject/src/com/google/zxing/pdf417/decoder/ec/ModulusPoly.java delete mode 100644 mobile/cordova/plugins/com.phonegap.plugins.barcodescanner/src/android/LibraryProject/src/com/google/zxing/pdf417/detector/Detector.java delete mode 100644 mobile/cordova/plugins/com.phonegap.plugins.barcodescanner/src/android/LibraryProject/src/com/google/zxing/pdf417/encoder/BarcodeMatrix.java delete mode 100644 mobile/cordova/plugins/com.phonegap.plugins.barcodescanner/src/android/LibraryProject/src/com/google/zxing/pdf417/encoder/BarcodeRow.java delete mode 100644 mobile/cordova/plugins/com.phonegap.plugins.barcodescanner/src/android/LibraryProject/src/com/google/zxing/pdf417/encoder/Compaction.java delete mode 100644 mobile/cordova/plugins/com.phonegap.plugins.barcodescanner/src/android/LibraryProject/src/com/google/zxing/pdf417/encoder/Dimensions.java delete mode 100644 mobile/cordova/plugins/com.phonegap.plugins.barcodescanner/src/android/LibraryProject/src/com/google/zxing/pdf417/encoder/PDF417.java delete mode 100644 mobile/cordova/plugins/com.phonegap.plugins.barcodescanner/src/android/LibraryProject/src/com/google/zxing/pdf417/encoder/PDF417ErrorCorrection.java delete mode 100644 mobile/cordova/plugins/com.phonegap.plugins.barcodescanner/src/android/LibraryProject/src/com/google/zxing/pdf417/encoder/PDF417HighLevelEncoder.java delete mode 100644 mobile/cordova/plugins/com.phonegap.plugins.barcodescanner/src/android/LibraryProject/src/com/google/zxing/pdf417/encoder/PDF417Writer.java delete mode 100644 mobile/cordova/plugins/com.phonegap.plugins.barcodescanner/src/android/LibraryProject/src/com/google/zxing/qrcode/QRCodeReader.java delete mode 100644 mobile/cordova/plugins/com.phonegap.plugins.barcodescanner/src/android/LibraryProject/src/com/google/zxing/qrcode/QRCodeWriter.java delete mode 100644 mobile/cordova/plugins/com.phonegap.plugins.barcodescanner/src/android/LibraryProject/src/com/google/zxing/qrcode/decoder/BitMatrixParser.java delete mode 100644 mobile/cordova/plugins/com.phonegap.plugins.barcodescanner/src/android/LibraryProject/src/com/google/zxing/qrcode/decoder/DataBlock.java delete mode 100644 mobile/cordova/plugins/com.phonegap.plugins.barcodescanner/src/android/LibraryProject/src/com/google/zxing/qrcode/decoder/DataMask.java delete mode 100644 mobile/cordova/plugins/com.phonegap.plugins.barcodescanner/src/android/LibraryProject/src/com/google/zxing/qrcode/decoder/DecodedBitStreamParser.java delete mode 100644 mobile/cordova/plugins/com.phonegap.plugins.barcodescanner/src/android/LibraryProject/src/com/google/zxing/qrcode/decoder/Decoder.java delete mode 100644 mobile/cordova/plugins/com.phonegap.plugins.barcodescanner/src/android/LibraryProject/src/com/google/zxing/qrcode/decoder/ErrorCorrectionLevel.java delete mode 100644 mobile/cordova/plugins/com.phonegap.plugins.barcodescanner/src/android/LibraryProject/src/com/google/zxing/qrcode/decoder/FormatInformation.java delete mode 100644 mobile/cordova/plugins/com.phonegap.plugins.barcodescanner/src/android/LibraryProject/src/com/google/zxing/qrcode/decoder/Mode.java delete mode 100644 mobile/cordova/plugins/com.phonegap.plugins.barcodescanner/src/android/LibraryProject/src/com/google/zxing/qrcode/decoder/Version.java delete mode 100644 mobile/cordova/plugins/com.phonegap.plugins.barcodescanner/src/android/LibraryProject/src/com/google/zxing/qrcode/detector/AlignmentPattern.java delete mode 100644 mobile/cordova/plugins/com.phonegap.plugins.barcodescanner/src/android/LibraryProject/src/com/google/zxing/qrcode/detector/AlignmentPatternFinder.java delete mode 100644 mobile/cordova/plugins/com.phonegap.plugins.barcodescanner/src/android/LibraryProject/src/com/google/zxing/qrcode/detector/Detector.java delete mode 100644 mobile/cordova/plugins/com.phonegap.plugins.barcodescanner/src/android/LibraryProject/src/com/google/zxing/qrcode/detector/FinderPattern.java delete mode 100644 mobile/cordova/plugins/com.phonegap.plugins.barcodescanner/src/android/LibraryProject/src/com/google/zxing/qrcode/detector/FinderPatternFinder.java delete mode 100644 mobile/cordova/plugins/com.phonegap.plugins.barcodescanner/src/android/LibraryProject/src/com/google/zxing/qrcode/detector/FinderPatternInfo.java delete mode 100644 mobile/cordova/plugins/com.phonegap.plugins.barcodescanner/src/android/LibraryProject/src/com/google/zxing/qrcode/encoder/BlockPair.java delete mode 100644 mobile/cordova/plugins/com.phonegap.plugins.barcodescanner/src/android/LibraryProject/src/com/google/zxing/qrcode/encoder/ByteMatrix.java delete mode 100644 mobile/cordova/plugins/com.phonegap.plugins.barcodescanner/src/android/LibraryProject/src/com/google/zxing/qrcode/encoder/Encoder.java delete mode 100644 mobile/cordova/plugins/com.phonegap.plugins.barcodescanner/src/android/LibraryProject/src/com/google/zxing/qrcode/encoder/MaskUtil.java delete mode 100644 mobile/cordova/plugins/com.phonegap.plugins.barcodescanner/src/android/LibraryProject/src/com/google/zxing/qrcode/encoder/MatrixUtil.java delete mode 100644 mobile/cordova/plugins/com.phonegap.plugins.barcodescanner/src/android/LibraryProject/src/com/google/zxing/qrcode/encoder/QRCode.java delete mode 100644 mobile/cordova/plugins/com.phonegap.plugins.barcodescanner/src/android/README.md delete mode 100644 mobile/cordova/plugins/com.phonegap.plugins.barcodescanner/src/android/com.google.zxing.client.android.captureactivity.jar delete mode 100644 mobile/cordova/plugins/com.phonegap.plugins.barcodescanner/src/android/com/phonegap/plugins/barcodescanner/BarcodeScanner.java delete mode 100644 mobile/cordova/plugins/com.phonegap.plugins.barcodescanner/src/ios/CDVBarcodeScanner.mm delete mode 100644 mobile/cordova/plugins/com.phonegap.plugins.barcodescanner/src/ios/scannerOverlay.xib delete mode 100644 mobile/cordova/plugins/com.phonegap.plugins.barcodescanner/src/ios/zxing-all-in-one.cpp delete mode 100644 mobile/cordova/plugins/com.phonegap.plugins.barcodescanner/src/ios/zxing-all-in-one.h delete mode 100644 mobile/cordova/plugins/com.phonegap.plugins.barcodescanner/www/barcodescanner.js delete mode 100644 mobile/cordova/plugins/de.appplant.cordova.plugin.email-composer/.fetch.json delete mode 100644 mobile/cordova/plugins/de.appplant.cordova.plugin.email-composer/CHANGELOG.md delete mode 100644 mobile/cordova/plugins/de.appplant.cordova.plugin.email-composer/LICENSE delete mode 100644 mobile/cordova/plugins/de.appplant.cordova.plugin.email-composer/README.md delete mode 100644 mobile/cordova/plugins/de.appplant.cordova.plugin.email-composer/plugin.xml delete mode 100644 mobile/cordova/plugins/de.appplant.cordova.plugin.email-composer/src/android/AttachmentProvider.java delete mode 100644 mobile/cordova/plugins/de.appplant.cordova.plugin.email-composer/src/android/EmailComposer.java delete mode 100644 mobile/cordova/plugins/de.appplant.cordova.plugin.email-composer/src/ios/APPEmailComposer.h delete mode 100644 mobile/cordova/plugins/de.appplant.cordova.plugin.email-composer/src/ios/APPEmailComposer.m delete mode 100644 mobile/cordova/plugins/de.appplant.cordova.plugin.email-composer/src/wp8/EmailComposer.cs delete mode 100644 mobile/cordova/plugins/de.appplant.cordova.plugin.email-composer/src/wp8/Options.cs delete mode 100644 mobile/cordova/plugins/de.appplant.cordova.plugin.email-composer/www/email_composer.js delete mode 100644 mobile/cordova/plugins/org.apache.cordova.splashscreen/.fetch.json delete mode 100644 mobile/cordova/plugins/org.apache.cordova.splashscreen/LICENSE delete mode 100644 mobile/cordova/plugins/org.apache.cordova.splashscreen/NOTICE delete mode 100644 mobile/cordova/plugins/org.apache.cordova.splashscreen/README.md delete mode 100644 mobile/cordova/plugins/org.apache.cordova.splashscreen/RELEASENOTES.md delete mode 100644 mobile/cordova/plugins/org.apache.cordova.splashscreen/doc/index.md delete mode 100644 mobile/cordova/plugins/org.apache.cordova.splashscreen/plugin.xml delete mode 100644 mobile/cordova/plugins/org.apache.cordova.splashscreen/src/android/SplashScreen.java delete mode 100644 mobile/cordova/plugins/org.apache.cordova.splashscreen/src/blackberry10/index.js delete mode 100644 mobile/cordova/plugins/org.apache.cordova.splashscreen/src/ios/CDVSplashScreen.h delete mode 100644 mobile/cordova/plugins/org.apache.cordova.splashscreen/src/ios/CDVSplashScreen.m delete mode 100644 mobile/cordova/plugins/org.apache.cordova.splashscreen/src/tizen/SplashScreenProxy.js delete mode 100644 mobile/cordova/plugins/org.apache.cordova.splashscreen/src/ubuntu/splashscreen.cpp delete mode 100644 mobile/cordova/plugins/org.apache.cordova.splashscreen/src/ubuntu/splashscreen.h delete mode 100644 mobile/cordova/plugins/org.apache.cordova.splashscreen/src/wp/SplashScreen.cs delete mode 100644 mobile/cordova/plugins/org.apache.cordova.splashscreen/www/splashscreen.js delete mode 100644 mobile/cordova/plugins/org.apache.cordova.splashscreen/www/windows8/SplashScreenProxy.js delete mode 100644 mobile/cordova/plugins/org.apache.cordova.vibration/.fetch.json delete mode 100644 mobile/cordova/plugins/org.apache.cordova.vibration/CONTRIBUTING.md delete mode 100644 mobile/cordova/plugins/org.apache.cordova.vibration/LICENSE delete mode 100644 mobile/cordova/plugins/org.apache.cordova.vibration/NOTICE delete mode 100644 mobile/cordova/plugins/org.apache.cordova.vibration/README.md delete mode 100644 mobile/cordova/plugins/org.apache.cordova.vibration/RELEASENOTES.md delete mode 100644 mobile/cordova/plugins/org.apache.cordova.vibration/doc/de/index.md delete mode 100644 mobile/cordova/plugins/org.apache.cordova.vibration/doc/es/index.md delete mode 100644 mobile/cordova/plugins/org.apache.cordova.vibration/doc/fr/index.md delete mode 100644 mobile/cordova/plugins/org.apache.cordova.vibration/doc/index.md delete mode 100644 mobile/cordova/plugins/org.apache.cordova.vibration/doc/it/index.md delete mode 100644 mobile/cordova/plugins/org.apache.cordova.vibration/doc/ja/index.md delete mode 100644 mobile/cordova/plugins/org.apache.cordova.vibration/doc/ko/index.md delete mode 100644 mobile/cordova/plugins/org.apache.cordova.vibration/doc/pl/index.md delete mode 100644 mobile/cordova/plugins/org.apache.cordova.vibration/doc/ru/index.md delete mode 100644 mobile/cordova/plugins/org.apache.cordova.vibration/doc/zh/index.md delete mode 100644 mobile/cordova/plugins/org.apache.cordova.vibration/plugin.xml delete mode 100644 mobile/cordova/plugins/org.apache.cordova.vibration/src/android/Vibration.java delete mode 100644 mobile/cordova/plugins/org.apache.cordova.vibration/src/blackberry10/index.js delete mode 100644 mobile/cordova/plugins/org.apache.cordova.vibration/src/blackberry10/native/.cproject delete mode 100644 mobile/cordova/plugins/org.apache.cordova.vibration/src/blackberry10/native/device/libVibration.so delete mode 100644 mobile/cordova/plugins/org.apache.cordova.vibration/src/blackberry10/native/public/plugin.cpp delete mode 100644 mobile/cordova/plugins/org.apache.cordova.vibration/src/blackberry10/native/public/plugin.h delete mode 100644 mobile/cordova/plugins/org.apache.cordova.vibration/src/blackberry10/native/public/tokenizer.cpp delete mode 100644 mobile/cordova/plugins/org.apache.cordova.vibration/src/blackberry10/native/public/tokenizer.h delete mode 100644 mobile/cordova/plugins/org.apache.cordova.vibration/src/blackberry10/native/simulator/libVibration.so delete mode 100644 mobile/cordova/plugins/org.apache.cordova.vibration/src/blackberry10/native/src/vibration_js.cpp delete mode 100644 mobile/cordova/plugins/org.apache.cordova.vibration/src/blackberry10/native/src/vibration_js.hpp delete mode 100644 mobile/cordova/plugins/org.apache.cordova.vibration/src/firefoxos/VibrationProxy.js delete mode 100644 mobile/cordova/plugins/org.apache.cordova.vibration/src/ios/CDVVibration.h delete mode 100644 mobile/cordova/plugins/org.apache.cordova.vibration/src/ios/CDVVibration.m delete mode 100644 mobile/cordova/plugins/org.apache.cordova.vibration/src/tizen/VibrationProxy.js delete mode 100644 mobile/cordova/plugins/org.apache.cordova.vibration/src/ubuntu/vibration.cpp delete mode 100644 mobile/cordova/plugins/org.apache.cordova.vibration/src/ubuntu/vibration.h delete mode 100644 mobile/cordova/plugins/org.apache.cordova.vibration/src/wp/Vibration.cs delete mode 100644 mobile/cordova/plugins/org.apache.cordova.vibration/www/blackberry10/vibrate.js delete mode 100644 mobile/cordova/plugins/org.apache.cordova.vibration/www/vibration.js delete mode 100755 mobile/cordova/run delete mode 100644 mobile/cordova/run.bat delete mode 100755 mobile/cordova/version delete mode 100644 mobile/cordova/version.bat diff --git a/mobile/CordovaLib/AndroidManifest.xml b/mobile/CordovaLib/AndroidManifest.xml deleted file mode 100755 index 15a970228ef..00000000000 --- a/mobile/CordovaLib/AndroidManifest.xml +++ /dev/null @@ -1,23 +0,0 @@ - - - - - diff --git a/mobile/CordovaLib/build.xml b/mobile/CordovaLib/build.xml deleted file mode 100644 index 18829c42ed3..00000000000 --- a/mobile/CordovaLib/build.xml +++ /dev/null @@ -1,92 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/mobile/CordovaLib/local.properties b/mobile/CordovaLib/local.properties deleted file mode 100644 index 2ca33ceda96..00000000000 --- a/mobile/CordovaLib/local.properties +++ /dev/null @@ -1,10 +0,0 @@ -# This file is automatically generated by Android Tools. -# Do not modify this file -- YOUR CHANGES WILL BE ERASED! -# -# This file must *NOT* be checked into Version Control Systems, -# as it contains information specific to your local configuration. - -# location of the SDK. This is only used by Ant -# For customization when using a Version Control System, please read the -# header note. -sdk.dir=/Users/yemeljardi/Documents/sdk diff --git a/mobile/CordovaLib/proguard-project.txt b/mobile/CordovaLib/proguard-project.txt deleted file mode 100644 index f2fe1559a21..00000000000 --- a/mobile/CordovaLib/proguard-project.txt +++ /dev/null @@ -1,20 +0,0 @@ -# To enable ProGuard in your project, edit project.properties -# to define the proguard.config property as described in that file. -# -# Add project specific ProGuard rules here. -# By default, the flags in this file are appended to flags specified -# in ${sdk.dir}/tools/proguard/proguard-android.txt -# You can edit the include path and order by changing the ProGuard -# include property in project.properties. -# -# For more details, see -# http://developer.android.com/guide/developing/tools/proguard.html - -# Add any project specific keep options here: - -# If your project uses WebView with JS, uncomment the following -# and specify the fully qualified class name to the JavaScript interface -# class: -#-keepclassmembers class fqcn.of.javascript.interface.for.webview { -# public *; -#} diff --git a/mobile/CordovaLib/project.properties b/mobile/CordovaLib/project.properties deleted file mode 100644 index 5770fb3623c..00000000000 --- a/mobile/CordovaLib/project.properties +++ /dev/null @@ -1,17 +0,0 @@ -# This file is automatically generated by Android Tools. -# Do not modify this file -- YOUR CHANGES WILL BE ERASED! -# -# This file must be checked in Version Control Systems. -# -# To customize properties used by the Ant build system use, -# "ant.properties", and override values to adapt the script to your -# project structure. - -# Indicates whether an apk should be generated for each density. -split.density=false -# Project target. -target=android-19 -apk-configurations= -renderscript.opt.level=O0 -android.library=true -android.library.reference.1=xwalk_core_library diff --git a/mobile/CordovaLib/src/com/squareup/okhttp/Address.java b/mobile/CordovaLib/src/com/squareup/okhttp/Address.java deleted file mode 100755 index b34bd9128cb..00000000000 --- a/mobile/CordovaLib/src/com/squareup/okhttp/Address.java +++ /dev/null @@ -1,140 +0,0 @@ -/* - * Copyright (C) 2012 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package com.squareup.okhttp; - -import com.squareup.okhttp.internal.Util; -import java.net.Proxy; -import java.net.UnknownHostException; -import java.util.List; -import javax.net.ssl.HostnameVerifier; -import javax.net.ssl.SSLSocketFactory; - -import static com.squareup.okhttp.internal.Util.equal; - -/** - * A specification for a connection to an origin server. For simple connections, - * this is the server's hostname and port. If an explicit proxy is requested (or - * {@link Proxy#NO_PROXY no proxy} is explicitly requested), this also includes - * that proxy information. For secure connections the address also includes the - * SSL socket factory and hostname verifier. - * - *

HTTP requests that share the same {@code Address} may also share the same - * {@link Connection}. - */ -public final class Address { - final Proxy proxy; - final String uriHost; - final int uriPort; - final SSLSocketFactory sslSocketFactory; - final HostnameVerifier hostnameVerifier; - final OkAuthenticator authenticator; - final List transports; - - public Address(String uriHost, int uriPort, SSLSocketFactory sslSocketFactory, - HostnameVerifier hostnameVerifier, OkAuthenticator authenticator, Proxy proxy, - List transports) throws UnknownHostException { - if (uriHost == null) throw new NullPointerException("uriHost == null"); - if (uriPort <= 0) throw new IllegalArgumentException("uriPort <= 0: " + uriPort); - if (authenticator == null) throw new IllegalArgumentException("authenticator == null"); - if (transports == null) throw new IllegalArgumentException("transports == null"); - this.proxy = proxy; - this.uriHost = uriHost; - this.uriPort = uriPort; - this.sslSocketFactory = sslSocketFactory; - this.hostnameVerifier = hostnameVerifier; - this.authenticator = authenticator; - this.transports = Util.immutableList(transports); - } - - /** Returns the hostname of the origin server. */ - public String getUriHost() { - return uriHost; - } - - /** - * Returns the port of the origin server; typically 80 or 443. Unlike - * may {@code getPort()} accessors, this method never returns -1. - */ - public int getUriPort() { - return uriPort; - } - - /** - * Returns the SSL socket factory, or null if this is not an HTTPS - * address. - */ - public SSLSocketFactory getSslSocketFactory() { - return sslSocketFactory; - } - - /** - * Returns the hostname verifier, or null if this is not an HTTPS - * address. - */ - public HostnameVerifier getHostnameVerifier() { - return hostnameVerifier; - } - - - /** - * Returns the client's authenticator. This method never returns null. - */ - public OkAuthenticator getAuthenticator() { - return authenticator; - } - - /** - * Returns the client's transports. This method always returns a non-null list - * that contains "http/1.1", possibly among other transports. - */ - public List getTransports() { - return transports; - } - - /** - * Returns this address's explicitly-specified HTTP proxy, or null to - * delegate to the HTTP client's proxy selector. - */ - public Proxy getProxy() { - return proxy; - } - - @Override public boolean equals(Object other) { - if (other instanceof Address) { - Address that = (Address) other; - return equal(this.proxy, that.proxy) - && this.uriHost.equals(that.uriHost) - && this.uriPort == that.uriPort - && equal(this.sslSocketFactory, that.sslSocketFactory) - && equal(this.hostnameVerifier, that.hostnameVerifier) - && equal(this.authenticator, that.authenticator) - && equal(this.transports, that.transports); - } - return false; - } - - @Override public int hashCode() { - int result = 17; - result = 31 * result + uriHost.hashCode(); - result = 31 * result + uriPort; - result = 31 * result + (sslSocketFactory != null ? sslSocketFactory.hashCode() : 0); - result = 31 * result + (hostnameVerifier != null ? hostnameVerifier.hashCode() : 0); - result = 31 * result + (authenticator != null ? authenticator.hashCode() : 0); - result = 31 * result + (proxy != null ? proxy.hashCode() : 0); - result = 31 * result + transports.hashCode(); - return result; - } -} diff --git a/mobile/CordovaLib/src/com/squareup/okhttp/Connection.java b/mobile/CordovaLib/src/com/squareup/okhttp/Connection.java deleted file mode 100755 index 6bb9cb3a9c1..00000000000 --- a/mobile/CordovaLib/src/com/squareup/okhttp/Connection.java +++ /dev/null @@ -1,335 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package com.squareup.okhttp; - -import com.squareup.okhttp.internal.Platform; -import com.squareup.okhttp.internal.http.HttpAuthenticator; -import com.squareup.okhttp.internal.http.HttpEngine; -import com.squareup.okhttp.internal.http.HttpTransport; -import com.squareup.okhttp.internal.http.RawHeaders; -import com.squareup.okhttp.internal.http.SpdyTransport; -import com.squareup.okhttp.internal.spdy.SpdyConnection; -import java.io.BufferedInputStream; -import java.io.BufferedOutputStream; -import java.io.Closeable; -import java.io.IOException; -import java.io.InputStream; -import java.io.OutputStream; -import java.net.Proxy; -import java.net.Socket; -import java.net.SocketTimeoutException; -import java.net.URL; -import java.util.Arrays; -import javax.net.ssl.SSLSocket; - -import static java.net.HttpURLConnection.HTTP_OK; -import static java.net.HttpURLConnection.HTTP_PROXY_AUTH; - -/** - * Holds the sockets and streams of an HTTP, HTTPS, or HTTPS+SPDY connection, - * which may be used for multiple HTTP request/response exchanges. Connections - * may be direct to the origin server or via a proxy. - * - *

Typically instances of this class are created, connected and exercised - * automatically by the HTTP client. Applications may use this class to monitor - * HTTP connections as members of a {@link ConnectionPool connection pool}. - * - *

Do not confuse this class with the misnamed {@code HttpURLConnection}, - * which isn't so much a connection as a single request/response exchange. - * - *

Modern TLS

- * There are tradeoffs when selecting which options to include when negotiating - * a secure connection to a remote host. Newer TLS options are quite useful: - * - * Unfortunately, older HTTPS servers refuse to connect when such options are - * presented. Rather than avoiding these options entirely, this class allows a - * connection to be attempted with modern options and then retried without them - * should the attempt fail. - */ -public final class Connection implements Closeable { - private static final byte[] NPN_PROTOCOLS = new byte[] { - 6, 's', 'p', 'd', 'y', '/', '3', - 8, 'h', 't', 't', 'p', '/', '1', '.', '1' - }; - private static final byte[] SPDY3 = new byte[] { - 's', 'p', 'd', 'y', '/', '3' - }; - private static final byte[] HTTP_11 = new byte[] { - 'h', 't', 't', 'p', '/', '1', '.', '1' - }; - - private final Route route; - - private Socket socket; - private InputStream in; - private OutputStream out; - private boolean connected = false; - private SpdyConnection spdyConnection; - private int httpMinorVersion = 1; // Assume HTTP/1.1 - private long idleStartTimeNs; - - public Connection(Route route) { - this.route = route; - } - - public void connect(int connectTimeout, int readTimeout, TunnelRequest tunnelRequest) - throws IOException { - if (connected) throw new IllegalStateException("already connected"); - - socket = (route.proxy.type() != Proxy.Type.HTTP) ? new Socket(route.proxy) : new Socket(); - Platform.get().connectSocket(socket, route.inetSocketAddress, connectTimeout); - socket.setSoTimeout(readTimeout); - in = socket.getInputStream(); - out = socket.getOutputStream(); - - if (route.address.sslSocketFactory != null) { - upgradeToTls(tunnelRequest); - } else { - streamWrapper(); - } - connected = true; - } - - /** - * Create an {@code SSLSocket} and perform the TLS handshake and certificate - * validation. - */ - private void upgradeToTls(TunnelRequest tunnelRequest) throws IOException { - Platform platform = Platform.get(); - - // Make an SSL Tunnel on the first message pair of each SSL + proxy connection. - if (requiresTunnel()) { - makeTunnel(tunnelRequest); - } - - // Create the wrapper over connected socket. - socket = route.address.sslSocketFactory - .createSocket(socket, route.address.uriHost, route.address.uriPort, true /* autoClose */); - SSLSocket sslSocket = (SSLSocket) socket; - if (route.modernTls) { - platform.enableTlsExtensions(sslSocket, route.address.uriHost); - } else { - platform.supportTlsIntolerantServer(sslSocket); - } - - boolean useNpn = route.modernTls && route.address.transports.contains("spdy/3"); - if (useNpn) { - platform.setNpnProtocols(sslSocket, NPN_PROTOCOLS); - } - - // Force handshake. This can throw! - sslSocket.startHandshake(); - - // Verify that the socket's certificates are acceptable for the target host. - if (!route.address.hostnameVerifier.verify(route.address.uriHost, sslSocket.getSession())) { - throw new IOException("Hostname '" + route.address.uriHost + "' was not verified"); - } - - out = sslSocket.getOutputStream(); - in = sslSocket.getInputStream(); - streamWrapper(); - - byte[] selectedProtocol; - if (useNpn && (selectedProtocol = platform.getNpnSelectedProtocol(sslSocket)) != null) { - if (Arrays.equals(selectedProtocol, SPDY3)) { - sslSocket.setSoTimeout(0); // SPDY timeouts are set per-stream. - spdyConnection = new SpdyConnection.Builder(route.address.getUriHost(), true, in, out) - .build(); - spdyConnection.sendConnectionHeader(); - } else if (!Arrays.equals(selectedProtocol, HTTP_11)) { - throw new IOException( - "Unexpected NPN transport " + new String(selectedProtocol, "ISO-8859-1")); - } - } - } - - /** Returns true if {@link #connect} has been attempted on this connection. */ - public boolean isConnected() { - return connected; - } - - @Override public void close() throws IOException { - socket.close(); - } - - /** Returns the route used by this connection. */ - public Route getRoute() { - return route; - } - - /** - * Returns the socket that this connection uses, or null if the connection - * is not currently connected. - */ - public Socket getSocket() { - return socket; - } - - /** Returns true if this connection is alive. */ - public boolean isAlive() { - return !socket.isClosed() && !socket.isInputShutdown() && !socket.isOutputShutdown(); - } - - /** - * Returns true if we are confident that we can read data from this - * connection. This is more expensive and more accurate than {@link - * #isAlive()}; callers should check {@link #isAlive()} first. - */ - public boolean isReadable() { - if (!(in instanceof BufferedInputStream)) { - return true; // Optimistic. - } - if (isSpdy()) { - return true; // Optimistic. We can't test SPDY because its streams are in use. - } - BufferedInputStream bufferedInputStream = (BufferedInputStream) in; - try { - int readTimeout = socket.getSoTimeout(); - try { - socket.setSoTimeout(1); - bufferedInputStream.mark(1); - if (bufferedInputStream.read() == -1) { - return false; // Stream is exhausted; socket is closed. - } - bufferedInputStream.reset(); - return true; - } finally { - socket.setSoTimeout(readTimeout); - } - } catch (SocketTimeoutException ignored) { - return true; // Read timed out; socket is good. - } catch (IOException e) { - return false; // Couldn't read; socket is closed. - } - } - - public void resetIdleStartTime() { - if (spdyConnection != null) { - throw new IllegalStateException("spdyConnection != null"); - } - this.idleStartTimeNs = System.nanoTime(); - } - - /** Returns true if this connection is idle. */ - public boolean isIdle() { - return spdyConnection == null || spdyConnection.isIdle(); - } - - /** - * Returns true if this connection has been idle for longer than - * {@code keepAliveDurationNs}. - */ - public boolean isExpired(long keepAliveDurationNs) { - return getIdleStartTimeNs() < System.nanoTime() - keepAliveDurationNs; - } - - /** - * Returns the time in ns when this connection became idle. Undefined if - * this connection is not idle. - */ - public long getIdleStartTimeNs() { - return spdyConnection == null ? idleStartTimeNs : spdyConnection.getIdleStartTimeNs(); - } - - /** Returns the transport appropriate for this connection. */ - public Object newTransport(HttpEngine httpEngine) throws IOException { - return (spdyConnection != null) - ? new SpdyTransport(httpEngine, spdyConnection) - : new HttpTransport(httpEngine, out, in); - } - - /** - * Returns true if this is a SPDY connection. Such connections can be used - * in multiple HTTP requests simultaneously. - */ - public boolean isSpdy() { - return spdyConnection != null; - } - - public SpdyConnection getSpdyConnection() { - return spdyConnection; - } - - /** - * Returns the minor HTTP version that should be used for future requests on - * this connection. Either 0 for HTTP/1.0, or 1 for HTTP/1.1. The default - * value is 1 for new connections. - */ - public int getHttpMinorVersion() { - return httpMinorVersion; - } - - public void setHttpMinorVersion(int httpMinorVersion) { - this.httpMinorVersion = httpMinorVersion; - } - - /** - * Returns true if the HTTP connection needs to tunnel one protocol over - * another, such as when using HTTPS through an HTTP proxy. When doing so, - * we must avoid buffering bytes intended for the higher-level protocol. - */ - public boolean requiresTunnel() { - return route.address.sslSocketFactory != null && route.proxy.type() == Proxy.Type.HTTP; - } - - public void updateReadTimeout(int newTimeout) throws IOException { - if (!connected) throw new IllegalStateException("updateReadTimeout - not connected"); - socket.setSoTimeout(newTimeout); - } - - /** - * To make an HTTPS connection over an HTTP proxy, send an unencrypted - * CONNECT request to create the proxy connection. This may need to be - * retried if the proxy requires authorization. - */ - private void makeTunnel(TunnelRequest tunnelRequest) throws IOException { - RawHeaders requestHeaders = tunnelRequest.getRequestHeaders(); - while (true) { - out.write(requestHeaders.toBytes()); - RawHeaders responseHeaders = RawHeaders.fromBytes(in); - - switch (responseHeaders.getResponseCode()) { - case HTTP_OK: - return; - case HTTP_PROXY_AUTH: - requestHeaders = new RawHeaders(requestHeaders); - URL url = new URL("https", tunnelRequest.host, tunnelRequest.port, "/"); - boolean credentialsFound = HttpAuthenticator.processAuthHeader( - route.address.authenticator, HTTP_PROXY_AUTH, responseHeaders, requestHeaders, - route.proxy, url); - if (credentialsFound) { - continue; - } else { - throw new IOException("Failed to authenticate with proxy"); - } - default: - throw new IOException( - "Unexpected response code for CONNECT: " + responseHeaders.getResponseCode()); - } - } - } - - private void streamWrapper() throws IOException { - in = new BufferedInputStream(in, 4096); - out = new BufferedOutputStream(out, 256); - } -} diff --git a/mobile/CordovaLib/src/com/squareup/okhttp/ConnectionPool.java b/mobile/CordovaLib/src/com/squareup/okhttp/ConnectionPool.java deleted file mode 100755 index 42b70b98063..00000000000 --- a/mobile/CordovaLib/src/com/squareup/okhttp/ConnectionPool.java +++ /dev/null @@ -1,274 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package com.squareup.okhttp; - -import com.squareup.okhttp.internal.Platform; -import com.squareup.okhttp.internal.Util; -import java.net.SocketException; -import java.util.ArrayList; -import java.util.LinkedList; -import java.util.List; -import java.util.ListIterator; -import java.util.concurrent.Callable; -import java.util.concurrent.ExecutorService; -import java.util.concurrent.LinkedBlockingQueue; -import java.util.concurrent.ThreadPoolExecutor; -import java.util.concurrent.TimeUnit; - -/** - * Manages reuse of HTTP and SPDY connections for reduced network latency. HTTP - * requests that share the same {@link com.squareup.okhttp.Address} may share a - * {@link com.squareup.okhttp.Connection}. This class implements the policy of - * which connections to keep open for future use. - * - *

The {@link #getDefault() system-wide default} uses system properties for - * tuning parameters: - *

- * - *

The default instance doesn't adjust its configuration as system - * properties are changed. This assumes that the applications that set these - * parameters do so before making HTTP connections, and that this class is - * initialized lazily. - */ -public class ConnectionPool { - private static final int MAX_CONNECTIONS_TO_CLEANUP = 2; - private static final long DEFAULT_KEEP_ALIVE_DURATION_MS = 5 * 60 * 1000; // 5 min - - private static final ConnectionPool systemDefault; - - static { - String keepAlive = System.getProperty("http.keepAlive"); - String keepAliveDuration = System.getProperty("http.keepAliveDuration"); - String maxIdleConnections = System.getProperty("http.maxConnections"); - long keepAliveDurationMs = keepAliveDuration != null ? Long.parseLong(keepAliveDuration) - : DEFAULT_KEEP_ALIVE_DURATION_MS; - if (keepAlive != null && !Boolean.parseBoolean(keepAlive)) { - systemDefault = new ConnectionPool(0, keepAliveDurationMs); - } else if (maxIdleConnections != null) { - systemDefault = new ConnectionPool(Integer.parseInt(maxIdleConnections), keepAliveDurationMs); - } else { - systemDefault = new ConnectionPool(5, keepAliveDurationMs); - } - } - - /** The maximum number of idle connections for each address. */ - private final int maxIdleConnections; - private final long keepAliveDurationNs; - - private final LinkedList connections = new LinkedList(); - - /** We use a single background thread to cleanup expired connections. */ - private final ExecutorService executorService = new ThreadPoolExecutor(0, 1, - 60L, TimeUnit.SECONDS, new LinkedBlockingQueue(), - Util.daemonThreadFactory("OkHttp ConnectionPool")); - private final Callable connectionsCleanupCallable = new Callable() { - @Override public Void call() throws Exception { - List expiredConnections = new ArrayList(MAX_CONNECTIONS_TO_CLEANUP); - int idleConnectionCount = 0; - synchronized (ConnectionPool.this) { - for (ListIterator i = connections.listIterator(connections.size()); - i.hasPrevious(); ) { - Connection connection = i.previous(); - if (!connection.isAlive() || connection.isExpired(keepAliveDurationNs)) { - i.remove(); - expiredConnections.add(connection); - if (expiredConnections.size() == MAX_CONNECTIONS_TO_CLEANUP) break; - } else if (connection.isIdle()) { - idleConnectionCount++; - } - } - - for (ListIterator i = connections.listIterator(connections.size()); - i.hasPrevious() && idleConnectionCount > maxIdleConnections; ) { - Connection connection = i.previous(); - if (connection.isIdle()) { - expiredConnections.add(connection); - i.remove(); - --idleConnectionCount; - } - } - } - for (Connection expiredConnection : expiredConnections) { - Util.closeQuietly(expiredConnection); - } - return null; - } - }; - - public ConnectionPool(int maxIdleConnections, long keepAliveDurationMs) { - this.maxIdleConnections = maxIdleConnections; - this.keepAliveDurationNs = keepAliveDurationMs * 1000 * 1000; - } - - /** - * Returns a snapshot of the connections in this pool, ordered from newest to - * oldest. Waits for the cleanup callable to run if it is currently scheduled. - */ - List getConnections() { - waitForCleanupCallableToRun(); - synchronized (this) { - return new ArrayList(connections); - } - } - - /** - * Blocks until the executor service has processed all currently enqueued - * jobs. - */ - private void waitForCleanupCallableToRun() { - try { - executorService.submit(new Runnable() { - @Override public void run() { - } - }).get(); - } catch (Exception e) { - throw new AssertionError(); - } - } - - public static ConnectionPool getDefault() { - return systemDefault; - } - - /** Returns total number of connections in the pool. */ - public synchronized int getConnectionCount() { - return connections.size(); - } - - /** Returns total number of spdy connections in the pool. */ - public synchronized int getSpdyConnectionCount() { - int total = 0; - for (Connection connection : connections) { - if (connection.isSpdy()) total++; - } - return total; - } - - /** Returns total number of http connections in the pool. */ - public synchronized int getHttpConnectionCount() { - int total = 0; - for (Connection connection : connections) { - if (!connection.isSpdy()) total++; - } - return total; - } - - /** Returns a recycled connection to {@code address}, or null if no such connection exists. */ - public synchronized Connection get(Address address) { - Connection foundConnection = null; - for (ListIterator i = connections.listIterator(connections.size()); - i.hasPrevious(); ) { - Connection connection = i.previous(); - if (!connection.getRoute().getAddress().equals(address) - || !connection.isAlive() - || System.nanoTime() - connection.getIdleStartTimeNs() >= keepAliveDurationNs) { - continue; - } - i.remove(); - if (!connection.isSpdy()) { - try { - Platform.get().tagSocket(connection.getSocket()); - } catch (SocketException e) { - Util.closeQuietly(connection); - // When unable to tag, skip recycling and close - Platform.get().logW("Unable to tagSocket(): " + e); - continue; - } - } - foundConnection = connection; - break; - } - - if (foundConnection != null && foundConnection.isSpdy()) { - connections.addFirst(foundConnection); // Add it back after iteration. - } - - executorService.submit(connectionsCleanupCallable); - return foundConnection; - } - - /** - * Gives {@code connection} to the pool. The pool may store the connection, - * or close it, as its policy describes. - * - *

It is an error to use {@code connection} after calling this method. - */ - public void recycle(Connection connection) { - if (connection.isSpdy()) { - return; - } - - if (!connection.isAlive()) { - Util.closeQuietly(connection); - return; - } - - try { - Platform.get().untagSocket(connection.getSocket()); - } catch (SocketException e) { - // When unable to remove tagging, skip recycling and close. - Platform.get().logW("Unable to untagSocket(): " + e); - Util.closeQuietly(connection); - return; - } - - synchronized (this) { - connections.addFirst(connection); - connection.resetIdleStartTime(); - } - - executorService.submit(connectionsCleanupCallable); - } - - /** - * Shares the SPDY connection with the pool. Callers to this method may - * continue to use {@code connection}. - */ - public void maybeShare(Connection connection) { - executorService.submit(connectionsCleanupCallable); - if (!connection.isSpdy()) { - // Only SPDY connections are sharable. - return; - } - if (connection.isAlive()) { - synchronized (this) { - connections.addFirst(connection); - } - } - } - - /** Close and remove all connections in the pool. */ - public void evictAll() { - List connections; - synchronized (this) { - connections = new ArrayList(this.connections); - this.connections.clear(); - } - - for (Connection connection : connections) { - Util.closeQuietly(connection); - } - } -} diff --git a/mobile/CordovaLib/src/com/squareup/okhttp/Dispatcher.java b/mobile/CordovaLib/src/com/squareup/okhttp/Dispatcher.java deleted file mode 100755 index 1982a8ac4ba..00000000000 --- a/mobile/CordovaLib/src/com/squareup/okhttp/Dispatcher.java +++ /dev/null @@ -1,86 +0,0 @@ -/* - * Copyright (C) 2013 Square, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package com.squareup.okhttp; - -import com.squareup.okhttp.internal.http.ResponseHeaders; -import java.io.IOException; -import java.io.InputStream; -import java.util.ArrayList; -import java.util.LinkedHashMap; -import java.util.List; -import java.util.Map; -import java.util.concurrent.LinkedBlockingQueue; -import java.util.concurrent.ThreadPoolExecutor; -import java.util.concurrent.TimeUnit; - -final class Dispatcher { - // TODO: thread pool size should be configurable; possibly configurable per host. - private final ThreadPoolExecutor executorService = new ThreadPoolExecutor( - 8, 8, 60, TimeUnit.SECONDS, new LinkedBlockingQueue()); - private final Map> enqueuedJobs = new LinkedHashMap>(); - - public synchronized void enqueue( - OkHttpClient client, Request request, Response.Receiver responseReceiver) { - Job job = new Job(this, client, request, responseReceiver); - List jobsForTag = enqueuedJobs.get(request.tag()); - if (jobsForTag == null) { - jobsForTag = new ArrayList(2); - enqueuedJobs.put(request.tag(), jobsForTag); - } - jobsForTag.add(job); - executorService.execute(job); - } - - public synchronized void cancel(Object tag) { - List jobs = enqueuedJobs.remove(tag); - if (jobs == null) return; - for (Job job : jobs) { - executorService.remove(job); - } - } - - synchronized void finished(Job job) { - List jobs = enqueuedJobs.get(job.tag()); - if (jobs != null) jobs.remove(job); - } - - static class RealResponseBody extends Response.Body { - private final ResponseHeaders responseHeaders; - private final InputStream in; - - RealResponseBody(ResponseHeaders responseHeaders, InputStream in) { - this.responseHeaders = responseHeaders; - this.in = in; - } - - @Override public boolean ready() throws IOException { - return true; - } - - @Override public MediaType contentType() { - String contentType = responseHeaders.getContentType(); - return contentType != null ? MediaType.parse(contentType) : null; - } - - @Override public long contentLength() { - return responseHeaders.getContentLength(); - } - - @Override public InputStream byteStream() throws IOException { - return in; - } - } -} diff --git a/mobile/CordovaLib/src/com/squareup/okhttp/Failure.java b/mobile/CordovaLib/src/com/squareup/okhttp/Failure.java deleted file mode 100755 index a3547003a55..00000000000 --- a/mobile/CordovaLib/src/com/squareup/okhttp/Failure.java +++ /dev/null @@ -1,59 +0,0 @@ -/* - * Copyright (C) 2013 Square, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package com.squareup.okhttp; - -/** - * A failure attempting to retrieve an HTTP response. - * - *

Warning: Experimental OkHttp 2.0 API

- * This class is in beta. APIs are subject to change! - */ -/* OkHttp 2.0: public */ class Failure { - private final Request request; - private final Throwable exception; - - private Failure(Builder builder) { - this.request = builder.request; - this.exception = builder.exception; - } - - public Request request() { - return request; - } - - public Throwable exception() { - return exception; - } - - public static class Builder { - private Request request; - private Throwable exception; - - public Builder request(Request request) { - this.request = request; - return this; - } - - public Builder exception(Throwable exception) { - this.exception = exception; - return this; - } - - public Failure build() { - return new Failure(this); - } - } -} diff --git a/mobile/CordovaLib/src/com/squareup/okhttp/HttpResponseCache.java b/mobile/CordovaLib/src/com/squareup/okhttp/HttpResponseCache.java deleted file mode 100755 index 82103182763..00000000000 --- a/mobile/CordovaLib/src/com/squareup/okhttp/HttpResponseCache.java +++ /dev/null @@ -1,722 +0,0 @@ -/* - * Copyright (C) 2010 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package com.squareup.okhttp; - -import com.squareup.okhttp.internal.Base64; -import com.squareup.okhttp.internal.DiskLruCache; -import com.squareup.okhttp.internal.StrictLineReader; -import com.squareup.okhttp.internal.Util; -import com.squareup.okhttp.internal.http.HttpEngine; -import com.squareup.okhttp.internal.http.HttpURLConnectionImpl; -import com.squareup.okhttp.internal.http.HttpsEngine; -import com.squareup.okhttp.internal.http.HttpsURLConnectionImpl; -import com.squareup.okhttp.internal.http.RawHeaders; -import com.squareup.okhttp.internal.http.ResponseHeaders; -import java.io.BufferedWriter; -import java.io.ByteArrayInputStream; -import java.io.File; -import java.io.FilterInputStream; -import java.io.FilterOutputStream; -import java.io.IOException; -import java.io.InputStream; -import java.io.OutputStream; -import java.io.OutputStreamWriter; -import java.io.Writer; -import java.net.CacheRequest; -import java.net.CacheResponse; -import java.net.HttpURLConnection; -import java.net.ResponseCache; -import java.net.SecureCacheResponse; -import java.net.URI; -import java.net.URLConnection; -import java.security.Principal; -import java.security.cert.Certificate; -import java.security.cert.CertificateEncodingException; -import java.security.cert.CertificateException; -import java.security.cert.CertificateFactory; -import java.security.cert.X509Certificate; -import java.util.Arrays; -import java.util.List; -import java.util.Map; -import javax.net.ssl.SSLPeerUnverifiedException; -import javax.net.ssl.SSLSocket; - -import static com.squareup.okhttp.internal.Util.US_ASCII; -import static com.squareup.okhttp.internal.Util.UTF_8; - -/** - * Caches HTTP and HTTPS responses to the filesystem so they may be reused, - * saving time and bandwidth. - * - *

Cache Optimization

- * To measure cache effectiveness, this class tracks three statistics: - * - * Sometimes a request will result in a conditional cache hit. If the cache - * contains a stale copy of the response, the client will issue a conditional - * {@code GET}. The server will then send either the updated response if it has - * changed, or a short 'not modified' response if the client's copy is still - * valid. Such responses increment both the network count and hit count. - * - *

The best way to improve the cache hit rate is by configuring the web - * server to return cacheable responses. Although this client honors all HTTP/1.1 (RFC 2068) cache - * headers, it doesn't cache partial responses. - * - *

Force a Network Response

- * In some situations, such as after a user clicks a 'refresh' button, it may be - * necessary to skip the cache, and fetch data directly from the server. To force - * a full refresh, add the {@code no-cache} directive:
   {@code
- *         connection.addRequestProperty("Cache-Control", "no-cache");
- * }
- * If it is only necessary to force a cached response to be validated by the - * server, use the more efficient {@code max-age=0} instead:
   {@code
- *         connection.addRequestProperty("Cache-Control", "max-age=0");
- * }
- * - *

Force a Cache Response

- * Sometimes you'll want to show resources if they are available immediately, - * but not otherwise. This can be used so your application can show - * something while waiting for the latest data to be downloaded. To - * restrict a request to locally-cached resources, add the {@code - * only-if-cached} directive:
   {@code
- *     try {
- *         connection.addRequestProperty("Cache-Control", "only-if-cached");
- *         InputStream cached = connection.getInputStream();
- *         // the resource was cached! show it
- *     } catch (FileNotFoundException e) {
- *         // the resource was not cached
- *     }
- * }
- * This technique works even better in situations where a stale response is - * better than no response. To permit stale cached responses, use the {@code - * max-stale} directive with the maximum staleness in seconds:
   {@code
- *         int maxStale = 60 * 60 * 24 * 28; // tolerate 4-weeks stale
- *         connection.addRequestProperty("Cache-Control", "max-stale=" + maxStale);
- * }
- */ -public final class HttpResponseCache extends ResponseCache { - // TODO: add APIs to iterate the cache? - private static final int VERSION = 201105; - private static final int ENTRY_METADATA = 0; - private static final int ENTRY_BODY = 1; - private static final int ENTRY_COUNT = 2; - - private final DiskLruCache cache; - - /* read and write statistics, all guarded by 'this' */ - private int writeSuccessCount; - private int writeAbortCount; - private int networkCount; - private int hitCount; - private int requestCount; - - /** - * Although this class only exposes the limited ResponseCache API, it - * implements the full OkResponseCache interface. This field is used as a - * package private handle to the complete implementation. It delegates to - * public and private members of this type. - */ - final OkResponseCache okResponseCache = new OkResponseCache() { - @Override public CacheResponse get(URI uri, String requestMethod, - Map> requestHeaders) throws IOException { - return HttpResponseCache.this.get(uri, requestMethod, requestHeaders); - } - - @Override public CacheRequest put(URI uri, URLConnection connection) throws IOException { - return HttpResponseCache.this.put(uri, connection); - } - - @Override public void maybeRemove(String requestMethod, URI uri) throws IOException { - HttpResponseCache.this.maybeRemove(requestMethod, uri); - } - - @Override public void update( - CacheResponse conditionalCacheHit, HttpURLConnection connection) throws IOException { - HttpResponseCache.this.update(conditionalCacheHit, connection); - } - - @Override public void trackConditionalCacheHit() { - HttpResponseCache.this.trackConditionalCacheHit(); - } - - @Override public void trackResponse(ResponseSource source) { - HttpResponseCache.this.trackResponse(source); - } - }; - - public HttpResponseCache(File directory, long maxSize) throws IOException { - cache = DiskLruCache.open(directory, VERSION, ENTRY_COUNT, maxSize); - } - - private String uriToKey(URI uri) { - return Util.hash(uri.toString()); - } - - @Override public CacheResponse get(URI uri, String requestMethod, - Map> requestHeaders) { - String key = uriToKey(uri); - DiskLruCache.Snapshot snapshot; - Entry entry; - try { - snapshot = cache.get(key); - if (snapshot == null) { - return null; - } - entry = new Entry(snapshot.getInputStream(ENTRY_METADATA)); - } catch (IOException e) { - // Give up because the cache cannot be read. - return null; - } - - if (!entry.matches(uri, requestMethod, requestHeaders)) { - snapshot.close(); - return null; - } - - return entry.isHttps() ? new EntrySecureCacheResponse(entry, snapshot) - : new EntryCacheResponse(entry, snapshot); - } - - @Override public CacheRequest put(URI uri, URLConnection urlConnection) throws IOException { - if (!(urlConnection instanceof HttpURLConnection)) { - return null; - } - - HttpURLConnection httpConnection = (HttpURLConnection) urlConnection; - String requestMethod = httpConnection.getRequestMethod(); - - if (maybeRemove(requestMethod, uri)) { - return null; - } - if (!requestMethod.equals("GET")) { - // Don't cache non-GET responses. We're technically allowed to cache - // HEAD requests and some POST requests, but the complexity of doing - // so is high and the benefit is low. - return null; - } - - HttpEngine httpEngine = getHttpEngine(httpConnection); - if (httpEngine == null) { - // Don't cache unless the HTTP implementation is ours. - return null; - } - - ResponseHeaders response = httpEngine.getResponseHeaders(); - if (response.hasVaryAll()) { - return null; - } - - RawHeaders varyHeaders = - httpEngine.getRequestHeaders().getHeaders().getAll(response.getVaryFields()); - Entry entry = new Entry(uri, varyHeaders, httpConnection); - DiskLruCache.Editor editor = null; - try { - editor = cache.edit(uriToKey(uri)); - if (editor == null) { - return null; - } - entry.writeTo(editor); - return new CacheRequestImpl(editor); - } catch (IOException e) { - abortQuietly(editor); - return null; - } - } - - /** - * Returns true if the supplied {@code requestMethod} potentially invalidates an entry in the - * cache. - */ - private boolean maybeRemove(String requestMethod, URI uri) { - if (requestMethod.equals("POST") || requestMethod.equals("PUT") || requestMethod.equals( - "DELETE")) { - try { - cache.remove(uriToKey(uri)); - } catch (IOException ignored) { - // The cache cannot be written. - } - return true; - } - return false; - } - - private void update(CacheResponse conditionalCacheHit, HttpURLConnection httpConnection) - throws IOException { - HttpEngine httpEngine = getHttpEngine(httpConnection); - URI uri = httpEngine.getUri(); - ResponseHeaders response = httpEngine.getResponseHeaders(); - RawHeaders varyHeaders = - httpEngine.getRequestHeaders().getHeaders().getAll(response.getVaryFields()); - Entry entry = new Entry(uri, varyHeaders, httpConnection); - DiskLruCache.Snapshot snapshot = (conditionalCacheHit instanceof EntryCacheResponse) - ? ((EntryCacheResponse) conditionalCacheHit).snapshot - : ((EntrySecureCacheResponse) conditionalCacheHit).snapshot; - DiskLruCache.Editor editor = null; - try { - editor = snapshot.edit(); // returns null if snapshot is not current - if (editor != null) { - entry.writeTo(editor); - editor.commit(); - } - } catch (IOException e) { - abortQuietly(editor); - } - } - - private void abortQuietly(DiskLruCache.Editor editor) { - // Give up because the cache cannot be written. - try { - if (editor != null) { - editor.abort(); - } - } catch (IOException ignored) { - } - } - - private HttpEngine getHttpEngine(URLConnection httpConnection) { - if (httpConnection instanceof HttpURLConnectionImpl) { - return ((HttpURLConnectionImpl) httpConnection).getHttpEngine(); - } else if (httpConnection instanceof HttpsURLConnectionImpl) { - return ((HttpsURLConnectionImpl) httpConnection).getHttpEngine(); - } else { - return null; - } - } - - /** - * Closes the cache and deletes all of its stored values. This will delete - * all files in the cache directory including files that weren't created by - * the cache. - */ - public void delete() throws IOException { - cache.delete(); - } - - public synchronized int getWriteAbortCount() { - return writeAbortCount; - } - - public synchronized int getWriteSuccessCount() { - return writeSuccessCount; - } - - public long getSize() { - return cache.size(); - } - - public long getMaxSize() { - return cache.getMaxSize(); - } - - public void flush() throws IOException { - cache.flush(); - } - - public void close() throws IOException { - cache.close(); - } - - public File getDirectory() { - return cache.getDirectory(); - } - - public boolean isClosed() { - return cache.isClosed(); - } - - private synchronized void trackResponse(ResponseSource source) { - requestCount++; - - switch (source) { - case CACHE: - hitCount++; - break; - case CONDITIONAL_CACHE: - case NETWORK: - networkCount++; - break; - } - } - - private synchronized void trackConditionalCacheHit() { - hitCount++; - } - - public synchronized int getNetworkCount() { - return networkCount; - } - - public synchronized int getHitCount() { - return hitCount; - } - - public synchronized int getRequestCount() { - return requestCount; - } - - private final class CacheRequestImpl extends CacheRequest { - private final DiskLruCache.Editor editor; - private OutputStream cacheOut; - private boolean done; - private OutputStream body; - - public CacheRequestImpl(final DiskLruCache.Editor editor) throws IOException { - this.editor = editor; - this.cacheOut = editor.newOutputStream(ENTRY_BODY); - this.body = new FilterOutputStream(cacheOut) { - @Override public void close() throws IOException { - synchronized (HttpResponseCache.this) { - if (done) { - return; - } - done = true; - writeSuccessCount++; - } - super.close(); - editor.commit(); - } - - @Override public void write(byte[] buffer, int offset, int length) throws IOException { - // Since we don't override "write(int oneByte)", we can write directly to "out" - // and avoid the inefficient implementation from the FilterOutputStream. - out.write(buffer, offset, length); - } - }; - } - - @Override public void abort() { - synchronized (HttpResponseCache.this) { - if (done) { - return; - } - done = true; - writeAbortCount++; - } - Util.closeQuietly(cacheOut); - try { - editor.abort(); - } catch (IOException ignored) { - } - } - - @Override public OutputStream getBody() throws IOException { - return body; - } - } - - private static final class Entry { - private final String uri; - private final RawHeaders varyHeaders; - private final String requestMethod; - private final RawHeaders responseHeaders; - private final String cipherSuite; - private final Certificate[] peerCertificates; - private final Certificate[] localCertificates; - - /** - * Reads an entry from an input stream. A typical entry looks like this: - *
{@code
-     *   http://google.com/foo
-     *   GET
-     *   2
-     *   Accept-Language: fr-CA
-     *   Accept-Charset: UTF-8
-     *   HTTP/1.1 200 OK
-     *   3
-     *   Content-Type: image/png
-     *   Content-Length: 100
-     *   Cache-Control: max-age=600
-     * }
- * - *

A typical HTTPS file looks like this: - *

{@code
-     *   https://google.com/foo
-     *   GET
-     *   2
-     *   Accept-Language: fr-CA
-     *   Accept-Charset: UTF-8
-     *   HTTP/1.1 200 OK
-     *   3
-     *   Content-Type: image/png
-     *   Content-Length: 100
-     *   Cache-Control: max-age=600
-     *
-     *   AES_256_WITH_MD5
-     *   2
-     *   base64-encoded peerCertificate[0]
-     *   base64-encoded peerCertificate[1]
-     *   -1
-     * }
- * The file is newline separated. The first two lines are the URL and - * the request method. Next is the number of HTTP Vary request header - * lines, followed by those lines. - * - *

Next is the response status line, followed by the number of HTTP - * response header lines, followed by those lines. - * - *

HTTPS responses also contain SSL session information. This begins - * with a blank line, and then a line containing the cipher suite. Next - * is the length of the peer certificate chain. These certificates are - * base64-encoded and appear each on their own line. The next line - * contains the length of the local certificate chain. These - * certificates are also base64-encoded and appear each on their own - * line. A length of -1 is used to encode a null array. - */ - public Entry(InputStream in) throws IOException { - try { - StrictLineReader reader = new StrictLineReader(in, US_ASCII); - uri = reader.readLine(); - requestMethod = reader.readLine(); - varyHeaders = new RawHeaders(); - int varyRequestHeaderLineCount = reader.readInt(); - for (int i = 0; i < varyRequestHeaderLineCount; i++) { - varyHeaders.addLine(reader.readLine()); - } - - responseHeaders = new RawHeaders(); - responseHeaders.setStatusLine(reader.readLine()); - int responseHeaderLineCount = reader.readInt(); - for (int i = 0; i < responseHeaderLineCount; i++) { - responseHeaders.addLine(reader.readLine()); - } - - if (isHttps()) { - String blank = reader.readLine(); - if (blank.length() > 0) { - throw new IOException("expected \"\" but was \"" + blank + "\""); - } - cipherSuite = reader.readLine(); - peerCertificates = readCertArray(reader); - localCertificates = readCertArray(reader); - } else { - cipherSuite = null; - peerCertificates = null; - localCertificates = null; - } - } finally { - in.close(); - } - } - - public Entry(URI uri, RawHeaders varyHeaders, HttpURLConnection httpConnection) - throws IOException { - this.uri = uri.toString(); - this.varyHeaders = varyHeaders; - this.requestMethod = httpConnection.getRequestMethod(); - this.responseHeaders = RawHeaders.fromMultimap(httpConnection.getHeaderFields(), true); - - SSLSocket sslSocket = getSslSocket(httpConnection); - if (sslSocket != null) { - cipherSuite = sslSocket.getSession().getCipherSuite(); - Certificate[] peerCertificatesNonFinal = null; - try { - peerCertificatesNonFinal = sslSocket.getSession().getPeerCertificates(); - } catch (SSLPeerUnverifiedException ignored) { - } - peerCertificates = peerCertificatesNonFinal; - localCertificates = sslSocket.getSession().getLocalCertificates(); - } else { - cipherSuite = null; - peerCertificates = null; - localCertificates = null; - } - } - - /** - * Returns the SSL socket used by {@code httpConnection} for HTTPS, nor null - * if the connection isn't using HTTPS. Since we permit redirects across - * protocols (HTTP to HTTPS or vice versa), the implementation type of the - * connection doesn't necessarily match the implementation type of its HTTP - * engine. - */ - private SSLSocket getSslSocket(HttpURLConnection httpConnection) { - HttpEngine engine = httpConnection instanceof HttpsURLConnectionImpl - ? ((HttpsURLConnectionImpl) httpConnection).getHttpEngine() - : ((HttpURLConnectionImpl) httpConnection).getHttpEngine(); - return engine instanceof HttpsEngine - ? ((HttpsEngine) engine).getSslSocket() - : null; - } - - public void writeTo(DiskLruCache.Editor editor) throws IOException { - OutputStream out = editor.newOutputStream(ENTRY_METADATA); - Writer writer = new BufferedWriter(new OutputStreamWriter(out, UTF_8)); - - writer.write(uri + '\n'); - writer.write(requestMethod + '\n'); - writer.write(Integer.toString(varyHeaders.length()) + '\n'); - for (int i = 0; i < varyHeaders.length(); i++) { - writer.write(varyHeaders.getFieldName(i) + ": " + varyHeaders.getValue(i) + '\n'); - } - - writer.write(responseHeaders.getStatusLine() + '\n'); - writer.write(Integer.toString(responseHeaders.length()) + '\n'); - for (int i = 0; i < responseHeaders.length(); i++) { - writer.write(responseHeaders.getFieldName(i) + ": " + responseHeaders.getValue(i) + '\n'); - } - - if (isHttps()) { - writer.write('\n'); - writer.write(cipherSuite + '\n'); - writeCertArray(writer, peerCertificates); - writeCertArray(writer, localCertificates); - } - writer.close(); - } - - private boolean isHttps() { - return uri.startsWith("https://"); - } - - private Certificate[] readCertArray(StrictLineReader reader) throws IOException { - int length = reader.readInt(); - if (length == -1) { - return null; - } - try { - CertificateFactory certificateFactory = CertificateFactory.getInstance("X.509"); - Certificate[] result = new Certificate[length]; - for (int i = 0; i < result.length; i++) { - String line = reader.readLine(); - byte[] bytes = Base64.decode(line.getBytes("US-ASCII")); - result[i] = certificateFactory.generateCertificate(new ByteArrayInputStream(bytes)); - } - return result; - } catch (CertificateException e) { - throw new IOException(e.getMessage()); - } - } - - private void writeCertArray(Writer writer, Certificate[] certificates) throws IOException { - if (certificates == null) { - writer.write("-1\n"); - return; - } - try { - writer.write(Integer.toString(certificates.length) + '\n'); - for (Certificate certificate : certificates) { - byte[] bytes = certificate.getEncoded(); - String line = Base64.encode(bytes); - writer.write(line + '\n'); - } - } catch (CertificateEncodingException e) { - throw new IOException(e.getMessage()); - } - } - - public boolean matches(URI uri, String requestMethod, - Map> requestHeaders) { - return this.uri.equals(uri.toString()) - && this.requestMethod.equals(requestMethod) - && new ResponseHeaders(uri, responseHeaders).varyMatches(varyHeaders.toMultimap(false), - requestHeaders); - } - } - - /** - * Returns an input stream that reads the body of a snapshot, closing the - * snapshot when the stream is closed. - */ - private static InputStream newBodyInputStream(final DiskLruCache.Snapshot snapshot) { - return new FilterInputStream(snapshot.getInputStream(ENTRY_BODY)) { - @Override public void close() throws IOException { - snapshot.close(); - super.close(); - } - }; - } - - static class EntryCacheResponse extends CacheResponse { - private final Entry entry; - private final DiskLruCache.Snapshot snapshot; - private final InputStream in; - - public EntryCacheResponse(Entry entry, DiskLruCache.Snapshot snapshot) { - this.entry = entry; - this.snapshot = snapshot; - this.in = newBodyInputStream(snapshot); - } - - @Override public Map> getHeaders() { - return entry.responseHeaders.toMultimap(true); - } - - @Override public InputStream getBody() { - return in; - } - } - - static class EntrySecureCacheResponse extends SecureCacheResponse { - private final Entry entry; - private final DiskLruCache.Snapshot snapshot; - private final InputStream in; - - public EntrySecureCacheResponse(Entry entry, DiskLruCache.Snapshot snapshot) { - this.entry = entry; - this.snapshot = snapshot; - this.in = newBodyInputStream(snapshot); - } - - @Override public Map> getHeaders() { - return entry.responseHeaders.toMultimap(true); - } - - @Override public InputStream getBody() { - return in; - } - - @Override public String getCipherSuite() { - return entry.cipherSuite; - } - - @Override public List getServerCertificateChain() - throws SSLPeerUnverifiedException { - if (entry.peerCertificates == null || entry.peerCertificates.length == 0) { - throw new SSLPeerUnverifiedException(null); - } - return Arrays.asList(entry.peerCertificates.clone()); - } - - @Override public Principal getPeerPrincipal() throws SSLPeerUnverifiedException { - if (entry.peerCertificates == null || entry.peerCertificates.length == 0) { - throw new SSLPeerUnverifiedException(null); - } - return ((X509Certificate) entry.peerCertificates[0]).getSubjectX500Principal(); - } - - @Override public List getLocalCertificateChain() { - if (entry.localCertificates == null || entry.localCertificates.length == 0) { - return null; - } - return Arrays.asList(entry.localCertificates.clone()); - } - - @Override public Principal getLocalPrincipal() { - if (entry.localCertificates == null || entry.localCertificates.length == 0) { - return null; - } - return ((X509Certificate) entry.localCertificates[0]).getSubjectX500Principal(); - } - } -} diff --git a/mobile/CordovaLib/src/com/squareup/okhttp/Job.java b/mobile/CordovaLib/src/com/squareup/okhttp/Job.java deleted file mode 100755 index 1bfeb1de4e4..00000000000 --- a/mobile/CordovaLib/src/com/squareup/okhttp/Job.java +++ /dev/null @@ -1,232 +0,0 @@ -/* - * Copyright (C) 2013 Square, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package com.squareup.okhttp; - -import com.squareup.okhttp.internal.http.HttpAuthenticator; -import com.squareup.okhttp.internal.http.HttpEngine; -import com.squareup.okhttp.internal.http.HttpTransport; -import com.squareup.okhttp.internal.http.HttpsEngine; -import com.squareup.okhttp.internal.http.Policy; -import com.squareup.okhttp.internal.http.RawHeaders; -import java.io.IOException; -import java.net.HttpURLConnection; -import java.net.ProtocolException; -import java.net.Proxy; -import java.net.URL; - -import static com.squareup.okhttp.internal.Util.getEffectivePort; -import static com.squareup.okhttp.internal.http.HttpURLConnectionImpl.HTTP_MOVED_PERM; -import static com.squareup.okhttp.internal.http.HttpURLConnectionImpl.HTTP_MOVED_TEMP; -import static com.squareup.okhttp.internal.http.HttpURLConnectionImpl.HTTP_MULT_CHOICE; -import static com.squareup.okhttp.internal.http.HttpURLConnectionImpl.HTTP_PROXY_AUTH; -import static com.squareup.okhttp.internal.http.HttpURLConnectionImpl.HTTP_SEE_OTHER; -import static com.squareup.okhttp.internal.http.HttpURLConnectionImpl.HTTP_TEMP_REDIRECT; -import static com.squareup.okhttp.internal.http.HttpURLConnectionImpl.HTTP_UNAUTHORIZED; - -final class Job implements Runnable, Policy { - private final Dispatcher dispatcher; - private final OkHttpClient client; - private final Response.Receiver responseReceiver; - - /** The request; possibly a consequence of redirects or auth headers. */ - private Request request; - - public Job(Dispatcher dispatcher, OkHttpClient client, Request request, - Response.Receiver responseReceiver) { - this.dispatcher = dispatcher; - this.client = client; - this.request = request; - this.responseReceiver = responseReceiver; - } - - @Override public int getChunkLength() { - return request.body().contentLength() == -1 ? HttpTransport.DEFAULT_CHUNK_LENGTH : -1; - } - - @Override public long getFixedContentLength() { - return request.body().contentLength(); - } - - @Override public boolean getUseCaches() { - return false; // TODO. - } - - @Override public HttpURLConnection getHttpConnectionToCache() { - return null; - } - - @Override public URL getURL() { - return request.url(); - } - - @Override public long getIfModifiedSince() { - return 0; // For HttpURLConnection only. We let the cache drive this. - } - - @Override public boolean usingProxy() { - return false; // We let the connection decide this. - } - - @Override public void setSelectedProxy(Proxy proxy) { - // Do nothing. - } - - Object tag() { - return request.tag(); - } - - @Override public void run() { - try { - Response response = execute(); - responseReceiver.onResponse(response); - } catch (IOException e) { - responseReceiver.onFailure(new Failure.Builder() - .request(request) - .exception(e) - .build()); - } finally { - // TODO: close the response body - // TODO: release the HTTP engine (potentially multiple!) - dispatcher.finished(this); - } - } - - private Response execute() throws IOException { - Connection connection = null; - Response redirectedBy = null; - - while (true) { - HttpEngine engine = newEngine(connection); - - Request.Body body = request.body(); - if (body != null) { - MediaType contentType = body.contentType(); - if (contentType == null) throw new IllegalStateException("contentType == null"); - if (engine.getRequestHeaders().getContentType() == null) { - engine.getRequestHeaders().setContentType(contentType.toString()); - } - } - - engine.sendRequest(); - - if (body != null) { - body.writeTo(engine.getRequestBody()); - } - - engine.readResponse(); - - int responseCode = engine.getResponseCode(); - Dispatcher.RealResponseBody responseBody = new Dispatcher.RealResponseBody( - engine.getResponseHeaders(), engine.getResponseBody()); - - Response response = new Response.Builder(request, responseCode) - .rawHeaders(engine.getResponseHeaders().getHeaders()) - .body(responseBody) - .redirectedBy(redirectedBy) - .build(); - - Request redirect = processResponse(engine, response); - - if (redirect == null) { - engine.automaticallyReleaseConnectionToPool(); - return response; - } - - // TODO: fail if too many redirects - // TODO: fail if not following redirects - // TODO: release engine - - connection = sameConnection(request, redirect) ? engine.getConnection() : null; - redirectedBy = response; - request = redirect; - } - } - - HttpEngine newEngine(Connection connection) throws IOException { - String protocol = request.url().getProtocol(); - RawHeaders requestHeaders = request.rawHeaders(); - if (protocol.equals("http")) { - return new HttpEngine(client, this, request.method(), requestHeaders, connection, null); - } else if (protocol.equals("https")) { - return new HttpsEngine(client, this, request.method(), requestHeaders, connection, null); - } else { - throw new AssertionError(); - } - } - - /** - * Figures out the HTTP request to make in response to receiving {@code - * response}. This will either add authentication headers or follow - * redirects. If a follow-up is either unnecessary or not applicable, this - * returns null. - */ - private Request processResponse(HttpEngine engine, Response response) throws IOException { - Request request = response.request(); - Proxy selectedProxy = engine.getConnection() != null - ? engine.getConnection().getRoute().getProxy() - : client.getProxy(); - int responseCode = response.code(); - - switch (responseCode) { - case HTTP_PROXY_AUTH: - if (selectedProxy.type() != Proxy.Type.HTTP) { - throw new ProtocolException("Received HTTP_PROXY_AUTH (407) code while not using proxy"); - } - // fall-through - case HTTP_UNAUTHORIZED: - RawHeaders successorRequestHeaders = request.rawHeaders(); - boolean credentialsFound = HttpAuthenticator.processAuthHeader(client.getAuthenticator(), - response.code(), response.rawHeaders(), successorRequestHeaders, selectedProxy, - this.request.url()); - return credentialsFound - ? request.newBuilder().rawHeaders(successorRequestHeaders).build() - : null; - - case HTTP_MULT_CHOICE: - case HTTP_MOVED_PERM: - case HTTP_MOVED_TEMP: - case HTTP_SEE_OTHER: - case HTTP_TEMP_REDIRECT: - String method = request.method(); - if (responseCode == HTTP_TEMP_REDIRECT && !method.equals("GET") && !method.equals("HEAD")) { - // "If the 307 status code is received in response to a request other than GET or HEAD, - // the user agent MUST NOT automatically redirect the request" - return null; - } - - String location = response.header("Location"); - if (location == null) { - return null; - } - - URL url = new URL(request.url(), location); - if (!url.getProtocol().equals("https") && !url.getProtocol().equals("http")) { - return null; // Don't follow redirects to unsupported protocols. - } - - return this.request.newBuilder().url(url).build(); - - default: - return null; - } - } - - private boolean sameConnection(Request a, Request b) { - return a.url().getHost().equals(b.url().getHost()) - && getEffectivePort(a.url()) == getEffectivePort(b.url()) - && a.url().getProtocol().equals(b.url().getProtocol()); - } -} diff --git a/mobile/CordovaLib/src/com/squareup/okhttp/MediaType.java b/mobile/CordovaLib/src/com/squareup/okhttp/MediaType.java deleted file mode 100755 index 2c09596ff7b..00000000000 --- a/mobile/CordovaLib/src/com/squareup/okhttp/MediaType.java +++ /dev/null @@ -1,120 +0,0 @@ -/* - * Copyright (C) 2013 Square, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package com.squareup.okhttp; - -import java.nio.charset.Charset; -import java.util.Locale; -import java.util.regex.Matcher; -import java.util.regex.Pattern; - -/** - * An RFC 2045 Media Type, - * appropriate to describe the content type of an HTTP request or response body. - */ -public final class MediaType { - private static final String TOKEN = "([a-zA-Z0-9-!#$%&'*+.^_`{|}~]+)"; - private static final String QUOTED = "\"([^\"]*)\""; - private static final Pattern TYPE_SUBTYPE = Pattern.compile(TOKEN + "/" + TOKEN); - private static final Pattern PARAMETER = Pattern.compile( - ";\\s*" + TOKEN + "=(?:" + TOKEN + "|" + QUOTED + ")"); - - private final String mediaType; - private final String type; - private final String subtype; - private final String charset; - - private MediaType(String mediaType, String type, String subtype, String charset) { - this.mediaType = mediaType; - this.type = type; - this.subtype = subtype; - this.charset = charset; - } - - /** - * Returns a media type for {@code string}, or null if {@code string} is not a - * well-formed media type. - */ - public static MediaType parse(String string) { - Matcher typeSubtype = TYPE_SUBTYPE.matcher(string); - if (!typeSubtype.lookingAt()) return null; - String type = typeSubtype.group(1).toLowerCase(Locale.US); - String subtype = typeSubtype.group(2).toLowerCase(Locale.US); - - String charset = null; - Matcher parameter = PARAMETER.matcher(string); - for (int s = typeSubtype.end(); s < string.length(); s = parameter.end()) { - parameter.region(s, string.length()); - if (!parameter.lookingAt()) return null; // This is not a well-formed media type. - - String name = parameter.group(1); - if (name == null || !name.equalsIgnoreCase("charset")) continue; - if (charset != null) throw new IllegalArgumentException("Multiple charsets: " + string); - charset = parameter.group(2) != null - ? parameter.group(2) // Value is a token. - : parameter.group(3); // Value is a quoted string. - } - - return new MediaType(string, type, subtype, charset); - } - - /** - * Returns the high-level media type, such as "text", "image", "audio", - * "video", or "application". - */ - public String type() { - return type; - } - - /** - * Returns a specific media subtype, such as "plain" or "png", "mpeg", - * "mp4" or "xml". - */ - public String subtype() { - return subtype; - } - - /** - * Returns the charset of this media type, or null if this media type doesn't - * specify a charset. - */ - public Charset charset() { - return charset != null ? Charset.forName(charset) : null; - } - - /** - * Returns the charset of this media type, or {@code defaultValue} if this - * media type doesn't specify a charset. - */ - public Charset charset(Charset defaultValue) { - return charset != null ? Charset.forName(charset) : defaultValue; - } - - /** - * Returns the encoded media type, like "text/plain; charset=utf-8", - * appropriate for use in a Content-Type header. - */ - @Override public String toString() { - return mediaType; - } - - @Override public boolean equals(Object o) { - return o instanceof MediaType && ((MediaType) o).mediaType.equals(mediaType); - } - - @Override public int hashCode() { - return mediaType.hashCode(); - } -} diff --git a/mobile/CordovaLib/src/com/squareup/okhttp/OkAuthenticator.java b/mobile/CordovaLib/src/com/squareup/okhttp/OkAuthenticator.java deleted file mode 100755 index a505419248c..00000000000 --- a/mobile/CordovaLib/src/com/squareup/okhttp/OkAuthenticator.java +++ /dev/null @@ -1,123 +0,0 @@ -/* - * Copyright (C) 2013 Square, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package com.squareup.okhttp; - -import com.squareup.okhttp.internal.Base64; -import java.io.IOException; -import java.io.UnsupportedEncodingException; -import java.net.Proxy; -import java.net.URL; -import java.util.List; - -/** - * Responds to authentication challenges from the remote web or proxy server by - * returning credentials. - */ -public interface OkAuthenticator { - /** - * Returns a credential that satisfies the authentication challenge made by - * {@code url}. Returns null if the challenge cannot be satisfied. This method - * is called in response to an HTTP 401 unauthorized status code sent by the - * origin server. - * - * @param challenges parsed "WWW-Authenticate" challenge headers from the HTTP - * response. - */ - Credential authenticate(Proxy proxy, URL url, List challenges) throws IOException; - - /** - * Returns a credential that satisfies the authentication challenge made by - * {@code proxy}. Returns null if the challenge cannot be satisfied. This - * method is called in response to an HTTP 401 unauthorized status code sent - * by the proxy server. - * - * @param challenges parsed "Proxy-Authenticate" challenge headers from the - * HTTP response. - */ - Credential authenticateProxy(Proxy proxy, URL url, List challenges) throws IOException; - - /** An RFC 2617 challenge. */ - public final class Challenge { - private final String scheme; - private final String realm; - - public Challenge(String scheme, String realm) { - this.scheme = scheme; - this.realm = realm; - } - - /** Returns the authentication scheme, like {@code Basic}. */ - public String getScheme() { - return scheme; - } - - /** Returns the protection space. */ - public String getRealm() { - return realm; - } - - @Override public boolean equals(Object o) { - return o instanceof Challenge - && ((Challenge) o).scheme.equals(scheme) - && ((Challenge) o).realm.equals(realm); - } - - @Override public int hashCode() { - return scheme.hashCode() + 31 * realm.hashCode(); - } - - @Override public String toString() { - return scheme + " realm=\"" + realm + "\""; - } - } - - /** An RFC 2617 credential. */ - public final class Credential { - private final String headerValue; - - private Credential(String headerValue) { - this.headerValue = headerValue; - } - - /** Returns an auth credential for the Basic scheme. */ - public static Credential basic(String userName, String password) { - try { - String usernameAndPassword = userName + ":" + password; - byte[] bytes = usernameAndPassword.getBytes("ISO-8859-1"); - String encoded = Base64.encode(bytes); - return new Credential("Basic " + encoded); - } catch (UnsupportedEncodingException e) { - throw new AssertionError(); - } - } - - public String getHeaderValue() { - return headerValue; - } - - @Override public boolean equals(Object o) { - return o instanceof Credential && ((Credential) o).headerValue.equals(headerValue); - } - - @Override public int hashCode() { - return headerValue.hashCode(); - } - - @Override public String toString() { - return headerValue; - } - } -} diff --git a/mobile/CordovaLib/src/com/squareup/okhttp/OkHttpClient.java b/mobile/CordovaLib/src/com/squareup/okhttp/OkHttpClient.java deleted file mode 100755 index f78592fcbfd..00000000000 --- a/mobile/CordovaLib/src/com/squareup/okhttp/OkHttpClient.java +++ /dev/null @@ -1,408 +0,0 @@ -/* - * Copyright (C) 2012 Square, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package com.squareup.okhttp; - -import com.squareup.okhttp.internal.Util; -import com.squareup.okhttp.internal.http.HttpAuthenticator; -import com.squareup.okhttp.internal.http.HttpURLConnectionImpl; -import com.squareup.okhttp.internal.http.HttpsURLConnectionImpl; -import com.squareup.okhttp.internal.http.OkResponseCacheAdapter; -import com.squareup.okhttp.internal.tls.OkHostnameVerifier; -import java.net.CookieHandler; -import java.net.HttpURLConnection; -import java.net.Proxy; -import java.net.ProxySelector; -import java.net.ResponseCache; -import java.net.URL; -import java.net.URLConnection; -import java.net.URLStreamHandler; -import java.net.URLStreamHandlerFactory; -import java.util.Arrays; -import java.util.List; -import java.util.concurrent.TimeUnit; -import javax.net.ssl.HostnameVerifier; -import javax.net.ssl.HttpsURLConnection; -import javax.net.ssl.SSLSocketFactory; - -/** Configures and creates HTTP connections. */ -public final class OkHttpClient implements URLStreamHandlerFactory { - private static final List DEFAULT_TRANSPORTS - = Util.immutableList(Arrays.asList("spdy/3", "http/1.1")); - - private final RouteDatabase routeDatabase; - private final Dispatcher dispatcher; - private Proxy proxy; - private List transports; - private ProxySelector proxySelector; - private CookieHandler cookieHandler; - private ResponseCache responseCache; - private SSLSocketFactory sslSocketFactory; - private HostnameVerifier hostnameVerifier; - private OkAuthenticator authenticator; - private ConnectionPool connectionPool; - private boolean followProtocolRedirects = true; - private int connectTimeout; - private int readTimeout; - - public OkHttpClient() { - routeDatabase = new RouteDatabase(); - dispatcher = new Dispatcher(); - } - - private OkHttpClient(OkHttpClient copyFrom) { - routeDatabase = copyFrom.routeDatabase; - dispatcher = copyFrom.dispatcher; - } - - /** - * Sets the default connect timeout for new connections. A value of 0 means no timeout. - * - * @see URLConnection#setConnectTimeout(int) - */ - public void setConnectTimeout(long timeout, TimeUnit unit) { - if (timeout < 0) { - throw new IllegalArgumentException("timeout < 0"); - } - if (unit == null) { - throw new IllegalArgumentException("unit == null"); - } - long millis = unit.toMillis(timeout); - if (millis > Integer.MAX_VALUE) { - throw new IllegalArgumentException("Timeout too large."); - } - connectTimeout = (int) millis; - } - - /** Default connect timeout (in milliseconds). */ - public int getConnectTimeout() { - return connectTimeout; - } - - /** - * Sets the default read timeout for new connections. A value of 0 means no timeout. - * - * @see URLConnection#setReadTimeout(int) - */ - public void setReadTimeout(long timeout, TimeUnit unit) { - if (timeout < 0) { - throw new IllegalArgumentException("timeout < 0"); - } - if (unit == null) { - throw new IllegalArgumentException("unit == null"); - } - long millis = unit.toMillis(timeout); - if (millis > Integer.MAX_VALUE) { - throw new IllegalArgumentException("Timeout too large."); - } - readTimeout = (int) millis; - } - - /** Default read timeout (in milliseconds). */ - public int getReadTimeout() { - return readTimeout; - } - - /** - * Sets the HTTP proxy that will be used by connections created by this - * client. This takes precedence over {@link #setProxySelector}, which is - * only honored when this proxy is null (which it is by default). To disable - * proxy use completely, call {@code setProxy(Proxy.NO_PROXY)}. - */ - public OkHttpClient setProxy(Proxy proxy) { - this.proxy = proxy; - return this; - } - - public Proxy getProxy() { - return proxy; - } - - /** - * Sets the proxy selection policy to be used if no {@link #setProxy proxy} - * is specified explicitly. The proxy selector may return multiple proxies; - * in that case they will be tried in sequence until a successful connection - * is established. - * - *

If unset, the {@link ProxySelector#getDefault() system-wide default} - * proxy selector will be used. - */ - public OkHttpClient setProxySelector(ProxySelector proxySelector) { - this.proxySelector = proxySelector; - return this; - } - - public ProxySelector getProxySelector() { - return proxySelector; - } - - /** - * Sets the cookie handler to be used to read outgoing cookies and write - * incoming cookies. - * - *

If unset, the {@link CookieHandler#getDefault() system-wide default} - * cookie handler will be used. - */ - public OkHttpClient setCookieHandler(CookieHandler cookieHandler) { - this.cookieHandler = cookieHandler; - return this; - } - - public CookieHandler getCookieHandler() { - return cookieHandler; - } - - /** - * Sets the response cache to be used to read and write cached responses. - * - *

If unset, the {@link ResponseCache#getDefault() system-wide default} - * response cache will be used. - */ - public OkHttpClient setResponseCache(ResponseCache responseCache) { - this.responseCache = responseCache; - return this; - } - - public ResponseCache getResponseCache() { - return responseCache; - } - - public OkResponseCache getOkResponseCache() { - if (responseCache instanceof HttpResponseCache) { - return ((HttpResponseCache) responseCache).okResponseCache; - } else if (responseCache != null) { - return new OkResponseCacheAdapter(responseCache); - } else { - return null; - } - } - - /** - * Sets the socket factory used to secure HTTPS connections. - * - *

If unset, the {@link HttpsURLConnection#getDefaultSSLSocketFactory() - * system-wide default} SSL socket factory will be used. - */ - public OkHttpClient setSslSocketFactory(SSLSocketFactory sslSocketFactory) { - this.sslSocketFactory = sslSocketFactory; - return this; - } - - public SSLSocketFactory getSslSocketFactory() { - return sslSocketFactory; - } - - /** - * Sets the verifier used to confirm that response certificates apply to - * requested hostnames for HTTPS connections. - * - *

If unset, the {@link HttpsURLConnection#getDefaultHostnameVerifier() - * system-wide default} hostname verifier will be used. - */ - public OkHttpClient setHostnameVerifier(HostnameVerifier hostnameVerifier) { - this.hostnameVerifier = hostnameVerifier; - return this; - } - - public HostnameVerifier getHostnameVerifier() { - return hostnameVerifier; - } - - /** - * Sets the authenticator used to respond to challenges from the remote web - * server or proxy server. - * - *

If unset, the {@link java.net.Authenticator#setDefault system-wide default} - * authenticator will be used. - */ - public OkHttpClient setAuthenticator(OkAuthenticator authenticator) { - this.authenticator = authenticator; - return this; - } - - public OkAuthenticator getAuthenticator() { - return authenticator; - } - - /** - * Sets the connection pool used to recycle HTTP and HTTPS connections. - * - *

If unset, the {@link ConnectionPool#getDefault() system-wide - * default} connection pool will be used. - */ - public OkHttpClient setConnectionPool(ConnectionPool connectionPool) { - this.connectionPool = connectionPool; - return this; - } - - public ConnectionPool getConnectionPool() { - return connectionPool; - } - - /** - * Configure this client to follow redirects from HTTPS to HTTP and from HTTP - * to HTTPS. - * - *

If unset, protocol redirects will be followed. This is different than - * the built-in {@code HttpURLConnection}'s default. - */ - public OkHttpClient setFollowProtocolRedirects(boolean followProtocolRedirects) { - this.followProtocolRedirects = followProtocolRedirects; - return this; - } - - public boolean getFollowProtocolRedirects() { - return followProtocolRedirects; - } - - public RouteDatabase getRoutesDatabase() { - return routeDatabase; - } - - /** - * Configure the transports used by this client to communicate with remote - * servers. By default this client will prefer the most efficient transport - * available, falling back to more ubiquitous transports. Applications should - * only call this method to avoid specific compatibility problems, such as web - * servers that behave incorrectly when SPDY is enabled. - * - *

The following transports are currently supported: - *

- * - *

This is an evolving set. Future releases may drop - * support for transitional transports (like spdy/3), in favor of their - * successors (spdy/4 or http/2.0). The http/1.1 transport will never be - * dropped. - * - *

If multiple protocols are specified, NPN will - * be used to negotiate a transport. Future releases may use another mechanism - * (such as ALPN) - * to negotiate a transport. - * - * @param transports the transports to use, in order of preference. The list - * must contain "http/1.1". It must not contain null. - */ - public OkHttpClient setTransports(List transports) { - transports = Util.immutableList(transports); - if (!transports.contains("http/1.1")) { - throw new IllegalArgumentException("transports doesn't contain http/1.1: " + transports); - } - if (transports.contains(null)) { - throw new IllegalArgumentException("transports must not contain null"); - } - if (transports.contains("")) { - throw new IllegalArgumentException("transports contains an empty string"); - } - this.transports = transports; - return this; - } - - public List getTransports() { - return transports; - } - - /** - * Schedules {@code request} to be executed. - */ - /* OkHttp 2.0: public */ void enqueue(Request request, Response.Receiver responseReceiver) { - // Create the HttpURLConnection immediately so the enqueued job gets the current settings of - // this client. Otherwise changes to this client (socket factory, redirect policy, etc.) may - // incorrectly be reflected in the request when it is dispatched later. - dispatcher.enqueue(copyWithDefaults(), request, responseReceiver); - } - - /** - * Cancels all scheduled tasks tagged with {@code tag}. Requests that are already - * in flight might not be canceled. - */ - /* OkHttp 2.0: public */ void cancel(Object tag) { - dispatcher.cancel(tag); - } - - public HttpURLConnection open(URL url) { - return open(url, proxy); - } - - HttpURLConnection open(URL url, Proxy proxy) { - String protocol = url.getProtocol(); - OkHttpClient copy = copyWithDefaults(); - copy.proxy = proxy; - - if (protocol.equals("http")) return new HttpURLConnectionImpl(url, copy); - if (protocol.equals("https")) return new HttpsURLConnectionImpl(url, copy); - throw new IllegalArgumentException("Unexpected protocol: " + protocol); - } - - /** - * Returns a shallow copy of this OkHttpClient that uses the system-wide default for - * each field that hasn't been explicitly configured. - */ - private OkHttpClient copyWithDefaults() { - OkHttpClient result = new OkHttpClient(this); - result.proxy = proxy; - result.proxySelector = proxySelector != null ? proxySelector : ProxySelector.getDefault(); - result.cookieHandler = cookieHandler != null ? cookieHandler : CookieHandler.getDefault(); - result.responseCache = responseCache != null ? responseCache : ResponseCache.getDefault(); - result.sslSocketFactory = sslSocketFactory != null - ? sslSocketFactory - : HttpsURLConnection.getDefaultSSLSocketFactory(); - result.hostnameVerifier = hostnameVerifier != null - ? hostnameVerifier - : OkHostnameVerifier.INSTANCE; - result.authenticator = authenticator != null - ? authenticator - : HttpAuthenticator.SYSTEM_DEFAULT; - result.connectionPool = connectionPool != null ? connectionPool : ConnectionPool.getDefault(); - result.followProtocolRedirects = followProtocolRedirects; - result.transports = transports != null ? transports : DEFAULT_TRANSPORTS; - result.connectTimeout = connectTimeout; - result.readTimeout = readTimeout; - return result; - } - - /** - * Creates a URLStreamHandler as a {@link URL#setURLStreamHandlerFactory}. - * - *

This code configures OkHttp to handle all HTTP and HTTPS connections - * created with {@link URL#openConnection()}:

   {@code
-   *
-   *   OkHttpClient okHttpClient = new OkHttpClient();
-   *   URL.setURLStreamHandlerFactory(okHttpClient);
-   * }
- */ - public URLStreamHandler createURLStreamHandler(final String protocol) { - if (!protocol.equals("http") && !protocol.equals("https")) return null; - - return new URLStreamHandler() { - @Override protected URLConnection openConnection(URL url) { - return open(url); - } - - @Override protected URLConnection openConnection(URL url, Proxy proxy) { - return open(url, proxy); - } - - @Override protected int getDefaultPort() { - if (protocol.equals("http")) return 80; - if (protocol.equals("https")) return 443; - throw new AssertionError(); - } - }; - } -} diff --git a/mobile/CordovaLib/src/com/squareup/okhttp/OkResponseCache.java b/mobile/CordovaLib/src/com/squareup/okhttp/OkResponseCache.java deleted file mode 100755 index ffe6f54b104..00000000000 --- a/mobile/CordovaLib/src/com/squareup/okhttp/OkResponseCache.java +++ /dev/null @@ -1,56 +0,0 @@ -/* - * Copyright (C) 2013 Square, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package com.squareup.okhttp; - -import java.io.IOException; -import java.net.CacheRequest; -import java.net.CacheResponse; -import java.net.HttpURLConnection; -import java.net.URI; -import java.net.URLConnection; -import java.util.List; -import java.util.Map; - -/** - * An extended response cache API. Unlike {@link java.net.ResponseCache}, this - * interface supports conditional caching and statistics. - * - *

Warning: Experimental OkHttp 2.0 API

- * This class is in beta. APIs are subject to change! - */ -public interface OkResponseCache { - CacheResponse get(URI uri, String requestMethod, Map> requestHeaders) - throws IOException; - - CacheRequest put(URI uri, URLConnection urlConnection) throws IOException; - - /** Remove any cache entries for the supplied {@code uri} if the request method invalidates. */ - void maybeRemove(String requestMethod, URI uri) throws IOException; - - /** - * Handles a conditional request hit by updating the stored cache response - * with the headers from {@code httpConnection}. The cached response body is - * not updated. If the stored response has changed since {@code - * conditionalCacheHit} was returned, this does nothing. - */ - void update(CacheResponse conditionalCacheHit, HttpURLConnection connection) throws IOException; - - /** Track an conditional GET that was satisfied by this cache. */ - void trackConditionalCacheHit(); - - /** Track an HTTP response being satisfied by {@code source}. */ - void trackResponse(ResponseSource source); -} diff --git a/mobile/CordovaLib/src/com/squareup/okhttp/Request.java b/mobile/CordovaLib/src/com/squareup/okhttp/Request.java deleted file mode 100755 index f95303ebab2..00000000000 --- a/mobile/CordovaLib/src/com/squareup/okhttp/Request.java +++ /dev/null @@ -1,284 +0,0 @@ -/* - * Copyright (C) 2013 Square, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package com.squareup.okhttp; - -import com.squareup.okhttp.internal.Util; -import com.squareup.okhttp.internal.http.RawHeaders; -import java.io.File; -import java.io.FileInputStream; -import java.io.IOException; -import java.io.InputStream; -import java.io.OutputStream; -import java.io.UnsupportedEncodingException; -import java.net.MalformedURLException; -import java.net.URL; -import java.util.List; -import java.util.Set; - -/** - * An HTTP request. Instances of this class are immutable if their {@link #body} - * is null or itself immutable. - * - *

Warning: Experimental OkHttp 2.0 API

- * This class is in beta. APIs are subject to change! - */ -/* OkHttp 2.0: public */ final class Request { - private final URL url; - private final String method; - private final RawHeaders headers; - private final Body body; - private final Object tag; - - private Request(Builder builder) { - this.url = builder.url; - this.method = builder.method; - this.headers = new RawHeaders(builder.headers); - this.body = builder.body; - this.tag = builder.tag != null ? builder.tag : this; - } - - public URL url() { - return url; - } - - public String urlString() { - return url.toString(); - } - - public String method() { - return method; - } - - public String header(String name) { - return headers.get(name); - } - - public List headers(String name) { - return headers.values(name); - } - - public Set headerNames() { - return headers.names(); - } - - RawHeaders rawHeaders() { - return new RawHeaders(headers); - } - - public int headerCount() { - return headers.length(); - } - - public String headerName(int index) { - return headers.getFieldName(index); - } - - public String headerValue(int index) { - return headers.getValue(index); - } - - public Body body() { - return body; - } - - public Object tag() { - return tag; - } - - Builder newBuilder() { - return new Builder(url) - .method(method, body) - .rawHeaders(headers) - .tag(tag); - } - - public abstract static class Body { - /** Returns the Content-Type header for this body. */ - public abstract MediaType contentType(); - - /** - * Returns the number of bytes that will be written to {@code out} in a call - * to {@link #writeTo}, or -1 if that count is unknown. - */ - public long contentLength() { - return -1; - } - - /** Writes the content of this request to {@code out}. */ - public abstract void writeTo(OutputStream out) throws IOException; - - /** - * Returns a new request body that transmits {@code content}. If {@code - * contentType} lacks a charset, this will use UTF-8. - */ - public static Body create(MediaType contentType, String content) { - contentType = contentType.charset() != null - ? contentType - : MediaType.parse(contentType + "; charset=utf-8"); - try { - byte[] bytes = content.getBytes(contentType.charset().name()); - return create(contentType, bytes); - } catch (UnsupportedEncodingException e) { - throw new AssertionError(); - } - } - - /** Returns a new request body that transmits {@code content}. */ - public static Body create(final MediaType contentType, final byte[] content) { - if (contentType == null) throw new NullPointerException("contentType == null"); - if (content == null) throw new NullPointerException("content == null"); - - return new Body() { - @Override public MediaType contentType() { - return contentType; - } - - @Override public long contentLength() { - return content.length; - } - - @Override public void writeTo(OutputStream out) throws IOException { - out.write(content); - } - }; - } - - /** Returns a new request body that transmits the content of {@code file}. */ - public static Body create(final MediaType contentType, final File file) { - if (contentType == null) throw new NullPointerException("contentType == null"); - if (file == null) throw new NullPointerException("content == null"); - - return new Body() { - @Override public MediaType contentType() { - return contentType; - } - - @Override public long contentLength() { - return file.length(); - } - - @Override public void writeTo(OutputStream out) throws IOException { - long length = contentLength(); - if (length == 0) return; - - InputStream in = null; - try { - in = new FileInputStream(file); - byte[] buffer = new byte[(int) Math.min(8192, length)]; - for (int c; (c = in.read(buffer)) != -1; ) { - out.write(buffer, 0, c); - } - } finally { - Util.closeQuietly(in); - } - } - }; - } - } - - public static class Builder { - private URL url; - private String method = "GET"; - private RawHeaders headers = new RawHeaders(); - private Body body; - private Object tag; - - public Builder(String url) { - url(url); - } - - public Builder(URL url) { - url(url); - } - - public Builder url(String url) { - try { - this.url = new URL(url); - return this; - } catch (MalformedURLException e) { - throw new IllegalArgumentException("Malformed URL: " + url); - } - } - - public Builder url(URL url) { - if (url == null) throw new IllegalStateException("url == null"); - this.url = url; - return this; - } - - /** - * Sets the header named {@code name} to {@code value}. If this request - * already has any headers with that name, they are all replaced. - */ - public Builder header(String name, String value) { - headers.set(name, value); - return this; - } - - /** - * Adds a header with {@code name} and {@code value}. Prefer this method for - * multiply-valued headers like "Cookie". - */ - public Builder addHeader(String name, String value) { - headers.add(name, value); - return this; - } - - Builder rawHeaders(RawHeaders rawHeaders) { - headers = new RawHeaders(rawHeaders); - return this; - } - - public Builder get() { - return method("GET", null); - } - - public Builder head() { - return method("HEAD", null); - } - - public Builder post(Body body) { - return method("POST", body); - } - - public Builder put(Body body) { - return method("PUT", body); - } - - public Builder method(String method, Body body) { - if (method == null || method.length() == 0) { - throw new IllegalArgumentException("method == null || method.length() == 0"); - } - this.method = method; - this.body = body; - return this; - } - - /** - * Attaches {@code tag} to the request. It can be used later to cancel the - * request. If the tag is unspecified or null, the request is canceled by - * using the request itself as the tag. - */ - public Builder tag(Object tag) { - this.tag = tag; - return this; - } - - public Request build() { - return new Request(this); - } - } -} diff --git a/mobile/CordovaLib/src/com/squareup/okhttp/Response.java b/mobile/CordovaLib/src/com/squareup/okhttp/Response.java deleted file mode 100755 index 1e67968cd5f..00000000000 --- a/mobile/CordovaLib/src/com/squareup/okhttp/Response.java +++ /dev/null @@ -1,290 +0,0 @@ -/* - * Copyright (C) 2013 Square, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package com.squareup.okhttp; - -import com.squareup.okhttp.internal.Util; -import com.squareup.okhttp.internal.http.RawHeaders; -import java.io.ByteArrayOutputStream; -import java.io.IOException; -import java.io.InputStream; -import java.io.InputStreamReader; -import java.io.Reader; -import java.nio.charset.Charset; -import java.util.List; -import java.util.Set; - -import static com.squareup.okhttp.internal.Util.UTF_8; - -/** - * An HTTP response. Instances of this class are not immutable: the response - * body is a one-shot value that may be consumed only once. All other properties - * are immutable. - * - *

Warning: Experimental OkHttp 2.0 API

- * This class is in beta. APIs are subject to change! - */ -/* OkHttp 2.0: public */ final class Response { - private final Request request; - private final int code; - private final RawHeaders headers; - private final Body body; - private final Response redirectedBy; - - private Response(Builder builder) { - this.request = builder.request; - this.code = builder.code; - this.headers = new RawHeaders(builder.headers); - this.body = builder.body; - this.redirectedBy = builder.redirectedBy; - } - - /** - * The wire-level request that initiated this HTTP response. This is usually - * not the same request instance provided to the HTTP client: - *
    - *
  • It may be transformed by the HTTP client. For example, the client - * may have added its own {@code Content-Encoding} header to enable - * response compression. - *
  • It may be the request generated in response to an HTTP redirect. - * In this case the request URL may be different than the initial - * request URL. - *
- */ - public Request request() { - return request; - } - - public int code() { - return code; - } - - public String header(String name) { - return header(name, null); - } - - public String header(String name, String defaultValue) { - String result = headers.get(name); - return result != null ? result : defaultValue; - } - - public List headers(String name) { - return headers.values(name); - } - - public Set headerNames() { - return headers.names(); - } - - public int headerCount() { - return headers.length(); - } - - public String headerName(int index) { - return headers.getFieldName(index); - } - - RawHeaders rawHeaders() { - return new RawHeaders(headers); - } - - public String headerValue(int index) { - return headers.getValue(index); - } - - public Body body() { - return body; - } - - /** - * Returns the response for the HTTP redirect that triggered this response, or - * null if this response wasn't triggered by an automatic redirect. The body - * of the returned response should not be read because it has already been - * consumed by the redirecting client. - */ - public Response redirectedBy() { - return redirectedBy; - } - - public abstract static class Body { - /** Multiple calls to {@link #charStream()} must return the same instance. */ - private Reader reader; - - /** - * Returns true if further data from this response body should be read at - * this time. For asynchronous transports like SPDY and HTTP/2.0, this will - * return false once all locally-available body bytes have been read. - * - *

Clients with many concurrent downloads can use this method to reduce - * the number of idle threads blocking on reads. See {@link - * Receiver#onResponse} for details. - */ - //

Body.ready() vs. InputStream.available()

- // TODO: Can we fix response bodies to implement InputStream.available well? - // The deflater implementation is broken by default but we could do better. - public abstract boolean ready() throws IOException; - - public abstract MediaType contentType(); - - /** - * Returns the number of bytes in that will returned by {@link #bytes}, or - * {@link #byteStream}, or -1 if unknown. - */ - public abstract long contentLength(); - - public abstract InputStream byteStream() throws IOException; - - public final byte[] bytes() throws IOException { - long contentLength = contentLength(); - if (contentLength > Integer.MAX_VALUE) { - throw new IOException("Cannot buffer entire body for content length: " + contentLength); - } - - if (contentLength != -1) { - byte[] content = new byte[(int) contentLength]; - InputStream in = byteStream(); - Util.readFully(in, content); - if (in.read() != -1) throw new IOException("Content-Length and stream length disagree"); - return content; - - } else { - ByteArrayOutputStream out = new ByteArrayOutputStream(); - Util.copy(byteStream(), out); - return out.toByteArray(); - } - } - - /** - * Returns the response as a character stream decoded with the charset - * of the Content-Type header. If that header is either absent or lacks a - * charset, this will attempt to decode the response body as UTF-8. - */ - public final Reader charStream() throws IOException { - if (reader == null) { - reader = new InputStreamReader(byteStream(), charset()); - } - return reader; - } - - /** - * Returns the response as a string decoded with the charset of the - * Content-Type header. If that header is either absent or lacks a charset, - * this will attempt to decode the response body as UTF-8. - */ - public final String string() throws IOException { - return new String(bytes(), charset().name()); - } - - private Charset charset() { - MediaType contentType = contentType(); - return contentType != null ? contentType.charset(UTF_8) : UTF_8; - } - } - - public interface Receiver { - /** - * Called when the request could not be executed due to a connectivity - * problem or timeout. Because networks can fail during an exchange, it is - * possible that the remote server accepted the request before the failure. - */ - void onFailure(Failure failure); - - /** - * Called when the HTTP response was successfully returned by the remote - * server. The receiver may proceed to read the response body with the - * response's {@link #body} method. - * - *

Note that transport-layer success (receiving a HTTP response code, - * headers and body) does not necessarily indicate application-layer - * success: {@code response} may still indicate an unhappy HTTP response - * code like 404 or 500. - * - *

Non-blocking responses

- * - *

Receivers do not need to block while waiting for the response body to - * download. Instead, they can get called back as data arrives. Use {@link - * Body#ready} to check if bytes should be read immediately. While there is - * data ready, read it. If there isn't, return false: receivers will be - * called back with {@code onResponse()} as additional data is downloaded. - * - *

Return true to indicate that the receiver has finished handling the - * response body. If the response body has unread data, it will be - * discarded. - * - *

When the response body has been fully consumed the returned value is - * undefined. - * - *

The current implementation of {@link Body#ready} always returns true - * when the underlying transport is HTTP/1. This results in blocking on that - * transport. For effective non-blocking your server must support SPDY or - * HTTP/2. - */ - boolean onResponse(Response response) throws IOException; - } - - public static class Builder { - private final Request request; - private final int code; - private RawHeaders headers = new RawHeaders(); - private Body body; - private Response redirectedBy; - - public Builder(Request request, int code) { - if (request == null) throw new IllegalArgumentException("request == null"); - if (code <= 0) throw new IllegalArgumentException("code <= 0"); - this.request = request; - this.code = code; - } - - /** - * Sets the header named {@code name} to {@code value}. If this request - * already has any headers with that name, they are all replaced. - */ - public Builder header(String name, String value) { - headers.set(name, value); - return this; - } - - /** - * Adds a header with {@code name} and {@code value}. Prefer this method for - * multiply-valued headers like "Set-Cookie". - */ - public Builder addHeader(String name, String value) { - headers.add(name, value); - return this; - } - - Builder rawHeaders(RawHeaders rawHeaders) { - headers = new RawHeaders(rawHeaders); - return this; - } - - public Builder body(Body body) { - this.body = body; - return this; - } - - public Builder redirectedBy(Response redirectedBy) { - this.redirectedBy = redirectedBy; - return this; - } - - public Response build() { - if (request == null) throw new IllegalStateException("Response has no request."); - if (code == -1) throw new IllegalStateException("Response has no code."); - return new Response(this); - } - } -} diff --git a/mobile/CordovaLib/src/com/squareup/okhttp/ResponseSource.java b/mobile/CordovaLib/src/com/squareup/okhttp/ResponseSource.java deleted file mode 100755 index 4eca172d355..00000000000 --- a/mobile/CordovaLib/src/com/squareup/okhttp/ResponseSource.java +++ /dev/null @@ -1,37 +0,0 @@ -/* - * Copyright (C) 2011 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package com.squareup.okhttp; - -/** The source of an HTTP response. */ -public enum ResponseSource { - - /** The response was returned from the local cache. */ - CACHE, - - /** - * The response is available in the cache but must be validated with the - * network. The cache result will be used if it is still valid; otherwise - * the network's response will be used. - */ - CONDITIONAL_CACHE, - - /** The response was returned from the network. */ - NETWORK; - - public boolean requiresConnection() { - return this == CONDITIONAL_CACHE || this == NETWORK; - } -} diff --git a/mobile/CordovaLib/src/com/squareup/okhttp/Route.java b/mobile/CordovaLib/src/com/squareup/okhttp/Route.java deleted file mode 100755 index 4b8786d2298..00000000000 --- a/mobile/CordovaLib/src/com/squareup/okhttp/Route.java +++ /dev/null @@ -1,91 +0,0 @@ -/* - * Copyright (C) 2013 Square, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package com.squareup.okhttp; - -import java.net.InetSocketAddress; -import java.net.Proxy; - -/** Represents the route used by a connection to reach an endpoint. */ -public class Route { - final Address address; - final Proxy proxy; - final InetSocketAddress inetSocketAddress; - final boolean modernTls; - - public Route(Address address, Proxy proxy, InetSocketAddress inetSocketAddress, - boolean modernTls) { - if (address == null) throw new NullPointerException("address == null"); - if (proxy == null) throw new NullPointerException("proxy == null"); - if (inetSocketAddress == null) throw new NullPointerException("inetSocketAddress == null"); - this.address = address; - this.proxy = proxy; - this.inetSocketAddress = inetSocketAddress; - this.modernTls = modernTls; - } - - /** Returns the {@link Address} of this route. */ - public Address getAddress() { - return address; - } - - /** - * Returns the {@link Proxy} of this route. - * - * Warning: This may be different than the proxy returned - * by {@link #getAddress}! That is the proxy that the user asked to be - * connected to; this returns the proxy that they were actually connected - * to. The two may disagree when a proxy selector selects a different proxy - * for a connection. - */ - public Proxy getProxy() { - return proxy; - } - - /** Returns the {@link InetSocketAddress} of this route. */ - public InetSocketAddress getSocketAddress() { - return inetSocketAddress; - } - - /** Returns true if this route uses modern TLS. */ - public boolean isModernTls() { - return modernTls; - } - - /** Returns a copy of this route with flipped TLS mode. */ - Route flipTlsMode() { - return new Route(address, proxy, inetSocketAddress, !modernTls); - } - - @Override public boolean equals(Object obj) { - if (obj instanceof Route) { - Route other = (Route) obj; - return (address.equals(other.address) - && proxy.equals(other.proxy) - && inetSocketAddress.equals(other.inetSocketAddress) - && modernTls == other.modernTls); - } - return false; - } - - @Override public int hashCode() { - int result = 17; - result = 31 * result + address.hashCode(); - result = 31 * result + proxy.hashCode(); - result = 31 * result + inetSocketAddress.hashCode(); - result = result + (modernTls ? (31 * result) : 0); - return result; - } -} diff --git a/mobile/CordovaLib/src/com/squareup/okhttp/RouteDatabase.java b/mobile/CordovaLib/src/com/squareup/okhttp/RouteDatabase.java deleted file mode 100755 index 9cbeaa73f12..00000000000 --- a/mobile/CordovaLib/src/com/squareup/okhttp/RouteDatabase.java +++ /dev/null @@ -1,57 +0,0 @@ -/* - * Copyright (C) 2013 Square, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package com.squareup.okhttp; - -import java.io.IOException; -import java.util.LinkedHashSet; -import java.util.Set; -import javax.net.ssl.SSLHandshakeException; - -/** - * A blacklist of failed routes to avoid when creating a new connection to a - * target address. This is used so that OkHttp can learn from its mistakes: if - * there was a failure attempting to connect to a specific IP address, proxy - * server or TLS mode, that failure is remembered and alternate routes are - * preferred. - */ -public final class RouteDatabase { - private final Set failedRoutes = new LinkedHashSet(); - - /** Records a failure connecting to {@code failedRoute}. */ - public synchronized void failed(Route failedRoute, IOException failure) { - failedRoutes.add(failedRoute); - - if (!(failure instanceof SSLHandshakeException)) { - // If the problem was not related to SSL then it will also fail with - // a different TLS mode therefore we can be proactive about it. - failedRoutes.add(failedRoute.flipTlsMode()); - } - } - - /** Records success connecting to {@code failedRoute}. */ - public synchronized void connected(Route route) { - failedRoutes.remove(route); - } - - /** Returns true if {@code route} has failed recently and should be avoided. */ - public synchronized boolean shouldPostpone(Route route) { - return failedRoutes.contains(route); - } - - public synchronized int failedRoutesCount() { - return failedRoutes.size(); - } -} diff --git a/mobile/CordovaLib/src/com/squareup/okhttp/TunnelRequest.java b/mobile/CordovaLib/src/com/squareup/okhttp/TunnelRequest.java deleted file mode 100755 index 5260b87c493..00000000000 --- a/mobile/CordovaLib/src/com/squareup/okhttp/TunnelRequest.java +++ /dev/null @@ -1,75 +0,0 @@ -/* - * Copyright (C) 2012 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package com.squareup.okhttp; - -import com.squareup.okhttp.internal.http.RawHeaders; - -import static com.squareup.okhttp.internal.Util.getDefaultPort; - -/** - * Routing and authentication information sent to an HTTP proxy to create a - * HTTPS to an origin server. Everything in the tunnel request is sent - * unencrypted to the proxy server. - * - *

See RFC 2817, Section - * 5.2. - */ -public final class TunnelRequest { - final String host; - final int port; - final String userAgent; - final String proxyAuthorization; - - /** - * @param host the origin server's hostname. Not null. - * @param port the origin server's port, like 80 or 443. - * @param userAgent the client's user-agent. Not null. - * @param proxyAuthorization proxy authorization, or null if the proxy is - * used without an authorization header. - */ - public TunnelRequest(String host, int port, String userAgent, String proxyAuthorization) { - if (host == null) throw new NullPointerException("host == null"); - if (userAgent == null) throw new NullPointerException("userAgent == null"); - this.host = host; - this.port = port; - this.userAgent = userAgent; - this.proxyAuthorization = proxyAuthorization; - } - - /** - * If we're creating a TLS tunnel, send only the minimum set of headers. - * This avoids sending potentially sensitive data like HTTP cookies to - * the proxy unencrypted. - */ - RawHeaders getRequestHeaders() { - RawHeaders result = new RawHeaders(); - result.setRequestLine("CONNECT " + host + ":" + port + " HTTP/1.1"); - - // Always set Host and User-Agent. - result.set("Host", port == getDefaultPort("https") ? host : (host + ":" + port)); - result.set("User-Agent", userAgent); - - // Copy over the Proxy-Authorization header if it exists. - if (proxyAuthorization != null) { - result.set("Proxy-Authorization", proxyAuthorization); - } - - // Always set the Proxy-Connection to Keep-Alive for the benefit of - // HTTP/1.0 proxies like Squid. - result.set("Proxy-Connection", "Keep-Alive"); - return result; - } -} diff --git a/mobile/CordovaLib/src/com/squareup/okhttp/internal/AbstractOutputStream.java b/mobile/CordovaLib/src/com/squareup/okhttp/internal/AbstractOutputStream.java deleted file mode 100755 index 78c9691e6fd..00000000000 --- a/mobile/CordovaLib/src/com/squareup/okhttp/internal/AbstractOutputStream.java +++ /dev/null @@ -1,45 +0,0 @@ -/* - * Copyright (C) 2010 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package com.squareup.okhttp.internal; - -import java.io.IOException; -import java.io.OutputStream; - -/** - * An output stream for an HTTP request body. - * - *

Since a single socket's output stream may be used to write multiple HTTP - * requests to the same server, subclasses should not close the socket stream. - */ -public abstract class AbstractOutputStream extends OutputStream { - protected boolean closed; - - @Override public final void write(int data) throws IOException { - write(new byte[] { (byte) data }); - } - - protected final void checkNotClosed() throws IOException { - if (closed) { - throw new IOException("stream closed"); - } - } - - /** Returns true if this stream was closed locally. */ - public boolean isClosed() { - return closed; - } -} diff --git a/mobile/CordovaLib/src/com/squareup/okhttp/internal/Base64.java b/mobile/CordovaLib/src/com/squareup/okhttp/internal/Base64.java deleted file mode 100755 index 79cd0206f5f..00000000000 --- a/mobile/CordovaLib/src/com/squareup/okhttp/internal/Base64.java +++ /dev/null @@ -1,164 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/** - * @author Alexander Y. Kleymenov - */ - -package com.squareup.okhttp.internal; - -import java.io.UnsupportedEncodingException; - -import static com.squareup.okhttp.internal.Util.EMPTY_BYTE_ARRAY; - -/** - * Base64 encoder/decoder. - * In violation of the RFC, this encoder doesn't wrap lines at 76 columns. - */ -public final class Base64 { - private Base64() { - } - - public static byte[] decode(byte[] in) { - return decode(in, in.length); - } - - public static byte[] decode(byte[] in, int len) { - // approximate output length - int length = len / 4 * 3; - // return an empty array on empty or short input without padding - if (length == 0) { - return EMPTY_BYTE_ARRAY; - } - // temporary array - byte[] out = new byte[length]; - // number of padding characters ('=') - int pad = 0; - byte chr; - // compute the number of the padding characters - // and adjust the length of the input - for (; ; len--) { - chr = in[len - 1]; - // skip the neutral characters - if ((chr == '\n') || (chr == '\r') || (chr == ' ') || (chr == '\t')) { - continue; - } - if (chr == '=') { - pad++; - } else { - break; - } - } - // index in the output array - int outIndex = 0; - // index in the input array - int inIndex = 0; - // holds the value of the input character - int bits = 0; - // holds the value of the input quantum - int quantum = 0; - for (int i = 0; i < len; i++) { - chr = in[i]; - // skip the neutral characters - if ((chr == '\n') || (chr == '\r') || (chr == ' ') || (chr == '\t')) { - continue; - } - if ((chr >= 'A') && (chr <= 'Z')) { - // char ASCII value - // A 65 0 - // Z 90 25 (ASCII - 65) - bits = chr - 65; - } else if ((chr >= 'a') && (chr <= 'z')) { - // char ASCII value - // a 97 26 - // z 122 51 (ASCII - 71) - bits = chr - 71; - } else if ((chr >= '0') && (chr <= '9')) { - // char ASCII value - // 0 48 52 - // 9 57 61 (ASCII + 4) - bits = chr + 4; - } else if (chr == '+') { - bits = 62; - } else if (chr == '/') { - bits = 63; - } else { - return null; - } - // append the value to the quantum - quantum = (quantum << 6) | (byte) bits; - if (inIndex % 4 == 3) { - // 4 characters were read, so make the output: - out[outIndex++] = (byte) (quantum >> 16); - out[outIndex++] = (byte) (quantum >> 8); - out[outIndex++] = (byte) quantum; - } - inIndex++; - } - if (pad > 0) { - // adjust the quantum value according to the padding - quantum = quantum << (6 * pad); - // make output - out[outIndex++] = (byte) (quantum >> 16); - if (pad == 1) { - out[outIndex++] = (byte) (quantum >> 8); - } - } - // create the resulting array - byte[] result = new byte[outIndex]; - System.arraycopy(out, 0, result, 0, outIndex); - return result; - } - - private static final byte[] MAP = new byte[] { - 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', - 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', - 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', '0', '1', '2', '3', '4', - '5', '6', '7', '8', '9', '+', '/' - }; - - public static String encode(byte[] in) { - int length = (in.length + 2) * 4 / 3; - byte[] out = new byte[length]; - int index = 0, end = in.length - in.length % 3; - for (int i = 0; i < end; i += 3) { - out[index++] = MAP[(in[i] & 0xff) >> 2]; - out[index++] = MAP[((in[i] & 0x03) << 4) | ((in[i + 1] & 0xff) >> 4)]; - out[index++] = MAP[((in[i + 1] & 0x0f) << 2) | ((in[i + 2] & 0xff) >> 6)]; - out[index++] = MAP[(in[i + 2] & 0x3f)]; - } - switch (in.length % 3) { - case 1: - out[index++] = MAP[(in[end] & 0xff) >> 2]; - out[index++] = MAP[(in[end] & 0x03) << 4]; - out[index++] = '='; - out[index++] = '='; - break; - case 2: - out[index++] = MAP[(in[end] & 0xff) >> 2]; - out[index++] = MAP[((in[end] & 0x03) << 4) | ((in[end + 1] & 0xff) >> 4)]; - out[index++] = MAP[((in[end + 1] & 0x0f) << 2)]; - out[index++] = '='; - break; - } - try { - return new String(out, 0, index, "US-ASCII"); - } catch (UnsupportedEncodingException e) { - throw new AssertionError(e); - } - } -} diff --git a/mobile/CordovaLib/src/com/squareup/okhttp/internal/DiskLruCache.java b/mobile/CordovaLib/src/com/squareup/okhttp/internal/DiskLruCache.java deleted file mode 100755 index f7fcb1ed2a6..00000000000 --- a/mobile/CordovaLib/src/com/squareup/okhttp/internal/DiskLruCache.java +++ /dev/null @@ -1,926 +0,0 @@ -/* - * Copyright (C) 2011 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package com.squareup.okhttp.internal; - -import java.io.BufferedWriter; -import java.io.Closeable; -import java.io.EOFException; -import java.io.File; -import java.io.FileInputStream; -import java.io.FileNotFoundException; -import java.io.FileOutputStream; -import java.io.FilterOutputStream; -import java.io.IOException; -import java.io.InputStream; -import java.io.InputStreamReader; -import java.io.OutputStream; -import java.io.OutputStreamWriter; -import java.io.Writer; -import java.util.ArrayList; -import java.util.Iterator; -import java.util.LinkedHashMap; -import java.util.Map; -import java.util.concurrent.Callable; -import java.util.concurrent.LinkedBlockingQueue; -import java.util.concurrent.ThreadPoolExecutor; -import java.util.concurrent.TimeUnit; -import java.util.regex.Matcher; -import java.util.regex.Pattern; - -/** - * A cache that uses a bounded amount of space on a filesystem. Each cache - * entry has a string key and a fixed number of values. Each key must match - * the regex [a-z0-9_-]{1,64}. Values are byte sequences, - * accessible as streams or files. Each value must be between {@code 0} and - * {@code Integer.MAX_VALUE} bytes in length. - * - *

The cache stores its data in a directory on the filesystem. This - * directory must be exclusive to the cache; the cache may delete or overwrite - * files from its directory. It is an error for multiple processes to use the - * same cache directory at the same time. - * - *

This cache limits the number of bytes that it will store on the - * filesystem. When the number of stored bytes exceeds the limit, the cache will - * remove entries in the background until the limit is satisfied. The limit is - * not strict: the cache may temporarily exceed it while waiting for files to be - * deleted. The limit does not include filesystem overhead or the cache - * journal so space-sensitive applications should set a conservative limit. - * - *

Clients call {@link #edit} to create or update the values of an entry. An - * entry may have only one editor at one time; if a value is not available to be - * edited then {@link #edit} will return null. - *

    - *
  • When an entry is being created it is necessary to - * supply a full set of values; the empty value should be used as a - * placeholder if necessary. - *
  • When an entry is being edited, it is not necessary - * to supply data for every value; values default to their previous - * value. - *
- * Every {@link #edit} call must be matched by a call to {@link Editor#commit} - * or {@link Editor#abort}. Committing is atomic: a read observes the full set - * of values as they were before or after the commit, but never a mix of values. - * - *

Clients call {@link #get} to read a snapshot of an entry. The read will - * observe the value at the time that {@link #get} was called. Updates and - * removals after the call do not impact ongoing reads. - * - *

This class is tolerant of some I/O errors. If files are missing from the - * filesystem, the corresponding entries will be dropped from the cache. If - * an error occurs while writing a cache value, the edit will fail silently. - * Callers should handle other problems by catching {@code IOException} and - * responding appropriately. - */ -public final class DiskLruCache implements Closeable { - static final String JOURNAL_FILE = "journal"; - static final String JOURNAL_FILE_TEMP = "journal.tmp"; - static final String JOURNAL_FILE_BACKUP = "journal.bkp"; - static final String MAGIC = "libcore.io.DiskLruCache"; - static final String VERSION_1 = "1"; - static final long ANY_SEQUENCE_NUMBER = -1; - static final Pattern LEGAL_KEY_PATTERN = Pattern.compile("[a-z0-9_-]{1,64}"); - private static final String CLEAN = "CLEAN"; - private static final String DIRTY = "DIRTY"; - private static final String REMOVE = "REMOVE"; - private static final String READ = "READ"; - - /* - * This cache uses a journal file named "journal". A typical journal file - * looks like this: - * libcore.io.DiskLruCache - * 1 - * 100 - * 2 - * - * CLEAN 3400330d1dfc7f3f7f4b8d4d803dfcf6 832 21054 - * DIRTY 335c4c6028171cfddfbaae1a9c313c52 - * CLEAN 335c4c6028171cfddfbaae1a9c313c52 3934 2342 - * REMOVE 335c4c6028171cfddfbaae1a9c313c52 - * DIRTY 1ab96a171faeeee38496d8b330771a7a - * CLEAN 1ab96a171faeeee38496d8b330771a7a 1600 234 - * READ 335c4c6028171cfddfbaae1a9c313c52 - * READ 3400330d1dfc7f3f7f4b8d4d803dfcf6 - * - * The first five lines of the journal form its header. They are the - * constant string "libcore.io.DiskLruCache", the disk cache's version, - * the application's version, the value count, and a blank line. - * - * Each of the subsequent lines in the file is a record of the state of a - * cache entry. Each line contains space-separated values: a state, a key, - * and optional state-specific values. - * o DIRTY lines track that an entry is actively being created or updated. - * Every successful DIRTY action should be followed by a CLEAN or REMOVE - * action. DIRTY lines without a matching CLEAN or REMOVE indicate that - * temporary files may need to be deleted. - * o CLEAN lines track a cache entry that has been successfully published - * and may be read. A publish line is followed by the lengths of each of - * its values. - * o READ lines track accesses for LRU. - * o REMOVE lines track entries that have been deleted. - * - * The journal file is appended to as cache operations occur. The journal may - * occasionally be compacted by dropping redundant lines. A temporary file named - * "journal.tmp" will be used during compaction; that file should be deleted if - * it exists when the cache is opened. - */ - - private final File directory; - private final File journalFile; - private final File journalFileTmp; - private final File journalFileBackup; - private final int appVersion; - private long maxSize; - private final int valueCount; - private long size = 0; - private Writer journalWriter; - private final LinkedHashMap lruEntries = - new LinkedHashMap(0, 0.75f, true); - private int redundantOpCount; - - /** - * To differentiate between old and current snapshots, each entry is given - * a sequence number each time an edit is committed. A snapshot is stale if - * its sequence number is not equal to its entry's sequence number. - */ - private long nextSequenceNumber = 0; - - /** This cache uses a single background thread to evict entries. */ - final ThreadPoolExecutor executorService = - new ThreadPoolExecutor(0, 1, 60L, TimeUnit.SECONDS, new LinkedBlockingQueue()); - private final Callable cleanupCallable = new Callable() { - public Void call() throws Exception { - synchronized (DiskLruCache.this) { - if (journalWriter == null) { - return null; // Closed. - } - trimToSize(); - if (journalRebuildRequired()) { - rebuildJournal(); - redundantOpCount = 0; - } - } - return null; - } - }; - - private DiskLruCache(File directory, int appVersion, int valueCount, long maxSize) { - this.directory = directory; - this.appVersion = appVersion; - this.journalFile = new File(directory, JOURNAL_FILE); - this.journalFileTmp = new File(directory, JOURNAL_FILE_TEMP); - this.journalFileBackup = new File(directory, JOURNAL_FILE_BACKUP); - this.valueCount = valueCount; - this.maxSize = maxSize; - } - - /** - * Opens the cache in {@code directory}, creating a cache if none exists - * there. - * - * @param directory a writable directory - * @param valueCount the number of values per cache entry. Must be positive. - * @param maxSize the maximum number of bytes this cache should use to store - * @throws IOException if reading or writing the cache directory fails - */ - public static DiskLruCache open(File directory, int appVersion, int valueCount, long maxSize) - throws IOException { - if (maxSize <= 0) { - throw new IllegalArgumentException("maxSize <= 0"); - } - if (valueCount <= 0) { - throw new IllegalArgumentException("valueCount <= 0"); - } - - // If a bkp file exists, use it instead. - File backupFile = new File(directory, JOURNAL_FILE_BACKUP); - if (backupFile.exists()) { - File journalFile = new File(directory, JOURNAL_FILE); - // If journal file also exists just delete backup file. - if (journalFile.exists()) { - backupFile.delete(); - } else { - renameTo(backupFile, journalFile, false); - } - } - - // Prefer to pick up where we left off. - DiskLruCache cache = new DiskLruCache(directory, appVersion, valueCount, maxSize); - if (cache.journalFile.exists()) { - try { - cache.readJournal(); - cache.processJournal(); - cache.journalWriter = new BufferedWriter( - new OutputStreamWriter(new FileOutputStream(cache.journalFile, true), Util.US_ASCII)); - return cache; - } catch (IOException journalIsCorrupt) { - Platform.get().logW("DiskLruCache " + directory + " is corrupt: " - + journalIsCorrupt.getMessage() + ", removing"); - cache.delete(); - } - } - - // Create a new empty cache. - directory.mkdirs(); - cache = new DiskLruCache(directory, appVersion, valueCount, maxSize); - cache.rebuildJournal(); - return cache; - } - - private void readJournal() throws IOException { - StrictLineReader reader = new StrictLineReader(new FileInputStream(journalFile), Util.US_ASCII); - try { - String magic = reader.readLine(); - String version = reader.readLine(); - String appVersionString = reader.readLine(); - String valueCountString = reader.readLine(); - String blank = reader.readLine(); - if (!MAGIC.equals(magic) - || !VERSION_1.equals(version) - || !Integer.toString(appVersion).equals(appVersionString) - || !Integer.toString(valueCount).equals(valueCountString) - || !"".equals(blank)) { - throw new IOException("unexpected journal header: [" + magic + ", " + version + ", " - + valueCountString + ", " + blank + "]"); - } - - int lineCount = 0; - while (true) { - try { - readJournalLine(reader.readLine()); - lineCount++; - } catch (EOFException endOfJournal) { - break; - } - } - redundantOpCount = lineCount - lruEntries.size(); - } finally { - Util.closeQuietly(reader); - } - } - - private void readJournalLine(String line) throws IOException { - int firstSpace = line.indexOf(' '); - if (firstSpace == -1) { - throw new IOException("unexpected journal line: " + line); - } - - int keyBegin = firstSpace + 1; - int secondSpace = line.indexOf(' ', keyBegin); - final String key; - if (secondSpace == -1) { - key = line.substring(keyBegin); - if (firstSpace == REMOVE.length() && line.startsWith(REMOVE)) { - lruEntries.remove(key); - return; - } - } else { - key = line.substring(keyBegin, secondSpace); - } - - Entry entry = lruEntries.get(key); - if (entry == null) { - entry = new Entry(key); - lruEntries.put(key, entry); - } - - if (secondSpace != -1 && firstSpace == CLEAN.length() && line.startsWith(CLEAN)) { - String[] parts = line.substring(secondSpace + 1).split(" "); - entry.readable = true; - entry.currentEditor = null; - entry.setLengths(parts); - } else if (secondSpace == -1 && firstSpace == DIRTY.length() && line.startsWith(DIRTY)) { - entry.currentEditor = new Editor(entry); - } else if (secondSpace == -1 && firstSpace == READ.length() && line.startsWith(READ)) { - // This work was already done by calling lruEntries.get(). - } else { - throw new IOException("unexpected journal line: " + line); - } - } - - /** - * Computes the initial size and collects garbage as a part of opening the - * cache. Dirty entries are assumed to be inconsistent and will be deleted. - */ - private void processJournal() throws IOException { - deleteIfExists(journalFileTmp); - for (Iterator i = lruEntries.values().iterator(); i.hasNext(); ) { - Entry entry = i.next(); - if (entry.currentEditor == null) { - for (int t = 0; t < valueCount; t++) { - size += entry.lengths[t]; - } - } else { - entry.currentEditor = null; - for (int t = 0; t < valueCount; t++) { - deleteIfExists(entry.getCleanFile(t)); - deleteIfExists(entry.getDirtyFile(t)); - } - i.remove(); - } - } - } - - /** - * Creates a new journal that omits redundant information. This replaces the - * current journal if it exists. - */ - private synchronized void rebuildJournal() throws IOException { - if (journalWriter != null) { - journalWriter.close(); - } - - Writer writer = new BufferedWriter( - new OutputStreamWriter(new FileOutputStream(journalFileTmp), Util.US_ASCII)); - try { - writer.write(MAGIC); - writer.write("\n"); - writer.write(VERSION_1); - writer.write("\n"); - writer.write(Integer.toString(appVersion)); - writer.write("\n"); - writer.write(Integer.toString(valueCount)); - writer.write("\n"); - writer.write("\n"); - - for (Entry entry : lruEntries.values()) { - if (entry.currentEditor != null) { - writer.write(DIRTY + ' ' + entry.key + '\n'); - } else { - writer.write(CLEAN + ' ' + entry.key + entry.getLengths() + '\n'); - } - } - } finally { - writer.close(); - } - - if (journalFile.exists()) { - renameTo(journalFile, journalFileBackup, true); - } - renameTo(journalFileTmp, journalFile, false); - journalFileBackup.delete(); - - journalWriter = new BufferedWriter( - new OutputStreamWriter(new FileOutputStream(journalFile, true), Util.US_ASCII)); - } - - private static void deleteIfExists(File file) throws IOException { - if (file.exists() && !file.delete()) { - throw new IOException(); - } - } - - private static void renameTo(File from, File to, boolean deleteDestination) throws IOException { - if (deleteDestination) { - deleteIfExists(to); - } - if (!from.renameTo(to)) { - throw new IOException(); - } - } - - /** - * Returns a snapshot of the entry named {@code key}, or null if it doesn't - * exist is not currently readable. If a value is returned, it is moved to - * the head of the LRU queue. - */ - public synchronized Snapshot get(String key) throws IOException { - checkNotClosed(); - validateKey(key); - Entry entry = lruEntries.get(key); - if (entry == null) { - return null; - } - - if (!entry.readable) { - return null; - } - - // Open all streams eagerly to guarantee that we see a single published - // snapshot. If we opened streams lazily then the streams could come - // from different edits. - InputStream[] ins = new InputStream[valueCount]; - try { - for (int i = 0; i < valueCount; i++) { - ins[i] = new FileInputStream(entry.getCleanFile(i)); - } - } catch (FileNotFoundException e) { - // A file must have been deleted manually! - for (int i = 0; i < valueCount; i++) { - if (ins[i] != null) { - Util.closeQuietly(ins[i]); - } else { - break; - } - } - return null; - } - - redundantOpCount++; - journalWriter.append(READ + ' ' + key + '\n'); - if (journalRebuildRequired()) { - executorService.submit(cleanupCallable); - } - - return new Snapshot(key, entry.sequenceNumber, ins, entry.lengths); - } - - /** - * Returns an editor for the entry named {@code key}, or null if another - * edit is in progress. - */ - public Editor edit(String key) throws IOException { - return edit(key, ANY_SEQUENCE_NUMBER); - } - - private synchronized Editor edit(String key, long expectedSequenceNumber) throws IOException { - checkNotClosed(); - validateKey(key); - Entry entry = lruEntries.get(key); - if (expectedSequenceNumber != ANY_SEQUENCE_NUMBER && (entry == null - || entry.sequenceNumber != expectedSequenceNumber)) { - return null; // Snapshot is stale. - } - if (entry == null) { - entry = new Entry(key); - lruEntries.put(key, entry); - } else if (entry.currentEditor != null) { - return null; // Another edit is in progress. - } - - Editor editor = new Editor(entry); - entry.currentEditor = editor; - - // Flush the journal before creating files to prevent file leaks. - journalWriter.write(DIRTY + ' ' + key + '\n'); - journalWriter.flush(); - return editor; - } - - /** Returns the directory where this cache stores its data. */ - public File getDirectory() { - return directory; - } - - /** - * Returns the maximum number of bytes that this cache should use to store - * its data. - */ - public long getMaxSize() { - return maxSize; - } - - /** - * Changes the maximum number of bytes the cache can store and queues a job - * to trim the existing store, if necessary. - */ - public synchronized void setMaxSize(long maxSize) { - this.maxSize = maxSize; - executorService.submit(cleanupCallable); - } - - /** - * Returns the number of bytes currently being used to store the values in - * this cache. This may be greater than the max size if a background - * deletion is pending. - */ - public synchronized long size() { - return size; - } - - private synchronized void completeEdit(Editor editor, boolean success) throws IOException { - Entry entry = editor.entry; - if (entry.currentEditor != editor) { - throw new IllegalStateException(); - } - - // If this edit is creating the entry for the first time, every index must have a value. - if (success && !entry.readable) { - for (int i = 0; i < valueCount; i++) { - if (!editor.written[i]) { - editor.abort(); - throw new IllegalStateException("Newly created entry didn't create value for index " + i); - } - if (!entry.getDirtyFile(i).exists()) { - editor.abort(); - return; - } - } - } - - for (int i = 0; i < valueCount; i++) { - File dirty = entry.getDirtyFile(i); - if (success) { - if (dirty.exists()) { - File clean = entry.getCleanFile(i); - dirty.renameTo(clean); - long oldLength = entry.lengths[i]; - long newLength = clean.length(); - entry.lengths[i] = newLength; - size = size - oldLength + newLength; - } - } else { - deleteIfExists(dirty); - } - } - - redundantOpCount++; - entry.currentEditor = null; - if (entry.readable | success) { - entry.readable = true; - journalWriter.write(CLEAN + ' ' + entry.key + entry.getLengths() + '\n'); - if (success) { - entry.sequenceNumber = nextSequenceNumber++; - } - } else { - lruEntries.remove(entry.key); - journalWriter.write(REMOVE + ' ' + entry.key + '\n'); - } - journalWriter.flush(); - - if (size > maxSize || journalRebuildRequired()) { - executorService.submit(cleanupCallable); - } - } - - /** - * We only rebuild the journal when it will halve the size of the journal - * and eliminate at least 2000 ops. - */ - private boolean journalRebuildRequired() { - final int redundantOpCompactThreshold = 2000; - return redundantOpCount >= redundantOpCompactThreshold // - && redundantOpCount >= lruEntries.size(); - } - - /** - * Drops the entry for {@code key} if it exists and can be removed. Entries - * actively being edited cannot be removed. - * - * @return true if an entry was removed. - */ - public synchronized boolean remove(String key) throws IOException { - checkNotClosed(); - validateKey(key); - Entry entry = lruEntries.get(key); - if (entry == null || entry.currentEditor != null) { - return false; - } - - for (int i = 0; i < valueCount; i++) { - File file = entry.getCleanFile(i); - if (!file.delete()) { - throw new IOException("failed to delete " + file); - } - size -= entry.lengths[i]; - entry.lengths[i] = 0; - } - - redundantOpCount++; - journalWriter.append(REMOVE + ' ' + key + '\n'); - lruEntries.remove(key); - - if (journalRebuildRequired()) { - executorService.submit(cleanupCallable); - } - - return true; - } - - /** Returns true if this cache has been closed. */ - public boolean isClosed() { - return journalWriter == null; - } - - private void checkNotClosed() { - if (journalWriter == null) { - throw new IllegalStateException("cache is closed"); - } - } - - /** Force buffered operations to the filesystem. */ - public synchronized void flush() throws IOException { - checkNotClosed(); - trimToSize(); - journalWriter.flush(); - } - - /** Closes this cache. Stored values will remain on the filesystem. */ - public synchronized void close() throws IOException { - if (journalWriter == null) { - return; // Already closed. - } - for (Entry entry : new ArrayList(lruEntries.values())) { - if (entry.currentEditor != null) { - entry.currentEditor.abort(); - } - } - trimToSize(); - journalWriter.close(); - journalWriter = null; - } - - private void trimToSize() throws IOException { - while (size > maxSize) { - Map.Entry toEvict = lruEntries.entrySet().iterator().next(); - remove(toEvict.getKey()); - } - } - - /** - * Closes the cache and deletes all of its stored values. This will delete - * all files in the cache directory including files that weren't created by - * the cache. - */ - public void delete() throws IOException { - close(); - Util.deleteContents(directory); - } - - private void validateKey(String key) { - Matcher matcher = LEGAL_KEY_PATTERN.matcher(key); - if (!matcher.matches()) { - throw new IllegalArgumentException("keys must match regex [a-z0-9_-]{1,64}: \"" + key + "\""); - } - } - - private static String inputStreamToString(InputStream in) throws IOException { - return Util.readFully(new InputStreamReader(in, Util.UTF_8)); - } - - /** A snapshot of the values for an entry. */ - public final class Snapshot implements Closeable { - private final String key; - private final long sequenceNumber; - private final InputStream[] ins; - private final long[] lengths; - - private Snapshot(String key, long sequenceNumber, InputStream[] ins, long[] lengths) { - this.key = key; - this.sequenceNumber = sequenceNumber; - this.ins = ins; - this.lengths = lengths; - } - - /** - * Returns an editor for this snapshot's entry, or null if either the - * entry has changed since this snapshot was created or if another edit - * is in progress. - */ - public Editor edit() throws IOException { - return DiskLruCache.this.edit(key, sequenceNumber); - } - - /** Returns the unbuffered stream with the value for {@code index}. */ - public InputStream getInputStream(int index) { - return ins[index]; - } - - /** Returns the string value for {@code index}. */ - public String getString(int index) throws IOException { - return inputStreamToString(getInputStream(index)); - } - - /** Returns the byte length of the value for {@code index}. */ - public long getLength(int index) { - return lengths[index]; - } - - public void close() { - for (InputStream in : ins) { - Util.closeQuietly(in); - } - } - } - - private static final OutputStream NULL_OUTPUT_STREAM = new OutputStream() { - @Override - public void write(int b) throws IOException { - // Eat all writes silently. Nom nom. - } - }; - - /** Edits the values for an entry. */ - public final class Editor { - private final Entry entry; - private final boolean[] written; - private boolean hasErrors; - private boolean committed; - - private Editor(Entry entry) { - this.entry = entry; - this.written = (entry.readable) ? null : new boolean[valueCount]; - } - - /** - * Returns an unbuffered input stream to read the last committed value, - * or null if no value has been committed. - */ - public InputStream newInputStream(int index) throws IOException { - synchronized (DiskLruCache.this) { - if (entry.currentEditor != this) { - throw new IllegalStateException(); - } - if (!entry.readable) { - return null; - } - try { - return new FileInputStream(entry.getCleanFile(index)); - } catch (FileNotFoundException e) { - return null; - } - } - } - - /** - * Returns the last committed value as a string, or null if no value - * has been committed. - */ - public String getString(int index) throws IOException { - InputStream in = newInputStream(index); - return in != null ? inputStreamToString(in) : null; - } - - /** - * Returns a new unbuffered output stream to write the value at - * {@code index}. If the underlying output stream encounters errors - * when writing to the filesystem, this edit will be aborted when - * {@link #commit} is called. The returned output stream does not throw - * IOExceptions. - */ - public OutputStream newOutputStream(int index) throws IOException { - synchronized (DiskLruCache.this) { - if (entry.currentEditor != this) { - throw new IllegalStateException(); - } - if (!entry.readable) { - written[index] = true; - } - File dirtyFile = entry.getDirtyFile(index); - FileOutputStream outputStream; - try { - outputStream = new FileOutputStream(dirtyFile); - } catch (FileNotFoundException e) { - // Attempt to recreate the cache directory. - directory.mkdirs(); - try { - outputStream = new FileOutputStream(dirtyFile); - } catch (FileNotFoundException e2) { - // We are unable to recover. Silently eat the writes. - return NULL_OUTPUT_STREAM; - } - } - return new FaultHidingOutputStream(outputStream); - } - } - - /** Sets the value at {@code index} to {@code value}. */ - public void set(int index, String value) throws IOException { - Writer writer = null; - try { - writer = new OutputStreamWriter(newOutputStream(index), Util.UTF_8); - writer.write(value); - } finally { - Util.closeQuietly(writer); - } - } - - /** - * Commits this edit so it is visible to readers. This releases the - * edit lock so another edit may be started on the same key. - */ - public void commit() throws IOException { - if (hasErrors) { - completeEdit(this, false); - remove(entry.key); // The previous entry is stale. - } else { - completeEdit(this, true); - } - committed = true; - } - - /** - * Aborts this edit. This releases the edit lock so another edit may be - * started on the same key. - */ - public void abort() throws IOException { - completeEdit(this, false); - } - - public void abortUnlessCommitted() { - if (!committed) { - try { - abort(); - } catch (IOException ignored) { - } - } - } - - private class FaultHidingOutputStream extends FilterOutputStream { - private FaultHidingOutputStream(OutputStream out) { - super(out); - } - - @Override public void write(int oneByte) { - try { - out.write(oneByte); - } catch (IOException e) { - hasErrors = true; - } - } - - @Override public void write(byte[] buffer, int offset, int length) { - try { - out.write(buffer, offset, length); - } catch (IOException e) { - hasErrors = true; - } - } - - @Override public void close() { - try { - out.close(); - } catch (IOException e) { - hasErrors = true; - } - } - - @Override public void flush() { - try { - out.flush(); - } catch (IOException e) { - hasErrors = true; - } - } - } - } - - private final class Entry { - private final String key; - - /** Lengths of this entry's files. */ - private final long[] lengths; - - /** True if this entry has ever been published. */ - private boolean readable; - - /** The ongoing edit or null if this entry is not being edited. */ - private Editor currentEditor; - - /** The sequence number of the most recently committed edit to this entry. */ - private long sequenceNumber; - - private Entry(String key) { - this.key = key; - this.lengths = new long[valueCount]; - } - - public String getLengths() throws IOException { - StringBuilder result = new StringBuilder(); - for (long size : lengths) { - result.append(' ').append(size); - } - return result.toString(); - } - - /** Set lengths using decimal numbers like "10123". */ - private void setLengths(String[] strings) throws IOException { - if (strings.length != valueCount) { - throw invalidLengths(strings); - } - - try { - for (int i = 0; i < strings.length; i++) { - lengths[i] = Long.parseLong(strings[i]); - } - } catch (NumberFormatException e) { - throw invalidLengths(strings); - } - } - - private IOException invalidLengths(String[] strings) throws IOException { - throw new IOException("unexpected journal line: " + java.util.Arrays.toString(strings)); - } - - public File getCleanFile(int i) { - return new File(directory, key + "." + i); - } - - public File getDirtyFile(int i) { - return new File(directory, key + "." + i + ".tmp"); - } - } -} diff --git a/mobile/CordovaLib/src/com/squareup/okhttp/internal/Dns.java b/mobile/CordovaLib/src/com/squareup/okhttp/internal/Dns.java deleted file mode 100755 index 69b2d37e946..00000000000 --- a/mobile/CordovaLib/src/com/squareup/okhttp/internal/Dns.java +++ /dev/null @@ -1,33 +0,0 @@ -/* - * Copyright (C) 2012 Square, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package com.squareup.okhttp.internal; - -import java.net.InetAddress; -import java.net.UnknownHostException; - -/** - * Domain name service. Prefer this over {@link InetAddress#getAllByName} to - * make code more testable. - */ -public interface Dns { - Dns DEFAULT = new Dns() { - @Override public InetAddress[] getAllByName(String host) throws UnknownHostException { - return InetAddress.getAllByName(host); - } - }; - - InetAddress[] getAllByName(String host) throws UnknownHostException; -} diff --git a/mobile/CordovaLib/src/com/squareup/okhttp/internal/FaultRecoveringOutputStream.java b/mobile/CordovaLib/src/com/squareup/okhttp/internal/FaultRecoveringOutputStream.java deleted file mode 100755 index c32b27aebba..00000000000 --- a/mobile/CordovaLib/src/com/squareup/okhttp/internal/FaultRecoveringOutputStream.java +++ /dev/null @@ -1,163 +0,0 @@ -/* - * Copyright (C) 2013 Square, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package com.squareup.okhttp.internal; - -import java.io.ByteArrayOutputStream; -import java.io.IOException; -import java.io.OutputStream; - -import static com.squareup.okhttp.internal.Util.checkOffsetAndCount; - -/** - * An output stream wrapper that recovers from failures in the underlying stream - * by replacing it with another stream. This class buffers a fixed amount of - * data under the assumption that failures occur early in a stream's life. - * If a failure occurs after the buffer has been exhausted, no recovery is - * attempted. - * - *

Subclasses must override {@link #replacementStream} which will request a - * replacement stream each time an {@link IOException} is encountered on the - * current stream. - */ -public abstract class FaultRecoveringOutputStream extends AbstractOutputStream { - private final int maxReplayBufferLength; - - /** Bytes to transmit on the replacement stream, or null if no recovery is possible. */ - private ByteArrayOutputStream replayBuffer; - private OutputStream out; - - /** - * @param maxReplayBufferLength the maximum number of successfully written - * bytes to buffer so they can be replayed in the event of an error. - * Failure recoveries are not possible once this limit has been exceeded. - */ - public FaultRecoveringOutputStream(int maxReplayBufferLength, OutputStream out) { - if (maxReplayBufferLength < 0) throw new IllegalArgumentException(); - this.maxReplayBufferLength = maxReplayBufferLength; - this.replayBuffer = new ByteArrayOutputStream(maxReplayBufferLength); - this.out = out; - } - - @Override public final void write(byte[] buffer, int offset, int count) throws IOException { - if (closed) throw new IOException("stream closed"); - checkOffsetAndCount(buffer.length, offset, count); - - while (true) { - try { - out.write(buffer, offset, count); - - if (replayBuffer != null) { - if (count + replayBuffer.size() > maxReplayBufferLength) { - // Failure recovery is no longer possible once we overflow the replay buffer. - replayBuffer = null; - } else { - // Remember the written bytes to the replay buffer. - replayBuffer.write(buffer, offset, count); - } - } - return; - } catch (IOException e) { - if (!recover(e)) throw e; - } - } - } - - @Override public final void flush() throws IOException { - if (closed) { - return; // don't throw; this stream might have been closed on the caller's behalf - } - while (true) { - try { - out.flush(); - return; - } catch (IOException e) { - if (!recover(e)) throw e; - } - } - } - - @Override public final void close() throws IOException { - if (closed) { - return; - } - while (true) { - try { - out.close(); - closed = true; - return; - } catch (IOException e) { - if (!recover(e)) throw e; - } - } - } - - /** - * Attempt to replace {@code out} with another equivalent stream. Returns true - * if a suitable replacement stream was found. - */ - private boolean recover(IOException e) { - if (replayBuffer == null) { - return false; // Can't recover because we've dropped data that we would need to replay. - } - - while (true) { - OutputStream replacementStream = null; - try { - replacementStream = replacementStream(e); - if (replacementStream == null) { - return false; - } - replaceStream(replacementStream); - return true; - } catch (IOException replacementStreamFailure) { - // The replacement was also broken. Loop to ask for another replacement. - Util.closeQuietly(replacementStream); - e = replacementStreamFailure; - } - } - } - - /** - * Returns true if errors in the underlying stream can currently be recovered. - */ - public boolean isRecoverable() { - return replayBuffer != null; - } - - /** - * Replaces the current output stream with {@code replacementStream}, writing - * any replay bytes to it if they exist. The current output stream is closed. - */ - public final void replaceStream(OutputStream replacementStream) throws IOException { - if (!isRecoverable()) { - throw new IllegalStateException(); - } - if (this.out == replacementStream) { - return; // Don't replace a stream with itself. - } - replayBuffer.writeTo(replacementStream); - Util.closeQuietly(out); - out = replacementStream; - } - - /** - * Returns a replacement output stream to recover from {@code e} thrown by the - * previous stream. Returns a new OutputStream if recovery was successful, in - * which case all previously-written data will be replayed. Returns null if - * the failure cannot be recovered. - */ - protected abstract OutputStream replacementStream(IOException e) throws IOException; -} diff --git a/mobile/CordovaLib/src/com/squareup/okhttp/internal/NamedRunnable.java b/mobile/CordovaLib/src/com/squareup/okhttp/internal/NamedRunnable.java deleted file mode 100755 index 992b2ae4197..00000000000 --- a/mobile/CordovaLib/src/com/squareup/okhttp/internal/NamedRunnable.java +++ /dev/null @@ -1,40 +0,0 @@ -/* - * Copyright (C) 2013 Square, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package com.squareup.okhttp.internal; - -/** - * Runnable implementation which always sets its thread name. - */ -public abstract class NamedRunnable implements Runnable { - private final String name; - - public NamedRunnable(String format, Object... args) { - this.name = String.format(format, args); - } - - @Override public final void run() { - String oldName = Thread.currentThread().getName(); - Thread.currentThread().setName(name); - try { - execute(); - } finally { - Thread.currentThread().setName(oldName); - } - } - - protected abstract void execute(); -} diff --git a/mobile/CordovaLib/src/com/squareup/okhttp/internal/Platform.java b/mobile/CordovaLib/src/com/squareup/okhttp/internal/Platform.java deleted file mode 100755 index d5884b18480..00000000000 --- a/mobile/CordovaLib/src/com/squareup/okhttp/internal/Platform.java +++ /dev/null @@ -1,370 +0,0 @@ -/* - * Copyright (C) 2012 Square, Inc. - * Copyright (C) 2012 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package com.squareup.okhttp.internal; - -import java.io.IOException; -import java.io.OutputStream; -import java.io.UnsupportedEncodingException; -import java.lang.reflect.Constructor; -import java.lang.reflect.InvocationHandler; -import java.lang.reflect.InvocationTargetException; -import java.lang.reflect.Method; -import java.lang.reflect.Proxy; -import java.net.InetSocketAddress; -import java.net.Socket; -import java.net.SocketException; -import java.net.URI; -import java.net.URISyntaxException; -import java.net.URL; -import java.util.ArrayList; -import java.util.List; -import java.util.logging.Level; -import java.util.logging.Logger; -import java.util.zip.Deflater; -import java.util.zip.DeflaterOutputStream; -import javax.net.ssl.SSLSocket; - -/** - * Access to Platform-specific features necessary for SPDY and advanced TLS. - * - *

SPDY

- * SPDY requires a TLS extension called NPN (Next Protocol Negotiation) that's - * available in Android 4.1+ and OpenJDK 7+ (with the npn-boot extension). It - * also requires a recent version of {@code DeflaterOutputStream} that is - * public API in Java 7 and callable via reflection in Android 4.1+. - */ -public class Platform { - private static final Platform PLATFORM = findPlatform(); - - private Constructor deflaterConstructor; - - public static Platform get() { - return PLATFORM; - } - - /** Prefix used on custom headers. */ - public String getPrefix() { - return "OkHttp"; - } - - public void logW(String warning) { - System.out.println(warning); - } - - public void tagSocket(Socket socket) throws SocketException { - } - - public void untagSocket(Socket socket) throws SocketException { - } - - public URI toUriLenient(URL url) throws URISyntaxException { - return url.toURI(); // this isn't as good as the built-in toUriLenient - } - - /** - * Attempt a TLS connection with useful extensions enabled. This mode - * supports more features, but is less likely to be compatible with older - * HTTPS servers. - */ - public void enableTlsExtensions(SSLSocket socket, String uriHost) { - } - - /** - * Attempt a secure connection with basic functionality to maximize - * compatibility. Currently this uses SSL 3.0. - */ - public void supportTlsIntolerantServer(SSLSocket socket) { - socket.setEnabledProtocols(new String[] {"SSLv3"}); - } - - /** Returns the negotiated protocol, or null if no protocol was negotiated. */ - public byte[] getNpnSelectedProtocol(SSLSocket socket) { - return null; - } - - /** - * Sets client-supported protocols on a socket to send to a server. The - * protocols are only sent if the socket implementation supports NPN. - */ - public void setNpnProtocols(SSLSocket socket, byte[] npnProtocols) { - } - - public void connectSocket(Socket socket, InetSocketAddress address, - int connectTimeout) throws IOException { - socket.connect(address, connectTimeout); - } - - /** - * Returns a deflater output stream that supports SYNC_FLUSH for SPDY name - * value blocks. This throws an {@link UnsupportedOperationException} on - * Java 6 and earlier where there is no built-in API to do SYNC_FLUSH. - */ - public OutputStream newDeflaterOutputStream(OutputStream out, Deflater deflater, - boolean syncFlush) { - try { - Constructor constructor = deflaterConstructor; - if (constructor == null) { - constructor = deflaterConstructor = DeflaterOutputStream.class.getConstructor( - OutputStream.class, Deflater.class, boolean.class); - } - return constructor.newInstance(out, deflater, syncFlush); - } catch (NoSuchMethodException e) { - throw new UnsupportedOperationException("Cannot SPDY; no SYNC_FLUSH available"); - } catch (InvocationTargetException e) { - throw e.getCause() instanceof RuntimeException ? (RuntimeException) e.getCause() - : new RuntimeException(e.getCause()); - } catch (InstantiationException e) { - throw new RuntimeException(e); - } catch (IllegalAccessException e) { - throw new AssertionError(); - } - } - - /** Attempt to match the host runtime to a capable Platform implementation. */ - private static Platform findPlatform() { - // Attempt to find Android 2.3+ APIs. - Class openSslSocketClass; - Method setUseSessionTickets; - Method setHostname; - try { - try { - openSslSocketClass = Class.forName("com.android.org.conscrypt.OpenSSLSocketImpl"); - } catch (ClassNotFoundException ignored) { - // Older platform before being unbundled. - openSslSocketClass = Class.forName( - "org.apache.harmony.xnet.provider.jsse.OpenSSLSocketImpl"); - } - - setUseSessionTickets = openSslSocketClass.getMethod("setUseSessionTickets", boolean.class); - setHostname = openSslSocketClass.getMethod("setHostname", String.class); - - // Attempt to find Android 4.1+ APIs. - try { - Method setNpnProtocols = openSslSocketClass.getMethod("setNpnProtocols", byte[].class); - Method getNpnSelectedProtocol = openSslSocketClass.getMethod("getNpnSelectedProtocol"); - return new Android41(openSslSocketClass, setUseSessionTickets, setHostname, - setNpnProtocols, getNpnSelectedProtocol); - } catch (NoSuchMethodException ignored) { - return new Android23(openSslSocketClass, setUseSessionTickets, setHostname); - } - } catch (ClassNotFoundException ignored) { - // This isn't an Android runtime. - } catch (NoSuchMethodException ignored) { - // This isn't Android 2.3 or better. - } - - // Attempt to find the Jetty's NPN extension for OpenJDK. - try { - String npnClassName = "org.eclipse.jetty.npn.NextProtoNego"; - Class nextProtoNegoClass = Class.forName(npnClassName); - Class providerClass = Class.forName(npnClassName + "$Provider"); - Class clientProviderClass = Class.forName(npnClassName + "$ClientProvider"); - Class serverProviderClass = Class.forName(npnClassName + "$ServerProvider"); - Method putMethod = nextProtoNegoClass.getMethod("put", SSLSocket.class, providerClass); - Method getMethod = nextProtoNegoClass.getMethod("get", SSLSocket.class); - return new JdkWithJettyNpnPlatform( - putMethod, getMethod, clientProviderClass, serverProviderClass); - } catch (ClassNotFoundException ignored) { - // NPN isn't on the classpath. - } catch (NoSuchMethodException ignored) { - // The NPN version isn't what we expect. - } - - return new Platform(); - } - - /** Android version 2.3 and newer support TLS session tickets and server name indication (SNI). */ - private static class Android23 extends Platform { - protected final Class openSslSocketClass; - private final Method setUseSessionTickets; - private final Method setHostname; - - private Android23( - Class openSslSocketClass, Method setUseSessionTickets, Method setHostname) { - this.openSslSocketClass = openSslSocketClass; - this.setUseSessionTickets = setUseSessionTickets; - this.setHostname = setHostname; - } - - @Override public void connectSocket(Socket socket, InetSocketAddress address, - int connectTimeout) throws IOException { - try { - socket.connect(address, connectTimeout); - } catch (SecurityException se) { - // Before android 4.3, socket.connect could throw a SecurityException - // if opening a socket resulted in an EACCES error. - IOException ioException = new IOException("Exception in connect"); - ioException.initCause(se); - throw ioException; - } - } - - @Override public void enableTlsExtensions(SSLSocket socket, String uriHost) { - super.enableTlsExtensions(socket, uriHost); - if (openSslSocketClass.isInstance(socket)) { - // This is Android: use reflection on OpenSslSocketImpl. - try { - setUseSessionTickets.invoke(socket, true); - setHostname.invoke(socket, uriHost); - } catch (InvocationTargetException e) { - throw new RuntimeException(e); - } catch (IllegalAccessException e) { - throw new AssertionError(e); - } - } - } - } - - /** Android version 4.1 and newer support NPN. */ - private static class Android41 extends Android23 { - private final Method setNpnProtocols; - private final Method getNpnSelectedProtocol; - - private Android41(Class openSslSocketClass, Method setUseSessionTickets, Method setHostname, - Method setNpnProtocols, Method getNpnSelectedProtocol) { - super(openSslSocketClass, setUseSessionTickets, setHostname); - this.setNpnProtocols = setNpnProtocols; - this.getNpnSelectedProtocol = getNpnSelectedProtocol; - } - - @Override public void setNpnProtocols(SSLSocket socket, byte[] npnProtocols) { - if (!openSslSocketClass.isInstance(socket)) { - return; - } - try { - setNpnProtocols.invoke(socket, new Object[] {npnProtocols}); - } catch (IllegalAccessException e) { - throw new AssertionError(e); - } catch (InvocationTargetException e) { - throw new RuntimeException(e); - } - } - - @Override public byte[] getNpnSelectedProtocol(SSLSocket socket) { - if (!openSslSocketClass.isInstance(socket)) { - return null; - } - try { - return (byte[]) getNpnSelectedProtocol.invoke(socket); - } catch (InvocationTargetException e) { - throw new RuntimeException(e); - } catch (IllegalAccessException e) { - throw new AssertionError(e); - } - } - } - - /** OpenJDK 7 plus {@code org.mortbay.jetty.npn/npn-boot} on the boot class path. */ - private static class JdkWithJettyNpnPlatform extends Platform { - private final Method getMethod; - private final Method putMethod; - private final Class clientProviderClass; - private final Class serverProviderClass; - - public JdkWithJettyNpnPlatform(Method putMethod, Method getMethod, Class clientProviderClass, - Class serverProviderClass) { - this.putMethod = putMethod; - this.getMethod = getMethod; - this.clientProviderClass = clientProviderClass; - this.serverProviderClass = serverProviderClass; - } - - @Override public void setNpnProtocols(SSLSocket socket, byte[] npnProtocols) { - try { - List strings = new ArrayList(); - for (int i = 0; i < npnProtocols.length; ) { - int length = npnProtocols[i++]; - strings.add(new String(npnProtocols, i, length, "US-ASCII")); - i += length; - } - Object provider = Proxy.newProxyInstance(Platform.class.getClassLoader(), - new Class[] {clientProviderClass, serverProviderClass}, - new JettyNpnProvider(strings)); - putMethod.invoke(null, socket, provider); - } catch (UnsupportedEncodingException e) { - throw new AssertionError(e); - } catch (InvocationTargetException e) { - throw new AssertionError(e); - } catch (IllegalAccessException e) { - throw new AssertionError(e); - } - } - - @Override public byte[] getNpnSelectedProtocol(SSLSocket socket) { - try { - JettyNpnProvider provider = - (JettyNpnProvider) Proxy.getInvocationHandler(getMethod.invoke(null, socket)); - if (!provider.unsupported && provider.selected == null) { - Logger logger = Logger.getLogger("com.squareup.okhttp.OkHttpClient"); - logger.log(Level.INFO, - "NPN callback dropped so SPDY is disabled. " + "Is npn-boot on the boot class path?"); - return null; - } - return provider.unsupported ? null : provider.selected.getBytes("US-ASCII"); - } catch (UnsupportedEncodingException e) { - throw new AssertionError(); - } catch (InvocationTargetException e) { - throw new AssertionError(); - } catch (IllegalAccessException e) { - throw new AssertionError(); - } - } - } - - /** - * Handle the methods of NextProtoNego's ClientProvider and ServerProvider - * without a compile-time dependency on those interfaces. - */ - private static class JettyNpnProvider implements InvocationHandler { - private final List protocols; - private boolean unsupported; - private String selected; - - public JettyNpnProvider(List protocols) { - this.protocols = protocols; - } - - @Override public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { - String methodName = method.getName(); - Class returnType = method.getReturnType(); - if (args == null) { - args = Util.EMPTY_STRING_ARRAY; - } - if (methodName.equals("supports") && boolean.class == returnType) { - return true; - } else if (methodName.equals("unsupported") && void.class == returnType) { - this.unsupported = true; - return null; - } else if (methodName.equals("protocols") && args.length == 0) { - return protocols; - } else if (methodName.equals("selectProtocol") - && String.class == returnType - && args.length == 1 - && (args[0] == null || args[0] instanceof List)) { - // TODO: use OpenSSL's algorithm which uses both lists - List serverProtocols = (List) args[0]; - this.selected = protocols.get(0); - return selected; - } else if (methodName.equals("protocolSelected") && args.length == 1) { - this.selected = (String) args[0]; - return null; - } else { - return method.invoke(this, args); - } - } - } -} diff --git a/mobile/CordovaLib/src/com/squareup/okhttp/internal/StrictLineReader.java b/mobile/CordovaLib/src/com/squareup/okhttp/internal/StrictLineReader.java deleted file mode 100755 index 74af6fd5332..00000000000 --- a/mobile/CordovaLib/src/com/squareup/okhttp/internal/StrictLineReader.java +++ /dev/null @@ -1,207 +0,0 @@ -/* - * Copyright (C) 2012 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package com.squareup.okhttp.internal; - -import java.io.ByteArrayOutputStream; -import java.io.Closeable; -import java.io.EOFException; -import java.io.IOException; -import java.io.InputStream; -import java.io.UnsupportedEncodingException; -import java.nio.charset.Charset; - -/** - * Buffers input from an {@link InputStream} for reading lines. - * - *

This class is used for buffered reading of lines. For purposes of this class, a line ends with - * "\n" or "\r\n". End of input is reported by throwing {@code EOFException}. Unterminated line at - * end of input is invalid and will be ignored, the caller may use {@code hasUnterminatedLine()} - * to detect it after catching the {@code EOFException}. - * - *

This class is intended for reading input that strictly consists of lines, such as line-based - * cache entries or cache journal. Unlike the {@link java.io.BufferedReader} which in conjunction - * with {@link java.io.InputStreamReader} provides similar functionality, this class uses different - * end-of-input reporting and a more restrictive definition of a line. - * - *

This class supports only charsets that encode '\r' and '\n' as a single byte with value 13 - * and 10, respectively, and the representation of no other character contains these values. - * We currently check in constructor that the charset is one of US-ASCII, UTF-8 and ISO-8859-1. - * The default charset is US_ASCII. - */ -public class StrictLineReader implements Closeable { - private static final byte CR = (byte) '\r'; - private static final byte LF = (byte) '\n'; - - private final InputStream in; - private final Charset charset; - - /* - * Buffered data is stored in {@code buf}. As long as no exception occurs, 0 <= pos <= end - * and the data in the range [pos, end) is buffered for reading. At end of input, if there is - * an unterminated line, we set end == -1, otherwise end == pos. If the underlying - * {@code InputStream} throws an {@code IOException}, end may remain as either pos or -1. - */ - private byte[] buf; - private int pos; - private int end; - - /** - * Constructs a new {@code LineReader} with the specified charset and the default capacity. - * - * @param in the {@code InputStream} to read data from. - * @param charset the charset used to decode data. Only US-ASCII, UTF-8 and ISO-8859-1 are - * supported. - * @throws NullPointerException if {@code in} or {@code charset} is null. - * @throws IllegalArgumentException if the specified charset is not supported. - */ - public StrictLineReader(InputStream in, Charset charset) { - this(in, 8192, charset); - } - - /** - * Constructs a new {@code LineReader} with the specified capacity and charset. - * - * @param in the {@code InputStream} to read data from. - * @param capacity the capacity of the buffer. - * @param charset the charset used to decode data. Only US-ASCII, UTF-8 and ISO-8859-1 are - * supported. - * @throws NullPointerException if {@code in} or {@code charset} is null. - * @throws IllegalArgumentException if {@code capacity} is negative or zero - * or the specified charset is not supported. - */ - public StrictLineReader(InputStream in, int capacity, Charset charset) { - if (in == null || charset == null) { - throw new NullPointerException(); - } - if (capacity < 0) { - throw new IllegalArgumentException("capacity <= 0"); - } - if (!(charset.equals(Util.US_ASCII))) { - throw new IllegalArgumentException("Unsupported encoding"); - } - - this.in = in; - this.charset = charset; - buf = new byte[capacity]; - } - - /** - * Closes the reader by closing the underlying {@code InputStream} and - * marking this reader as closed. - * - * @throws IOException for errors when closing the underlying {@code InputStream}. - */ - public void close() throws IOException { - synchronized (in) { - if (buf != null) { - buf = null; - in.close(); - } - } - } - - /** - * Reads the next line. A line ends with {@code "\n"} or {@code "\r\n"}, - * this end of line marker is not included in the result. - * - * @return the next line from the input. - * @throws IOException for underlying {@code InputStream} errors. - * @throws EOFException for the end of source stream. - */ - public String readLine() throws IOException { - synchronized (in) { - if (buf == null) { - throw new IOException("LineReader is closed"); - } - - // Read more data if we are at the end of the buffered data. - // Though it's an error to read after an exception, we will let {@code fillBuf()} - // throw again if that happens; thus we need to handle end == -1 as well as end == pos. - if (pos >= end) { - fillBuf(); - } - // Try to find LF in the buffered data and return the line if successful. - for (int i = pos; i != end; ++i) { - if (buf[i] == LF) { - int lineEnd = (i != pos && buf[i - 1] == CR) ? i - 1 : i; - String res = new String(buf, pos, lineEnd - pos, charset.name()); - pos = i + 1; - return res; - } - } - - // Let's anticipate up to 80 characters on top of those already read. - ByteArrayOutputStream out = new ByteArrayOutputStream(end - pos + 80) { - @Override public String toString() { - int length = (count > 0 && buf[count - 1] == CR) ? count - 1 : count; - try { - return new String(buf, 0, length, charset.name()); - } catch (UnsupportedEncodingException e) { - throw new AssertionError(e); // Since we control the charset this will never happen. - } - } - }; - - while (true) { - out.write(buf, pos, end - pos); - // Mark unterminated line in case fillBuf throws EOFException or IOException. - end = -1; - fillBuf(); - // Try to find LF in the buffered data and return the line if successful. - for (int i = pos; i != end; ++i) { - if (buf[i] == LF) { - if (i != pos) { - out.write(buf, pos, i - pos); - } - pos = i + 1; - return out.toString(); - } - } - } - } - } - - /** - * Read an {@code int} from a line containing its decimal representation. - * - * @return the value of the {@code int} from the next line. - * @throws IOException for underlying {@code InputStream} errors or conversion error. - * @throws EOFException for the end of source stream. - */ - public int readInt() throws IOException { - String intString = readLine(); - try { - return Integer.parseInt(intString); - } catch (NumberFormatException e) { - throw new IOException("expected an int but was \"" + intString + "\""); - } - } - - /** - * Reads new input data into the buffer. Call only with pos == end or end == -1, - * depending on the desired outcome if the function throws. - */ - private void fillBuf() throws IOException { - int result = in.read(buf, 0, buf.length); - if (result == -1) { - throw new EOFException(); - } - pos = 0; - end = result; - } -} - diff --git a/mobile/CordovaLib/src/com/squareup/okhttp/internal/Util.java b/mobile/CordovaLib/src/com/squareup/okhttp/internal/Util.java deleted file mode 100755 index 9c5b008a20f..00000000000 --- a/mobile/CordovaLib/src/com/squareup/okhttp/internal/Util.java +++ /dev/null @@ -1,394 +0,0 @@ -/* - * Copyright (C) 2012 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package com.squareup.okhttp.internal; - -import java.io.Closeable; -import java.io.EOFException; -import java.io.File; -import java.io.IOException; -import java.io.InputStream; -import java.io.OutputStream; -import java.io.Reader; -import java.io.StringWriter; -import java.io.UnsupportedEncodingException; -import java.net.Socket; -import java.net.ServerSocket; -import java.net.URI; -import java.net.URL; -import java.nio.ByteOrder; -import java.nio.charset.Charset; -import java.security.MessageDigest; -import java.security.NoSuchAlgorithmException; -import java.util.ArrayList; -import java.util.Collections; -import java.util.List; -import java.util.concurrent.ThreadFactory; -import java.util.concurrent.atomic.AtomicReference; - -/** Junk drawer of utility methods. */ -public final class Util { - public static final byte[] EMPTY_BYTE_ARRAY = new byte[0]; - public static final String[] EMPTY_STRING_ARRAY = new String[0]; - - /** A cheap and type-safe constant for the ISO-8859-1 Charset. */ - public static final Charset ISO_8859_1 = Charset.forName("ISO-8859-1"); - - /** A cheap and type-safe constant for the US-ASCII Charset. */ - public static final Charset US_ASCII = Charset.forName("US-ASCII"); - - /** A cheap and type-safe constant for the UTF-8 Charset. */ - public static final Charset UTF_8 = Charset.forName("UTF-8"); - private static AtomicReference skipBuffer = new AtomicReference(); - - private static final char[] DIGITS = - { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f' }; - - private Util() { - } - - public static int getEffectivePort(URI uri) { - return getEffectivePort(uri.getScheme(), uri.getPort()); - } - - public static int getEffectivePort(URL url) { - return getEffectivePort(url.getProtocol(), url.getPort()); - } - - private static int getEffectivePort(String scheme, int specifiedPort) { - return specifiedPort != -1 ? specifiedPort : getDefaultPort(scheme); - } - - public static int getDefaultPort(String scheme) { - if ("http".equalsIgnoreCase(scheme)) { - return 80; - } else if ("https".equalsIgnoreCase(scheme)) { - return 443; - } else { - return -1; - } - } - - public static void checkOffsetAndCount(int arrayLength, int offset, int count) { - if ((offset | count) < 0 || offset > arrayLength || arrayLength - offset < count) { - throw new ArrayIndexOutOfBoundsException(); - } - } - - public static void pokeInt(byte[] dst, int offset, int value, ByteOrder order) { - if (order == ByteOrder.BIG_ENDIAN) { - dst[offset++] = (byte) ((value >> 24) & 0xff); - dst[offset++] = (byte) ((value >> 16) & 0xff); - dst[offset++] = (byte) ((value >> 8) & 0xff); - dst[offset] = (byte) ((value >> 0) & 0xff); - } else { - dst[offset++] = (byte) ((value >> 0) & 0xff); - dst[offset++] = (byte) ((value >> 8) & 0xff); - dst[offset++] = (byte) ((value >> 16) & 0xff); - dst[offset] = (byte) ((value >> 24) & 0xff); - } - } - - /** Returns true if two possibly-null objects are equal. */ - public static boolean equal(Object a, Object b) { - return a == b || (a != null && a.equals(b)); - } - - /** - * Closes {@code closeable}, ignoring any checked exceptions. Does nothing - * if {@code closeable} is null. - */ - public static void closeQuietly(Closeable closeable) { - if (closeable != null) { - try { - closeable.close(); - } catch (RuntimeException rethrown) { - throw rethrown; - } catch (Exception ignored) { - } - } - } - - /** - * Closes {@code socket}, ignoring any checked exceptions. Does nothing if - * {@code socket} is null. - */ - public static void closeQuietly(Socket socket) { - if (socket != null) { - try { - socket.close(); - } catch (RuntimeException rethrown) { - throw rethrown; - } catch (Exception ignored) { - } - } - } - - /** - * Closes {@code serverSocket}, ignoring any checked exceptions. Does nothing if - * {@code serverSocket} is null. - */ - public static void closeQuietly(ServerSocket serverSocket) { - if (serverSocket != null) { - try { - serverSocket.close(); - } catch (RuntimeException rethrown) { - throw rethrown; - } catch (Exception ignored) { - } - } - } - - /** - * Closes {@code a} and {@code b}. If either close fails, this completes - * the other close and rethrows the first encountered exception. - */ - public static void closeAll(Closeable a, Closeable b) throws IOException { - Throwable thrown = null; - try { - a.close(); - } catch (Throwable e) { - thrown = e; - } - try { - b.close(); - } catch (Throwable e) { - if (thrown == null) thrown = e; - } - if (thrown == null) return; - if (thrown instanceof IOException) throw (IOException) thrown; - if (thrown instanceof RuntimeException) throw (RuntimeException) thrown; - if (thrown instanceof Error) throw (Error) thrown; - throw new AssertionError(thrown); - } - - /** - * Deletes the contents of {@code dir}. Throws an IOException if any file - * could not be deleted, or if {@code dir} is not a readable directory. - */ - public static void deleteContents(File dir) throws IOException { - File[] files = dir.listFiles(); - if (files == null) { - throw new IOException("not a readable directory: " + dir); - } - for (File file : files) { - if (file.isDirectory()) { - deleteContents(file); - } - if (!file.delete()) { - throw new IOException("failed to delete file: " + file); - } - } - } - - /** - * Implements InputStream.read(int) in terms of InputStream.read(byte[], int, int). - * InputStream assumes that you implement InputStream.read(int) and provides default - * implementations of the others, but often the opposite is more efficient. - */ - public static int readSingleByte(InputStream in) throws IOException { - byte[] buffer = new byte[1]; - int result = in.read(buffer, 0, 1); - return (result != -1) ? buffer[0] & 0xff : -1; - } - - /** - * Implements OutputStream.write(int) in terms of OutputStream.write(byte[], int, int). - * OutputStream assumes that you implement OutputStream.write(int) and provides default - * implementations of the others, but often the opposite is more efficient. - */ - public static void writeSingleByte(OutputStream out, int b) throws IOException { - byte[] buffer = new byte[1]; - buffer[0] = (byte) (b & 0xff); - out.write(buffer); - } - - /** - * Fills 'dst' with bytes from 'in', throwing EOFException if insufficient bytes are available. - */ - public static void readFully(InputStream in, byte[] dst) throws IOException { - readFully(in, dst, 0, dst.length); - } - - /** - * Reads exactly 'byteCount' bytes from 'in' (into 'dst' at offset 'offset'), and throws - * EOFException if insufficient bytes are available. - * - * Used to implement {@link java.io.DataInputStream#readFully(byte[], int, int)}. - */ - public static void readFully(InputStream in, byte[] dst, int offset, int byteCount) - throws IOException { - if (byteCount == 0) { - return; - } - if (in == null) { - throw new NullPointerException("in == null"); - } - if (dst == null) { - throw new NullPointerException("dst == null"); - } - checkOffsetAndCount(dst.length, offset, byteCount); - while (byteCount > 0) { - int bytesRead = in.read(dst, offset, byteCount); - if (bytesRead < 0) { - throw new EOFException(); - } - offset += bytesRead; - byteCount -= bytesRead; - } - } - - /** Returns the remainder of 'reader' as a string, closing it when done. */ - public static String readFully(Reader reader) throws IOException { - try { - StringWriter writer = new StringWriter(); - char[] buffer = new char[1024]; - int count; - while ((count = reader.read(buffer)) != -1) { - writer.write(buffer, 0, count); - } - return writer.toString(); - } finally { - reader.close(); - } - } - - public static void skipAll(InputStream in) throws IOException { - do { - in.skip(Long.MAX_VALUE); - } while (in.read() != -1); - } - - /** - * Call {@code in.read()} repeatedly until either the stream is exhausted or - * {@code byteCount} bytes have been read. - * - *

This method reuses the skip buffer but is careful to never use it at - * the same time that another stream is using it. Otherwise streams that use - * the caller's buffer for consistency checks like CRC could be clobbered by - * other threads. A thread-local buffer is also insufficient because some - * streams may call other streams in their skip() method, also clobbering the - * buffer. - */ - public static long skipByReading(InputStream in, long byteCount) throws IOException { - if (byteCount == 0) return 0L; - - // acquire the shared skip buffer. - byte[] buffer = skipBuffer.getAndSet(null); - if (buffer == null) { - buffer = new byte[4096]; - } - - long skipped = 0; - while (skipped < byteCount) { - int toRead = (int) Math.min(byteCount - skipped, buffer.length); - int read = in.read(buffer, 0, toRead); - if (read == -1) { - break; - } - skipped += read; - if (read < toRead) { - break; - } - } - - // release the shared skip buffer. - skipBuffer.set(buffer); - - return skipped; - } - - /** - * Copies all of the bytes from {@code in} to {@code out}. Neither stream is closed. - * Returns the total number of bytes transferred. - */ - public static int copy(InputStream in, OutputStream out) throws IOException { - int total = 0; - byte[] buffer = new byte[8192]; - int c; - while ((c = in.read(buffer)) != -1) { - total += c; - out.write(buffer, 0, c); - } - return total; - } - - /** - * Returns the ASCII characters up to but not including the next "\r\n", or - * "\n". - * - * @throws java.io.EOFException if the stream is exhausted before the next newline - * character. - */ - public static String readAsciiLine(InputStream in) throws IOException { - // TODO: support UTF-8 here instead - StringBuilder result = new StringBuilder(80); - while (true) { - int c = in.read(); - if (c == -1) { - throw new EOFException(); - } else if (c == '\n') { - break; - } - - result.append((char) c); - } - int length = result.length(); - if (length > 0 && result.charAt(length - 1) == '\r') { - result.setLength(length - 1); - } - return result.toString(); - } - - /** Returns a 32 character string containing a hash of {@code s}. */ - public static String hash(String s) { - try { - MessageDigest messageDigest = MessageDigest.getInstance("MD5"); - byte[] md5bytes = messageDigest.digest(s.getBytes("UTF-8")); - return bytesToHexString(md5bytes); - } catch (NoSuchAlgorithmException e) { - throw new AssertionError(e); - } catch (UnsupportedEncodingException e) { - throw new AssertionError(e); - } - } - - private static String bytesToHexString(byte[] bytes) { - char[] digits = DIGITS; - char[] buf = new char[bytes.length * 2]; - int c = 0; - for (byte b : bytes) { - buf[c++] = digits[(b >> 4) & 0xf]; - buf[c++] = digits[b & 0xf]; - } - return new String(buf); - } - - /** Returns an immutable copy of {@code list}. */ - public static List immutableList(List list) { - return Collections.unmodifiableList(new ArrayList(list)); - } - - public static ThreadFactory daemonThreadFactory(final String name) { - return new ThreadFactory() { - @Override public Thread newThread(Runnable runnable) { - Thread result = new Thread(runnable, name); - result.setDaemon(true); - return result; - } - }; - } -} diff --git a/mobile/CordovaLib/src/com/squareup/okhttp/internal/http/AbstractHttpInputStream.java b/mobile/CordovaLib/src/com/squareup/okhttp/internal/http/AbstractHttpInputStream.java deleted file mode 100755 index a5d39b30a4c..00000000000 --- a/mobile/CordovaLib/src/com/squareup/okhttp/internal/http/AbstractHttpInputStream.java +++ /dev/null @@ -1,107 +0,0 @@ -/* - * Copyright (C) 2010 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package com.squareup.okhttp.internal.http; - -import com.squareup.okhttp.internal.Util; -import java.io.IOException; -import java.io.InputStream; -import java.io.OutputStream; -import java.net.CacheRequest; - -/** - * An input stream for the body of an HTTP response. - * - *

Since a single socket's input stream may be used to read multiple HTTP - * responses from the same server, subclasses shouldn't close the socket stream. - * - *

A side effect of reading an HTTP response is that the response cache - * is populated. If the stream is closed early, that cache entry will be - * invalidated. - */ -abstract class AbstractHttpInputStream extends InputStream { - protected final InputStream in; - protected final HttpEngine httpEngine; - private final CacheRequest cacheRequest; - private final OutputStream cacheBody; - protected boolean closed; - - AbstractHttpInputStream(InputStream in, HttpEngine httpEngine, CacheRequest cacheRequest) - throws IOException { - this.in = in; - this.httpEngine = httpEngine; - - OutputStream cacheBody = cacheRequest != null ? cacheRequest.getBody() : null; - - // some apps return a null body; for compatibility we treat that like a null cache request - if (cacheBody == null) { - cacheRequest = null; - } - - this.cacheBody = cacheBody; - this.cacheRequest = cacheRequest; - } - - /** - * read() is implemented using read(byte[], int, int) so subclasses only - * need to override the latter. - */ - @Override public final int read() throws IOException { - return Util.readSingleByte(this); - } - - protected final void checkNotClosed() throws IOException { - if (closed) { - throw new IOException("stream closed"); - } - } - - protected final void cacheWrite(byte[] buffer, int offset, int count) throws IOException { - if (cacheBody != null) { - cacheBody.write(buffer, offset, count); - } - } - - /** - * Closes the cache entry and makes the socket available for reuse. This - * should be invoked when the end of the body has been reached. - */ - protected final void endOfInput() throws IOException { - if (cacheRequest != null) { - cacheBody.close(); - } - httpEngine.release(false); - } - - /** - * Calls abort on the cache entry and disconnects the socket. This - * should be invoked when the connection is closed unexpectedly to - * invalidate the cache entry and to prevent the HTTP connection from - * being reused. HTTP messages are sent in serial so whenever a message - * cannot be read to completion, subsequent messages cannot be read - * either and the connection must be discarded. - * - *

An earlier implementation skipped the remaining bytes, but this - * requires that the entire transfer be completed. If the intention was - * to cancel the transfer, closing the connection is the only solution. - */ - protected final void unexpectedEndOfInput() { - if (cacheRequest != null) { - cacheRequest.abort(); - } - httpEngine.release(true); - } -} diff --git a/mobile/CordovaLib/src/com/squareup/okhttp/internal/http/HeaderParser.java b/mobile/CordovaLib/src/com/squareup/okhttp/internal/http/HeaderParser.java deleted file mode 100755 index d5f0f4f9b8d..00000000000 --- a/mobile/CordovaLib/src/com/squareup/okhttp/internal/http/HeaderParser.java +++ /dev/null @@ -1,112 +0,0 @@ -/* - * Copyright (C) 2011 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package com.squareup.okhttp.internal.http; - -final class HeaderParser { - - public interface CacheControlHandler { - void handle(String directive, String parameter); - } - - /** Parse a comma-separated list of cache control header values. */ - public static void parseCacheControl(String value, CacheControlHandler handler) { - int pos = 0; - while (pos < value.length()) { - int tokenStart = pos; - pos = skipUntil(value, pos, "=,;"); - String directive = value.substring(tokenStart, pos).trim(); - - if (pos == value.length() || value.charAt(pos) == ',' || value.charAt(pos) == ';') { - pos++; // consume ',' or ';' (if necessary) - handler.handle(directive, null); - continue; - } - - pos++; // consume '=' - pos = skipWhitespace(value, pos); - - String parameter; - - // quoted string - if (pos < value.length() && value.charAt(pos) == '\"') { - pos++; // consume '"' open quote - int parameterStart = pos; - pos = skipUntil(value, pos, "\""); - parameter = value.substring(parameterStart, pos); - pos++; // consume '"' close quote (if necessary) - - // unquoted string - } else { - int parameterStart = pos; - pos = skipUntil(value, pos, ",;"); - parameter = value.substring(parameterStart, pos).trim(); - } - - handler.handle(directive, parameter); - } - } - - /** - * Returns the next index in {@code input} at or after {@code pos} that - * contains a character from {@code characters}. Returns the input length if - * none of the requested characters can be found. - */ - public static int skipUntil(String input, int pos, String characters) { - for (; pos < input.length(); pos++) { - if (characters.indexOf(input.charAt(pos)) != -1) { - break; - } - } - return pos; - } - - /** - * Returns the next non-whitespace character in {@code input} that is white - * space. Result is undefined if input contains newline characters. - */ - public static int skipWhitespace(String input, int pos) { - for (; pos < input.length(); pos++) { - char c = input.charAt(pos); - if (c != ' ' && c != '\t') { - break; - } - } - return pos; - } - - /** - * Returns {@code value} as a positive integer, or 0 if it is negative, or - * -1 if it cannot be parsed. - */ - public static int parseSeconds(String value) { - try { - long seconds = Long.parseLong(value); - if (seconds > Integer.MAX_VALUE) { - return Integer.MAX_VALUE; - } else if (seconds < 0) { - return 0; - } else { - return (int) seconds; - } - } catch (NumberFormatException e) { - return -1; - } - } - - private HeaderParser() { - } -} diff --git a/mobile/CordovaLib/src/com/squareup/okhttp/internal/http/HttpAuthenticator.java b/mobile/CordovaLib/src/com/squareup/okhttp/internal/http/HttpAuthenticator.java deleted file mode 100755 index 1ad36898e86..00000000000 --- a/mobile/CordovaLib/src/com/squareup/okhttp/internal/http/HttpAuthenticator.java +++ /dev/null @@ -1,166 +0,0 @@ -/* - * Copyright (C) 2012 Square, Inc. - * Copyright (C) 2011 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package com.squareup.okhttp.internal.http; - -import com.squareup.okhttp.OkAuthenticator; -import com.squareup.okhttp.OkAuthenticator.Challenge; -import java.io.IOException; -import java.net.Authenticator; -import java.net.InetAddress; -import java.net.InetSocketAddress; -import java.net.PasswordAuthentication; -import java.net.Proxy; -import java.net.URL; -import java.util.ArrayList; -import java.util.List; - -import static com.squareup.okhttp.OkAuthenticator.Credential; -import static java.net.HttpURLConnection.HTTP_PROXY_AUTH; -import static java.net.HttpURLConnection.HTTP_UNAUTHORIZED; - -/** Handles HTTP authentication headers from origin and proxy servers. */ -public final class HttpAuthenticator { - /** Uses the global authenticator to get the password. */ - public static final OkAuthenticator SYSTEM_DEFAULT = new OkAuthenticator() { - @Override public Credential authenticate( - Proxy proxy, URL url, List challenges) throws IOException { - for (Challenge challenge : challenges) { - if (!"Basic".equalsIgnoreCase(challenge.getScheme())) { - continue; - } - - PasswordAuthentication auth = Authenticator.requestPasswordAuthentication(url.getHost(), - getConnectToInetAddress(proxy, url), url.getPort(), url.getProtocol(), - challenge.getRealm(), challenge.getScheme(), url, Authenticator.RequestorType.SERVER); - if (auth != null) { - return Credential.basic(auth.getUserName(), new String(auth.getPassword())); - } - } - return null; - } - - @Override public Credential authenticateProxy( - Proxy proxy, URL url, List challenges) throws IOException { - for (Challenge challenge : challenges) { - if (!"Basic".equalsIgnoreCase(challenge.getScheme())) { - continue; - } - - InetSocketAddress proxyAddress = (InetSocketAddress) proxy.address(); - PasswordAuthentication auth = Authenticator.requestPasswordAuthentication( - proxyAddress.getHostName(), getConnectToInetAddress(proxy, url), proxyAddress.getPort(), - url.getProtocol(), challenge.getRealm(), challenge.getScheme(), url, - Authenticator.RequestorType.PROXY); - if (auth != null) { - return Credential.basic(auth.getUserName(), new String(auth.getPassword())); - } - } - return null; - } - - private InetAddress getConnectToInetAddress(Proxy proxy, URL url) throws IOException { - return (proxy != null && proxy.type() != Proxy.Type.DIRECT) - ? ((InetSocketAddress) proxy.address()).getAddress() - : InetAddress.getByName(url.getHost()); - } - }; - - private HttpAuthenticator() { - } - - /** - * React to a failed authorization response by looking up new credentials. - * - * @return true if credentials have been added to successorRequestHeaders - * and another request should be attempted. - */ - public static boolean processAuthHeader(OkAuthenticator authenticator, int responseCode, - RawHeaders responseHeaders, RawHeaders successorRequestHeaders, Proxy proxy, URL url) - throws IOException { - String responseField; - String requestField; - if (responseCode == HTTP_UNAUTHORIZED) { - responseField = "WWW-Authenticate"; - requestField = "Authorization"; - } else if (responseCode == HTTP_PROXY_AUTH) { - responseField = "Proxy-Authenticate"; - requestField = "Proxy-Authorization"; - } else { - throw new IllegalArgumentException(); // TODO: ProtocolException? - } - List challenges = parseChallenges(responseHeaders, responseField); - if (challenges.isEmpty()) { - return false; // Could not find a challenge so end the request cycle. - } - Credential credential = responseHeaders.getResponseCode() == HTTP_PROXY_AUTH - ? authenticator.authenticateProxy(proxy, url, challenges) - : authenticator.authenticate(proxy, url, challenges); - if (credential == null) { - return false; // Could not satisfy the challenge so end the request cycle. - } - // Add authorization credentials, bypassing the already-connected check. - successorRequestHeaders.set(requestField, credential.getHeaderValue()); - return true; - } - - /** - * Parse RFC 2617 challenges. This API is only interested in the scheme - * name and realm. - */ - private static List parseChallenges(RawHeaders responseHeaders, - String challengeHeader) { - // auth-scheme = token - // auth-param = token "=" ( token | quoted-string ) - // challenge = auth-scheme 1*SP 1#auth-param - // realm = "realm" "=" realm-value - // realm-value = quoted-string - List result = new ArrayList(); - for (int h = 0; h < responseHeaders.length(); h++) { - if (!challengeHeader.equalsIgnoreCase(responseHeaders.getFieldName(h))) { - continue; - } - String value = responseHeaders.getValue(h); - int pos = 0; - while (pos < value.length()) { - int tokenStart = pos; - pos = HeaderParser.skipUntil(value, pos, " "); - - String scheme = value.substring(tokenStart, pos).trim(); - pos = HeaderParser.skipWhitespace(value, pos); - - // TODO: This currently only handles schemes with a 'realm' parameter; - // It needs to be fixed to handle any scheme and any parameters - // http://code.google.com/p/android/issues/detail?id=11140 - - if (!value.regionMatches(true, pos, "realm=\"", 0, "realm=\"".length())) { - break; // Unexpected challenge parameter; give up! - } - - pos += "realm=\"".length(); - int realmStart = pos; - pos = HeaderParser.skipUntil(value, pos, "\""); - String realm = value.substring(realmStart, pos); - pos++; // Consume '"' close quote. - pos = HeaderParser.skipUntil(value, pos, ","); - pos++; // Consume ',' comma. - pos = HeaderParser.skipWhitespace(value, pos); - result.add(new Challenge(scheme, realm)); - } - } - return result; - } -} diff --git a/mobile/CordovaLib/src/com/squareup/okhttp/internal/http/HttpDate.java b/mobile/CordovaLib/src/com/squareup/okhttp/internal/http/HttpDate.java deleted file mode 100755 index b4d2c7c07dc..00000000000 --- a/mobile/CordovaLib/src/com/squareup/okhttp/internal/http/HttpDate.java +++ /dev/null @@ -1,88 +0,0 @@ -/* - * Copyright (C) 2011 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package com.squareup.okhttp.internal.http; - -import java.text.DateFormat; -import java.text.ParseException; -import java.text.SimpleDateFormat; -import java.util.Date; -import java.util.Locale; -import java.util.TimeZone; - -/** - * Best-effort parser for HTTP dates. - */ -final class HttpDate { - - /** - * Most websites serve cookies in the blessed format. Eagerly create the parser to ensure such - * cookies are on the fast path. - */ - private static final ThreadLocal STANDARD_DATE_FORMAT = - new ThreadLocal() { - @Override protected DateFormat initialValue() { - DateFormat rfc1123 = new SimpleDateFormat("EEE, dd MMM yyyy HH:mm:ss zzz", Locale.US); - rfc1123.setTimeZone(TimeZone.getTimeZone("GMT")); - return rfc1123; - } - }; - - /** If we fail to parse a date in a non-standard format, try each of these formats in sequence. */ - private static final String[] BROWSER_COMPATIBLE_DATE_FORMAT_STRINGS = new String[] { - "EEEE, dd-MMM-yy HH:mm:ss zzz", // RFC 1036 - "EEE MMM d HH:mm:ss yyyy", // ANSI C asctime() - "EEE, dd-MMM-yyyy HH:mm:ss z", "EEE, dd-MMM-yyyy HH-mm-ss z", "EEE, dd MMM yy HH:mm:ss z", - "EEE dd-MMM-yyyy HH:mm:ss z", "EEE dd MMM yyyy HH:mm:ss z", "EEE dd-MMM-yyyy HH-mm-ss z", - "EEE dd-MMM-yy HH:mm:ss z", "EEE dd MMM yy HH:mm:ss z", "EEE,dd-MMM-yy HH:mm:ss z", - "EEE,dd-MMM-yyyy HH:mm:ss z", "EEE, dd-MM-yyyy HH:mm:ss z", - - /* RI bug 6641315 claims a cookie of this format was once served by www.yahoo.com */ - "EEE MMM d yyyy HH:mm:ss z", }; - - private static final DateFormat[] BROWSER_COMPATIBLE_DATE_FORMATS = - new DateFormat[BROWSER_COMPATIBLE_DATE_FORMAT_STRINGS.length]; - - /** Returns the date for {@code value}. Returns null if the value couldn't be parsed. */ - public static Date parse(String value) { - try { - return STANDARD_DATE_FORMAT.get().parse(value); - } catch (ParseException ignored) { - } - synchronized (BROWSER_COMPATIBLE_DATE_FORMAT_STRINGS) { - for (int i = 0, count = BROWSER_COMPATIBLE_DATE_FORMAT_STRINGS.length; i < count; i++) { - DateFormat format = BROWSER_COMPATIBLE_DATE_FORMATS[i]; - if (format == null) { - format = new SimpleDateFormat(BROWSER_COMPATIBLE_DATE_FORMAT_STRINGS[i], Locale.US); - BROWSER_COMPATIBLE_DATE_FORMATS[i] = format; - } - try { - return format.parse(value); - } catch (ParseException ignored) { - } - } - } - return null; - } - - /** Returns the string for {@code value}. */ - public static String format(Date value) { - return STANDARD_DATE_FORMAT.get().format(value); - } - - private HttpDate() { - } -} diff --git a/mobile/CordovaLib/src/com/squareup/okhttp/internal/http/HttpEngine.java b/mobile/CordovaLib/src/com/squareup/okhttp/internal/http/HttpEngine.java deleted file mode 100755 index 4a2dad403a7..00000000000 --- a/mobile/CordovaLib/src/com/squareup/okhttp/internal/http/HttpEngine.java +++ /dev/null @@ -1,686 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package com.squareup.okhttp.internal.http; - -import com.squareup.okhttp.Address; -import com.squareup.okhttp.Connection; -import com.squareup.okhttp.OkHttpClient; -import com.squareup.okhttp.OkResponseCache; -import com.squareup.okhttp.ResponseSource; -import com.squareup.okhttp.TunnelRequest; -import com.squareup.okhttp.internal.Dns; -import com.squareup.okhttp.internal.Platform; -import com.squareup.okhttp.internal.Util; -import java.io.ByteArrayInputStream; -import java.io.IOException; -import java.io.InputStream; -import java.io.OutputStream; -import java.net.CacheRequest; -import java.net.CacheResponse; -import java.net.CookieHandler; -import java.net.HttpURLConnection; -import java.net.Proxy; -import java.net.URI; -import java.net.URISyntaxException; -import java.net.URL; -import java.net.UnknownHostException; -import java.util.Collections; -import java.util.Date; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.zip.GZIPInputStream; -import javax.net.ssl.HostnameVerifier; -import javax.net.ssl.SSLSocketFactory; - -import static com.squareup.okhttp.internal.Util.EMPTY_BYTE_ARRAY; -import static com.squareup.okhttp.internal.Util.getDefaultPort; -import static com.squareup.okhttp.internal.Util.getEffectivePort; - -/** - * Handles a single HTTP request/response pair. Each HTTP engine follows this - * lifecycle: - *

    - *
  1. It is created. - *
  2. The HTTP request message is sent with sendRequest(). Once the request - * is sent it is an error to modify the request headers. After - * sendRequest() has been called the request body can be written to if - * it exists. - *
  3. The HTTP response message is read with readResponse(). After the - * response has been read the response headers and body can be read. - * All responses have a response body input stream, though in some - * instances this stream is empty. - *
- * - *

The request and response may be served by the HTTP response cache, by the - * network, or by both in the event of a conditional GET. - * - *

This class may hold a socket connection that needs to be released or - * recycled. By default, this socket connection is held when the last byte of - * the response is consumed. To release the connection when it is no longer - * required, use {@link #automaticallyReleaseConnectionToPool()}. - */ -public class HttpEngine { - private static final CacheResponse GATEWAY_TIMEOUT_RESPONSE = new CacheResponse() { - @Override public Map> getHeaders() throws IOException { - Map> result = new HashMap>(); - result.put(null, Collections.singletonList("HTTP/1.1 504 Gateway Timeout")); - return result; - } - @Override public InputStream getBody() throws IOException { - return new ByteArrayInputStream(EMPTY_BYTE_ARRAY); - } - }; - public static final int HTTP_CONTINUE = 100; - - protected final Policy policy; - protected final OkHttpClient client; - - protected final String method; - - private ResponseSource responseSource; - - protected Connection connection; - protected RouteSelector routeSelector; - private OutputStream requestBodyOut; - - private Transport transport; - - private InputStream responseTransferIn; - private InputStream responseBodyIn; - - private CacheResponse cacheResponse; - private CacheRequest cacheRequest; - - /** The time when the request headers were written, or -1 if they haven't been written yet. */ - long sentRequestMillis = -1; - - /** Whether the connection has been established. */ - boolean connected; - - /** - * True if this client added an "Accept-Encoding: gzip" header field and is - * therefore responsible for also decompressing the transfer stream. - */ - private boolean transparentGzip; - - final URI uri; - - final RequestHeaders requestHeaders; - - /** Null until a response is received from the network or the cache. */ - ResponseHeaders responseHeaders; - - // The cache response currently being validated on a conditional get. Null - // if the cached response doesn't exist or doesn't need validation. If the - // conditional get succeeds, these will be used for the response headers and - // body. If it fails, these be closed and set to null. - private ResponseHeaders cachedResponseHeaders; - private InputStream cachedResponseBody; - - /** - * True if the socket connection should be released to the connection pool - * when the response has been fully read. - */ - private boolean automaticallyReleaseConnectionToPool; - - /** True if the socket connection is no longer needed by this engine. */ - private boolean connectionReleased; - - /** - * @param requestHeaders the client's supplied request headers. This class - * creates a private copy that it can mutate. - * @param connection the connection used for an intermediate response - * immediately prior to this request/response pair, such as a same-host - * redirect. This engine assumes ownership of the connection and must - * release it when it is unneeded. - */ - public HttpEngine(OkHttpClient client, Policy policy, String method, RawHeaders requestHeaders, - Connection connection, RetryableOutputStream requestBodyOut) throws IOException { - this.client = client; - this.policy = policy; - this.method = method; - this.connection = connection; - this.requestBodyOut = requestBodyOut; - - try { - uri = Platform.get().toUriLenient(policy.getURL()); - } catch (URISyntaxException e) { - throw new IOException(e.getMessage()); - } - - this.requestHeaders = new RequestHeaders(uri, new RawHeaders(requestHeaders)); - } - - public URI getUri() { - return uri; - } - - /** - * Figures out what the response source will be, and opens a socket to that - * source if necessary. Prepares the request headers and gets ready to start - * writing the request body if it exists. - */ - public final void sendRequest() throws IOException { - if (responseSource != null) { - return; - } - - prepareRawRequestHeaders(); - initResponseSource(); - OkResponseCache responseCache = client.getOkResponseCache(); - if (responseCache != null) { - responseCache.trackResponse(responseSource); - } - - // The raw response source may require the network, but the request - // headers may forbid network use. In that case, dispose of the network - // response and use a GATEWAY_TIMEOUT response instead, as specified - // by http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.9.4. - if (requestHeaders.isOnlyIfCached() && responseSource.requiresConnection()) { - if (responseSource == ResponseSource.CONDITIONAL_CACHE) { - Util.closeQuietly(cachedResponseBody); - } - this.responseSource = ResponseSource.CACHE; - this.cacheResponse = GATEWAY_TIMEOUT_RESPONSE; - RawHeaders rawResponseHeaders = RawHeaders.fromMultimap(cacheResponse.getHeaders(), true); - setResponse(new ResponseHeaders(uri, rawResponseHeaders), cacheResponse.getBody()); - } - - if (responseSource.requiresConnection()) { - sendSocketRequest(); - } else if (connection != null) { - client.getConnectionPool().recycle(connection); - connection = null; - } - } - - /** - * Initialize the source for this response. It may be corrected later if the - * request headers forbids network use. - */ - private void initResponseSource() throws IOException { - responseSource = ResponseSource.NETWORK; - if (!policy.getUseCaches()) return; - - OkResponseCache responseCache = client.getOkResponseCache(); - if (responseCache == null) return; - - CacheResponse candidate = responseCache.get( - uri, method, requestHeaders.getHeaders().toMultimap(false)); - if (candidate == null) return; - - Map> responseHeadersMap = candidate.getHeaders(); - cachedResponseBody = candidate.getBody(); - if (!acceptCacheResponseType(candidate) - || responseHeadersMap == null - || cachedResponseBody == null) { - Util.closeQuietly(cachedResponseBody); - return; - } - - RawHeaders rawResponseHeaders = RawHeaders.fromMultimap(responseHeadersMap, true); - cachedResponseHeaders = new ResponseHeaders(uri, rawResponseHeaders); - long now = System.currentTimeMillis(); - this.responseSource = cachedResponseHeaders.chooseResponseSource(now, requestHeaders); - if (responseSource == ResponseSource.CACHE) { - this.cacheResponse = candidate; - setResponse(cachedResponseHeaders, cachedResponseBody); - } else if (responseSource == ResponseSource.CONDITIONAL_CACHE) { - this.cacheResponse = candidate; - } else if (responseSource == ResponseSource.NETWORK) { - Util.closeQuietly(cachedResponseBody); - } else { - throw new AssertionError(); - } - } - - private void sendSocketRequest() throws IOException { - if (connection == null) { - connect(); - } - - if (transport != null) { - throw new IllegalStateException(); - } - - transport = (Transport) connection.newTransport(this); - - if (hasRequestBody() && requestBodyOut == null) { - // Create a request body if we don't have one already. We'll already - // have one if we're retrying a failed POST. - requestBodyOut = transport.createRequestBody(); - } - } - - /** Connect to the origin server either directly or via a proxy. */ - protected final void connect() throws IOException { - if (connection != null) { - return; - } - if (routeSelector == null) { - String uriHost = uri.getHost(); - if (uriHost == null) { - throw new UnknownHostException(uri.toString()); - } - SSLSocketFactory sslSocketFactory = null; - HostnameVerifier hostnameVerifier = null; - if (uri.getScheme().equalsIgnoreCase("https")) { - sslSocketFactory = client.getSslSocketFactory(); - hostnameVerifier = client.getHostnameVerifier(); - } - Address address = new Address(uriHost, getEffectivePort(uri), sslSocketFactory, - hostnameVerifier, client.getAuthenticator(), client.getProxy(), client.getTransports()); - routeSelector = new RouteSelector(address, uri, client.getProxySelector(), - client.getConnectionPool(), Dns.DEFAULT, client.getRoutesDatabase()); - } - connection = routeSelector.next(method); - if (!connection.isConnected()) { - connection.connect(client.getConnectTimeout(), client.getReadTimeout(), getTunnelConfig()); - client.getConnectionPool().maybeShare(connection); - client.getRoutesDatabase().connected(connection.getRoute()); - } else if (!connection.isSpdy()) { - connection.updateReadTimeout(client.getReadTimeout()); - } - connected(connection); - if (connection.getRoute().getProxy() != client.getProxy()) { - // Update the request line if the proxy changed; it may need a host name. - requestHeaders.getHeaders().setRequestLine(getRequestLine()); - } - } - - /** - * Called after a socket connection has been created or retrieved from the - * pool. Subclasses use this hook to get a reference to the TLS data. - */ - protected void connected(Connection connection) { - policy.setSelectedProxy(connection.getRoute().getProxy()); - connected = true; - } - - /** - * Called immediately before the transport transmits HTTP request headers. - * This is used to observe the sent time should the request be cached. - */ - public void writingRequestHeaders() { - if (sentRequestMillis != -1) { - throw new IllegalStateException(); - } - sentRequestMillis = System.currentTimeMillis(); - } - - /** - * @param body the response body, or null if it doesn't exist or isn't - * available. - */ - private void setResponse(ResponseHeaders headers, InputStream body) throws IOException { - if (this.responseBodyIn != null) { - throw new IllegalStateException(); - } - this.responseHeaders = headers; - if (body != null) { - initContentStream(body); - } - } - - boolean hasRequestBody() { - return method.equals("POST") || method.equals("PUT") || method.equals("PATCH"); - } - - /** Returns the request body or null if this request doesn't have a body. */ - public final OutputStream getRequestBody() { - if (responseSource == null) { - throw new IllegalStateException(); - } - return requestBodyOut; - } - - public final boolean hasResponse() { - return responseHeaders != null; - } - - public final RequestHeaders getRequestHeaders() { - return requestHeaders; - } - - public final ResponseHeaders getResponseHeaders() { - if (responseHeaders == null) { - throw new IllegalStateException(); - } - return responseHeaders; - } - - public final int getResponseCode() { - if (responseHeaders == null) { - throw new IllegalStateException(); - } - return responseHeaders.getHeaders().getResponseCode(); - } - - public final InputStream getResponseBody() { - if (responseHeaders == null) { - throw new IllegalStateException(); - } - return responseBodyIn; - } - - public final CacheResponse getCacheResponse() { - return cacheResponse; - } - - public final Connection getConnection() { - return connection; - } - - /** - * Returns true if {@code cacheResponse} is of the right type. This - * condition is necessary but not sufficient for the cached response to - * be used. - */ - protected boolean acceptCacheResponseType(CacheResponse cacheResponse) { - return true; - } - - private void maybeCache() throws IOException { - // Are we caching at all? - if (!policy.getUseCaches()) return; - OkResponseCache responseCache = client.getOkResponseCache(); - if (responseCache == null) return; - - HttpURLConnection connectionToCache = policy.getHttpConnectionToCache(); - - // Should we cache this response for this request? - if (!responseHeaders.isCacheable(requestHeaders)) { - responseCache.maybeRemove(connectionToCache.getRequestMethod(), uri); - return; - } - - // Offer this request to the cache. - cacheRequest = responseCache.put(uri, connectionToCache); - } - - /** - * Cause the socket connection to be released to the connection pool when - * it is no longer needed. If it is already unneeded, it will be pooled - * immediately. Otherwise the connection is held so that redirects can be - * handled by the same connection. - */ - public final void automaticallyReleaseConnectionToPool() { - automaticallyReleaseConnectionToPool = true; - if (connection != null && connectionReleased) { - client.getConnectionPool().recycle(connection); - connection = null; - } - } - - /** - * Releases this engine so that its resources may be either reused or - * closed. Also call {@link #automaticallyReleaseConnectionToPool} unless - * the connection will be used to follow a redirect. - */ - public final void release(boolean streamCanceled) { - // If the response body comes from the cache, close it. - if (responseBodyIn == cachedResponseBody) { - Util.closeQuietly(responseBodyIn); - } - - if (!connectionReleased && connection != null) { - connectionReleased = true; - - if (transport == null - || !transport.makeReusable(streamCanceled, requestBodyOut, responseTransferIn)) { - Util.closeQuietly(connection); - connection = null; - } else if (automaticallyReleaseConnectionToPool) { - client.getConnectionPool().recycle(connection); - connection = null; - } - } - } - - private void initContentStream(InputStream transferStream) throws IOException { - responseTransferIn = transferStream; - if (transparentGzip && responseHeaders.isContentEncodingGzip()) { - // If the response was transparently gzipped, remove the gzip header field - // so clients don't double decompress. http://b/3009828 - // - // Also remove the Content-Length in this case because it contains the - // length 528 of the gzipped response. This isn't terribly useful and is - // dangerous because 529 clients can query the content length, but not - // the content encoding. - responseHeaders.stripContentEncoding(); - responseHeaders.stripContentLength(); - responseBodyIn = new GZIPInputStream(transferStream); - } else { - responseBodyIn = transferStream; - } - } - - /** - * Returns true if the response must have a (possibly 0-length) body. - * See RFC 2616 section 4.3. - */ - public final boolean hasResponseBody() { - int responseCode = responseHeaders.getHeaders().getResponseCode(); - - // HEAD requests never yield a body regardless of the response headers. - if (method.equals("HEAD")) { - return false; - } - - if ((responseCode < HTTP_CONTINUE || responseCode >= 200) - && responseCode != HttpURLConnectionImpl.HTTP_NO_CONTENT - && responseCode != HttpURLConnectionImpl.HTTP_NOT_MODIFIED) { - return true; - } - - // If the Content-Length or Transfer-Encoding headers disagree with the - // response code, the response is malformed. For best compatibility, we - // honor the headers. - if (responseHeaders.getContentLength() != -1 || responseHeaders.isChunked()) { - return true; - } - - return false; - } - - /** - * Populates requestHeaders with defaults and cookies. - * - *

This client doesn't specify a default {@code Accept} header because it - * doesn't know what content types the application is interested in. - */ - private void prepareRawRequestHeaders() throws IOException { - requestHeaders.getHeaders().setRequestLine(getRequestLine()); - - if (requestHeaders.getUserAgent() == null) { - requestHeaders.setUserAgent(getDefaultUserAgent()); - } - - if (requestHeaders.getHost() == null) { - requestHeaders.setHost(getOriginAddress(policy.getURL())); - } - - if ((connection == null || connection.getHttpMinorVersion() != 0) - && requestHeaders.getConnection() == null) { - requestHeaders.setConnection("Keep-Alive"); - } - - if (requestHeaders.getAcceptEncoding() == null) { - transparentGzip = true; - requestHeaders.setAcceptEncoding("gzip"); - } - - if (hasRequestBody() && requestHeaders.getContentType() == null) { - requestHeaders.setContentType("application/x-www-form-urlencoded"); - } - - long ifModifiedSince = policy.getIfModifiedSince(); - if (ifModifiedSince != 0) { - requestHeaders.setIfModifiedSince(new Date(ifModifiedSince)); - } - - CookieHandler cookieHandler = client.getCookieHandler(); - if (cookieHandler != null) { - requestHeaders.addCookies( - cookieHandler.get(uri, requestHeaders.getHeaders().toMultimap(false))); - } - } - - /** - * Returns the request status line, like "GET / HTTP/1.1". This is exposed - * to the application by {@link HttpURLConnectionImpl#getHeaderFields}, so - * it needs to be set even if the transport is SPDY. - */ - String getRequestLine() { - String protocol = - (connection == null || connection.getHttpMinorVersion() != 0) ? "HTTP/1.1" : "HTTP/1.0"; - return method + " " + requestString() + " " + protocol; - } - - private String requestString() { - URL url = policy.getURL(); - if (includeAuthorityInRequestLine()) { - return url.toString(); - } else { - return requestPath(url); - } - } - - /** - * Returns the path to request, like the '/' in 'GET / HTTP/1.1'. Never - * empty, even if the request URL is. Includes the query component if it - * exists. - */ - public static String requestPath(URL url) { - String fileOnly = url.getFile(); - if (fileOnly == null) { - return "/"; - } else if (!fileOnly.startsWith("/")) { - return "/" + fileOnly; - } else { - return fileOnly; - } - } - - /** - * Returns true if the request line should contain the full URL with host - * and port (like "GET http://android.com/foo HTTP/1.1") or only the path - * (like "GET /foo HTTP/1.1"). - * - *

This is non-final because for HTTPS it's never necessary to supply the - * full URL, even if a proxy is in use. - */ - protected boolean includeAuthorityInRequestLine() { - return connection == null - ? policy.usingProxy() // A proxy was requested. - : connection.getRoute().getProxy().type() == Proxy.Type.HTTP; // A proxy was selected. - } - - public static String getDefaultUserAgent() { - String agent = System.getProperty("http.agent"); - return agent != null ? agent : ("Java" + System.getProperty("java.version")); - } - - public static String getOriginAddress(URL url) { - int port = url.getPort(); - String result = url.getHost(); - if (port > 0 && port != getDefaultPort(url.getProtocol())) { - result = result + ":" + port; - } - return result; - } - - /** - * Flushes the remaining request header and body, parses the HTTP response - * headers and starts reading the HTTP response body if it exists. - */ - public final void readResponse() throws IOException { - if (hasResponse()) { - responseHeaders.setResponseSource(responseSource); - return; - } - - if (responseSource == null) { - throw new IllegalStateException("readResponse() without sendRequest()"); - } - - if (!responseSource.requiresConnection()) { - return; - } - - if (sentRequestMillis == -1) { - if (requestBodyOut instanceof RetryableOutputStream) { - int contentLength = ((RetryableOutputStream) requestBodyOut).contentLength(); - requestHeaders.setContentLength(contentLength); - } - transport.writeRequestHeaders(); - } - - if (requestBodyOut != null) { - requestBodyOut.close(); - if (requestBodyOut instanceof RetryableOutputStream) { - transport.writeRequestBody((RetryableOutputStream) requestBodyOut); - } - } - - transport.flushRequest(); - - responseHeaders = transport.readResponseHeaders(); - responseHeaders.setLocalTimestamps(sentRequestMillis, System.currentTimeMillis()); - responseHeaders.setResponseSource(responseSource); - - if (responseSource == ResponseSource.CONDITIONAL_CACHE) { - if (cachedResponseHeaders.validate(responseHeaders)) { - release(false); - ResponseHeaders combinedHeaders = cachedResponseHeaders.combine(responseHeaders); - this.responseHeaders = combinedHeaders; - - // Update the cache after applying the combined headers but before initializing the content - // stream, otherwise the Content-Encoding header (if present) will be stripped from the - // combined headers and not end up in the cache file if transparent gzip compression is - // turned on. - OkResponseCache responseCache = client.getOkResponseCache(); - responseCache.trackConditionalCacheHit(); - responseCache.update(cacheResponse, policy.getHttpConnectionToCache()); - - initContentStream(cachedResponseBody); - return; - } else { - Util.closeQuietly(cachedResponseBody); - } - } - - if (hasResponseBody()) { - maybeCache(); // reentrant. this calls into user code which may call back into this! - } - - initContentStream(transport.getTransferStream(cacheRequest)); - } - - protected TunnelRequest getTunnelConfig() { - return null; - } - - public void receiveHeaders(RawHeaders headers) throws IOException { - CookieHandler cookieHandler = client.getCookieHandler(); - if (cookieHandler != null) { - cookieHandler.put(uri, headers.toMultimap(true)); - } - } -} diff --git a/mobile/CordovaLib/src/com/squareup/okhttp/internal/http/HttpTransport.java b/mobile/CordovaLib/src/com/squareup/okhttp/internal/http/HttpTransport.java deleted file mode 100755 index c9678308b19..00000000000 --- a/mobile/CordovaLib/src/com/squareup/okhttp/internal/http/HttpTransport.java +++ /dev/null @@ -1,497 +0,0 @@ -/* - * Copyright (C) 2012 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package com.squareup.okhttp.internal.http; - -import com.squareup.okhttp.Connection; -import com.squareup.okhttp.internal.AbstractOutputStream; -import com.squareup.okhttp.internal.Util; -import java.io.ByteArrayOutputStream; -import java.io.IOException; -import java.io.InputStream; -import java.io.OutputStream; -import java.net.CacheRequest; -import java.net.ProtocolException; -import java.net.Socket; - -import static com.squareup.okhttp.internal.Util.checkOffsetAndCount; - -public final class HttpTransport implements Transport { - /** - * The timeout to use while discarding a stream of input data. Since this is - * used for connection reuse, this timeout should be significantly less than - * the time it takes to establish a new connection. - */ - private static final int DISCARD_STREAM_TIMEOUT_MILLIS = 100; - - public static final int DEFAULT_CHUNK_LENGTH = 1024; - - private final HttpEngine httpEngine; - private final InputStream socketIn; - private final OutputStream socketOut; - - /** - * This stream buffers the request headers and the request body when their - * combined size is less than MAX_REQUEST_BUFFER_LENGTH. By combining them - * we can save socket writes, which in turn saves a packet transmission. - * This is socketOut if the request size is large or unknown. - */ - private OutputStream requestOut; - - public HttpTransport(HttpEngine httpEngine, OutputStream outputStream, InputStream inputStream) { - this.httpEngine = httpEngine; - this.socketOut = outputStream; - this.requestOut = outputStream; - this.socketIn = inputStream; - } - - @Override public OutputStream createRequestBody() throws IOException { - boolean chunked = httpEngine.requestHeaders.isChunked(); - if (!chunked - && httpEngine.policy.getChunkLength() > 0 - && httpEngine.connection.getHttpMinorVersion() != 0) { - httpEngine.requestHeaders.setChunked(); - chunked = true; - } - - // Stream a request body of unknown length. - if (chunked) { - int chunkLength = httpEngine.policy.getChunkLength(); - if (chunkLength == -1) { - chunkLength = DEFAULT_CHUNK_LENGTH; - } - writeRequestHeaders(); - return new ChunkedOutputStream(requestOut, chunkLength); - } - - // Stream a request body of a known length. - long fixedContentLength = httpEngine.policy.getFixedContentLength(); - if (fixedContentLength != -1) { - httpEngine.requestHeaders.setContentLength(fixedContentLength); - writeRequestHeaders(); - return new FixedLengthOutputStream(requestOut, fixedContentLength); - } - - long contentLength = httpEngine.requestHeaders.getContentLength(); - if (contentLength > Integer.MAX_VALUE) { - throw new IllegalArgumentException("Use setFixedLengthStreamingMode() or " - + "setChunkedStreamingMode() for requests larger than 2 GiB."); - } - - // Buffer a request body of a known length. - if (contentLength != -1) { - writeRequestHeaders(); - return new RetryableOutputStream((int) contentLength); - } - - // Buffer a request body of an unknown length. Don't write request - // headers until the entire body is ready; otherwise we can't set the - // Content-Length header correctly. - return new RetryableOutputStream(); - } - - @Override public void flushRequest() throws IOException { - requestOut.flush(); - requestOut = socketOut; - } - - @Override public void writeRequestBody(RetryableOutputStream requestBody) throws IOException { - requestBody.writeToSocket(requestOut); - } - - /** - * Prepares the HTTP headers and sends them to the server. - * - *

For streaming requests with a body, headers must be prepared - * before the output stream has been written to. Otherwise - * the body would need to be buffered! - * - *

For non-streaming requests with a body, headers must be prepared - * after the output stream has been written to and closed. - * This ensures that the {@code Content-Length} header field receives the - * proper value. - */ - public void writeRequestHeaders() throws IOException { - httpEngine.writingRequestHeaders(); - RawHeaders headersToSend = httpEngine.requestHeaders.getHeaders(); - byte[] bytes = headersToSend.toBytes(); - requestOut.write(bytes); - } - - @Override public ResponseHeaders readResponseHeaders() throws IOException { - RawHeaders rawHeaders = RawHeaders.fromBytes(socketIn); - httpEngine.connection.setHttpMinorVersion(rawHeaders.getHttpMinorVersion()); - httpEngine.receiveHeaders(rawHeaders); - - ResponseHeaders headers = new ResponseHeaders(httpEngine.uri, rawHeaders); - headers.setTransport("http/1.1"); - return headers; - } - - public boolean makeReusable(boolean streamCanceled, OutputStream requestBodyOut, - InputStream responseBodyIn) { - if (streamCanceled) { - return false; - } - - // We cannot reuse sockets that have incomplete output. - if (requestBodyOut != null && !((AbstractOutputStream) requestBodyOut).isClosed()) { - return false; - } - - // If the request specified that the connection shouldn't be reused, don't reuse it. - if (httpEngine.requestHeaders.hasConnectionClose()) { - return false; - } - - // If the response specified that the connection shouldn't be reused, don't reuse it. - if (httpEngine.responseHeaders != null && httpEngine.responseHeaders.hasConnectionClose()) { - return false; - } - - if (responseBodyIn instanceof UnknownLengthHttpInputStream) { - return false; - } - - if (responseBodyIn != null) { - return discardStream(httpEngine, responseBodyIn); - } - - return true; - } - - /** - * Discards the response body so that the connection can be reused. This - * needs to be done judiciously, since it delays the current request in - * order to speed up a potential future request that may never occur. - * - *

A stream may be discarded to encourage response caching (a response - * cannot be cached unless it is consumed completely) or to enable connection - * reuse. - */ - private static boolean discardStream(HttpEngine httpEngine, InputStream responseBodyIn) { - Connection connection = httpEngine.connection; - if (connection == null) return false; - Socket socket = connection.getSocket(); - if (socket == null) return false; - try { - int socketTimeout = socket.getSoTimeout(); - socket.setSoTimeout(DISCARD_STREAM_TIMEOUT_MILLIS); - try { - Util.skipAll(responseBodyIn); - return true; - } finally { - socket.setSoTimeout(socketTimeout); - } - } catch (IOException e) { - return false; - } - } - - @Override public InputStream getTransferStream(CacheRequest cacheRequest) throws IOException { - if (!httpEngine.hasResponseBody()) { - return new FixedLengthInputStream(socketIn, cacheRequest, httpEngine, 0); - } - - if (httpEngine.responseHeaders.isChunked()) { - return new ChunkedInputStream(socketIn, cacheRequest, this); - } - - if (httpEngine.responseHeaders.getContentLength() != -1) { - return new FixedLengthInputStream(socketIn, cacheRequest, httpEngine, - httpEngine.responseHeaders.getContentLength()); - } - - // Wrap the input stream from the connection (rather than just returning - // "socketIn" directly here), so that we can control its use after the - // reference escapes. - return new UnknownLengthHttpInputStream(socketIn, cacheRequest, httpEngine); - } - - /** An HTTP body with a fixed length known in advance. */ - private static final class FixedLengthOutputStream extends AbstractOutputStream { - private final OutputStream socketOut; - private long bytesRemaining; - - private FixedLengthOutputStream(OutputStream socketOut, long bytesRemaining) { - this.socketOut = socketOut; - this.bytesRemaining = bytesRemaining; - } - - @Override public void write(byte[] buffer, int offset, int count) throws IOException { - checkNotClosed(); - checkOffsetAndCount(buffer.length, offset, count); - if (count > bytesRemaining) { - throw new ProtocolException("expected " + bytesRemaining + " bytes but received " + count); - } - socketOut.write(buffer, offset, count); - bytesRemaining -= count; - } - - @Override public void flush() throws IOException { - if (closed) { - return; // don't throw; this stream might have been closed on the caller's behalf - } - socketOut.flush(); - } - - @Override public void close() throws IOException { - if (closed) { - return; - } - closed = true; - if (bytesRemaining > 0) { - throw new ProtocolException("unexpected end of stream"); - } - } - } - - /** - * An HTTP body with alternating chunk sizes and chunk bodies. Chunks are - * buffered until {@code maxChunkLength} bytes are ready, at which point the - * chunk is written and the buffer is cleared. - */ - private static final class ChunkedOutputStream extends AbstractOutputStream { - private static final byte[] CRLF = { '\r', '\n' }; - private static final byte[] HEX_DIGITS = { - '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f' - }; - private static final byte[] FINAL_CHUNK = new byte[] { '0', '\r', '\n', '\r', '\n' }; - - /** Scratch space for up to 8 hex digits, and then a constant CRLF. */ - private final byte[] hex = { 0, 0, 0, 0, 0, 0, 0, 0, '\r', '\n' }; - - private final OutputStream socketOut; - private final int maxChunkLength; - private final ByteArrayOutputStream bufferedChunk; - - private ChunkedOutputStream(OutputStream socketOut, int maxChunkLength) { - this.socketOut = socketOut; - this.maxChunkLength = Math.max(1, dataLength(maxChunkLength)); - this.bufferedChunk = new ByteArrayOutputStream(maxChunkLength); - } - - /** - * Returns the amount of data that can be transmitted in a chunk whose total - * length (data+headers) is {@code dataPlusHeaderLength}. This is presumably - * useful to match sizes with wire-protocol packets. - */ - private int dataLength(int dataPlusHeaderLength) { - int headerLength = 4; // "\r\n" after the size plus another "\r\n" after the data - for (int i = dataPlusHeaderLength - headerLength; i > 0; i >>= 4) { - headerLength++; - } - return dataPlusHeaderLength - headerLength; - } - - @Override public synchronized void write(byte[] buffer, int offset, int count) - throws IOException { - checkNotClosed(); - checkOffsetAndCount(buffer.length, offset, count); - - while (count > 0) { - int numBytesWritten; - - if (bufferedChunk.size() > 0 || count < maxChunkLength) { - // fill the buffered chunk and then maybe write that to the stream - numBytesWritten = Math.min(count, maxChunkLength - bufferedChunk.size()); - // TODO: skip unnecessary copies from buffer->bufferedChunk? - bufferedChunk.write(buffer, offset, numBytesWritten); - if (bufferedChunk.size() == maxChunkLength) { - writeBufferedChunkToSocket(); - } - } else { - // write a single chunk of size maxChunkLength to the stream - numBytesWritten = maxChunkLength; - writeHex(numBytesWritten); - socketOut.write(buffer, offset, numBytesWritten); - socketOut.write(CRLF); - } - - offset += numBytesWritten; - count -= numBytesWritten; - } - } - - /** - * Equivalent to, but cheaper than writing Integer.toHexString().getBytes() - * followed by CRLF. - */ - private void writeHex(int i) throws IOException { - int cursor = 8; - do { - hex[--cursor] = HEX_DIGITS[i & 0xf]; - } while ((i >>>= 4) != 0); - socketOut.write(hex, cursor, hex.length - cursor); - } - - @Override public synchronized void flush() throws IOException { - if (closed) { - return; // don't throw; this stream might have been closed on the caller's behalf - } - writeBufferedChunkToSocket(); - socketOut.flush(); - } - - @Override public synchronized void close() throws IOException { - if (closed) { - return; - } - closed = true; - writeBufferedChunkToSocket(); - socketOut.write(FINAL_CHUNK); - } - - private void writeBufferedChunkToSocket() throws IOException { - int size = bufferedChunk.size(); - if (size <= 0) { - return; - } - - writeHex(size); - bufferedChunk.writeTo(socketOut); - bufferedChunk.reset(); - socketOut.write(CRLF); - } - } - - /** An HTTP body with a fixed length specified in advance. */ - private static class FixedLengthInputStream extends AbstractHttpInputStream { - private long bytesRemaining; - - public FixedLengthInputStream(InputStream is, CacheRequest cacheRequest, HttpEngine httpEngine, - long length) throws IOException { - super(is, httpEngine, cacheRequest); - bytesRemaining = length; - if (bytesRemaining == 0) { - endOfInput(); - } - } - - @Override public int read(byte[] buffer, int offset, int count) throws IOException { - checkOffsetAndCount(buffer.length, offset, count); - checkNotClosed(); - if (bytesRemaining == 0) { - return -1; - } - int read = in.read(buffer, offset, (int) Math.min(count, bytesRemaining)); - if (read == -1) { - unexpectedEndOfInput(); // the server didn't supply the promised content length - throw new ProtocolException("unexpected end of stream"); - } - bytesRemaining -= read; - cacheWrite(buffer, offset, read); - if (bytesRemaining == 0) { - endOfInput(); - } - return read; - } - - @Override public int available() throws IOException { - checkNotClosed(); - return bytesRemaining == 0 ? 0 : (int) Math.min(in.available(), bytesRemaining); - } - - @Override public void close() throws IOException { - if (closed) { - return; - } - if (bytesRemaining != 0 && !discardStream(httpEngine, this)) { - unexpectedEndOfInput(); - } - closed = true; - } - } - - /** An HTTP body with alternating chunk sizes and chunk bodies. */ - private static class ChunkedInputStream extends AbstractHttpInputStream { - private static final int NO_CHUNK_YET = -1; - private final HttpTransport transport; - private int bytesRemainingInChunk = NO_CHUNK_YET; - private boolean hasMoreChunks = true; - - ChunkedInputStream(InputStream is, CacheRequest cacheRequest, HttpTransport transport) - throws IOException { - super(is, transport.httpEngine, cacheRequest); - this.transport = transport; - } - - @Override public int read(byte[] buffer, int offset, int count) throws IOException { - checkOffsetAndCount(buffer.length, offset, count); - checkNotClosed(); - - if (!hasMoreChunks) { - return -1; - } - if (bytesRemainingInChunk == 0 || bytesRemainingInChunk == NO_CHUNK_YET) { - readChunkSize(); - if (!hasMoreChunks) { - return -1; - } - } - int read = in.read(buffer, offset, Math.min(count, bytesRemainingInChunk)); - if (read == -1) { - unexpectedEndOfInput(); // the server didn't supply the promised chunk length - throw new IOException("unexpected end of stream"); - } - bytesRemainingInChunk -= read; - cacheWrite(buffer, offset, read); - return read; - } - - private void readChunkSize() throws IOException { - // read the suffix of the previous chunk - if (bytesRemainingInChunk != NO_CHUNK_YET) { - Util.readAsciiLine(in); - } - String chunkSizeString = Util.readAsciiLine(in); - int index = chunkSizeString.indexOf(";"); - if (index != -1) { - chunkSizeString = chunkSizeString.substring(0, index); - } - try { - bytesRemainingInChunk = Integer.parseInt(chunkSizeString.trim(), 16); - } catch (NumberFormatException e) { - throw new ProtocolException("Expected a hex chunk size but was " + chunkSizeString); - } - if (bytesRemainingInChunk == 0) { - hasMoreChunks = false; - RawHeaders rawResponseHeaders = httpEngine.responseHeaders.getHeaders(); - RawHeaders.readHeaders(transport.socketIn, rawResponseHeaders); - httpEngine.receiveHeaders(rawResponseHeaders); - endOfInput(); - } - } - - @Override public int available() throws IOException { - checkNotClosed(); - if (!hasMoreChunks || bytesRemainingInChunk == NO_CHUNK_YET) { - return 0; - } - return Math.min(in.available(), bytesRemainingInChunk); - } - - @Override public void close() throws IOException { - if (closed) { - return; - } - if (hasMoreChunks && !discardStream(httpEngine, this)) { - unexpectedEndOfInput(); - } - closed = true; - } - } -} diff --git a/mobile/CordovaLib/src/com/squareup/okhttp/internal/http/HttpURLConnectionImpl.java b/mobile/CordovaLib/src/com/squareup/okhttp/internal/http/HttpURLConnectionImpl.java deleted file mode 100755 index fb4a7048d33..00000000000 --- a/mobile/CordovaLib/src/com/squareup/okhttp/internal/http/HttpURLConnectionImpl.java +++ /dev/null @@ -1,590 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package com.squareup.okhttp.internal.http; - -import com.squareup.okhttp.Connection; -import com.squareup.okhttp.OkHttpClient; -import com.squareup.okhttp.internal.Platform; -import com.squareup.okhttp.internal.Util; -import java.io.FileNotFoundException; -import java.io.IOException; -import java.io.InputStream; -import java.io.OutputStream; -import java.net.HttpRetryException; -import java.net.HttpURLConnection; -import java.net.InetSocketAddress; -import java.net.ProtocolException; -import java.net.Proxy; -import java.net.SocketPermission; -import java.net.URL; -import java.security.Permission; -import java.security.cert.CertificateException; -import java.util.ArrayList; -import java.util.Collections; -import java.util.List; -import java.util.Map; -import java.util.concurrent.TimeUnit; -import javax.net.ssl.SSLHandshakeException; - -import static com.squareup.okhttp.internal.Util.getEffectivePort; - -/** - * This implementation uses HttpEngine to send requests and receive responses. - * This class may use multiple HttpEngines to follow redirects, authentication - * retries, etc. to retrieve the final response body. - * - *

What does 'connected' mean?

- * This class inherits a {@code connected} field from the superclass. That field - * is not used to indicate not whether this URLConnection is - * currently connected. Instead, it indicates whether a connection has ever been - * attempted. Once a connection has been attempted, certain properties (request - * header fields, request method, etc.) are immutable. Test the {@code - * connection} field on this class for null/non-null to determine of an instance - * is currently connected to a server. - */ -public class HttpURLConnectionImpl extends HttpURLConnection implements Policy { - - /** Numeric status code, 307: Temporary Redirect. */ - public static final int HTTP_TEMP_REDIRECT = 307; - - /** - * How many redirects should we follow? Chrome follows 21; Firefox, curl, - * and wget follow 20; Safari follows 16; and HTTP/1.0 recommends 5. - */ - private static final int MAX_REDIRECTS = 20; - - final OkHttpClient client; - - private final RawHeaders rawRequestHeaders = new RawHeaders(); - /** Like the superclass field of the same name, but a long and available on all platforms. */ - private long fixedContentLength = -1; - private int redirectionCount; - protected IOException httpEngineFailure; - protected HttpEngine httpEngine; - private Proxy selectedProxy; - - public HttpURLConnectionImpl(URL url, OkHttpClient client) { - super(url); - this.client = client; - } - - @Override public final void connect() throws IOException { - initHttpEngine(); - boolean success; - do { - success = execute(false); - } while (!success); - } - - @Override public final void disconnect() { - // Calling disconnect() before a connection exists should have no effect. - if (httpEngine != null) { - // We close the response body here instead of in - // HttpEngine.release because that is called when input - // has been completely read from the underlying socket. - // However the response body can be a GZIPInputStream that - // still has unread data. - if (httpEngine.hasResponse()) { - Util.closeQuietly(httpEngine.getResponseBody()); - } - httpEngine.release(true); - } - } - - /** - * Returns an input stream from the server in the case of error such as the - * requested file (txt, htm, html) is not found on the remote server. - */ - @Override public final InputStream getErrorStream() { - try { - HttpEngine response = getResponse(); - if (response.hasResponseBody() && response.getResponseCode() >= HTTP_BAD_REQUEST) { - return response.getResponseBody(); - } - return null; - } catch (IOException e) { - return null; - } - } - - /** - * Returns the value of the field at {@code position}. Returns null if there - * are fewer than {@code position} headers. - */ - @Override public final String getHeaderField(int position) { - try { - return getResponse().getResponseHeaders().getHeaders().getValue(position); - } catch (IOException e) { - return null; - } - } - - /** - * Returns the value of the field corresponding to the {@code fieldName}, or - * null if there is no such field. If the field has multiple values, the - * last value is returned. - */ - @Override public final String getHeaderField(String fieldName) { - try { - RawHeaders rawHeaders = getResponse().getResponseHeaders().getHeaders(); - return fieldName == null ? rawHeaders.getStatusLine() : rawHeaders.get(fieldName); - } catch (IOException e) { - return null; - } - } - - @Override public final String getHeaderFieldKey(int position) { - try { - return getResponse().getResponseHeaders().getHeaders().getFieldName(position); - } catch (IOException e) { - return null; - } - } - - @Override public final Map> getHeaderFields() { - try { - return getResponse().getResponseHeaders().getHeaders().toMultimap(true); - } catch (IOException e) { - return Collections.emptyMap(); - } - } - - @Override public final Map> getRequestProperties() { - if (connected) { - throw new IllegalStateException( - "Cannot access request header fields after connection is set"); - } - return rawRequestHeaders.toMultimap(false); - } - - @Override public final InputStream getInputStream() throws IOException { - if (!doInput) { - throw new ProtocolException("This protocol does not support input"); - } - - HttpEngine response = getResponse(); - - // if the requested file does not exist, throw an exception formerly the - // Error page from the server was returned if the requested file was - // text/html this has changed to return FileNotFoundException for all - // file types - if (getResponseCode() >= HTTP_BAD_REQUEST) { - throw new FileNotFoundException(url.toString()); - } - - InputStream result = response.getResponseBody(); - if (result == null) { - throw new ProtocolException("No response body exists; responseCode=" + getResponseCode()); - } - return result; - } - - @Override public final OutputStream getOutputStream() throws IOException { - connect(); - - OutputStream out = httpEngine.getRequestBody(); - if (out == null) { - throw new ProtocolException("method does not support a request body: " + method); - } else if (httpEngine.hasResponse()) { - throw new ProtocolException("cannot write request body after response has been read"); - } - - return out; - } - - @Override public final Permission getPermission() throws IOException { - String hostName = getURL().getHost(); - int hostPort = Util.getEffectivePort(getURL()); - if (usingProxy()) { - InetSocketAddress proxyAddress = (InetSocketAddress) client.getProxy().address(); - hostName = proxyAddress.getHostName(); - hostPort = proxyAddress.getPort(); - } - return new SocketPermission(hostName + ":" + hostPort, "connect, resolve"); - } - - @Override public final String getRequestProperty(String field) { - if (field == null) { - return null; - } - return rawRequestHeaders.get(field); - } - - @Override public void setConnectTimeout(int timeoutMillis) { - client.setConnectTimeout(timeoutMillis, TimeUnit.MILLISECONDS); - } - - @Override public int getConnectTimeout() { - return client.getConnectTimeout(); - } - - @Override public void setReadTimeout(int timeoutMillis) { - client.setReadTimeout(timeoutMillis, TimeUnit.MILLISECONDS); - } - - @Override public int getReadTimeout() { - return client.getReadTimeout(); - } - - private void initHttpEngine() throws IOException { - if (httpEngineFailure != null) { - throw httpEngineFailure; - } else if (httpEngine != null) { - return; - } - - connected = true; - try { - if (doOutput) { - if (method.equals("GET")) { - // they are requesting a stream to write to. This implies a POST method - method = "POST"; - } else if (!method.equals("POST") && !method.equals("PUT") && !method.equals("PATCH")) { - // If the request method is neither POST nor PUT nor PATCH, then you're not writing - throw new ProtocolException(method + " does not support writing"); - } - } - httpEngine = newHttpEngine(method, rawRequestHeaders, null, null); - } catch (IOException e) { - httpEngineFailure = e; - throw e; - } - } - - @Override public HttpURLConnection getHttpConnectionToCache() { - return this; - } - - private HttpEngine newHttpEngine(String method, RawHeaders requestHeaders, - Connection connection, RetryableOutputStream requestBody) throws IOException { - if (url.getProtocol().equals("http")) { - return new HttpEngine(client, this, method, requestHeaders, connection, requestBody); - } else if (url.getProtocol().equals("https")) { - return new HttpsEngine(client, this, method, requestHeaders, connection, requestBody); - } else { - throw new AssertionError(); - } - } - - /** - * Aggressively tries to get the final HTTP response, potentially making - * many HTTP requests in the process in order to cope with redirects and - * authentication. - */ - private HttpEngine getResponse() throws IOException { - initHttpEngine(); - - if (httpEngine.hasResponse()) { - return httpEngine; - } - - while (true) { - if (!execute(true)) { - continue; - } - - Retry retry = processResponseHeaders(); - if (retry == Retry.NONE) { - httpEngine.automaticallyReleaseConnectionToPool(); - return httpEngine; - } - - // The first request was insufficient. Prepare for another... - String retryMethod = method; - OutputStream requestBody = httpEngine.getRequestBody(); - - // Although RFC 2616 10.3.2 specifies that a HTTP_MOVED_PERM - // redirect should keep the same method, Chrome, Firefox and the - // RI all issue GETs when following any redirect. - int responseCode = httpEngine.getResponseCode(); - if (responseCode == HTTP_MULT_CHOICE - || responseCode == HTTP_MOVED_PERM - || responseCode == HTTP_MOVED_TEMP - || responseCode == HTTP_SEE_OTHER) { - retryMethod = "GET"; - requestBody = null; - } - - if (requestBody != null && !(requestBody instanceof RetryableOutputStream)) { - throw new HttpRetryException("Cannot retry streamed HTTP body", responseCode); - } - - if (retry == Retry.DIFFERENT_CONNECTION) { - httpEngine.automaticallyReleaseConnectionToPool(); - } - - httpEngine.release(false); - - httpEngine = newHttpEngine(retryMethod, rawRequestHeaders, httpEngine.getConnection(), - (RetryableOutputStream) requestBody); - - if (requestBody == null) { - // Drop the Content-Length header when redirected from POST to GET. - httpEngine.getRequestHeaders().removeContentLength(); - } - } - } - - /** - * Sends a request and optionally reads a response. Returns true if the - * request was successfully executed, and false if the request can be - * retried. Throws an exception if the request failed permanently. - */ - private boolean execute(boolean readResponse) throws IOException { - try { - httpEngine.sendRequest(); - if (readResponse) { - httpEngine.readResponse(); - } - - return true; - } catch (IOException e) { - if (handleFailure(e)) { - return false; - } else { - throw e; - } - } - } - - /** - * Report and attempt to recover from {@code e}. Returns true if the HTTP - * engine was replaced and the request should be retried. Otherwise the - * failure is permanent. - */ - private boolean handleFailure(IOException e) throws IOException { - RouteSelector routeSelector = httpEngine.routeSelector; - if (routeSelector != null && httpEngine.connection != null) { - routeSelector.connectFailed(httpEngine.connection, e); - } - - OutputStream requestBody = httpEngine.getRequestBody(); - boolean canRetryRequestBody = requestBody == null - || requestBody instanceof RetryableOutputStream; - if (routeSelector == null && httpEngine.connection == null // No connection. - || routeSelector != null && !routeSelector.hasNext() // No more routes to attempt. - || !isRecoverable(e) - || !canRetryRequestBody) { - httpEngineFailure = e; - return false; - } - - httpEngine.release(true); - RetryableOutputStream retryableOutputStream = (RetryableOutputStream) requestBody; - httpEngine = newHttpEngine(method, rawRequestHeaders, null, retryableOutputStream); - httpEngine.routeSelector = routeSelector; // Keep the same routeSelector. - return true; - } - - private boolean isRecoverable(IOException e) { - // If the problem was a CertificateException from the X509TrustManager, - // do not retry, we didn't have an abrupt server initiated exception. - boolean sslFailure = - e instanceof SSLHandshakeException && e.getCause() instanceof CertificateException; - boolean protocolFailure = e instanceof ProtocolException; - return !sslFailure && !protocolFailure; - } - - public HttpEngine getHttpEngine() { - return httpEngine; - } - - enum Retry { - NONE, - SAME_CONNECTION, - DIFFERENT_CONNECTION - } - - /** - * Returns the retry action to take for the current response headers. The - * headers, proxy and target URL for this connection may be adjusted to - * prepare for a follow up request. - */ - private Retry processResponseHeaders() throws IOException { - Proxy selectedProxy = httpEngine.connection != null - ? httpEngine.connection.getRoute().getProxy() - : client.getProxy(); - final int responseCode = getResponseCode(); - switch (responseCode) { - case HTTP_PROXY_AUTH: - if (selectedProxy.type() != Proxy.Type.HTTP) { - throw new ProtocolException("Received HTTP_PROXY_AUTH (407) code while not using proxy"); - } - // fall-through - case HTTP_UNAUTHORIZED: - boolean credentialsFound = HttpAuthenticator.processAuthHeader(client.getAuthenticator(), - getResponseCode(), httpEngine.getResponseHeaders().getHeaders(), rawRequestHeaders, - selectedProxy, url); - return credentialsFound ? Retry.SAME_CONNECTION : Retry.NONE; - - case HTTP_MULT_CHOICE: - case HTTP_MOVED_PERM: - case HTTP_MOVED_TEMP: - case HTTP_SEE_OTHER: - case HTTP_TEMP_REDIRECT: - if (!getInstanceFollowRedirects()) { - return Retry.NONE; - } - if (++redirectionCount > MAX_REDIRECTS) { - throw new ProtocolException("Too many redirects: " + redirectionCount); - } - if (responseCode == HTTP_TEMP_REDIRECT && !method.equals("GET") && !method.equals("HEAD")) { - // "If the 307 status code is received in response to a request other than GET or HEAD, - // the user agent MUST NOT automatically redirect the request" - return Retry.NONE; - } - String location = getHeaderField("Location"); - if (location == null) { - return Retry.NONE; - } - URL previousUrl = url; - url = new URL(previousUrl, location); - if (!url.getProtocol().equals("https") && !url.getProtocol().equals("http")) { - return Retry.NONE; // Don't follow redirects to unsupported protocols. - } - boolean sameProtocol = previousUrl.getProtocol().equals(url.getProtocol()); - if (!sameProtocol && !client.getFollowProtocolRedirects()) { - return Retry.NONE; // This client doesn't follow redirects across protocols. - } - boolean sameHost = previousUrl.getHost().equals(url.getHost()); - boolean samePort = getEffectivePort(previousUrl) == getEffectivePort(url); - if (sameHost && samePort && sameProtocol) { - return Retry.SAME_CONNECTION; - } else { - return Retry.DIFFERENT_CONNECTION; - } - - default: - return Retry.NONE; - } - } - - /** @see java.net.HttpURLConnection#setFixedLengthStreamingMode(int) */ - @Override public final long getFixedContentLength() { - return fixedContentLength; - } - - @Override public final int getChunkLength() { - return chunkLength; - } - - @Override public final boolean usingProxy() { - if (selectedProxy != null) { - return isValidNonDirectProxy(selectedProxy); - } - - // This behavior is a bit odd (but is probably justified by the - // oddness of the APIs involved). Before a connection is established, - // this method will return true only if this connection was explicitly - // opened with a Proxy. We don't attempt to query the ProxySelector - // at all. - return isValidNonDirectProxy(client.getProxy()); - } - - private static boolean isValidNonDirectProxy(Proxy proxy) { - return proxy != null && proxy.type() != Proxy.Type.DIRECT; - } - - @Override public String getResponseMessage() throws IOException { - return getResponse().getResponseHeaders().getHeaders().getResponseMessage(); - } - - @Override public final int getResponseCode() throws IOException { - return getResponse().getResponseCode(); - } - - @Override public final void setRequestProperty(String field, String newValue) { - if (connected) { - throw new IllegalStateException("Cannot set request property after connection is made"); - } - if (field == null) { - throw new NullPointerException("field == null"); - } - if (newValue == null) { - // Silently ignore null header values for backwards compatibility with older - // android versions as well as with other URLConnection implementations. - // - // Some implementations send a malformed HTTP header when faced with - // such requests, we respect the spec and ignore the header. - Platform.get().logW("Ignoring header " + field + " because its value was null."); - return; - } - - if ("X-Android-Transports".equals(field)) { - setTransports(newValue, false /* append */); - } else { - rawRequestHeaders.set(field, newValue); - } - } - - @Override public final void addRequestProperty(String field, String value) { - if (connected) { - throw new IllegalStateException("Cannot add request property after connection is made"); - } - if (field == null) { - throw new NullPointerException("field == null"); - } - if (value == null) { - // Silently ignore null header values for backwards compatibility with older - // android versions as well as with other URLConnection implementations. - // - // Some implementations send a malformed HTTP header when faced with - // such requests, we respect the spec and ignore the header. - Platform.get().logW("Ignoring header " + field + " because its value was null."); - return; - } - - if ("X-Android-Transports".equals(field)) { - setTransports(value, true /* append */); - } else { - rawRequestHeaders.add(field, value); - } - } - - /* - * Splits and validates a comma-separated string of transports. - * When append == false, we require that the transport list contains "http/1.1". - */ - private void setTransports(String transportsString, boolean append) { - List transportsList = new ArrayList(); - if (append) { - transportsList.addAll(client.getTransports()); - } - for (String transport : transportsString.split(",", -1)) { - transportsList.add(transport); - } - client.setTransports(transportsList); - } - - @Override public void setFixedLengthStreamingMode(int contentLength) { - setFixedLengthStreamingMode((long) contentLength); - } - - // @Override Don't override: this overload method doesn't exist prior to Java 1.7. - public void setFixedLengthStreamingMode(long contentLength) { - if (super.connected) throw new IllegalStateException("Already connected"); - if (chunkLength > 0) throw new IllegalStateException("Already in chunked mode"); - if (contentLength < 0) throw new IllegalArgumentException("contentLength < 0"); - this.fixedContentLength = contentLength; - super.fixedContentLength = (int) Math.min(contentLength, Integer.MAX_VALUE); - } - - @Override public final void setSelectedProxy(Proxy proxy) { - this.selectedProxy = proxy; - } -} diff --git a/mobile/CordovaLib/src/com/squareup/okhttp/internal/http/HttpsEngine.java b/mobile/CordovaLib/src/com/squareup/okhttp/internal/http/HttpsEngine.java deleted file mode 100755 index 2bc1d68e427..00000000000 --- a/mobile/CordovaLib/src/com/squareup/okhttp/internal/http/HttpsEngine.java +++ /dev/null @@ -1,72 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package com.squareup.okhttp.internal.http; - -import com.squareup.okhttp.Connection; -import com.squareup.okhttp.OkHttpClient; -import com.squareup.okhttp.TunnelRequest; -import java.io.IOException; -import java.net.CacheResponse; -import java.net.SecureCacheResponse; -import java.net.URL; -import javax.net.ssl.SSLSocket; - -import static com.squareup.okhttp.internal.Util.getEffectivePort; - -public final class HttpsEngine extends HttpEngine { - /** - * Stash of HttpsEngine.connection.socket to implement requests like {@code - * HttpsURLConnection#getCipherSuite} even after the connection has been - * recycled. - */ - private SSLSocket sslSocket; - - public HttpsEngine(OkHttpClient client, Policy policy, String method, RawHeaders requestHeaders, - Connection connection, RetryableOutputStream requestBody) throws IOException { - super(client, policy, method, requestHeaders, connection, requestBody); - this.sslSocket = connection != null ? (SSLSocket) connection.getSocket() : null; - } - - @Override protected void connected(Connection connection) { - this.sslSocket = (SSLSocket) connection.getSocket(); - super.connected(connection); - } - - @Override protected boolean acceptCacheResponseType(CacheResponse cacheResponse) { - return cacheResponse instanceof SecureCacheResponse; - } - - @Override protected boolean includeAuthorityInRequestLine() { - // Even if there is a proxy, it isn't involved. Always request just the path. - return false; - } - - public SSLSocket getSslSocket() { - return sslSocket; - } - - @Override protected TunnelRequest getTunnelConfig() { - String userAgent = requestHeaders.getUserAgent(); - if (userAgent == null) { - userAgent = getDefaultUserAgent(); - } - - URL url = policy.getURL(); - return new TunnelRequest(url.getHost(), getEffectivePort(url), userAgent, - requestHeaders.getProxyAuthorization()); - } -} diff --git a/mobile/CordovaLib/src/com/squareup/okhttp/internal/http/HttpsURLConnectionImpl.java b/mobile/CordovaLib/src/com/squareup/okhttp/internal/http/HttpsURLConnectionImpl.java deleted file mode 100755 index e64fb98cb5a..00000000000 --- a/mobile/CordovaLib/src/com/squareup/okhttp/internal/http/HttpsURLConnectionImpl.java +++ /dev/null @@ -1,366 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package com.squareup.okhttp.internal.http; - -import android.annotation.SuppressLint; -import com.squareup.okhttp.OkHttpClient; -import java.io.IOException; -import java.io.InputStream; -import java.io.OutputStream; -import java.net.HttpURLConnection; -import java.net.ProtocolException; -import java.net.SecureCacheResponse; -import java.net.URL; -import java.security.Permission; -import java.security.Principal; -import java.security.cert.Certificate; -import java.util.List; -import java.util.Map; -import javax.net.ssl.HostnameVerifier; -import javax.net.ssl.HttpsURLConnection; -import javax.net.ssl.SSLPeerUnverifiedException; -import javax.net.ssl.SSLSocket; -import javax.net.ssl.SSLSocketFactory; - -public final class HttpsURLConnectionImpl extends HttpsURLConnection { - - /** HttpUrlConnectionDelegate allows reuse of HttpURLConnectionImpl. */ - private final HttpUrlConnectionDelegate delegate; - - public HttpsURLConnectionImpl(URL url, OkHttpClient client) { - super(url); - delegate = new HttpUrlConnectionDelegate(url, client); - } - - @Override public String getCipherSuite() { - SecureCacheResponse cacheResponse = delegate.getSecureCacheResponse(); - if (cacheResponse != null) { - return cacheResponse.getCipherSuite(); - } - SSLSocket sslSocket = getSslSocket(); - if (sslSocket != null) { - return sslSocket.getSession().getCipherSuite(); - } - return null; - } - - @Override public Certificate[] getLocalCertificates() { - SecureCacheResponse cacheResponse = delegate.getSecureCacheResponse(); - if (cacheResponse != null) { - List result = cacheResponse.getLocalCertificateChain(); - return result != null ? result.toArray(new Certificate[result.size()]) : null; - } - SSLSocket sslSocket = getSslSocket(); - if (sslSocket != null) { - return sslSocket.getSession().getLocalCertificates(); - } - return null; - } - - @Override public Certificate[] getServerCertificates() throws SSLPeerUnverifiedException { - SecureCacheResponse cacheResponse = delegate.getSecureCacheResponse(); - if (cacheResponse != null) { - List result = cacheResponse.getServerCertificateChain(); - return result != null ? result.toArray(new Certificate[result.size()]) : null; - } - SSLSocket sslSocket = getSslSocket(); - if (sslSocket != null) { - return sslSocket.getSession().getPeerCertificates(); - } - return null; - } - - @Override public Principal getPeerPrincipal() throws SSLPeerUnverifiedException { - SecureCacheResponse cacheResponse = delegate.getSecureCacheResponse(); - if (cacheResponse != null) { - return cacheResponse.getPeerPrincipal(); - } - SSLSocket sslSocket = getSslSocket(); - if (sslSocket != null) { - return sslSocket.getSession().getPeerPrincipal(); - } - return null; - } - - @Override public Principal getLocalPrincipal() { - SecureCacheResponse cacheResponse = delegate.getSecureCacheResponse(); - if (cacheResponse != null) { - return cacheResponse.getLocalPrincipal(); - } - SSLSocket sslSocket = getSslSocket(); - if (sslSocket != null) { - return sslSocket.getSession().getLocalPrincipal(); - } - return null; - } - - public HttpEngine getHttpEngine() { - return delegate.getHttpEngine(); - } - - private SSLSocket getSslSocket() { - if (delegate.httpEngine == null || !delegate.httpEngine.connected) { - throw new IllegalStateException("Connection has not yet been established"); - } - return delegate.httpEngine instanceof HttpsEngine - ? ((HttpsEngine) delegate.httpEngine).getSslSocket() - : null; // Not HTTPS! Probably an https:// to http:// redirect. - } - - @Override public void disconnect() { - delegate.disconnect(); - } - - @Override public InputStream getErrorStream() { - return delegate.getErrorStream(); - } - - @Override public String getRequestMethod() { - return delegate.getRequestMethod(); - } - - @Override public int getResponseCode() throws IOException { - return delegate.getResponseCode(); - } - - @Override public String getResponseMessage() throws IOException { - return delegate.getResponseMessage(); - } - - @Override public void setRequestMethod(String method) throws ProtocolException { - delegate.setRequestMethod(method); - } - - @Override public boolean usingProxy() { - return delegate.usingProxy(); - } - - @Override public boolean getInstanceFollowRedirects() { - return delegate.getInstanceFollowRedirects(); - } - - @Override public void setInstanceFollowRedirects(boolean followRedirects) { - delegate.setInstanceFollowRedirects(followRedirects); - } - - @Override public void connect() throws IOException { - connected = true; - delegate.connect(); - } - - @Override public boolean getAllowUserInteraction() { - return delegate.getAllowUserInteraction(); - } - - @Override public Object getContent() throws IOException { - return delegate.getContent(); - } - - @SuppressWarnings("unchecked") // Spec does not generify - @Override public Object getContent(Class[] types) throws IOException { - return delegate.getContent(types); - } - - @Override public String getContentEncoding() { - return delegate.getContentEncoding(); - } - - @Override public int getContentLength() { - return delegate.getContentLength(); - } - - @Override public String getContentType() { - return delegate.getContentType(); - } - - @Override public long getDate() { - return delegate.getDate(); - } - - @Override public boolean getDefaultUseCaches() { - return delegate.getDefaultUseCaches(); - } - - @Override public boolean getDoInput() { - return delegate.getDoInput(); - } - - @Override public boolean getDoOutput() { - return delegate.getDoOutput(); - } - - @Override public long getExpiration() { - return delegate.getExpiration(); - } - - @Override public String getHeaderField(int pos) { - return delegate.getHeaderField(pos); - } - - @Override public Map> getHeaderFields() { - return delegate.getHeaderFields(); - } - - @Override public Map> getRequestProperties() { - return delegate.getRequestProperties(); - } - - @Override public void addRequestProperty(String field, String newValue) { - delegate.addRequestProperty(field, newValue); - } - - @Override public String getHeaderField(String key) { - return delegate.getHeaderField(key); - } - - @Override public long getHeaderFieldDate(String field, long defaultValue) { - return delegate.getHeaderFieldDate(field, defaultValue); - } - - @Override public int getHeaderFieldInt(String field, int defaultValue) { - return delegate.getHeaderFieldInt(field, defaultValue); - } - - @Override public String getHeaderFieldKey(int position) { - return delegate.getHeaderFieldKey(position); - } - - @Override public long getIfModifiedSince() { - return delegate.getIfModifiedSince(); - } - - @Override public InputStream getInputStream() throws IOException { - return delegate.getInputStream(); - } - - @Override public long getLastModified() { - return delegate.getLastModified(); - } - - @Override public OutputStream getOutputStream() throws IOException { - return delegate.getOutputStream(); - } - - @Override public Permission getPermission() throws IOException { - return delegate.getPermission(); - } - - @Override public String getRequestProperty(String field) { - return delegate.getRequestProperty(field); - } - - @Override public URL getURL() { - return delegate.getURL(); - } - - @Override public boolean getUseCaches() { - return delegate.getUseCaches(); - } - - @Override public void setAllowUserInteraction(boolean newValue) { - delegate.setAllowUserInteraction(newValue); - } - - @Override public void setDefaultUseCaches(boolean newValue) { - delegate.setDefaultUseCaches(newValue); - } - - @Override public void setDoInput(boolean newValue) { - delegate.setDoInput(newValue); - } - - @Override public void setDoOutput(boolean newValue) { - delegate.setDoOutput(newValue); - } - - @Override public void setIfModifiedSince(long newValue) { - delegate.setIfModifiedSince(newValue); - } - - @Override public void setRequestProperty(String field, String newValue) { - delegate.setRequestProperty(field, newValue); - } - - @Override public void setUseCaches(boolean newValue) { - delegate.setUseCaches(newValue); - } - - @Override public void setConnectTimeout(int timeoutMillis) { - delegate.setConnectTimeout(timeoutMillis); - } - - @Override public int getConnectTimeout() { - return delegate.getConnectTimeout(); - } - - @Override public void setReadTimeout(int timeoutMillis) { - delegate.setReadTimeout(timeoutMillis); - } - - @Override public int getReadTimeout() { - return delegate.getReadTimeout(); - } - - @Override public String toString() { - return delegate.toString(); - } - - @Override public void setFixedLengthStreamingMode(int contentLength) { - delegate.setFixedLengthStreamingMode(contentLength); - } - - @Override public void setChunkedStreamingMode(int chunkLength) { - delegate.setChunkedStreamingMode(chunkLength); - } - - @Override public void setHostnameVerifier(HostnameVerifier hostnameVerifier) { - delegate.client.setHostnameVerifier(hostnameVerifier); - } - - @Override public HostnameVerifier getHostnameVerifier() { - return delegate.client.getHostnameVerifier(); - } - - @Override public void setSSLSocketFactory(SSLSocketFactory sslSocketFactory) { - delegate.client.setSslSocketFactory(sslSocketFactory); - } - - @Override public SSLSocketFactory getSSLSocketFactory() { - return delegate.client.getSslSocketFactory(); - } - - @SuppressLint("NewApi") - @Override public void setFixedLengthStreamingMode(long contentLength) { - delegate.setFixedLengthStreamingMode(contentLength); - } - - private final class HttpUrlConnectionDelegate extends HttpURLConnectionImpl { - private HttpUrlConnectionDelegate(URL url, OkHttpClient client) { - super(url, client); - } - - @Override public HttpURLConnection getHttpConnectionToCache() { - return HttpsURLConnectionImpl.this; - } - - public SecureCacheResponse getSecureCacheResponse() { - return httpEngine instanceof HttpsEngine - ? (SecureCacheResponse) httpEngine.getCacheResponse() - : null; - } - } -} diff --git a/mobile/CordovaLib/src/com/squareup/okhttp/internal/http/OkResponseCacheAdapter.java b/mobile/CordovaLib/src/com/squareup/okhttp/internal/http/OkResponseCacheAdapter.java deleted file mode 100755 index 5335c2bce89..00000000000 --- a/mobile/CordovaLib/src/com/squareup/okhttp/internal/http/OkResponseCacheAdapter.java +++ /dev/null @@ -1,57 +0,0 @@ -/* - * Copyright (C) 2013 Square, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package com.squareup.okhttp.internal.http; - -import com.squareup.okhttp.OkResponseCache; -import com.squareup.okhttp.ResponseSource; -import java.io.IOException; -import java.net.CacheRequest; -import java.net.CacheResponse; -import java.net.HttpURLConnection; -import java.net.ResponseCache; -import java.net.URI; -import java.net.URLConnection; -import java.util.List; -import java.util.Map; - -public final class OkResponseCacheAdapter implements OkResponseCache { - private final ResponseCache responseCache; - public OkResponseCacheAdapter(ResponseCache responseCache) { - this.responseCache = responseCache; - } - - @Override public CacheResponse get(URI uri, String requestMethod, - Map> requestHeaders) throws IOException { - return responseCache.get(uri, requestMethod, requestHeaders); - } - - @Override public CacheRequest put(URI uri, URLConnection urlConnection) throws IOException { - return responseCache.put(uri, urlConnection); - } - - @Override public void maybeRemove(String requestMethod, URI uri) throws IOException { - } - - @Override public void update(CacheResponse conditionalCacheHit, HttpURLConnection connection) - throws IOException { - } - - @Override public void trackConditionalCacheHit() { - } - - @Override public void trackResponse(ResponseSource source) { - } -} diff --git a/mobile/CordovaLib/src/com/squareup/okhttp/internal/http/Policy.java b/mobile/CordovaLib/src/com/squareup/okhttp/internal/http/Policy.java deleted file mode 100755 index 0a29d4b1ab6..00000000000 --- a/mobile/CordovaLib/src/com/squareup/okhttp/internal/http/Policy.java +++ /dev/null @@ -1,49 +0,0 @@ -/* - * Copyright (C) 2013 Square, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package com.squareup.okhttp.internal.http; - -import java.net.HttpURLConnection; -import java.net.Proxy; -import java.net.URL; - -public interface Policy { - /** Returns true if HTTP response caches should be used. */ - boolean getUseCaches(); - - /** Returns the HttpURLConnection instance to store in the cache. */ - HttpURLConnection getHttpConnectionToCache(); - - /** Returns the current destination URL, possibly a redirect. */ - URL getURL(); - - /** Returns the If-Modified-Since timestamp, or 0 if none is set. */ - long getIfModifiedSince(); - - /** Returns true if a non-direct proxy is specified. */ - boolean usingProxy(); - - /** @see java.net.HttpURLConnection#setChunkedStreamingMode(int) */ - int getChunkLength(); - - /** @see java.net.HttpURLConnection#setFixedLengthStreamingMode(int) */ - long getFixedContentLength(); - - /** - * Sets the current proxy that this connection is using. - * @see java.net.HttpURLConnection#usingProxy - */ - void setSelectedProxy(Proxy proxy); -} diff --git a/mobile/CordovaLib/src/com/squareup/okhttp/internal/http/RawHeaders.java b/mobile/CordovaLib/src/com/squareup/okhttp/internal/http/RawHeaders.java deleted file mode 100755 index 8b453207047..00000000000 --- a/mobile/CordovaLib/src/com/squareup/okhttp/internal/http/RawHeaders.java +++ /dev/null @@ -1,447 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package com.squareup.okhttp.internal.http; - -import com.squareup.okhttp.internal.Util; -import java.io.IOException; -import java.io.InputStream; -import java.io.UnsupportedEncodingException; -import java.net.ProtocolException; -import java.util.ArrayList; -import java.util.Collections; -import java.util.Comparator; -import java.util.HashSet; -import java.util.List; -import java.util.Locale; -import java.util.Map; -import java.util.Map.Entry; -import java.util.Set; -import java.util.TreeMap; -import java.util.TreeSet; - -/** - * The HTTP status and unparsed header fields of a single HTTP message. Values - * are represented as uninterpreted strings; use {@link RequestHeaders} and - * {@link ResponseHeaders} for interpreted headers. This class maintains the - * order of the header fields within the HTTP message. - * - *

This class tracks fields line-by-line. A field with multiple comma- - * separated values on the same line will be treated as a field with a single - * value by this class. It is the caller's responsibility to detect and split - * on commas if their field permits multiple values. This simplifies use of - * single-valued fields whose values routinely contain commas, such as cookies - * or dates. - * - *

This class trims whitespace from values. It never returns values with - * leading or trailing whitespace. - */ -public final class RawHeaders { - private static final Comparator FIELD_NAME_COMPARATOR = new Comparator() { - // @FindBugsSuppressWarnings("ES_COMPARING_PARAMETER_STRING_WITH_EQ") - @Override public int compare(String a, String b) { - if (a == b) { - return 0; - } else if (a == null) { - return -1; - } else if (b == null) { - return 1; - } else { - return String.CASE_INSENSITIVE_ORDER.compare(a, b); - } - } - }; - - private final List namesAndValues = new ArrayList(20); - private String requestLine; - private String statusLine; - private int httpMinorVersion = 1; - private int responseCode = -1; - private String responseMessage; - - public RawHeaders() { - } - - public RawHeaders(RawHeaders copyFrom) { - namesAndValues.addAll(copyFrom.namesAndValues); - requestLine = copyFrom.requestLine; - statusLine = copyFrom.statusLine; - httpMinorVersion = copyFrom.httpMinorVersion; - responseCode = copyFrom.responseCode; - responseMessage = copyFrom.responseMessage; - } - - /** Sets the request line (like "GET / HTTP/1.1"). */ - public void setRequestLine(String requestLine) { - requestLine = requestLine.trim(); - this.requestLine = requestLine; - } - - /** Sets the response status line (like "HTTP/1.0 200 OK"). */ - public void setStatusLine(String statusLine) throws IOException { - // H T T P / 1 . 1 2 0 0 T e m p o r a r y R e d i r e c t - // 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 - if (this.responseMessage != null) { - throw new IllegalStateException("statusLine is already set"); - } - // We allow empty message without leading white space since some servers - // do not send the white space when the message is empty. - boolean hasMessage = statusLine.length() > 13; - if (!statusLine.startsWith("HTTP/1.") - || statusLine.length() < 12 - || statusLine.charAt(8) != ' ' - || (hasMessage && statusLine.charAt(12) != ' ')) { - throw new ProtocolException("Unexpected status line: " + statusLine); - } - int httpMinorVersion = statusLine.charAt(7) - '0'; - if (httpMinorVersion < 0 || httpMinorVersion > 9) { - throw new ProtocolException("Unexpected status line: " + statusLine); - } - int responseCode; - try { - responseCode = Integer.parseInt(statusLine.substring(9, 12)); - } catch (NumberFormatException e) { - throw new ProtocolException("Unexpected status line: " + statusLine); - } - this.responseMessage = hasMessage ? statusLine.substring(13) : ""; - this.responseCode = responseCode; - this.statusLine = statusLine; - this.httpMinorVersion = httpMinorVersion; - } - - /** - * @param method like "GET", "POST", "HEAD", etc. - * @param path like "/foo/bar.html" - * @param version like "HTTP/1.1" - * @param host like "www.android.com:1234" - * @param scheme like "https" - */ - public void addSpdyRequestHeaders(String method, String path, String version, String host, - String scheme) { - // TODO: populate the statusLine for the client's benefit? - add(":method", method); - add(":scheme", scheme); - add(":path", path); - add(":version", version); - add(":host", host); - } - - public String getStatusLine() { - return statusLine; - } - - /** - * Returns the status line's HTTP minor version. This returns 0 for HTTP/1.0 - * and 1 for HTTP/1.1. This returns 1 if the HTTP version is unknown. - */ - public int getHttpMinorVersion() { - return httpMinorVersion != -1 ? httpMinorVersion : 1; - } - - /** Returns the HTTP status code or -1 if it is unknown. */ - public int getResponseCode() { - return responseCode; - } - - /** Returns the HTTP status message or null if it is unknown. */ - public String getResponseMessage() { - return responseMessage; - } - - /** - * Add an HTTP header line containing a field name, a literal colon, and a - * value. This works around empty header names and header names that start - * with a colon (created by old broken SPDY versions of the response cache). - */ - public void addLine(String line) { - int index = line.indexOf(":", 1); - if (index != -1) { - addLenient(line.substring(0, index), line.substring(index + 1)); - } else if (line.startsWith(":")) { - addLenient("", line.substring(1)); // Empty header name. - } else { - addLenient("", line); // No header name. - } - } - - /** Add a field with the specified value. */ - public void add(String fieldName, String value) { - if (fieldName == null) throw new IllegalArgumentException("fieldname == null"); - if (value == null) throw new IllegalArgumentException("value == null"); - if (fieldName.length() == 0 || fieldName.indexOf('\0') != -1 || value.indexOf('\0') != -1) { - throw new IllegalArgumentException("Unexpected header: " + fieldName + ": " + value); - } - addLenient(fieldName, value); - } - - /** - * Add a field with the specified value without any validation. Only - * appropriate for headers from the remote peer. - */ - private void addLenient(String fieldName, String value) { - namesAndValues.add(fieldName); - namesAndValues.add(value.trim()); - } - - public void removeAll(String fieldName) { - for (int i = 0; i < namesAndValues.size(); i += 2) { - if (fieldName.equalsIgnoreCase(namesAndValues.get(i))) { - namesAndValues.remove(i); // field name - namesAndValues.remove(i); // value - } - } - } - - public void addAll(String fieldName, List headerFields) { - for (String value : headerFields) { - add(fieldName, value); - } - } - - /** - * Set a field with the specified value. If the field is not found, it is - * added. If the field is found, the existing values are replaced. - */ - public void set(String fieldName, String value) { - removeAll(fieldName); - add(fieldName, value); - } - - /** Returns the number of field values. */ - public int length() { - return namesAndValues.size() / 2; - } - - /** Returns the field at {@code position} or null if that is out of range. */ - public String getFieldName(int index) { - int fieldNameIndex = index * 2; - if (fieldNameIndex < 0 || fieldNameIndex >= namesAndValues.size()) { - return null; - } - return namesAndValues.get(fieldNameIndex); - } - - /** Returns an immutable case-insensitive set of header names. */ - public Set names() { - TreeSet result = new TreeSet(String.CASE_INSENSITIVE_ORDER); - for (int i = 0; i < length(); i++) { - result.add(getFieldName(i)); - } - return Collections.unmodifiableSet(result); - } - - /** Returns the value at {@code index} or null if that is out of range. */ - public String getValue(int index) { - int valueIndex = index * 2 + 1; - if (valueIndex < 0 || valueIndex >= namesAndValues.size()) { - return null; - } - return namesAndValues.get(valueIndex); - } - - /** Returns the last value corresponding to the specified field, or null. */ - public String get(String fieldName) { - for (int i = namesAndValues.size() - 2; i >= 0; i -= 2) { - if (fieldName.equalsIgnoreCase(namesAndValues.get(i))) { - return namesAndValues.get(i + 1); - } - } - return null; - } - - /** Returns an immutable list of the header values for {@code name}. */ - public List values(String name) { - List result = null; - for (int i = 0; i < length(); i++) { - if (name.equalsIgnoreCase(getFieldName(i))) { - if (result == null) result = new ArrayList(2); - result.add(getValue(i)); - } - } - return result != null - ? Collections.unmodifiableList(result) - : Collections.emptyList(); - } - - /** @param fieldNames a case-insensitive set of HTTP header field names. */ - public RawHeaders getAll(Set fieldNames) { - RawHeaders result = new RawHeaders(); - for (int i = 0; i < namesAndValues.size(); i += 2) { - String fieldName = namesAndValues.get(i); - if (fieldNames.contains(fieldName)) { - result.add(fieldName, namesAndValues.get(i + 1)); - } - } - return result; - } - - /** Returns bytes of a request header for sending on an HTTP transport. */ - public byte[] toBytes() throws UnsupportedEncodingException { - StringBuilder result = new StringBuilder(256); - result.append(requestLine).append("\r\n"); - for (int i = 0; i < namesAndValues.size(); i += 2) { - result.append(namesAndValues.get(i)) - .append(": ") - .append(namesAndValues.get(i + 1)) - .append("\r\n"); - } - result.append("\r\n"); - return result.toString().getBytes("ISO-8859-1"); - } - - /** Parses bytes of a response header from an HTTP transport. */ - public static RawHeaders fromBytes(InputStream in) throws IOException { - RawHeaders headers; - do { - headers = new RawHeaders(); - headers.setStatusLine(Util.readAsciiLine(in)); - readHeaders(in, headers); - } while (headers.getResponseCode() == HttpEngine.HTTP_CONTINUE); - return headers; - } - - /** Reads headers or trailers into {@code out}. */ - public static void readHeaders(InputStream in, RawHeaders out) throws IOException { - // parse the result headers until the first blank line - String line; - while ((line = Util.readAsciiLine(in)).length() != 0) { - out.addLine(line); - } - } - - /** - * Returns an immutable map containing each field to its list of values. The - * status line is mapped to null. - */ - public Map> toMultimap(boolean response) { - Map> result = new TreeMap>(FIELD_NAME_COMPARATOR); - for (int i = 0; i < namesAndValues.size(); i += 2) { - String fieldName = namesAndValues.get(i); - String value = namesAndValues.get(i + 1); - - List allValues = new ArrayList(); - List otherValues = result.get(fieldName); - if (otherValues != null) { - allValues.addAll(otherValues); - } - allValues.add(value); - result.put(fieldName, Collections.unmodifiableList(allValues)); - } - if (response && statusLine != null) { - result.put(null, Collections.unmodifiableList(Collections.singletonList(statusLine))); - } else if (requestLine != null) { - result.put(null, Collections.unmodifiableList(Collections.singletonList(requestLine))); - } - return Collections.unmodifiableMap(result); - } - - /** - * Creates a new instance from the given map of fields to values. If - * present, the null field's last element will be used to set the status - * line. - */ - public static RawHeaders fromMultimap(Map> map, boolean response) - throws IOException { - if (!response) throw new UnsupportedOperationException(); - RawHeaders result = new RawHeaders(); - for (Entry> entry : map.entrySet()) { - String fieldName = entry.getKey(); - List values = entry.getValue(); - if (fieldName != null) { - for (String value : values) { - result.addLenient(fieldName, value); - } - } else if (!values.isEmpty()) { - result.setStatusLine(values.get(values.size() - 1)); - } - } - return result; - } - - /** - * Returns a list of alternating names and values. Names are all lower case. - * No names are repeated. If any name has multiple values, they are - * concatenated using "\0" as a delimiter. - */ - public List toNameValueBlock() { - Set names = new HashSet(); - List result = new ArrayList(); - for (int i = 0; i < namesAndValues.size(); i += 2) { - String name = namesAndValues.get(i).toLowerCase(Locale.US); - String value = namesAndValues.get(i + 1); - - // Drop headers that are forbidden when layering HTTP over SPDY. - if (name.equals("connection") - || name.equals("host") - || name.equals("keep-alive") - || name.equals("proxy-connection") - || name.equals("transfer-encoding")) { - continue; - } - - // If we haven't seen this name before, add the pair to the end of the list... - if (names.add(name)) { - result.add(name); - result.add(value); - continue; - } - - // ...otherwise concatenate the existing values and this value. - for (int j = 0; j < result.size(); j += 2) { - if (name.equals(result.get(j))) { - result.set(j + 1, result.get(j + 1) + "\0" + value); - break; - } - } - } - return result; - } - - /** Returns headers for a name value block containing a SPDY response. */ - public static RawHeaders fromNameValueBlock(List nameValueBlock) throws IOException { - if (nameValueBlock.size() % 2 != 0) { - throw new IllegalArgumentException("Unexpected name value block: " + nameValueBlock); - } - String status = null; - String version = null; - RawHeaders result = new RawHeaders(); - for (int i = 0; i < nameValueBlock.size(); i += 2) { - String name = nameValueBlock.get(i); - String values = nameValueBlock.get(i + 1); - for (int start = 0; start < values.length(); ) { - int end = values.indexOf('\0', start); - if (end == -1) { - end = values.length(); - } - String value = values.substring(start, end); - if (":status".equals(name)) { - status = value; - } else if (":version".equals(name)) { - version = value; - } else { - result.namesAndValues.add(name); - result.namesAndValues.add(value); - } - start = end + 1; - } - } - if (status == null) throw new ProtocolException("Expected ':status' header not present"); - if (version == null) throw new ProtocolException("Expected ':version' header not present"); - result.setStatusLine(version + " " + status); - return result; - } -} diff --git a/mobile/CordovaLib/src/com/squareup/okhttp/internal/http/RequestHeaders.java b/mobile/CordovaLib/src/com/squareup/okhttp/internal/http/RequestHeaders.java deleted file mode 100755 index 71c3cd0f21c..00000000000 --- a/mobile/CordovaLib/src/com/squareup/okhttp/internal/http/RequestHeaders.java +++ /dev/null @@ -1,317 +0,0 @@ -/* - * Copyright (C) 2011 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package com.squareup.okhttp.internal.http; - -import java.net.URI; -import java.util.Date; -import java.util.List; -import java.util.Map; - -/** Parsed HTTP request headers. */ -public final class RequestHeaders { - private final URI uri; - private final RawHeaders headers; - - /** Don't use a cache to satisfy this request. */ - private boolean noCache; - private int maxAgeSeconds = -1; - private int maxStaleSeconds = -1; - private int minFreshSeconds = -1; - - /** - * This field's name "only-if-cached" is misleading. It actually means "do - * not use the network". It is set by a client who only wants to make a - * request if it can be fully satisfied by the cache. Cached responses that - * would require validation (ie. conditional gets) are not permitted if this - * header is set. - */ - private boolean onlyIfCached; - - /** - * True if the request contains an authorization field. Although this isn't - * necessarily a shared cache, it follows the spec's strict requirements for - * shared caches. - */ - private boolean hasAuthorization; - - private long contentLength = -1; - private String transferEncoding; - private String userAgent; - private String host; - private String connection; - private String acceptEncoding; - private String contentType; - private String ifModifiedSince; - private String ifNoneMatch; - private String proxyAuthorization; - - public RequestHeaders(URI uri, RawHeaders headers) { - this.uri = uri; - this.headers = headers; - - HeaderParser.CacheControlHandler handler = new HeaderParser.CacheControlHandler() { - @Override public void handle(String directive, String parameter) { - if ("no-cache".equalsIgnoreCase(directive)) { - noCache = true; - } else if ("max-age".equalsIgnoreCase(directive)) { - maxAgeSeconds = HeaderParser.parseSeconds(parameter); - } else if ("max-stale".equalsIgnoreCase(directive)) { - maxStaleSeconds = HeaderParser.parseSeconds(parameter); - } else if ("min-fresh".equalsIgnoreCase(directive)) { - minFreshSeconds = HeaderParser.parseSeconds(parameter); - } else if ("only-if-cached".equalsIgnoreCase(directive)) { - onlyIfCached = true; - } - } - }; - - for (int i = 0; i < headers.length(); i++) { - String fieldName = headers.getFieldName(i); - String value = headers.getValue(i); - if ("Cache-Control".equalsIgnoreCase(fieldName)) { - HeaderParser.parseCacheControl(value, handler); - } else if ("Pragma".equalsIgnoreCase(fieldName)) { - if ("no-cache".equalsIgnoreCase(value)) { - noCache = true; - } - } else if ("If-None-Match".equalsIgnoreCase(fieldName)) { - ifNoneMatch = value; - } else if ("If-Modified-Since".equalsIgnoreCase(fieldName)) { - ifModifiedSince = value; - } else if ("Authorization".equalsIgnoreCase(fieldName)) { - hasAuthorization = true; - } else if ("Content-Length".equalsIgnoreCase(fieldName)) { - try { - contentLength = Integer.parseInt(value); - } catch (NumberFormatException ignored) { - } - } else if ("Transfer-Encoding".equalsIgnoreCase(fieldName)) { - transferEncoding = value; - } else if ("User-Agent".equalsIgnoreCase(fieldName)) { - userAgent = value; - } else if ("Host".equalsIgnoreCase(fieldName)) { - host = value; - } else if ("Connection".equalsIgnoreCase(fieldName)) { - connection = value; - } else if ("Accept-Encoding".equalsIgnoreCase(fieldName)) { - acceptEncoding = value; - } else if ("Content-Type".equalsIgnoreCase(fieldName)) { - contentType = value; - } else if ("Proxy-Authorization".equalsIgnoreCase(fieldName)) { - proxyAuthorization = value; - } - } - } - - public boolean isChunked() { - return "chunked".equalsIgnoreCase(transferEncoding); - } - - public boolean hasConnectionClose() { - return "close".equalsIgnoreCase(connection); - } - - public URI getUri() { - return uri; - } - - public RawHeaders getHeaders() { - return headers; - } - - public boolean isNoCache() { - return noCache; - } - - public int getMaxAgeSeconds() { - return maxAgeSeconds; - } - - public int getMaxStaleSeconds() { - return maxStaleSeconds; - } - - public int getMinFreshSeconds() { - return minFreshSeconds; - } - - public boolean isOnlyIfCached() { - return onlyIfCached; - } - - public boolean hasAuthorization() { - return hasAuthorization; - } - - public long getContentLength() { - return contentLength; - } - - public String getTransferEncoding() { - return transferEncoding; - } - - public String getUserAgent() { - return userAgent; - } - - public String getHost() { - return host; - } - - public String getConnection() { - return connection; - } - - public String getAcceptEncoding() { - return acceptEncoding; - } - - public String getContentType() { - return contentType; - } - - public String getIfModifiedSince() { - return ifModifiedSince; - } - - public String getIfNoneMatch() { - return ifNoneMatch; - } - - public String getProxyAuthorization() { - return proxyAuthorization; - } - - public void setChunked() { - if (this.transferEncoding != null) { - headers.removeAll("Transfer-Encoding"); - } - headers.add("Transfer-Encoding", "chunked"); - this.transferEncoding = "chunked"; - } - - public void setContentLength(long contentLength) { - if (this.contentLength != -1) { - headers.removeAll("Content-Length"); - } - headers.add("Content-Length", Long.toString(contentLength)); - this.contentLength = contentLength; - } - - /** - * Remove the Content-Length headers. Call this when dropping the body on a - * request or response, such as when a redirect changes the method from POST - * to GET. - */ - public void removeContentLength() { - if (contentLength != -1) { - headers.removeAll("Content-Length"); - contentLength = -1; - } - } - - public void setUserAgent(String userAgent) { - if (this.userAgent != null) { - headers.removeAll("User-Agent"); - } - headers.add("User-Agent", userAgent); - this.userAgent = userAgent; - } - - public void setHost(String host) { - if (this.host != null) { - headers.removeAll("Host"); - } - headers.add("Host", host); - this.host = host; - } - - public void setConnection(String connection) { - if (this.connection != null) { - headers.removeAll("Connection"); - } - headers.add("Connection", connection); - this.connection = connection; - } - - public void setAcceptEncoding(String acceptEncoding) { - if (this.acceptEncoding != null) { - headers.removeAll("Accept-Encoding"); - } - headers.add("Accept-Encoding", acceptEncoding); - this.acceptEncoding = acceptEncoding; - } - - public void setContentType(String contentType) { - if (this.contentType != null) { - headers.removeAll("Content-Type"); - } - headers.add("Content-Type", contentType); - this.contentType = contentType; - } - - public void setIfModifiedSince(Date date) { - if (ifModifiedSince != null) { - headers.removeAll("If-Modified-Since"); - } - String formattedDate = HttpDate.format(date); - headers.add("If-Modified-Since", formattedDate); - ifModifiedSince = formattedDate; - } - - public void setIfNoneMatch(String ifNoneMatch) { - if (this.ifNoneMatch != null) { - headers.removeAll("If-None-Match"); - } - headers.add("If-None-Match", ifNoneMatch); - this.ifNoneMatch = ifNoneMatch; - } - - /** - * Returns true if the request contains conditions that save the server from - * sending a response that the client has locally. When the caller adds - * conditions, this cache won't participate in the request. - */ - public boolean hasConditions() { - return ifModifiedSince != null || ifNoneMatch != null; - } - - public void addCookies(Map> allCookieHeaders) { - for (Map.Entry> entry : allCookieHeaders.entrySet()) { - String key = entry.getKey(); - if (("Cookie".equalsIgnoreCase(key) || "Cookie2".equalsIgnoreCase(key)) - && !entry.getValue().isEmpty()) { - headers.add(key, buildCookieHeader(entry.getValue())); - } - } - } - - /** - * Send all cookies in one big header, as recommended by - * RFC 6265. - */ - private String buildCookieHeader(List cookies) { - if (cookies.size() == 1) return cookies.get(0); - StringBuilder sb = new StringBuilder(); - for (int i = 0; i < cookies.size(); i++) { - if (i > 0) sb.append("; "); - sb.append(cookies.get(i)); - } - return sb.toString(); - } -} diff --git a/mobile/CordovaLib/src/com/squareup/okhttp/internal/http/ResponseHeaders.java b/mobile/CordovaLib/src/com/squareup/okhttp/internal/http/ResponseHeaders.java deleted file mode 100755 index 69e86568f90..00000000000 --- a/mobile/CordovaLib/src/com/squareup/okhttp/internal/http/ResponseHeaders.java +++ /dev/null @@ -1,512 +0,0 @@ -/* - * Copyright (C) 2011 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package com.squareup.okhttp.internal.http; - -import com.squareup.okhttp.ResponseSource; -import com.squareup.okhttp.internal.Platform; -import java.io.IOException; -import java.net.HttpURLConnection; -import java.net.URI; -import java.util.Collections; -import java.util.Date; -import java.util.List; -import java.util.Map; -import java.util.Set; -import java.util.TreeSet; -import java.util.concurrent.TimeUnit; - -import static com.squareup.okhttp.internal.Util.equal; - -/** Parsed HTTP response headers. */ -public final class ResponseHeaders { - - /** HTTP header name for the local time when the request was sent. */ - private static final String SENT_MILLIS = Platform.get().getPrefix() + "-Sent-Millis"; - - /** HTTP header name for the local time when the response was received. */ - private static final String RECEIVED_MILLIS = Platform.get().getPrefix() + "-Received-Millis"; - - /** HTTP synthetic header with the response source. */ - static final String RESPONSE_SOURCE = Platform.get().getPrefix() + "-Response-Source"; - - /** HTTP synthetic header with the selected transport (spdy/3, http/1.1, etc). */ - static final String SELECTED_TRANSPORT = Platform.get().getPrefix() + "-Selected-Transport"; - - private final URI uri; - private final RawHeaders headers; - - /** The server's time when this response was served, if known. */ - private Date servedDate; - - /** The last modified date of the response, if known. */ - private Date lastModified; - - /** - * The expiration date of the response, if known. If both this field and the - * max age are set, the max age is preferred. - */ - private Date expires; - - /** - * Extension header set by HttpURLConnectionImpl specifying the timestamp - * when the HTTP request was first initiated. - */ - private long sentRequestMillis; - - /** - * Extension header set by HttpURLConnectionImpl specifying the timestamp - * when the HTTP response was first received. - */ - private long receivedResponseMillis; - - /** - * In the response, this field's name "no-cache" is misleading. It doesn't - * prevent us from caching the response; it only means we have to validate - * the response with the origin server before returning it. We can do this - * with a conditional get. - */ - private boolean noCache; - - /** If true, this response should not be cached. */ - private boolean noStore; - - /** - * The duration past the response's served date that it can be served - * without validation. - */ - private int maxAgeSeconds = -1; - - /** - * The "s-maxage" directive is the max age for shared caches. Not to be - * confused with "max-age" for non-shared caches, As in Firefox and Chrome, - * this directive is not honored by this cache. - */ - private int sMaxAgeSeconds = -1; - - /** - * This request header field's name "only-if-cached" is misleading. It - * actually means "do not use the network". It is set by a client who only - * wants to make a request if it can be fully satisfied by the cache. - * Cached responses that would require validation (ie. conditional gets) are - * not permitted if this header is set. - */ - private boolean isPublic; - private boolean mustRevalidate; - private String etag; - private int ageSeconds = -1; - - /** Case-insensitive set of field names. */ - private Set varyFields = Collections.emptySet(); - - private String contentEncoding; - private String transferEncoding; - private long contentLength = -1; - private String connection; - private String contentType; - - public ResponseHeaders(URI uri, RawHeaders headers) { - this.uri = uri; - this.headers = headers; - - HeaderParser.CacheControlHandler handler = new HeaderParser.CacheControlHandler() { - @Override public void handle(String directive, String parameter) { - if ("no-cache".equalsIgnoreCase(directive)) { - noCache = true; - } else if ("no-store".equalsIgnoreCase(directive)) { - noStore = true; - } else if ("max-age".equalsIgnoreCase(directive)) { - maxAgeSeconds = HeaderParser.parseSeconds(parameter); - } else if ("s-maxage".equalsIgnoreCase(directive)) { - sMaxAgeSeconds = HeaderParser.parseSeconds(parameter); - } else if ("public".equalsIgnoreCase(directive)) { - isPublic = true; - } else if ("must-revalidate".equalsIgnoreCase(directive)) { - mustRevalidate = true; - } - } - }; - - for (int i = 0; i < headers.length(); i++) { - String fieldName = headers.getFieldName(i); - String value = headers.getValue(i); - if ("Cache-Control".equalsIgnoreCase(fieldName)) { - HeaderParser.parseCacheControl(value, handler); - } else if ("Date".equalsIgnoreCase(fieldName)) { - servedDate = HttpDate.parse(value); - } else if ("Expires".equalsIgnoreCase(fieldName)) { - expires = HttpDate.parse(value); - } else if ("Last-Modified".equalsIgnoreCase(fieldName)) { - lastModified = HttpDate.parse(value); - } else if ("ETag".equalsIgnoreCase(fieldName)) { - etag = value; - } else if ("Pragma".equalsIgnoreCase(fieldName)) { - if ("no-cache".equalsIgnoreCase(value)) { - noCache = true; - } - } else if ("Age".equalsIgnoreCase(fieldName)) { - ageSeconds = HeaderParser.parseSeconds(value); - } else if ("Vary".equalsIgnoreCase(fieldName)) { - // Replace the immutable empty set with something we can mutate. - if (varyFields.isEmpty()) { - varyFields = new TreeSet(String.CASE_INSENSITIVE_ORDER); - } - for (String varyField : value.split(",")) { - varyFields.add(varyField.trim()); - } - } else if ("Content-Encoding".equalsIgnoreCase(fieldName)) { - contentEncoding = value; - } else if ("Transfer-Encoding".equalsIgnoreCase(fieldName)) { - transferEncoding = value; - } else if ("Content-Length".equalsIgnoreCase(fieldName)) { - try { - contentLength = Long.parseLong(value); - } catch (NumberFormatException ignored) { - } - } else if ("Content-Type".equalsIgnoreCase(fieldName)) { - contentType = value; - } else if ("Connection".equalsIgnoreCase(fieldName)) { - connection = value; - } else if (SENT_MILLIS.equalsIgnoreCase(fieldName)) { - sentRequestMillis = Long.parseLong(value); - } else if (RECEIVED_MILLIS.equalsIgnoreCase(fieldName)) { - receivedResponseMillis = Long.parseLong(value); - } - } - } - - public boolean isContentEncodingGzip() { - return "gzip".equalsIgnoreCase(contentEncoding); - } - - public void stripContentEncoding() { - contentEncoding = null; - headers.removeAll("Content-Encoding"); - } - - public void stripContentLength() { - contentLength = -1; - headers.removeAll("Content-Length"); - } - - public boolean isChunked() { - return "chunked".equalsIgnoreCase(transferEncoding); - } - - public boolean hasConnectionClose() { - return "close".equalsIgnoreCase(connection); - } - - public URI getUri() { - return uri; - } - - public RawHeaders getHeaders() { - return headers; - } - - public Date getServedDate() { - return servedDate; - } - - public Date getLastModified() { - return lastModified; - } - - public Date getExpires() { - return expires; - } - - public boolean isNoCache() { - return noCache; - } - - public boolean isNoStore() { - return noStore; - } - - public int getMaxAgeSeconds() { - return maxAgeSeconds; - } - - public int getSMaxAgeSeconds() { - return sMaxAgeSeconds; - } - - public boolean isPublic() { - return isPublic; - } - - public boolean isMustRevalidate() { - return mustRevalidate; - } - - public String getEtag() { - return etag; - } - - public Set getVaryFields() { - return varyFields; - } - - public String getContentEncoding() { - return contentEncoding; - } - - public long getContentLength() { - return contentLength; - } - - public String getContentType() { - return contentType; - } - - public String getConnection() { - return connection; - } - - public void setLocalTimestamps(long sentRequestMillis, long receivedResponseMillis) { - this.sentRequestMillis = sentRequestMillis; - headers.add(SENT_MILLIS, Long.toString(sentRequestMillis)); - this.receivedResponseMillis = receivedResponseMillis; - headers.add(RECEIVED_MILLIS, Long.toString(receivedResponseMillis)); - } - - public void setResponseSource(ResponseSource responseSource) { - headers.set(RESPONSE_SOURCE, responseSource.toString() + " " + headers.getResponseCode()); - } - - public void setTransport(String transport) { - headers.set(SELECTED_TRANSPORT, transport); - } - - /** - * Returns the current age of the response, in milliseconds. The calculation - * is specified by RFC 2616, 13.2.3 Age Calculations. - */ - private long computeAge(long nowMillis) { - long apparentReceivedAge = - servedDate != null ? Math.max(0, receivedResponseMillis - servedDate.getTime()) : 0; - long receivedAge = - ageSeconds != -1 ? Math.max(apparentReceivedAge, TimeUnit.SECONDS.toMillis(ageSeconds)) - : apparentReceivedAge; - long responseDuration = receivedResponseMillis - sentRequestMillis; - long residentDuration = nowMillis - receivedResponseMillis; - return receivedAge + responseDuration + residentDuration; - } - - /** - * Returns the number of milliseconds that the response was fresh for, - * starting from the served date. - */ - private long computeFreshnessLifetime() { - if (maxAgeSeconds != -1) { - return TimeUnit.SECONDS.toMillis(maxAgeSeconds); - } else if (expires != null) { - long servedMillis = servedDate != null ? servedDate.getTime() : receivedResponseMillis; - long delta = expires.getTime() - servedMillis; - return delta > 0 ? delta : 0; - } else if (lastModified != null && uri.getRawQuery() == null) { - // As recommended by the HTTP RFC and implemented in Firefox, the - // max age of a document should be defaulted to 10% of the - // document's age at the time it was served. Default expiration - // dates aren't used for URIs containing a query. - long servedMillis = servedDate != null ? servedDate.getTime() : sentRequestMillis; - long delta = servedMillis - lastModified.getTime(); - return delta > 0 ? (delta / 10) : 0; - } - return 0; - } - - /** - * Returns true if computeFreshnessLifetime used a heuristic. If we used a - * heuristic to serve a cached response older than 24 hours, we are required - * to attach a warning. - */ - private boolean isFreshnessLifetimeHeuristic() { - return maxAgeSeconds == -1 && expires == null; - } - - /** - * Returns true if this response can be stored to later serve another - * request. - */ - public boolean isCacheable(RequestHeaders request) { - // Always go to network for uncacheable response codes (RFC 2616, 13.4), - // This implementation doesn't support caching partial content. - int responseCode = headers.getResponseCode(); - if (responseCode != HttpURLConnection.HTTP_OK - && responseCode != HttpURLConnection.HTTP_NOT_AUTHORITATIVE - && responseCode != HttpURLConnection.HTTP_MULT_CHOICE - && responseCode != HttpURLConnection.HTTP_MOVED_PERM - && responseCode != HttpURLConnection.HTTP_GONE) { - return false; - } - - // Responses to authorized requests aren't cacheable unless they include - // a 'public', 'must-revalidate' or 's-maxage' directive. - if (request.hasAuthorization() && !isPublic && !mustRevalidate && sMaxAgeSeconds == -1) { - return false; - } - - if (noStore) { - return false; - } - - return true; - } - - /** - * Returns true if a Vary header contains an asterisk. Such responses cannot - * be cached. - */ - public boolean hasVaryAll() { - return varyFields.contains("*"); - } - - /** - * Returns true if none of the Vary headers on this response have changed - * between {@code cachedRequest} and {@code newRequest}. - */ - public boolean varyMatches(Map> cachedRequest, - Map> newRequest) { - for (String field : varyFields) { - if (!equal(cachedRequest.get(field), newRequest.get(field))) { - return false; - } - } - return true; - } - - /** Returns the source to satisfy {@code request} given this cached response. */ - public ResponseSource chooseResponseSource(long nowMillis, RequestHeaders request) { - // If this response shouldn't have been stored, it should never be used - // as a response source. This check should be redundant as long as the - // persistence store is well-behaved and the rules are constant. - if (!isCacheable(request)) { - return ResponseSource.NETWORK; - } - - if (request.isNoCache() || request.hasConditions()) { - return ResponseSource.NETWORK; - } - - long ageMillis = computeAge(nowMillis); - long freshMillis = computeFreshnessLifetime(); - - if (request.getMaxAgeSeconds() != -1) { - freshMillis = Math.min(freshMillis, TimeUnit.SECONDS.toMillis(request.getMaxAgeSeconds())); - } - - long minFreshMillis = 0; - if (request.getMinFreshSeconds() != -1) { - minFreshMillis = TimeUnit.SECONDS.toMillis(request.getMinFreshSeconds()); - } - - long maxStaleMillis = 0; - if (!mustRevalidate && request.getMaxStaleSeconds() != -1) { - maxStaleMillis = TimeUnit.SECONDS.toMillis(request.getMaxStaleSeconds()); - } - - if (!noCache && ageMillis + minFreshMillis < freshMillis + maxStaleMillis) { - if (ageMillis + minFreshMillis >= freshMillis) { - headers.add("Warning", "110 HttpURLConnection \"Response is stale\""); - } - long oneDayMillis = 24 * 60 * 60 * 1000L; - if (ageMillis > oneDayMillis && isFreshnessLifetimeHeuristic()) { - headers.add("Warning", "113 HttpURLConnection \"Heuristic expiration\""); - } - return ResponseSource.CACHE; - } - - if (lastModified != null) { - request.setIfModifiedSince(lastModified); - } else if (servedDate != null) { - request.setIfModifiedSince(servedDate); - } - - if (etag != null) { - request.setIfNoneMatch(etag); - } - - return request.hasConditions() ? ResponseSource.CONDITIONAL_CACHE : ResponseSource.NETWORK; - } - - /** - * Returns true if this cached response should be used; false if the - * network response should be used. - */ - public boolean validate(ResponseHeaders networkResponse) { - if (networkResponse.headers.getResponseCode() == HttpURLConnection.HTTP_NOT_MODIFIED) { - return true; - } - - // The HTTP spec says that if the network's response is older than our - // cached response, we may return the cache's response. Like Chrome (but - // unlike Firefox), this client prefers to return the newer response. - if (lastModified != null - && networkResponse.lastModified != null - && networkResponse.lastModified.getTime() < lastModified.getTime()) { - return true; - } - - return false; - } - - /** - * Combines this cached header with a network header as defined by RFC 2616, - * 13.5.3. - */ - public ResponseHeaders combine(ResponseHeaders network) throws IOException { - RawHeaders result = new RawHeaders(); - result.setStatusLine(headers.getStatusLine()); - - for (int i = 0; i < headers.length(); i++) { - String fieldName = headers.getFieldName(i); - String value = headers.getValue(i); - if ("Warning".equals(fieldName) && value.startsWith("1")) { - continue; // drop 100-level freshness warnings - } - if (!isEndToEnd(fieldName) || network.headers.get(fieldName) == null) { - result.add(fieldName, value); - } - } - - for (int i = 0; i < network.headers.length(); i++) { - String fieldName = network.headers.getFieldName(i); - if (isEndToEnd(fieldName)) { - result.add(fieldName, network.headers.getValue(i)); - } - } - - return new ResponseHeaders(uri, result); - } - - /** - * Returns true if {@code fieldName} is an end-to-end HTTP header, as - * defined by RFC 2616, 13.5.1. - */ - private static boolean isEndToEnd(String fieldName) { - return !"Connection".equalsIgnoreCase(fieldName) - && !"Keep-Alive".equalsIgnoreCase(fieldName) - && !"Proxy-Authenticate".equalsIgnoreCase(fieldName) - && !"Proxy-Authorization".equalsIgnoreCase(fieldName) - && !"TE".equalsIgnoreCase(fieldName) - && !"Trailers".equalsIgnoreCase(fieldName) - && !"Transfer-Encoding".equalsIgnoreCase(fieldName) - && !"Upgrade".equalsIgnoreCase(fieldName); - } -} diff --git a/mobile/CordovaLib/src/com/squareup/okhttp/internal/http/RetryableOutputStream.java b/mobile/CordovaLib/src/com/squareup/okhttp/internal/http/RetryableOutputStream.java deleted file mode 100755 index 5eb6b764557..00000000000 --- a/mobile/CordovaLib/src/com/squareup/okhttp/internal/http/RetryableOutputStream.java +++ /dev/null @@ -1,75 +0,0 @@ -/* - * Copyright (C) 2010 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package com.squareup.okhttp.internal.http; - -import com.squareup.okhttp.internal.AbstractOutputStream; -import java.io.ByteArrayOutputStream; -import java.io.IOException; -import java.io.OutputStream; -import java.net.ProtocolException; - -import static com.squareup.okhttp.internal.Util.checkOffsetAndCount; - -/** - * An HTTP request body that's completely buffered in memory. This allows - * the post body to be transparently re-sent if the HTTP request must be - * sent multiple times. - */ -final class RetryableOutputStream extends AbstractOutputStream { - private final int limit; - private final ByteArrayOutputStream content; - - public RetryableOutputStream(int limit) { - this.limit = limit; - this.content = new ByteArrayOutputStream(limit); - } - - public RetryableOutputStream() { - this.limit = -1; - this.content = new ByteArrayOutputStream(); - } - - @Override public synchronized void close() throws IOException { - if (closed) { - return; - } - closed = true; - if (content.size() < limit) { - throw new ProtocolException( - "content-length promised " + limit + " bytes, but received " + content.size()); - } - } - - @Override public synchronized void write(byte[] buffer, int offset, int count) - throws IOException { - checkNotClosed(); - checkOffsetAndCount(buffer.length, offset, count); - if (limit != -1 && content.size() > limit - count) { - throw new ProtocolException("exceeded content-length limit of " + limit + " bytes"); - } - content.write(buffer, offset, count); - } - - public synchronized int contentLength() throws IOException { - close(); - return content.size(); - } - - public void writeToSocket(OutputStream socketOut) throws IOException { - content.writeTo(socketOut); - } -} diff --git a/mobile/CordovaLib/src/com/squareup/okhttp/internal/http/RouteSelector.java b/mobile/CordovaLib/src/com/squareup/okhttp/internal/http/RouteSelector.java deleted file mode 100755 index 1055e4f09fb..00000000000 --- a/mobile/CordovaLib/src/com/squareup/okhttp/internal/http/RouteSelector.java +++ /dev/null @@ -1,269 +0,0 @@ -/* - * Copyright (C) 2012 Square, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package com.squareup.okhttp.internal.http; - -import com.squareup.okhttp.Address; -import com.squareup.okhttp.Connection; -import com.squareup.okhttp.ConnectionPool; -import com.squareup.okhttp.Route; -import com.squareup.okhttp.RouteDatabase; -import com.squareup.okhttp.internal.Dns; -import java.io.IOException; -import java.net.InetAddress; -import java.net.InetSocketAddress; -import java.net.Proxy; -import java.net.ProxySelector; -import java.net.SocketAddress; -import java.net.URI; -import java.net.UnknownHostException; -import java.util.Iterator; -import java.util.LinkedList; -import java.util.List; -import java.util.NoSuchElementException; - -import static com.squareup.okhttp.internal.Util.getEffectivePort; - -/** - * Selects routes to connect to an origin server. Each connection requires a - * choice of proxy server, IP address, and TLS mode. Connections may also be - * recycled. - */ -public final class RouteSelector { - /** Uses {@link com.squareup.okhttp.internal.Platform#enableTlsExtensions}. */ - private static final int TLS_MODE_MODERN = 1; - /** Uses {@link com.squareup.okhttp.internal.Platform#supportTlsIntolerantServer}. */ - private static final int TLS_MODE_COMPATIBLE = 0; - /** No TLS mode. */ - private static final int TLS_MODE_NULL = -1; - - private final Address address; - private final URI uri; - private final ProxySelector proxySelector; - private final ConnectionPool pool; - private final Dns dns; - private final RouteDatabase routeDatabase; - - /* The most recently attempted route. */ - private Proxy lastProxy; - private InetSocketAddress lastInetSocketAddress; - - /* State for negotiating the next proxy to use. */ - private boolean hasNextProxy; - private Proxy userSpecifiedProxy; - private Iterator proxySelectorProxies; - - /* State for negotiating the next InetSocketAddress to use. */ - private InetAddress[] socketAddresses; - private int nextSocketAddressIndex; - private int socketPort; - - /* State for negotiating the next TLS configuration */ - private int nextTlsMode = TLS_MODE_NULL; - - /* State for negotiating failed routes */ - private final List postponedRoutes; - - public RouteSelector(Address address, URI uri, ProxySelector proxySelector, ConnectionPool pool, - Dns dns, RouteDatabase routeDatabase) { - this.address = address; - this.uri = uri; - this.proxySelector = proxySelector; - this.pool = pool; - this.dns = dns; - this.routeDatabase = routeDatabase; - this.postponedRoutes = new LinkedList(); - - resetNextProxy(uri, address.getProxy()); - } - - /** - * Returns true if there's another route to attempt. Every address has at - * least one route. - */ - public boolean hasNext() { - return hasNextTlsMode() || hasNextInetSocketAddress() || hasNextProxy() || hasNextPostponed(); - } - - /** - * Returns the next route address to attempt. - * - * @throws NoSuchElementException if there are no more routes to attempt. - */ - public Connection next(String method) throws IOException { - // Always prefer pooled connections over new connections. - for (Connection pooled; (pooled = pool.get(address)) != null; ) { - if (method.equals("GET") || pooled.isReadable()) return pooled; - pooled.close(); - } - - // Compute the next route to attempt. - if (!hasNextTlsMode()) { - if (!hasNextInetSocketAddress()) { - if (!hasNextProxy()) { - if (!hasNextPostponed()) { - throw new NoSuchElementException(); - } - return new Connection(nextPostponed()); - } - lastProxy = nextProxy(); - resetNextInetSocketAddress(lastProxy); - } - lastInetSocketAddress = nextInetSocketAddress(); - resetNextTlsMode(); - } - - boolean modernTls = nextTlsMode() == TLS_MODE_MODERN; - Route route = new Route(address, lastProxy, lastInetSocketAddress, modernTls); - if (routeDatabase.shouldPostpone(route)) { - postponedRoutes.add(route); - // We will only recurse in order to skip previously failed routes. They will be - // tried last. - return next(method); - } - - return new Connection(route); - } - - /** - * Clients should invoke this method when they encounter a connectivity - * failure on a connection returned by this route selector. - */ - public void connectFailed(Connection connection, IOException failure) { - Route failedRoute = connection.getRoute(); - if (failedRoute.getProxy().type() != Proxy.Type.DIRECT && proxySelector != null) { - // Tell the proxy selector when we fail to connect on a fresh connection. - proxySelector.connectFailed(uri, failedRoute.getProxy().address(), failure); - } - - routeDatabase.failed(failedRoute, failure); - } - - /** Resets {@link #nextProxy} to the first option. */ - private void resetNextProxy(URI uri, Proxy proxy) { - this.hasNextProxy = true; // This includes NO_PROXY! - if (proxy != null) { - this.userSpecifiedProxy = proxy; - } else { - List proxyList = proxySelector.select(uri); - if (proxyList != null) { - this.proxySelectorProxies = proxyList.iterator(); - } - } - } - - /** Returns true if there's another proxy to try. */ - private boolean hasNextProxy() { - return hasNextProxy; - } - - /** Returns the next proxy to try. May be PROXY.NO_PROXY but never null. */ - private Proxy nextProxy() { - // If the user specifies a proxy, try that and only that. - if (userSpecifiedProxy != null) { - hasNextProxy = false; - return userSpecifiedProxy; - } - - // Try each of the ProxySelector choices until one connection succeeds. If none succeed - // then we'll try a direct connection below. - if (proxySelectorProxies != null) { - while (proxySelectorProxies.hasNext()) { - Proxy candidate = proxySelectorProxies.next(); - if (candidate.type() != Proxy.Type.DIRECT) { - return candidate; - } - } - } - - // Finally try a direct connection. - hasNextProxy = false; - return Proxy.NO_PROXY; - } - - /** Resets {@link #nextInetSocketAddress} to the first option. */ - private void resetNextInetSocketAddress(Proxy proxy) throws UnknownHostException { - socketAddresses = null; // Clear the addresses. Necessary if getAllByName() below throws! - - String socketHost; - if (proxy.type() == Proxy.Type.DIRECT) { - socketHost = uri.getHost(); - socketPort = getEffectivePort(uri); - } else { - SocketAddress proxyAddress = proxy.address(); - if (!(proxyAddress instanceof InetSocketAddress)) { - throw new IllegalArgumentException( - "Proxy.address() is not an " + "InetSocketAddress: " + proxyAddress.getClass()); - } - InetSocketAddress proxySocketAddress = (InetSocketAddress) proxyAddress; - socketHost = proxySocketAddress.getHostName(); - socketPort = proxySocketAddress.getPort(); - } - - // Try each address for best behavior in mixed IPv4/IPv6 environments. - socketAddresses = dns.getAllByName(socketHost); - nextSocketAddressIndex = 0; - } - - /** Returns true if there's another socket address to try. */ - private boolean hasNextInetSocketAddress() { - return socketAddresses != null; - } - - /** Returns the next socket address to try. */ - private InetSocketAddress nextInetSocketAddress() throws UnknownHostException { - InetSocketAddress result = - new InetSocketAddress(socketAddresses[nextSocketAddressIndex++], socketPort); - if (nextSocketAddressIndex == socketAddresses.length) { - socketAddresses = null; // So that hasNextInetSocketAddress() returns false. - nextSocketAddressIndex = 0; - } - - return result; - } - - /** Resets {@link #nextTlsMode} to the first option. */ - private void resetNextTlsMode() { - nextTlsMode = (address.getSslSocketFactory() != null) ? TLS_MODE_MODERN : TLS_MODE_COMPATIBLE; - } - - /** Returns true if there's another TLS mode to try. */ - private boolean hasNextTlsMode() { - return nextTlsMode != TLS_MODE_NULL; - } - - /** Returns the next TLS mode to try. */ - private int nextTlsMode() { - if (nextTlsMode == TLS_MODE_MODERN) { - nextTlsMode = TLS_MODE_COMPATIBLE; - return TLS_MODE_MODERN; - } else if (nextTlsMode == TLS_MODE_COMPATIBLE) { - nextTlsMode = TLS_MODE_NULL; // So that hasNextTlsMode() returns false. - return TLS_MODE_COMPATIBLE; - } else { - throw new AssertionError(); - } - } - - /** Returns true if there is another postponed route to try. */ - private boolean hasNextPostponed() { - return !postponedRoutes.isEmpty(); - } - - /** Returns the next postponed route to try. */ - private Route nextPostponed() { - return postponedRoutes.remove(0); - } -} diff --git a/mobile/CordovaLib/src/com/squareup/okhttp/internal/http/SpdyTransport.java b/mobile/CordovaLib/src/com/squareup/okhttp/internal/http/SpdyTransport.java deleted file mode 100755 index 471539a4672..00000000000 --- a/mobile/CordovaLib/src/com/squareup/okhttp/internal/http/SpdyTransport.java +++ /dev/null @@ -1,103 +0,0 @@ -/* - * Copyright (C) 2012 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package com.squareup.okhttp.internal.http; - -import com.squareup.okhttp.internal.spdy.ErrorCode; -import com.squareup.okhttp.internal.spdy.SpdyConnection; -import com.squareup.okhttp.internal.spdy.SpdyStream; -import java.io.IOException; -import java.io.InputStream; -import java.io.OutputStream; -import java.net.CacheRequest; -import java.net.URL; -import java.util.List; - -public final class SpdyTransport implements Transport { - private final HttpEngine httpEngine; - private final SpdyConnection spdyConnection; - private SpdyStream stream; - - public SpdyTransport(HttpEngine httpEngine, SpdyConnection spdyConnection) { - this.httpEngine = httpEngine; - this.spdyConnection = spdyConnection; - } - - @Override public OutputStream createRequestBody() throws IOException { - long fixedContentLength = httpEngine.policy.getFixedContentLength(); - if (fixedContentLength != -1) { - httpEngine.requestHeaders.setContentLength(fixedContentLength); - } - // TODO: if we aren't streaming up to the server, we should buffer the whole request - writeRequestHeaders(); - return stream.getOutputStream(); - } - - @Override public void writeRequestHeaders() throws IOException { - if (stream != null) { - return; - } - httpEngine.writingRequestHeaders(); - RawHeaders requestHeaders = httpEngine.requestHeaders.getHeaders(); - String version = httpEngine.connection.getHttpMinorVersion() == 1 ? "HTTP/1.1" : "HTTP/1.0"; - URL url = httpEngine.policy.getURL(); - requestHeaders.addSpdyRequestHeaders(httpEngine.method, HttpEngine.requestPath(url), version, - HttpEngine.getOriginAddress(url), httpEngine.uri.getScheme()); - boolean hasRequestBody = httpEngine.hasRequestBody(); - boolean hasResponseBody = true; - stream = spdyConnection.newStream(requestHeaders.toNameValueBlock(), hasRequestBody, - hasResponseBody); - stream.setReadTimeout(httpEngine.client.getReadTimeout()); - } - - @Override public void writeRequestBody(RetryableOutputStream requestBody) throws IOException { - throw new UnsupportedOperationException(); - } - - @Override public void flushRequest() throws IOException { - stream.getOutputStream().close(); - } - - @Override public ResponseHeaders readResponseHeaders() throws IOException { - List nameValueBlock = stream.getResponseHeaders(); - RawHeaders rawHeaders = RawHeaders.fromNameValueBlock(nameValueBlock); - httpEngine.receiveHeaders(rawHeaders); - - ResponseHeaders headers = new ResponseHeaders(httpEngine.uri, rawHeaders); - headers.setTransport("spdy/3"); - return headers; - } - - @Override public InputStream getTransferStream(CacheRequest cacheRequest) throws IOException { - return new UnknownLengthHttpInputStream(stream.getInputStream(), cacheRequest, httpEngine); - } - - @Override public boolean makeReusable(boolean streamCanceled, OutputStream requestBodyOut, - InputStream responseBodyIn) { - if (streamCanceled) { - if (stream != null) { - stream.closeLater(ErrorCode.CANCEL); - return true; - } else { - // If stream is null, it either means that writeRequestHeaders wasn't called - // or that SpdyConnection#newStream threw an IOException. In both cases there's - // nothing to do here and this stream can't be reused. - return false; - } - } - return true; - } -} diff --git a/mobile/CordovaLib/src/com/squareup/okhttp/internal/http/Transport.java b/mobile/CordovaLib/src/com/squareup/okhttp/internal/http/Transport.java deleted file mode 100755 index d408bfec033..00000000000 --- a/mobile/CordovaLib/src/com/squareup/okhttp/internal/http/Transport.java +++ /dev/null @@ -1,64 +0,0 @@ -/* - * Copyright (C) 2012 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package com.squareup.okhttp.internal.http; - -import java.io.IOException; -import java.io.InputStream; -import java.io.OutputStream; -import java.net.CacheRequest; - -interface Transport { - /** - * Returns an output stream where the request body can be written. The - * returned stream will of one of two types: - *

    - *
  • Direct. Bytes are written to the socket and - * forgotten. This is most efficient, particularly for large request - * bodies. The returned stream may be buffered; the caller must call - * {@link #flushRequest} before reading the response.
  • - *
  • Buffered. Bytes are written to an in memory - * buffer, and must be explicitly flushed with a call to {@link - * #writeRequestBody}. This allows HTTP authorization (401, 407) - * responses to be retransmitted transparently.
  • - *
- */ - // TODO: don't bother retransmitting the request body? It's quite a corner - // case and there's uncertainty whether Firefox or Chrome do this - OutputStream createRequestBody() throws IOException; - - /** This should update the HTTP engine's sentRequestMillis field. */ - void writeRequestHeaders() throws IOException; - - /** - * Sends the request body returned by {@link #createRequestBody} to the - * remote peer. - */ - void writeRequestBody(RetryableOutputStream requestBody) throws IOException; - - /** Flush the request body to the underlying socket. */ - void flushRequest() throws IOException; - - /** Read response headers and update the cookie manager. */ - ResponseHeaders readResponseHeaders() throws IOException; - - // TODO: make this the content stream? - InputStream getTransferStream(CacheRequest cacheRequest) throws IOException; - - /** Returns true if the underlying connection can be recycled. */ - boolean makeReusable(boolean streamCanceled, OutputStream requestBodyOut, - InputStream responseBodyIn); -} diff --git a/mobile/CordovaLib/src/com/squareup/okhttp/internal/http/UnknownLengthHttpInputStream.java b/mobile/CordovaLib/src/com/squareup/okhttp/internal/http/UnknownLengthHttpInputStream.java deleted file mode 100755 index ca6bb59f2ef..00000000000 --- a/mobile/CordovaLib/src/com/squareup/okhttp/internal/http/UnknownLengthHttpInputStream.java +++ /dev/null @@ -1,63 +0,0 @@ -/* - * Copyright (C) 2012 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package com.squareup.okhttp.internal.http; - -import java.io.IOException; -import java.io.InputStream; -import java.net.CacheRequest; - -import static com.squareup.okhttp.internal.Util.checkOffsetAndCount; - -/** An HTTP message body terminated by the end of the underlying stream. */ -final class UnknownLengthHttpInputStream extends AbstractHttpInputStream { - private boolean inputExhausted; - - UnknownLengthHttpInputStream(InputStream in, CacheRequest cacheRequest, HttpEngine httpEngine) - throws IOException { - super(in, httpEngine, cacheRequest); - } - - @Override public int read(byte[] buffer, int offset, int count) throws IOException { - checkOffsetAndCount(buffer.length, offset, count); - checkNotClosed(); - if (in == null || inputExhausted) { - return -1; - } - int read = in.read(buffer, offset, count); - if (read == -1) { - inputExhausted = true; - endOfInput(); - return -1; - } - cacheWrite(buffer, offset, read); - return read; - } - - @Override public int available() throws IOException { - checkNotClosed(); - return in == null ? 0 : in.available(); - } - - @Override public void close() throws IOException { - if (closed) { - return; - } - closed = true; - if (!inputExhausted) { - unexpectedEndOfInput(); - } - } -} diff --git a/mobile/CordovaLib/src/com/squareup/okhttp/internal/spdy/ErrorCode.java b/mobile/CordovaLib/src/com/squareup/okhttp/internal/spdy/ErrorCode.java deleted file mode 100755 index 04d7bb853fe..00000000000 --- a/mobile/CordovaLib/src/com/squareup/okhttp/internal/spdy/ErrorCode.java +++ /dev/null @@ -1,83 +0,0 @@ -/* - * Copyright (C) 2011 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package com.squareup.okhttp.internal.spdy; - -public enum ErrorCode { - /** Not an error! For SPDY stream resets, prefer null over NO_ERROR. */ - NO_ERROR(0, -1, 0), - - PROTOCOL_ERROR(1, 1, 1), - - /** A subtype of PROTOCOL_ERROR used by SPDY. */ - INVALID_STREAM(1, 2, -1), - - /** A subtype of PROTOCOL_ERROR used by SPDY. */ - UNSUPPORTED_VERSION(1, 4, -1), - - /** A subtype of PROTOCOL_ERROR used by SPDY. */ - STREAM_IN_USE(1, 8, -1), - - /** A subtype of PROTOCOL_ERROR used by SPDY. */ - STREAM_ALREADY_CLOSED(1, 9, -1), - - INTERNAL_ERROR(2, 6, 2), - - FLOW_CONTROL_ERROR(3, 7, -1), - - STREAM_CLOSED(5, -1, -1), - - FRAME_TOO_LARGE(6, 11, -1), - - REFUSED_STREAM(7, 3, -1), - - CANCEL(8, 5, -1), - - COMPRESSION_ERROR(9, -1, -1), - - INVALID_CREDENTIALS(-1, 10, -1); - - public final int httpCode; - public final int spdyRstCode; - public final int spdyGoAwayCode; - - private ErrorCode(int httpCode, int spdyRstCode, int spdyGoAwayCode) { - this.httpCode = httpCode; - this.spdyRstCode = spdyRstCode; - this.spdyGoAwayCode = spdyGoAwayCode; - } - - public static ErrorCode fromSpdy3Rst(int code) { - for (ErrorCode errorCode : ErrorCode.values()) { - if (errorCode.spdyRstCode == code) return errorCode; - } - return null; - } - - public static ErrorCode fromHttp2(int code) { - for (ErrorCode errorCode : ErrorCode.values()) { - if (errorCode.httpCode == code) return errorCode; - } - return null; - } - - public static ErrorCode fromSpdyGoAway(int code) { - for (ErrorCode errorCode : ErrorCode.values()) { - if (errorCode.spdyGoAwayCode == code) return errorCode; - } - return null; - } -} diff --git a/mobile/CordovaLib/src/com/squareup/okhttp/internal/spdy/FrameReader.java b/mobile/CordovaLib/src/com/squareup/okhttp/internal/spdy/FrameReader.java deleted file mode 100755 index 1371262e6c5..00000000000 --- a/mobile/CordovaLib/src/com/squareup/okhttp/internal/spdy/FrameReader.java +++ /dev/null @@ -1,55 +0,0 @@ -/* - * Copyright (C) 2011 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package com.squareup.okhttp.internal.spdy; - -import java.io.Closeable; -import java.io.IOException; -import java.io.InputStream; -import java.util.List; - -/** Reads transport frames for SPDY/3 or HTTP/2.0. */ -public interface FrameReader extends Closeable { - void readConnectionHeader() throws IOException; - boolean nextFrame(Handler handler) throws IOException; - - public interface Handler { - void data(boolean inFinished, int streamId, InputStream in, int length) throws IOException; - /** - * Create or update incoming headers, creating the corresponding streams - * if necessary. Frames that trigger this are SPDY SYN_STREAM, HEADERS, and - * SYN_REPLY, and HTTP/2.0 HEADERS and PUSH_PROMISE. - * - * @param inFinished true if the sender will not send further frames. - * @param outFinished true if the receiver should not send further frames. - * @param streamId the stream owning these headers. - * @param associatedStreamId the stream that triggered the sender to create - * this stream. - * @param priority or -1 for no priority. For SPDY, priorities range from 0 - * (highest) thru 7 (lowest). For HTTP/2.0, priorities range from 0 - * (highest) thru 2**31-1 (lowest). - */ - void headers(boolean outFinished, boolean inFinished, int streamId, int associatedStreamId, - int priority, List nameValueBlock, HeadersMode headersMode); - void rstStream(int streamId, ErrorCode errorCode); - void settings(boolean clearPrevious, Settings settings); - void noop(); - void ping(boolean reply, int payload1, int payload2); - void goAway(int lastGoodStreamId, ErrorCode errorCode); - void windowUpdate(int streamId, int deltaWindowSize, boolean endFlowControl); - void priority(int streamId, int priority); - } -} diff --git a/mobile/CordovaLib/src/com/squareup/okhttp/internal/spdy/FrameWriter.java b/mobile/CordovaLib/src/com/squareup/okhttp/internal/spdy/FrameWriter.java deleted file mode 100755 index 354f43d1d1e..00000000000 --- a/mobile/CordovaLib/src/com/squareup/okhttp/internal/spdy/FrameWriter.java +++ /dev/null @@ -1,43 +0,0 @@ -/* - * Copyright (C) 2011 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package com.squareup.okhttp.internal.spdy; - -import java.io.Closeable; -import java.io.IOException; -import java.util.List; - -/** Writes transport frames for SPDY/3 or HTTP/2.0. */ -public interface FrameWriter extends Closeable { - /** HTTP/2.0 only. */ - void connectionHeader() throws IOException; - - /** SPDY/3 only. */ - void flush() throws IOException; - void synStream(boolean outFinished, boolean inFinished, int streamId, int associatedStreamId, - int priority, int slot, List nameValueBlock) throws IOException; - void synReply(boolean outFinished, int streamId, List nameValueBlock) throws IOException; - void headers(int streamId, List nameValueBlock) throws IOException; - void rstStream(int streamId, ErrorCode errorCode) throws IOException; - void data(boolean outFinished, int streamId, byte[] data) throws IOException; - void data(boolean outFinished, int streamId, byte[] data, int offset, int byteCount) - throws IOException; - void settings(Settings settings) throws IOException; - void noop() throws IOException; - void ping(boolean reply, int payload1, int payload2) throws IOException; - void goAway(int lastGoodStreamId, ErrorCode errorCode) throws IOException; - void windowUpdate(int streamId, int deltaWindowSize) throws IOException; -} diff --git a/mobile/CordovaLib/src/com/squareup/okhttp/internal/spdy/HeadersMode.java b/mobile/CordovaLib/src/com/squareup/okhttp/internal/spdy/HeadersMode.java deleted file mode 100755 index e16e176a169..00000000000 --- a/mobile/CordovaLib/src/com/squareup/okhttp/internal/spdy/HeadersMode.java +++ /dev/null @@ -1,49 +0,0 @@ -/* - * Copyright (C) 2013 Square, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package com.squareup.okhttp.internal.spdy; - -enum HeadersMode { - SPDY_SYN_STREAM, - SPDY_REPLY, - SPDY_HEADERS, - HTTP_20_HEADERS; - - /** Returns true if it is an error these headers to create a new stream. */ - public boolean failIfStreamAbsent() { - return this == SPDY_REPLY || this == SPDY_HEADERS; - } - - /** Returns true if it is an error these headers to update an existing stream. */ - public boolean failIfStreamPresent() { - return this == SPDY_SYN_STREAM; - } - - /** - * Returns true if it is an error these headers to be the initial headers of a - * response. - */ - public boolean failIfHeadersAbsent() { - return this == SPDY_HEADERS; - } - - /** - * Returns true if it is an error these headers to be update existing headers - * of a response. - */ - public boolean failIfHeadersPresent() { - return this == SPDY_REPLY; - } -} diff --git a/mobile/CordovaLib/src/com/squareup/okhttp/internal/spdy/Hpack.java b/mobile/CordovaLib/src/com/squareup/okhttp/internal/spdy/Hpack.java deleted file mode 100755 index 29f418968bf..00000000000 --- a/mobile/CordovaLib/src/com/squareup/okhttp/internal/spdy/Hpack.java +++ /dev/null @@ -1,387 +0,0 @@ -/* - * Copyright (C) 2011 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package com.squareup.okhttp.internal.spdy; - -import java.io.DataInputStream; -import java.io.IOException; -import java.io.OutputStream; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.BitSet; -import java.util.List; - -/** - * Read and write HPACK v03. - * http://tools.ietf.org/html/draft-ietf-httpbis-header-compression-03 - */ -final class Hpack { - - static class HeaderEntry { - private final String name; - private final String value; - - HeaderEntry(String name, String value) { - this.name = name; - this.value = value; - } - - // TODO: This needs to be the length in UTF-8 bytes, not the length in chars. - int length() { - return 32 + name.length() + value.length(); - } - } - - static final int PREFIX_5_BITS = 0x1f; - static final int PREFIX_6_BITS = 0x3f; - static final int PREFIX_7_BITS = 0x7f; - static final int PREFIX_8_BITS = 0xff; - - static final List INITIAL_CLIENT_TO_SERVER_HEADER_TABLE = Arrays.asList( - new HeaderEntry(":scheme", "http"), - new HeaderEntry(":scheme", "https"), - new HeaderEntry(":host", ""), - new HeaderEntry(":path", "/"), - new HeaderEntry(":method", "GET"), - new HeaderEntry("accept", ""), - new HeaderEntry("accept-charset", ""), - new HeaderEntry("accept-encoding", ""), - new HeaderEntry("accept-language", ""), - new HeaderEntry("cookie", ""), - new HeaderEntry("if-modified-since", ""), - new HeaderEntry("user-agent", ""), - new HeaderEntry("referer", ""), - new HeaderEntry("authorization", ""), - new HeaderEntry("allow", ""), - new HeaderEntry("cache-control", ""), - new HeaderEntry("connection", ""), - new HeaderEntry("content-length", ""), - new HeaderEntry("content-type", ""), - new HeaderEntry("date", ""), - new HeaderEntry("expect", ""), - new HeaderEntry("from", ""), - new HeaderEntry("if-match", ""), - new HeaderEntry("if-none-match", ""), - new HeaderEntry("if-range", ""), - new HeaderEntry("if-unmodified-since", ""), - new HeaderEntry("max-forwards", ""), - new HeaderEntry("proxy-authorization", ""), - new HeaderEntry("range", ""), - new HeaderEntry("via", "") - ); - - static final List INITIAL_SERVER_TO_CLIENT_HEADER_TABLE = Arrays.asList( - new HeaderEntry(":status", "200"), - new HeaderEntry("age", ""), - new HeaderEntry("cache-control", ""), - new HeaderEntry("content-length", ""), - new HeaderEntry("content-type", ""), - new HeaderEntry("date", ""), - new HeaderEntry("etag", ""), - new HeaderEntry("expires", ""), - new HeaderEntry("last-modified", ""), - new HeaderEntry("server", ""), - new HeaderEntry("set-cookie", ""), - new HeaderEntry("vary", ""), - new HeaderEntry("via", ""), - new HeaderEntry("access-control-allow-origin", ""), - new HeaderEntry("accept-ranges", ""), - new HeaderEntry("allow", ""), - new HeaderEntry("connection", ""), - new HeaderEntry("content-disposition", ""), - new HeaderEntry("content-encoding", ""), - new HeaderEntry("content-language", ""), - new HeaderEntry("content-location", ""), - new HeaderEntry("content-range", ""), - new HeaderEntry("link", ""), - new HeaderEntry("location", ""), - new HeaderEntry("proxy-authenticate", ""), - new HeaderEntry("refresh", ""), - new HeaderEntry("retry-after", ""), - new HeaderEntry("strict-transport-security", ""), - new HeaderEntry("transfer-encoding", ""), - new HeaderEntry("www-authenticate", "") - ); - - // Update these when initial tables change to sum of each entry length. - static final int INITIAL_CLIENT_TO_SERVER_HEADER_TABLE_LENGTH = 1262; - static final int INITIAL_SERVER_TO_CLIENT_HEADER_TABLE_LENGTH = 1304; - - private Hpack() { - } - - static class Reader { - private final long maxBufferSize = 4096; // TODO: needs to come from settings. - private final DataInputStream in; - - private final BitSet referenceSet = new BitSet(); - private final List headerTable; - private final List emittedHeaders = new ArrayList(); - private long bufferSize = 0; - private long bytesLeft = 0; - - Reader(DataInputStream in, boolean client) { - this.in = in; - if (client) { // we are reading from the server - this.headerTable = new ArrayList(INITIAL_SERVER_TO_CLIENT_HEADER_TABLE); - this.bufferSize = INITIAL_SERVER_TO_CLIENT_HEADER_TABLE_LENGTH; - } else { - this.headerTable = new ArrayList(INITIAL_CLIENT_TO_SERVER_HEADER_TABLE); - this.bufferSize = INITIAL_CLIENT_TO_SERVER_HEADER_TABLE_LENGTH; - } - } - - /** - * Read {@code byteCount} bytes of headers from the source stream into the - * set of emitted headers. - */ - public void readHeaders(int byteCount) throws IOException { - bytesLeft += byteCount; - // TODO: limit to 'byteCount' bytes? - - while (bytesLeft > 0) { - int b = readByte(); - - if ((b & 0x80) != 0) { - int index = readInt(b, PREFIX_7_BITS); - readIndexedHeader(index); - } else if (b == 0x60) { - readLiteralHeaderWithoutIndexingNewName(); - } else if ((b & 0xe0) == 0x60) { - int index = readInt(b, PREFIX_5_BITS); - readLiteralHeaderWithoutIndexingIndexedName(index - 1); - } else if (b == 0x40) { - readLiteralHeaderWithIncrementalIndexingNewName(); - } else if ((b & 0xe0) == 0x40) { - int index = readInt(b, PREFIX_5_BITS); - readLiteralHeaderWithIncrementalIndexingIndexedName(index - 1); - } else if (b == 0) { - readLiteralHeaderWithSubstitutionIndexingNewName(); - } else if ((b & 0xc0) == 0) { - int index = readInt(b, PREFIX_6_BITS); - readLiteralHeaderWithSubstitutionIndexingIndexedName(index - 1); - } else { - throw new AssertionError(); - } - } - } - - public void emitReferenceSet() { - for (int i = referenceSet.nextSetBit(0); i != -1; i = referenceSet.nextSetBit(i + 1)) { - emittedHeaders.add(getName(i)); - emittedHeaders.add(getValue(i)); - } - } - - /** - * Returns all headers emitted since they were last cleared, then clears the - * emitted headers. - */ - public List getAndReset() { - List result = new ArrayList(emittedHeaders); - emittedHeaders.clear(); - return result; - } - - private void readIndexedHeader(int index) { - if (referenceSet.get(index)) { - referenceSet.clear(index); - } else { - referenceSet.set(index); - } - } - - private void readLiteralHeaderWithoutIndexingIndexedName(int index) - throws IOException { - String name = getName(index); - String value = readString(); - emittedHeaders.add(name); - emittedHeaders.add(value); - } - - private void readLiteralHeaderWithoutIndexingNewName() - throws IOException { - String name = readString(); - String value = readString(); - emittedHeaders.add(name); - emittedHeaders.add(value); - } - - private void readLiteralHeaderWithIncrementalIndexingIndexedName(int nameIndex) - throws IOException { - String name = getName(nameIndex); - String value = readString(); - int index = headerTable.size(); // append to tail - insertIntoHeaderTable(index, new HeaderEntry(name, value)); - } - - private void readLiteralHeaderWithIncrementalIndexingNewName() throws IOException { - String name = readString(); - String value = readString(); - int index = headerTable.size(); // append to tail - insertIntoHeaderTable(index, new HeaderEntry(name, value)); - } - - private void readLiteralHeaderWithSubstitutionIndexingIndexedName(int nameIndex) - throws IOException { - int index = readInt(readByte(), PREFIX_8_BITS); - String name = getName(nameIndex); - String value = readString(); - insertIntoHeaderTable(index, new HeaderEntry(name, value)); - } - - private void readLiteralHeaderWithSubstitutionIndexingNewName() throws IOException { - String name = readString(); - int index = readInt(readByte(), PREFIX_8_BITS); - String value = readString(); - insertIntoHeaderTable(index, new HeaderEntry(name, value)); - } - - private String getName(int index) { - return headerTable.get(index).name; - } - - private String getValue(int index) { - return headerTable.get(index).value; - } - - private void insertIntoHeaderTable(int index, HeaderEntry entry) { - int delta = entry.length(); - if (index != headerTable.size()) { - delta -= headerTable.get(index).length(); - } - - // if the new or replacement header is too big, drop all entries. - if (delta > maxBufferSize) { - headerTable.clear(); - bufferSize = 0; - // emit the large header to the callback. - emittedHeaders.add(entry.name); - emittedHeaders.add(entry.value); - return; - } - - // Prune headers to the required length. - while (bufferSize + delta > maxBufferSize) { - remove(0); - index--; - } - - if (index < 0) { // we pruned it, so insert at beginning - index = 0; - headerTable.add(index, entry); - } else if (index == headerTable.size()) { // append to the end - headerTable.add(index, entry); - } else { // replace value at same position - headerTable.set(index, entry); - } - - bufferSize += delta; - referenceSet.set(index); - } - - private void remove(int index) { - bufferSize -= headerTable.remove(index).length(); - } - - private int readByte() throws IOException { - bytesLeft--; - return in.readByte() & 0xff; - } - - int readInt(int firstByte, int prefixMask) throws IOException { - int prefix = firstByte & prefixMask; - if (prefix < prefixMask) { - return prefix; // This was a single byte value. - } - - // This is a multibyte value. Read 7 bits at a time. - int result = prefixMask; - int shift = 0; - while (true) { - int b = readByte(); - if ((b & 0x80) != 0) { // Equivalent to (b >= 128) since b is in [0..255]. - result += (b & 0x7f) << shift; - shift += 7; - } else { - result += b << shift; // Last byte. - break; - } - } - return result; - } - - /** - * Reads a UTF-8 encoded string. Since ASCII is a subset of UTF-8, this method - * may be used to read strings that are known to be ASCII-only. - */ - public String readString() throws IOException { - int firstByte = readByte(); - int length = readInt(firstByte, PREFIX_8_BITS); - byte[] encoded = new byte[length]; - bytesLeft -= length; - in.readFully(encoded); - return new String(encoded, "UTF-8"); - } - } - - static class Writer { - private final OutputStream out; - - Writer(OutputStream out) { - this.out = out; - } - - public void writeHeaders(List nameValueBlock) throws IOException { - // TODO: implement a compression strategy. - for (int i = 0, size = nameValueBlock.size(); i < size; i += 2) { - out.write(0x60); // Literal Header without Indexing - New Name. - writeString(nameValueBlock.get(i)); - writeString(nameValueBlock.get(i + 1)); - } - } - - public void writeInt(int value, int prefixMask, int bits) throws IOException { - // Write the raw value for a single byte value. - if (value < prefixMask) { - out.write(bits | value); - return; - } - - // Write the mask to start a multibyte value. - out.write(bits | prefixMask); - value -= prefixMask; - - // Write 7 bits at a time 'til we're done. - while (value >= 0x80) { - int b = value & 0x7f; - out.write(b | 0x80); - value >>>= 7; - } - out.write(value); - } - - /** - * Writes a UTF-8 encoded string. Since ASCII is a subset of UTF-8, this - * method can be used to write strings that are known to be ASCII-only. - */ - public void writeString(String headerName) throws IOException { - byte[] bytes = headerName.getBytes("UTF-8"); - writeInt(bytes.length, PREFIX_8_BITS, 0); - out.write(bytes); - } - } -} diff --git a/mobile/CordovaLib/src/com/squareup/okhttp/internal/spdy/Http20Draft06.java b/mobile/CordovaLib/src/com/squareup/okhttp/internal/spdy/Http20Draft06.java deleted file mode 100755 index 3d53f484886..00000000000 --- a/mobile/CordovaLib/src/com/squareup/okhttp/internal/spdy/Http20Draft06.java +++ /dev/null @@ -1,385 +0,0 @@ -/* - * Copyright (C) 2013 Square, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package com.squareup.okhttp.internal.spdy; - -import com.squareup.okhttp.internal.Util; -import java.io.ByteArrayOutputStream; -import java.io.DataInputStream; -import java.io.DataOutputStream; -import java.io.IOException; -import java.io.InputStream; -import java.io.OutputStream; -import java.io.UnsupportedEncodingException; -import java.util.Arrays; -import java.util.List; - -/** - * Read and write http/2 v06 frames. - * http://tools.ietf.org/html/draft-ietf-httpbis-http2-06 - */ -final class Http20Draft06 implements Variant { - private static final byte[] CONNECTION_HEADER; - static { - try { - CONNECTION_HEADER = "PRI * HTTP/2.0\r\n\r\nSM\r\n\r\n".getBytes("UTF-8"); - } catch (UnsupportedEncodingException e) { - throw new AssertionError(); - } - } - - static final int TYPE_DATA = 0x0; - static final int TYPE_HEADERS = 0x1; - static final int TYPE_PRIORITY = 0x2; - static final int TYPE_RST_STREAM = 0x3; - static final int TYPE_SETTINGS = 0x4; - static final int TYPE_PUSH_PROMISE = 0x5; - static final int TYPE_PING = 0x6; - static final int TYPE_GOAWAY = 0x7; - static final int TYPE_WINDOW_UPDATE = 0x9; - static final int TYPE_CONTINUATION = 0xa; - - static final int FLAG_END_STREAM = 0x1; - /** Used for headers, push-promise and continuation. */ - static final int FLAG_END_HEADERS = 0x4; - static final int FLAG_PRIORITY = 0x8; - static final int FLAG_PONG = 0x1; - static final int FLAG_END_FLOW_CONTROL = 0x1; - - @Override public FrameReader newReader(InputStream in, boolean client) { - return new Reader(in, client); - } - - @Override public FrameWriter newWriter(OutputStream out, boolean client) { - return new Writer(out, client); - } - - static final class Reader implements FrameReader { - private final DataInputStream in; - private final boolean client; - private final Hpack.Reader hpackReader; - - Reader(InputStream in, boolean client) { - this.in = new DataInputStream(in); - this.client = client; - this.hpackReader = new Hpack.Reader(this.in, client); - } - - @Override public void readConnectionHeader() throws IOException { - if (client) return; // Nothing to read; servers don't send connection headers! - byte[] connectionHeader = new byte[CONNECTION_HEADER.length]; - in.readFully(connectionHeader); - if (!Arrays.equals(connectionHeader, CONNECTION_HEADER)) { - throw ioException("Expected a connection header but was " - + Arrays.toString(connectionHeader)); - } - } - - @Override public boolean nextFrame(Handler handler) throws IOException { - int w1; - try { - w1 = in.readInt(); - } catch (IOException e) { - return false; // This might be a normal socket close. - } - int w2 = in.readInt(); - - int length = (w1 & 0xffff0000) >> 16; - int type = (w1 & 0xff00) >> 8; - int flags = w1 & 0xff; - // boolean r = (w2 & 0x80000000) != 0; // Reserved. - int streamId = (w2 & 0x7fffffff); - - switch (type) { - case TYPE_DATA: - readData(handler, flags, length, streamId); - return true; - - case TYPE_HEADERS: - readHeaders(handler, flags, length, streamId); - return true; - - case TYPE_PRIORITY: - readPriority(handler, flags, length, streamId); - return true; - - case TYPE_RST_STREAM: - readRstStream(handler, flags, length, streamId); - return true; - - case TYPE_SETTINGS: - readSettings(handler, flags, length, streamId); - return true; - - case TYPE_PUSH_PROMISE: - readPushPromise(handler, flags, length, streamId); - return true; - - case TYPE_PING: - readPing(handler, flags, length, streamId); - return true; - - case TYPE_GOAWAY: - readGoAway(handler, flags, length, streamId); - return true; - - case TYPE_WINDOW_UPDATE: - readWindowUpdate(handler, flags, length, streamId); - return true; - } - - throw new UnsupportedOperationException("TODO"); - } - - private void readHeaders(Handler handler, int flags, int length, int streamId) - throws IOException { - if (streamId == 0) throw ioException("TYPE_HEADERS streamId == 0"); - - boolean inFinished = (flags & FLAG_END_STREAM) != 0; - - while (true) { - hpackReader.readHeaders(length); - - if ((flags & FLAG_END_HEADERS) != 0) { - hpackReader.emitReferenceSet(); - List namesAndValues = hpackReader.getAndReset(); - int priority = -1; // TODO: priority - handler.headers(false, inFinished, streamId, -1, priority, namesAndValues, - HeadersMode.HTTP_20_HEADERS); - return; - } - - // Read another continuation frame. - int w1 = in.readInt(); - int w2 = in.readInt(); - - length = (w1 & 0xffff0000) >> 16; - int newType = (w1 & 0xff00) >> 8; - flags = w1 & 0xff; - - // TODO: remove in draft 8: CONTINUATION no longer sets END_STREAM - inFinished = (flags & FLAG_END_STREAM) != 0; - - // boolean u = (w2 & 0x80000000) != 0; // Unused. - int newStreamId = (w2 & 0x7fffffff); - - if (newType != TYPE_CONTINUATION) { - throw ioException("TYPE_CONTINUATION didn't have FLAG_END_HEADERS"); - } - if (newStreamId != streamId) throw ioException("TYPE_CONTINUATION streamId changed"); - } - } - - private void readData(Handler handler, int flags, int length, int streamId) throws IOException { - boolean inFinished = (flags & FLAG_END_STREAM) != 0; - handler.data(inFinished, streamId, in, length); - } - - private void readPriority(Handler handler, int flags, int length, int streamId) - throws IOException { - if (length != 4) throw ioException("TYPE_PRIORITY length: %d != 4", length); - if (streamId == 0) throw ioException("TYPE_PRIORITY streamId == 0"); - int w1 = in.readInt(); - // boolean r = (w1 & 0x80000000) != 0; // Reserved. - int priority = (w1 & 0x7fffffff); - handler.priority(streamId, priority); - } - - private void readRstStream(Handler handler, int flags, int length, int streamId) - throws IOException { - if (length != 4) throw ioException("TYPE_RST_STREAM length: %d != 4", length); - if (streamId == 0) throw ioException("TYPE_RST_STREAM streamId == 0"); - int errorCodeInt = in.readInt(); - ErrorCode errorCode = ErrorCode.fromHttp2(errorCodeInt); - if (errorCode == null) { - throw ioException("TYPE_RST_STREAM unexpected error code: %d", errorCodeInt); - } - handler.rstStream(streamId, errorCode); - } - - private void readSettings(Handler handler, int flags, int length, int streamId) - throws IOException { - if (length % 8 != 0) throw ioException("TYPE_SETTINGS length %% 8 != 0: %s", length); - if (streamId != 0) throw ioException("TYPE_SETTINGS streamId != 0"); - Settings settings = new Settings(); - for (int i = 0; i < length; i += 8) { - int w1 = in.readInt(); - int value = in.readInt(); - // int r = (w1 & 0xff000000) >>> 24; // Reserved. - int id = w1 & 0xffffff; - settings.set(id, 0, value); - } - handler.settings(false, settings); - } - - private void readPushPromise(Handler handler, int flags, int length, int streamId) { - // TODO: - } - - private void readPing(Handler handler, int flags, int length, int streamId) throws IOException { - if (length != 8) throw ioException("TYPE_PING length != 8: %s", length); - if (streamId != 0) throw ioException("TYPE_PING streamId != 0"); - int payload1 = in.readInt(); - int payload2 = in.readInt(); - boolean reply = (flags & FLAG_PONG) != 0; - handler.ping(reply, payload1, payload2); - } - - private void readGoAway(Handler handler, int flags, int length, int streamId) - throws IOException { - if (length < 8) throw ioException("TYPE_GOAWAY length < 8: %s", length); - int lastStreamId = in.readInt(); - int errorCodeInt = in.readInt(); - int opaqueDataLength = length - 8; - ErrorCode errorCode = ErrorCode.fromHttp2(errorCodeInt); - if (errorCode == null) { - throw ioException("TYPE_RST_STREAM unexpected error code: %d", errorCodeInt); - } - if (Util.skipByReading(in, opaqueDataLength) != opaqueDataLength) { - throw new IOException("TYPE_GOAWAY opaque data was truncated"); - } - handler.goAway(lastStreamId, errorCode); - } - - private void readWindowUpdate(Handler handler, int flags, int length, int streamId) - throws IOException { - int w1 = in.readInt(); - // boolean r = (w1 & 0x80000000) != 0; // Reserved. - int windowSizeIncrement = (w1 & 0x7fffffff); - boolean endFlowControl = (flags & FLAG_END_FLOW_CONTROL) != 0; - handler.windowUpdate(streamId, windowSizeIncrement, endFlowControl); - } - - private static IOException ioException(String message, Object... args) throws IOException { - throw new IOException(String.format(message, args)); - } - - @Override public void close() throws IOException { - in.close(); - } - } - - static final class Writer implements FrameWriter { - private final DataOutputStream out; - private final boolean client; - private final ByteArrayOutputStream hpackBuffer; - private final Hpack.Writer hpackWriter; - - Writer(OutputStream out, boolean client) { - this.out = new DataOutputStream(out); - this.client = client; - this.hpackBuffer = new ByteArrayOutputStream(); - this.hpackWriter = new Hpack.Writer(hpackBuffer); - } - - @Override public synchronized void flush() throws IOException { - out.flush(); - } - - @Override public synchronized void connectionHeader() throws IOException { - if (!client) return; // Nothing to write; servers don't send connection headers! - out.write(CONNECTION_HEADER); - } - - @Override public synchronized void synStream(boolean outFinished, boolean inFinished, - int streamId, int associatedStreamId, int priority, int slot, List nameValueBlock) - throws IOException { - if (inFinished) throw new UnsupportedOperationException(); - headers(outFinished, streamId, priority, nameValueBlock); - } - - @Override public synchronized void synReply(boolean outFinished, int streamId, - List nameValueBlock) throws IOException { - headers(outFinished, streamId, -1, nameValueBlock); - } - - @Override public synchronized void headers(int streamId, List nameValueBlock) - throws IOException { - headers(false, streamId, -1, nameValueBlock); - } - - private void headers(boolean outFinished, int streamId, int priority, - List nameValueBlock) throws IOException { - hpackBuffer.reset(); - hpackWriter.writeHeaders(nameValueBlock); - int type = TYPE_HEADERS; - // TODO: implement CONTINUATION - int length = hpackBuffer.size(); - int flags = FLAG_END_HEADERS; - if (outFinished) flags |= FLAG_END_STREAM; - if (priority != -1) flags |= FLAG_PRIORITY; - out.writeInt((length & 0xffff) << 16 | (type & 0xff) << 8 | (flags & 0xff)); - out.writeInt(streamId & 0x7fffffff); - if (priority != -1) out.writeInt(priority & 0x7fffffff); - hpackBuffer.writeTo(out); - } - - @Override public synchronized void rstStream(int streamId, ErrorCode errorCode) - throws IOException { - throw new UnsupportedOperationException("TODO"); - } - - @Override public void data(boolean outFinished, int streamId, byte[] data) throws IOException { - data(outFinished, streamId, data, 0, data.length); - } - - @Override public synchronized void data(boolean outFinished, int streamId, byte[] data, - int offset, int byteCount) throws IOException { - int type = TYPE_DATA; - int flags = 0; - if (outFinished) flags |= FLAG_END_STREAM; - out.writeInt((byteCount & 0xffff) << 16 | (type & 0xff) << 8 | (flags & 0xff)); - out.writeInt(streamId & 0x7fffffff); - out.write(data, offset, byteCount); - } - - @Override public synchronized void settings(Settings settings) throws IOException { - int type = TYPE_SETTINGS; - int length = settings.size() * 8; - int flags = 0; - int streamId = 0; - out.writeInt((length & 0xffff) << 16 | (type & 0xff) << 8 | (flags & 0xff)); - out.writeInt(streamId & 0x7fffffff); - for (int i = 0; i < Settings.COUNT; i++) { - if (!settings.isSet(i)) continue; - out.writeInt(i & 0xffffff); - out.writeInt(settings.get(i)); - } - } - - @Override public synchronized void noop() throws IOException { - throw new UnsupportedOperationException(); - } - - @Override public synchronized void ping(boolean reply, int payload1, int payload2) - throws IOException { - // TODO - } - - @Override public synchronized void goAway(int lastGoodStreamId, ErrorCode errorCode) - throws IOException { - // TODO - } - - @Override public synchronized void windowUpdate(int streamId, int deltaWindowSize) - throws IOException { - // TODO - } - - @Override public void close() throws IOException { - out.close(); - } - } -} diff --git a/mobile/CordovaLib/src/com/squareup/okhttp/internal/spdy/IncomingStreamHandler.java b/mobile/CordovaLib/src/com/squareup/okhttp/internal/spdy/IncomingStreamHandler.java deleted file mode 100755 index 44d4ea2bfaf..00000000000 --- a/mobile/CordovaLib/src/com/squareup/okhttp/internal/spdy/IncomingStreamHandler.java +++ /dev/null @@ -1,36 +0,0 @@ -/* - * Copyright (C) 2011 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package com.squareup.okhttp.internal.spdy; - -import java.io.IOException; - -/** Listener to be notified when a connected peer creates a new stream. */ -public interface IncomingStreamHandler { - IncomingStreamHandler REFUSE_INCOMING_STREAMS = new IncomingStreamHandler() { - @Override public void receive(SpdyStream stream) throws IOException { - stream.close(ErrorCode.REFUSED_STREAM); - } - }; - - /** - * Handle a new stream from this connection's peer. Implementations should - * respond by either {@link SpdyStream#reply replying to the stream} or - * {@link SpdyStream#close closing it}. This response does not need to be - * synchronous. - */ - void receive(SpdyStream stream) throws IOException; -} diff --git a/mobile/CordovaLib/src/com/squareup/okhttp/internal/spdy/NameValueBlockReader.java b/mobile/CordovaLib/src/com/squareup/okhttp/internal/spdy/NameValueBlockReader.java deleted file mode 100755 index 1b07e8f7552..00000000000 --- a/mobile/CordovaLib/src/com/squareup/okhttp/internal/spdy/NameValueBlockReader.java +++ /dev/null @@ -1,139 +0,0 @@ -/* - * Copyright (C) 2011 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package com.squareup.okhttp.internal.spdy; - -import com.squareup.okhttp.internal.Util; -import java.io.Closeable; -import java.io.DataInputStream; -import java.io.IOException; -import java.io.InputStream; -import java.util.ArrayList; -import java.util.List; -import java.util.zip.DataFormatException; -import java.util.zip.Inflater; -import java.util.zip.InflaterInputStream; - -/** - * Reads a SPDY/3 Name/Value header block. This class is made complicated by the - * requirement that we're strict with which bytes we put in the compressed bytes - * buffer. We need to put all compressed bytes into that buffer -- but no other - * bytes. - */ -class NameValueBlockReader implements Closeable { - private final DataInputStream nameValueBlockIn; - private final FillableInflaterInputStream fillableInflaterInputStream; - private int compressedLimit; - - NameValueBlockReader(final InputStream in) { - // Limit the inflater input stream to only those bytes in the Name/Value block. We cut the - // inflater off at its source because we can't predict the ratio of compressed bytes to - // uncompressed bytes. - InputStream throttleStream = new InputStream() { - @Override public int read() throws IOException { - return Util.readSingleByte(this); - } - - @Override public int read(byte[] buffer, int offset, int byteCount) throws IOException { - byteCount = Math.min(byteCount, compressedLimit); - int consumed = in.read(buffer, offset, byteCount); - compressedLimit -= consumed; - return consumed; - } - - @Override public void close() throws IOException { - in.close(); - } - }; - - // Subclass inflater to install a dictionary when it's needed. - Inflater inflater = new Inflater() { - @Override public int inflate(byte[] buffer, int offset, int count) - throws DataFormatException { - int result = super.inflate(buffer, offset, count); - if (result == 0 && needsDictionary()) { - setDictionary(Spdy3.DICTIONARY); - result = super.inflate(buffer, offset, count); - } - return result; - } - }; - - fillableInflaterInputStream = new FillableInflaterInputStream(throttleStream, inflater); - nameValueBlockIn = new DataInputStream(fillableInflaterInputStream); - } - - /** Extend the inflater stream so we can eagerly fill the compressed bytes buffer if necessary. */ - static class FillableInflaterInputStream extends InflaterInputStream { - public FillableInflaterInputStream(InputStream in, Inflater inf) { - super(in, inf); - } - - @Override public void fill() throws IOException { - super.fill(); // This method is protected in the superclass. - } - } - - public List readNameValueBlock(int length) throws IOException { - this.compressedLimit += length; - try { - int numberOfPairs = nameValueBlockIn.readInt(); - if (numberOfPairs < 0) { - throw new IOException("numberOfPairs < 0: " + numberOfPairs); - } - if (numberOfPairs > 1024) { - throw new IOException("numberOfPairs > 1024: " + numberOfPairs); - } - List entries = new ArrayList(numberOfPairs * 2); - for (int i = 0; i < numberOfPairs; i++) { - String name = readString(); - String values = readString(); - if (name.length() == 0) throw new IOException("name.length == 0"); - entries.add(name); - entries.add(values); - } - - doneReading(); - - return entries; - } catch (DataFormatException e) { - throw new IOException(e.getMessage()); - } - } - - private void doneReading() throws IOException { - if (compressedLimit == 0) return; - - // Read any outstanding unread bytes. One side-effect of deflate compression is that sometimes - // there are bytes remaining in the stream after we've consumed all of the content. - fillableInflaterInputStream.fill(); - - if (compressedLimit != 0) { - throw new IOException("compressedLimit > 0: " + compressedLimit); - } - } - - private String readString() throws DataFormatException, IOException { - int length = nameValueBlockIn.readInt(); - byte[] bytes = new byte[length]; - Util.readFully(nameValueBlockIn, bytes); - return new String(bytes, 0, length, "UTF-8"); - } - - @Override public void close() throws IOException { - nameValueBlockIn.close(); - } -} diff --git a/mobile/CordovaLib/src/com/squareup/okhttp/internal/spdy/Ping.java b/mobile/CordovaLib/src/com/squareup/okhttp/internal/spdy/Ping.java deleted file mode 100755 index c585255780f..00000000000 --- a/mobile/CordovaLib/src/com/squareup/okhttp/internal/spdy/Ping.java +++ /dev/null @@ -1,71 +0,0 @@ -/* - * Copyright (C) 2012 Square, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package com.squareup.okhttp.internal.spdy; - -import java.util.concurrent.CountDownLatch; -import java.util.concurrent.TimeUnit; - -/** - * A locally-originated ping. - */ -public final class Ping { - private final CountDownLatch latch = new CountDownLatch(1); - private long sent = -1; - private long received = -1; - - Ping() { - } - - void send() { - if (sent != -1) throw new IllegalStateException(); - sent = System.nanoTime(); - } - - void receive() { - if (received != -1 || sent == -1) throw new IllegalStateException(); - received = System.nanoTime(); - latch.countDown(); - } - - void cancel() { - if (received != -1 || sent == -1) throw new IllegalStateException(); - received = sent - 1; - latch.countDown(); - } - - /** - * Returns the round trip time for this ping in nanoseconds, waiting for the - * response to arrive if necessary. Returns -1 if the response was - * cancelled. - */ - public long roundTripTime() throws InterruptedException { - latch.await(); - return received - sent; - } - - /** - * Returns the round trip time for this ping in nanoseconds, or -1 if the - * response was cancelled, or -2 if the timeout elapsed before the round - * trip completed. - */ - public long roundTripTime(long timeout, TimeUnit unit) throws InterruptedException { - if (latch.await(timeout, unit)) { - return received - sent; - } else { - return -2; - } - } -} diff --git a/mobile/CordovaLib/src/com/squareup/okhttp/internal/spdy/Settings.java b/mobile/CordovaLib/src/com/squareup/okhttp/internal/spdy/Settings.java deleted file mode 100755 index 05380e27e16..00000000000 --- a/mobile/CordovaLib/src/com/squareup/okhttp/internal/spdy/Settings.java +++ /dev/null @@ -1,187 +0,0 @@ -/* - * Copyright (C) 2012 Square, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package com.squareup.okhttp.internal.spdy; - -final class Settings { - /** - * From the spdy/3 spec, the default initial window size for all streams is - * 64 KiB. (Chrome 25 uses 10 MiB). - */ - static final int DEFAULT_INITIAL_WINDOW_SIZE = 64 * 1024; - - /** Peer request to clear durable settings. */ - static final int FLAG_CLEAR_PREVIOUSLY_PERSISTED_SETTINGS = 0x1; - - /** Sent by servers only. The peer requests this setting persisted for future connections. */ - static final int PERSIST_VALUE = 0x1; - /** Sent by clients only. The client is reminding the server of a persisted value. */ - static final int PERSISTED = 0x2; - - /** Sender's estimate of max incoming kbps. */ - static final int UPLOAD_BANDWIDTH = 1; - /** Sender's estimate of max outgoing kbps. */ - static final int DOWNLOAD_BANDWIDTH = 2; - /** Sender's estimate of milliseconds between sending a request and receiving a response. */ - static final int ROUND_TRIP_TIME = 3; - /** Sender's maximum number of concurrent streams. */ - static final int MAX_CONCURRENT_STREAMS = 4; - /** Current CWND in Packets. */ - static final int CURRENT_CWND = 5; - /** Retransmission rate. Percentage */ - static final int DOWNLOAD_RETRANS_RATE = 6; - /** Window size in bytes. */ - static final int INITIAL_WINDOW_SIZE = 7; - /** Window size in bytes. */ - static final int CLIENT_CERTIFICATE_VECTOR_SIZE = 8; - /** Flow control options. */ - static final int FLOW_CONTROL_OPTIONS = 9; - - /** Total number of settings. */ - static final int COUNT = 10; - - /** If set, flow control is disabled for streams directed to the sender of these settings. */ - static final int FLOW_CONTROL_OPTIONS_DISABLED = 0x1; - - /** Bitfield of which flags that values. */ - private int set; - - /** Bitfield of flags that have {@link #PERSIST_VALUE}. */ - private int persistValue; - - /** Bitfield of flags that have {@link #PERSISTED}. */ - private int persisted; - - /** Flag values. */ - private final int[] values = new int[COUNT]; - - void set(int id, int idFlags, int value) { - if (id >= values.length) { - return; // Discard unknown settings. - } - - int bit = 1 << id; - set |= bit; - if ((idFlags & PERSIST_VALUE) != 0) { - persistValue |= bit; - } else { - persistValue &= ~bit; - } - if ((idFlags & PERSISTED) != 0) { - persisted |= bit; - } else { - persisted &= ~bit; - } - - values[id] = value; - } - - /** Returns true if a value has been assigned for the setting {@code id}. */ - boolean isSet(int id) { - int bit = 1 << id; - return (set & bit) != 0; - } - - /** Returns the value for the setting {@code id}, or 0 if unset. */ - int get(int id) { - return values[id]; - } - - /** Returns the flags for the setting {@code id}, or 0 if unset. */ - int flags(int id) { - int result = 0; - if (isPersisted(id)) result |= Settings.PERSISTED; - if (persistValue(id)) result |= Settings.PERSIST_VALUE; - return result; - } - - /** Returns the number of settings that have values assigned. */ - int size() { - return Integer.bitCount(set); - } - - int getUploadBandwidth(int defaultValue) { - int bit = 1 << UPLOAD_BANDWIDTH; - return (bit & set) != 0 ? values[UPLOAD_BANDWIDTH] : defaultValue; - } - - int getDownloadBandwidth(int defaultValue) { - int bit = 1 << DOWNLOAD_BANDWIDTH; - return (bit & set) != 0 ? values[DOWNLOAD_BANDWIDTH] : defaultValue; - } - - int getRoundTripTime(int defaultValue) { - int bit = 1 << ROUND_TRIP_TIME; - return (bit & set) != 0 ? values[ROUND_TRIP_TIME] : defaultValue; - } - - int getMaxConcurrentStreams(int defaultValue) { - int bit = 1 << MAX_CONCURRENT_STREAMS; - return (bit & set) != 0 ? values[MAX_CONCURRENT_STREAMS] : defaultValue; - } - - int getCurrentCwnd(int defaultValue) { - int bit = 1 << CURRENT_CWND; - return (bit & set) != 0 ? values[CURRENT_CWND] : defaultValue; - } - - int getDownloadRetransRate(int defaultValue) { - int bit = 1 << DOWNLOAD_RETRANS_RATE; - return (bit & set) != 0 ? values[DOWNLOAD_RETRANS_RATE] : defaultValue; - } - - int getInitialWindowSize(int defaultValue) { - int bit = 1 << INITIAL_WINDOW_SIZE; - return (bit & set) != 0 ? values[INITIAL_WINDOW_SIZE] : defaultValue; - } - - int getClientCertificateVectorSize(int defaultValue) { - int bit = 1 << CLIENT_CERTIFICATE_VECTOR_SIZE; - return (bit & set) != 0 ? values[CLIENT_CERTIFICATE_VECTOR_SIZE] : defaultValue; - } - - // TODO: honor this setting. - boolean isFlowControlDisabled() { - int bit = 1 << FLOW_CONTROL_OPTIONS; - int value = (bit & set) != 0 ? values[FLOW_CONTROL_OPTIONS] : 0; - return (value & FLOW_CONTROL_OPTIONS_DISABLED) != 0; - } - - /** - * Returns true if this user agent should use this setting in future SPDY - * connections to the same host. - */ - boolean persistValue(int id) { - int bit = 1 << id; - return (persistValue & bit) != 0; - } - - /** Returns true if this setting was persisted. */ - boolean isPersisted(int id) { - int bit = 1 << id; - return (persisted & bit) != 0; - } - - /** - * Writes {@code other} into this. If any setting is populated by this and - * {@code other}, the value and flags from {@code other} will be kept. - */ - void merge(Settings other) { - for (int i = 0; i < COUNT; i++) { - if (!other.isSet(i)) continue; - set(i, other.flags(i), other.get(i)); - } - } -} diff --git a/mobile/CordovaLib/src/com/squareup/okhttp/internal/spdy/Spdy3.java b/mobile/CordovaLib/src/com/squareup/okhttp/internal/spdy/Spdy3.java deleted file mode 100755 index 5d9a49b3a2b..00000000000 --- a/mobile/CordovaLib/src/com/squareup/okhttp/internal/spdy/Spdy3.java +++ /dev/null @@ -1,463 +0,0 @@ -/* - * Copyright (C) 2011 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package com.squareup.okhttp.internal.spdy; - -import com.squareup.okhttp.internal.Platform; -import com.squareup.okhttp.internal.Util; -import java.io.ByteArrayOutputStream; -import java.io.DataInputStream; -import java.io.DataOutputStream; -import java.io.IOException; -import java.io.InputStream; -import java.io.OutputStream; -import java.io.UnsupportedEncodingException; -import java.net.ProtocolException; -import java.util.List; -import java.util.zip.Deflater; - -final class Spdy3 implements Variant { - static final int TYPE_DATA = 0x0; - static final int TYPE_SYN_STREAM = 0x1; - static final int TYPE_SYN_REPLY = 0x2; - static final int TYPE_RST_STREAM = 0x3; - static final int TYPE_SETTINGS = 0x4; - static final int TYPE_NOOP = 0x5; - static final int TYPE_PING = 0x6; - static final int TYPE_GOAWAY = 0x7; - static final int TYPE_HEADERS = 0x8; - static final int TYPE_WINDOW_UPDATE = 0x9; - static final int TYPE_CREDENTIAL = 0x10; - - static final int FLAG_FIN = 0x1; - static final int FLAG_UNIDIRECTIONAL = 0x2; - - static final int VERSION = 3; - - static final byte[] DICTIONARY; - static { - try { - DICTIONARY = ("\u0000\u0000\u0000\u0007options\u0000\u0000\u0000\u0004hea" - + "d\u0000\u0000\u0000\u0004post\u0000\u0000\u0000\u0003put\u0000\u0000\u0000\u0006dele" - + "te\u0000\u0000\u0000\u0005trace\u0000\u0000\u0000\u0006accept\u0000\u0000\u0000" - + "\u000Eaccept-charset\u0000\u0000\u0000\u000Faccept-encoding\u0000\u0000\u0000\u000Fa" - + "ccept-language\u0000\u0000\u0000\raccept-ranges\u0000\u0000\u0000\u0003age\u0000" - + "\u0000\u0000\u0005allow\u0000\u0000\u0000\rauthorization\u0000\u0000\u0000\rcache-co" - + "ntrol\u0000\u0000\u0000\nconnection\u0000\u0000\u0000\fcontent-base\u0000\u0000" - + "\u0000\u0010content-encoding\u0000\u0000\u0000\u0010content-language\u0000\u0000" - + "\u0000\u000Econtent-length\u0000\u0000\u0000\u0010content-location\u0000\u0000\u0000" - + "\u000Bcontent-md5\u0000\u0000\u0000\rcontent-range\u0000\u0000\u0000\fcontent-type" - + "\u0000\u0000\u0000\u0004date\u0000\u0000\u0000\u0004etag\u0000\u0000\u0000\u0006expe" - + "ct\u0000\u0000\u0000\u0007expires\u0000\u0000\u0000\u0004from\u0000\u0000\u0000" - + "\u0004host\u0000\u0000\u0000\bif-match\u0000\u0000\u0000\u0011if-modified-since" - + "\u0000\u0000\u0000\rif-none-match\u0000\u0000\u0000\bif-range\u0000\u0000\u0000" - + "\u0013if-unmodified-since\u0000\u0000\u0000\rlast-modified\u0000\u0000\u0000\blocati" - + "on\u0000\u0000\u0000\fmax-forwards\u0000\u0000\u0000\u0006pragma\u0000\u0000\u0000" - + "\u0012proxy-authenticate\u0000\u0000\u0000\u0013proxy-authorization\u0000\u0000" - + "\u0000\u0005range\u0000\u0000\u0000\u0007referer\u0000\u0000\u0000\u000Bretry-after" - + "\u0000\u0000\u0000\u0006server\u0000\u0000\u0000\u0002te\u0000\u0000\u0000\u0007trai" - + "ler\u0000\u0000\u0000\u0011transfer-encoding\u0000\u0000\u0000\u0007upgrade\u0000" - + "\u0000\u0000\nuser-agent\u0000\u0000\u0000\u0004vary\u0000\u0000\u0000\u0003via" - + "\u0000\u0000\u0000\u0007warning\u0000\u0000\u0000\u0010www-authenticate\u0000\u0000" - + "\u0000\u0006method\u0000\u0000\u0000\u0003get\u0000\u0000\u0000\u0006status\u0000" - + "\u0000\u0000\u0006200 OK\u0000\u0000\u0000\u0007version\u0000\u0000\u0000\bHTTP/1.1" - + "\u0000\u0000\u0000\u0003url\u0000\u0000\u0000\u0006public\u0000\u0000\u0000\nset-coo" - + "kie\u0000\u0000\u0000\nkeep-alive\u0000\u0000\u0000\u0006origin100101201202205206300" - + "302303304305306307402405406407408409410411412413414415416417502504505203 Non-Authori" - + "tative Information204 No Content301 Moved Permanently400 Bad Request401 Unauthorized" - + "403 Forbidden404 Not Found500 Internal Server Error501 Not Implemented503 Service Un" - + "availableJan Feb Mar Apr May Jun Jul Aug Sept Oct Nov Dec 00:00:00 Mon, Tue, Wed, Th" - + "u, Fri, Sat, Sun, GMTchunked,text/html,image/png,image/jpg,image/gif,application/xml" - + ",application/xhtml+xml,text/plain,text/javascript,publicprivatemax-age=gzip,deflate," - + "sdchcharset=utf-8charset=iso-8859-1,utf-,*,enq=0.").getBytes(Util.UTF_8.name()); - } catch (UnsupportedEncodingException e) { - throw new AssertionError(); - } - } - - @Override public FrameReader newReader(InputStream in, boolean client) { - return new Reader(in, client); - } - - @Override public FrameWriter newWriter(OutputStream out, boolean client) { - return new Writer(out, client); - } - - /** Read spdy/3 frames. */ - static final class Reader implements FrameReader { - private final DataInputStream in; - private final boolean client; - private final NameValueBlockReader nameValueBlockReader; - - Reader(InputStream in, boolean client) { - this.in = new DataInputStream(in); - this.nameValueBlockReader = new NameValueBlockReader(in); - this.client = client; - } - - @Override public void readConnectionHeader() { - } - - /** - * Send the next frame to {@code handler}. Returns true unless there are no - * more frames on the stream. - */ - @Override public boolean nextFrame(Handler handler) throws IOException { - int w1; - try { - w1 = in.readInt(); - } catch (IOException e) { - return false; // This might be a normal socket close. - } - int w2 = in.readInt(); - - boolean control = (w1 & 0x80000000) != 0; - int flags = (w2 & 0xff000000) >>> 24; - int length = (w2 & 0xffffff); - - if (control) { - int version = (w1 & 0x7fff0000) >>> 16; - int type = (w1 & 0xffff); - - if (version != 3) { - throw new ProtocolException("version != 3: " + version); - } - - switch (type) { - case TYPE_SYN_STREAM: - readSynStream(handler, flags, length); - return true; - - case TYPE_SYN_REPLY: - readSynReply(handler, flags, length); - return true; - - case TYPE_RST_STREAM: - readRstStream(handler, flags, length); - return true; - - case TYPE_SETTINGS: - readSettings(handler, flags, length); - return true; - - case TYPE_NOOP: - if (length != 0) throw ioException("TYPE_NOOP length: %d != 0", length); - handler.noop(); - return true; - - case TYPE_PING: - readPing(handler, flags, length); - return true; - - case TYPE_GOAWAY: - readGoAway(handler, flags, length); - return true; - - case TYPE_HEADERS: - readHeaders(handler, flags, length); - return true; - - case TYPE_WINDOW_UPDATE: - readWindowUpdate(handler, flags, length); - return true; - - case TYPE_CREDENTIAL: - Util.skipByReading(in, length); - throw new UnsupportedOperationException("TODO"); // TODO: implement - - default: - throw new IOException("Unexpected frame"); - } - } else { - int streamId = w1 & 0x7fffffff; - boolean inFinished = (flags & FLAG_FIN) != 0; - handler.data(inFinished, streamId, in, length); - return true; - } - } - - private void readSynStream(Handler handler, int flags, int length) throws IOException { - int w1 = in.readInt(); - int w2 = in.readInt(); - int s3 = in.readShort(); - int streamId = w1 & 0x7fffffff; - int associatedStreamId = w2 & 0x7fffffff; - int priority = (s3 & 0xe000) >>> 13; - int slot = s3 & 0xff; - List nameValueBlock = nameValueBlockReader.readNameValueBlock(length - 10); - - boolean inFinished = (flags & FLAG_FIN) != 0; - boolean outFinished = (flags & FLAG_UNIDIRECTIONAL) != 0; - handler.headers(outFinished, inFinished, streamId, associatedStreamId, priority, - nameValueBlock, HeadersMode.SPDY_SYN_STREAM); - } - - private void readSynReply(Handler handler, int flags, int length) throws IOException { - int w1 = in.readInt(); - int streamId = w1 & 0x7fffffff; - List nameValueBlock = nameValueBlockReader.readNameValueBlock(length - 4); - boolean inFinished = (flags & FLAG_FIN) != 0; - handler.headers(false, inFinished, streamId, -1, -1, nameValueBlock, HeadersMode.SPDY_REPLY); - } - - private void readRstStream(Handler handler, int flags, int length) throws IOException { - if (length != 8) throw ioException("TYPE_RST_STREAM length: %d != 8", length); - int streamId = in.readInt() & 0x7fffffff; - int errorCodeInt = in.readInt(); - ErrorCode errorCode = ErrorCode.fromSpdy3Rst(errorCodeInt); - if (errorCode == null) { - throw ioException("TYPE_RST_STREAM unexpected error code: %d", errorCodeInt); - } - handler.rstStream(streamId, errorCode); - } - - private void readHeaders(Handler handler, int flags, int length) throws IOException { - int w1 = in.readInt(); - int streamId = w1 & 0x7fffffff; - List nameValueBlock = nameValueBlockReader.readNameValueBlock(length - 4); - handler.headers(false, false, streamId, -1, -1, nameValueBlock, HeadersMode.SPDY_HEADERS); - } - - private void readWindowUpdate(Handler handler, int flags, int length) throws IOException { - if (length != 8) throw ioException("TYPE_WINDOW_UPDATE length: %d != 8", length); - int w1 = in.readInt(); - int w2 = in.readInt(); - int streamId = w1 & 0x7fffffff; - int deltaWindowSize = w2 & 0x7fffffff; - handler.windowUpdate(streamId, deltaWindowSize, false); - } - - private void readPing(Handler handler, int flags, int length) throws IOException { - if (length != 4) throw ioException("TYPE_PING length: %d != 4", length); - int id = in.readInt(); - boolean reply = client == ((id % 2) == 1); - handler.ping(reply, id, 0); - } - - private void readGoAway(Handler handler, int flags, int length) throws IOException { - if (length != 8) throw ioException("TYPE_GOAWAY length: %d != 8", length); - int lastGoodStreamId = in.readInt() & 0x7fffffff; - int errorCodeInt = in.readInt(); - ErrorCode errorCode = ErrorCode.fromSpdyGoAway(errorCodeInt); - if (errorCode == null) { - throw ioException("TYPE_GOAWAY unexpected error code: %d", errorCodeInt); - } - handler.goAway(lastGoodStreamId, errorCode); - } - - private void readSettings(Handler handler, int flags, int length) throws IOException { - int numberOfEntries = in.readInt(); - if (length != 4 + 8 * numberOfEntries) { - throw ioException("TYPE_SETTINGS length: %d != 4 + 8 * %d", length, numberOfEntries); - } - Settings settings = new Settings(); - for (int i = 0; i < numberOfEntries; i++) { - int w1 = in.readInt(); - int value = in.readInt(); - int idFlags = (w1 & 0xff000000) >>> 24; - int id = w1 & 0xffffff; - settings.set(id, idFlags, value); - } - boolean clearPrevious = (flags & Settings.FLAG_CLEAR_PREVIOUSLY_PERSISTED_SETTINGS) != 0; - handler.settings(clearPrevious, settings); - } - - private static IOException ioException(String message, Object... args) throws IOException { - throw new IOException(String.format(message, args)); - } - - @Override public void close() throws IOException { - Util.closeAll(in, nameValueBlockReader); - } - } - - /** Write spdy/3 frames. */ - static final class Writer implements FrameWriter { - private final DataOutputStream out; - private final ByteArrayOutputStream nameValueBlockBuffer; - private final DataOutputStream nameValueBlockOut; - private final boolean client; - - Writer(OutputStream out, boolean client) { - this.out = new DataOutputStream(out); - this.client = client; - - Deflater deflater = new Deflater(); - deflater.setDictionary(DICTIONARY); - nameValueBlockBuffer = new ByteArrayOutputStream(); - nameValueBlockOut = new DataOutputStream( - Platform.get().newDeflaterOutputStream(nameValueBlockBuffer, deflater, true)); - } - - @Override public synchronized void connectionHeader() { - // Do nothing: no connection header for SPDY/3. - } - - @Override public synchronized void flush() throws IOException { - out.flush(); - } - - @Override public synchronized void synStream(boolean outFinished, boolean inFinished, - int streamId, int associatedStreamId, int priority, int slot, List nameValueBlock) - throws IOException { - writeNameValueBlockToBuffer(nameValueBlock); - int length = 10 + nameValueBlockBuffer.size(); - int type = TYPE_SYN_STREAM; - int flags = (outFinished ? FLAG_FIN : 0) | (inFinished ? FLAG_UNIDIRECTIONAL : 0); - - int unused = 0; - out.writeInt(0x80000000 | (VERSION & 0x7fff) << 16 | type & 0xffff); - out.writeInt((flags & 0xff) << 24 | length & 0xffffff); - out.writeInt(streamId & 0x7fffffff); - out.writeInt(associatedStreamId & 0x7fffffff); - out.writeShort((priority & 0x7) << 13 | (unused & 0x1f) << 8 | (slot & 0xff)); - nameValueBlockBuffer.writeTo(out); - out.flush(); - } - - @Override public synchronized void synReply( - boolean outFinished, int streamId, List nameValueBlock) throws IOException { - writeNameValueBlockToBuffer(nameValueBlock); - int type = TYPE_SYN_REPLY; - int flags = (outFinished ? FLAG_FIN : 0); - int length = nameValueBlockBuffer.size() + 4; - - out.writeInt(0x80000000 | (VERSION & 0x7fff) << 16 | type & 0xffff); - out.writeInt((flags & 0xff) << 24 | length & 0xffffff); - out.writeInt(streamId & 0x7fffffff); - nameValueBlockBuffer.writeTo(out); - out.flush(); - } - - @Override public synchronized void headers(int streamId, List nameValueBlock) - throws IOException { - writeNameValueBlockToBuffer(nameValueBlock); - int flags = 0; - int type = TYPE_HEADERS; - int length = nameValueBlockBuffer.size() + 4; - - out.writeInt(0x80000000 | (VERSION & 0x7fff) << 16 | type & 0xffff); - out.writeInt((flags & 0xff) << 24 | length & 0xffffff); - out.writeInt(streamId & 0x7fffffff); - nameValueBlockBuffer.writeTo(out); - out.flush(); - } - - @Override public synchronized void rstStream(int streamId, ErrorCode errorCode) - throws IOException { - if (errorCode.spdyRstCode == -1) throw new IllegalArgumentException(); - int flags = 0; - int type = TYPE_RST_STREAM; - int length = 8; - out.writeInt(0x80000000 | (VERSION & 0x7fff) << 16 | type & 0xffff); - out.writeInt((flags & 0xff) << 24 | length & 0xffffff); - out.writeInt(streamId & 0x7fffffff); - out.writeInt(errorCode.spdyRstCode); - out.flush(); - } - - @Override public synchronized void data(boolean outFinished, int streamId, byte[] data) - throws IOException { - data(outFinished, streamId, data, 0, data.length); - } - - @Override public synchronized void data(boolean outFinished, int streamId, byte[] data, - int offset, int byteCount) throws IOException { - int flags = (outFinished ? FLAG_FIN : 0); - out.writeInt(streamId & 0x7fffffff); - out.writeInt((flags & 0xff) << 24 | byteCount & 0xffffff); - out.write(data, offset, byteCount); - } - - private void writeNameValueBlockToBuffer(List nameValueBlock) throws IOException { - nameValueBlockBuffer.reset(); - int numberOfPairs = nameValueBlock.size() / 2; - nameValueBlockOut.writeInt(numberOfPairs); - for (String s : nameValueBlock) { - nameValueBlockOut.writeInt(s.length()); - nameValueBlockOut.write(s.getBytes("UTF-8")); - } - nameValueBlockOut.flush(); - } - - @Override public synchronized void settings(Settings settings) throws IOException { - int type = TYPE_SETTINGS; - int flags = 0; - int size = settings.size(); - int length = 4 + size * 8; - out.writeInt(0x80000000 | (VERSION & 0x7fff) << 16 | type & 0xffff); - out.writeInt((flags & 0xff) << 24 | length & 0xffffff); - out.writeInt(size); - for (int i = 0; i <= Settings.COUNT; i++) { - if (!settings.isSet(i)) continue; - int settingsFlags = settings.flags(i); - out.writeInt((settingsFlags & 0xff) << 24 | (i & 0xffffff)); - out.writeInt(settings.get(i)); - } - out.flush(); - } - - @Override public synchronized void noop() throws IOException { - int type = TYPE_NOOP; - int length = 0; - int flags = 0; - out.writeInt(0x80000000 | (VERSION & 0x7fff) << 16 | type & 0xffff); - out.writeInt((flags & 0xff) << 24 | length & 0xffffff); - out.flush(); - } - - @Override public synchronized void ping(boolean reply, int payload1, int payload2) - throws IOException { - boolean payloadIsReply = client != ((payload1 % 2) == 1); - if (reply != payloadIsReply) throw new IllegalArgumentException("payload != reply"); - int type = TYPE_PING; - int flags = 0; - int length = 4; - out.writeInt(0x80000000 | (VERSION & 0x7fff) << 16 | type & 0xffff); - out.writeInt((flags & 0xff) << 24 | length & 0xffffff); - out.writeInt(payload1); - out.flush(); - } - - @Override public synchronized void goAway(int lastGoodStreamId, ErrorCode errorCode) - throws IOException { - if (errorCode.spdyGoAwayCode == -1) throw new IllegalArgumentException(); - int type = TYPE_GOAWAY; - int flags = 0; - int length = 8; - out.writeInt(0x80000000 | (VERSION & 0x7fff) << 16 | type & 0xffff); - out.writeInt((flags & 0xff) << 24 | length & 0xffffff); - out.writeInt(lastGoodStreamId); - out.writeInt(errorCode.spdyGoAwayCode); - out.flush(); - } - - @Override public synchronized void windowUpdate(int streamId, int deltaWindowSize) - throws IOException { - int type = TYPE_WINDOW_UPDATE; - int flags = 0; - int length = 8; - out.writeInt(0x80000000 | (VERSION & 0x7fff) << 16 | type & 0xffff); - out.writeInt((flags & 0xff) << 24 | length & 0xffffff); - out.writeInt(streamId); - out.writeInt(deltaWindowSize); - out.flush(); - } - - @Override public void close() throws IOException { - Util.closeAll(out, nameValueBlockOut); - } - } -} diff --git a/mobile/CordovaLib/src/com/squareup/okhttp/internal/spdy/SpdyConnection.java b/mobile/CordovaLib/src/com/squareup/okhttp/internal/spdy/SpdyConnection.java deleted file mode 100755 index 41724f0787d..00000000000 --- a/mobile/CordovaLib/src/com/squareup/okhttp/internal/spdy/SpdyConnection.java +++ /dev/null @@ -1,599 +0,0 @@ -/* - * Copyright (C) 2011 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package com.squareup.okhttp.internal.spdy; - -import com.squareup.okhttp.internal.NamedRunnable; -import com.squareup.okhttp.internal.Util; -import java.io.Closeable; -import java.io.IOException; -import java.io.InputStream; -import java.io.OutputStream; -import java.net.Socket; -import java.util.HashMap; -import java.util.Iterator; -import java.util.List; -import java.util.Map; -import java.util.concurrent.ExecutorService; -import java.util.concurrent.SynchronousQueue; -import java.util.concurrent.ThreadPoolExecutor; -import java.util.concurrent.TimeUnit; - -/** - * A socket connection to a remote peer. A connection hosts streams which can - * send and receive data. - * - *

Many methods in this API are synchronous: the call is - * completed before the method returns. This is typical for Java but atypical - * for SPDY. This is motivated by exception transparency: an IOException that - * was triggered by a certain caller can be caught and handled by that caller. - */ -public final class SpdyConnection implements Closeable { - - // Internal state of this connection is guarded by 'this'. No blocking - // operations may be performed while holding this lock! - // - // Socket writes are guarded by frameWriter. - // - // Socket reads are unguarded but are only made by the reader thread. - // - // Certain operations (like SYN_STREAM) need to synchronize on both the - // frameWriter (to do blocking I/O) and this (to create streams). Such - // operations must synchronize on 'this' last. This ensures that we never - // wait for a blocking operation while holding 'this'. - - private static final ExecutorService executor = new ThreadPoolExecutor(0, - Integer.MAX_VALUE, 60, TimeUnit.SECONDS, new SynchronousQueue(), - Util.daemonThreadFactory("OkHttp SpdyConnection")); - - /** The protocol variant, like SPDY/3 or HTTP-draft-06/2.0. */ - final Variant variant; - - /** True if this peer initiated the connection. */ - final boolean client; - - /** - * User code to run in response to an incoming stream. Callbacks must not be - * run on the callback executor. - */ - private final IncomingStreamHandler handler; - private final FrameReader frameReader; - private final FrameWriter frameWriter; - - private final Map streams = new HashMap(); - private final String hostName; - private int lastGoodStreamId; - private int nextStreamId; - private boolean shutdown; - private long idleStartTimeNs = System.nanoTime(); - - /** Lazily-created map of in-flight pings awaiting a response. Guarded by this. */ - private Map pings; - private int nextPingId; - - /** Lazily-created settings for the peer. */ - Settings settings; - - private SpdyConnection(Builder builder) { - variant = builder.variant; - client = builder.client; - handler = builder.handler; - frameReader = variant.newReader(builder.in, client); - frameWriter = variant.newWriter(builder.out, client); - nextStreamId = builder.client ? 1 : 2; - nextPingId = builder.client ? 1 : 2; - - hostName = builder.hostName; - - new Thread(new Reader(), "Spdy Reader " + hostName).start(); - } - - /** - * Returns the number of {@link SpdyStream#isOpen() open streams} on this - * connection. - */ - public synchronized int openStreamCount() { - return streams.size(); - } - - private synchronized SpdyStream getStream(int id) { - return streams.get(id); - } - - synchronized SpdyStream removeStream(int streamId) { - SpdyStream stream = streams.remove(streamId); - if (stream != null && streams.isEmpty()) { - setIdle(true); - } - return stream; - } - - private synchronized void setIdle(boolean value) { - idleStartTimeNs = value ? System.nanoTime() : Long.MAX_VALUE; - } - - /** Returns true if this connection is idle. */ - public synchronized boolean isIdle() { - return idleStartTimeNs != Long.MAX_VALUE; - } - - /** - * Returns the time in ns when this connection became idle or Long.MAX_VALUE - * if connection is not idle. - */ - public synchronized long getIdleStartTimeNs() { - return idleStartTimeNs; - } - - /** - * Returns a new locally-initiated stream. - * - * @param out true to create an output stream that we can use to send data - * to the remote peer. Corresponds to {@code FLAG_FIN}. - * @param in true to create an input stream that the remote peer can use to - * send data to us. Corresponds to {@code FLAG_UNIDIRECTIONAL}. - */ - public SpdyStream newStream(List requestHeaders, boolean out, boolean in) - throws IOException { - boolean outFinished = !out; - boolean inFinished = !in; - int associatedStreamId = 0; // TODO: permit the caller to specify an associated stream? - int priority = 0; // TODO: permit the caller to specify a priority? - int slot = 0; // TODO: permit the caller to specify a slot? - SpdyStream stream; - int streamId; - - synchronized (frameWriter) { - synchronized (this) { - if (shutdown) { - throw new IOException("shutdown"); - } - streamId = nextStreamId; - nextStreamId += 2; - stream = new SpdyStream( - streamId, this, outFinished, inFinished, priority, requestHeaders, settings); - if (stream.isOpen()) { - streams.put(streamId, stream); - setIdle(false); - } - } - - frameWriter.synStream(outFinished, inFinished, streamId, associatedStreamId, priority, slot, - requestHeaders); - } - - return stream; - } - - void writeSynReply(int streamId, boolean outFinished, List alternating) - throws IOException { - frameWriter.synReply(outFinished, streamId, alternating); - } - - public void writeData(int streamId, boolean outFinished, byte[] buffer, int offset, int byteCount) - throws IOException { - frameWriter.data(outFinished, streamId, buffer, offset, byteCount); - } - - void writeSynResetLater(final int streamId, final ErrorCode errorCode) { - executor.submit(new NamedRunnable("OkHttp SPDY Writer %s stream %d", hostName, streamId) { - @Override public void execute() { - try { - writeSynReset(streamId, errorCode); - } catch (IOException ignored) { - } - } - }); - } - - void writeSynReset(int streamId, ErrorCode statusCode) throws IOException { - frameWriter.rstStream(streamId, statusCode); - } - - void writeWindowUpdateLater(final int streamId, final int deltaWindowSize) { - executor.submit(new NamedRunnable("OkHttp SPDY Writer %s stream %d", hostName, streamId) { - @Override public void execute() { - try { - writeWindowUpdate(streamId, deltaWindowSize); - } catch (IOException ignored) { - } - } - }); - } - - void writeWindowUpdate(int streamId, int deltaWindowSize) throws IOException { - frameWriter.windowUpdate(streamId, deltaWindowSize); - } - - /** - * Sends a ping frame to the peer. Use the returned object to await the - * ping's response and observe its round trip time. - */ - public Ping ping() throws IOException { - Ping ping = new Ping(); - int pingId; - synchronized (this) { - if (shutdown) { - throw new IOException("shutdown"); - } - pingId = nextPingId; - nextPingId += 2; - if (pings == null) pings = new HashMap(); - pings.put(pingId, ping); - } - writePing(false, pingId, 0x4f4b6f6b /* ASCII "OKok" */, ping); - return ping; - } - - private void writePingLater( - final boolean reply, final int payload1, final int payload2, final Ping ping) { - executor.submit(new NamedRunnable("OkHttp SPDY Writer %s ping %08x%08x", - hostName, payload1, payload2) { - @Override public void execute() { - try { - writePing(reply, payload1, payload2, ping); - } catch (IOException ignored) { - } - } - }); - } - - private void writePing(boolean reply, int payload1, int payload2, Ping ping) throws IOException { - synchronized (frameWriter) { - // Observe the sent time immediately before performing I/O. - if (ping != null) ping.send(); - frameWriter.ping(reply, payload1, payload2); - } - } - - private synchronized Ping removePing(int id) { - return pings != null ? pings.remove(id) : null; - } - - /** Sends a noop frame to the peer. */ - public void noop() throws IOException { - frameWriter.noop(); - } - - public void flush() throws IOException { - frameWriter.flush(); - } - - /** - * Degrades this connection such that new streams can neither be created - * locally, nor accepted from the remote peer. Existing streams are not - * impacted. This is intended to permit an endpoint to gracefully stop - * accepting new requests without harming previously established streams. - */ - public void shutdown(ErrorCode statusCode) throws IOException { - synchronized (frameWriter) { - int lastGoodStreamId; - synchronized (this) { - if (shutdown) { - return; - } - shutdown = true; - lastGoodStreamId = this.lastGoodStreamId; - } - frameWriter.goAway(lastGoodStreamId, statusCode); - } - } - - /** - * Closes this connection. This cancels all open streams and unanswered - * pings. It closes the underlying input and output streams and shuts down - * internal executor services. - */ - @Override public void close() throws IOException { - close(ErrorCode.NO_ERROR, ErrorCode.CANCEL); - } - - private void close(ErrorCode connectionCode, ErrorCode streamCode) throws IOException { - assert (!Thread.holdsLock(this)); - IOException thrown = null; - try { - shutdown(connectionCode); - } catch (IOException e) { - thrown = e; - } - - SpdyStream[] streamsToClose = null; - Ping[] pingsToCancel = null; - synchronized (this) { - if (!streams.isEmpty()) { - streamsToClose = streams.values().toArray(new SpdyStream[streams.size()]); - streams.clear(); - setIdle(false); - } - if (pings != null) { - pingsToCancel = pings.values().toArray(new Ping[pings.size()]); - pings = null; - } - } - - if (streamsToClose != null) { - for (SpdyStream stream : streamsToClose) { - try { - stream.close(streamCode); - } catch (IOException e) { - if (thrown != null) thrown = e; - } - } - } - - if (pingsToCancel != null) { - for (Ping ping : pingsToCancel) { - ping.cancel(); - } - } - - try { - frameReader.close(); - } catch (IOException e) { - thrown = e; - } - try { - frameWriter.close(); - } catch (IOException e) { - if (thrown == null) thrown = e; - } - - if (thrown != null) throw thrown; - } - - /** - * Sends a connection header if the current variant requires it. This should - * be called after {@link Builder#build} for all new connections. - */ - public void sendConnectionHeader() throws IOException { - frameWriter.connectionHeader(); - frameWriter.settings(new Settings()); - } - - /** - * Reads a connection header if the current variant requires it. This should - * be called after {@link Builder#build} for all new connections. - */ - public void readConnectionHeader() throws IOException { - frameReader.readConnectionHeader(); - } - - public static class Builder { - private String hostName; - private InputStream in; - private OutputStream out; - private IncomingStreamHandler handler = IncomingStreamHandler.REFUSE_INCOMING_STREAMS; - private Variant variant = Variant.SPDY3; - private boolean client; - - public Builder(boolean client, Socket socket) throws IOException { - this("", client, socket.getInputStream(), socket.getOutputStream()); - } - - public Builder(boolean client, InputStream in, OutputStream out) { - this("", client, in, out); - } - - /** - * @param client true if this peer initiated the connection; false if - * this peer accepted the connection. - */ - public Builder(String hostName, boolean client, Socket socket) throws IOException { - this(hostName, client, socket.getInputStream(), socket.getOutputStream()); - } - - /** - * @param client true if this peer initiated the connection; false if this - * peer accepted the connection. - */ - public Builder(String hostName, boolean client, InputStream in, OutputStream out) { - this.hostName = hostName; - this.client = client; - this.in = in; - this.out = out; - } - - public Builder handler(IncomingStreamHandler handler) { - this.handler = handler; - return this; - } - - public Builder spdy3() { - this.variant = Variant.SPDY3; - return this; - } - - public Builder http20Draft06() { - this.variant = Variant.HTTP_20_DRAFT_06; - return this; - } - - public SpdyConnection build() { - return new SpdyConnection(this); - } - } - - private class Reader implements Runnable, FrameReader.Handler { - @Override public void run() { - ErrorCode connectionErrorCode = ErrorCode.INTERNAL_ERROR; - ErrorCode streamErrorCode = ErrorCode.INTERNAL_ERROR; - try { - while (frameReader.nextFrame(this)) { - } - connectionErrorCode = ErrorCode.NO_ERROR; - streamErrorCode = ErrorCode.CANCEL; - } catch (IOException e) { - connectionErrorCode = ErrorCode.PROTOCOL_ERROR; - streamErrorCode = ErrorCode.PROTOCOL_ERROR; - } finally { - try { - close(connectionErrorCode, streamErrorCode); - } catch (IOException ignored) { - } - } - } - - @Override public void data(boolean inFinished, int streamId, InputStream in, int length) - throws IOException { - SpdyStream dataStream = getStream(streamId); - if (dataStream == null) { - writeSynResetLater(streamId, ErrorCode.INVALID_STREAM); - Util.skipByReading(in, length); - return; - } - dataStream.receiveData(in, length); - if (inFinished) { - dataStream.receiveFin(); - } - } - - @Override public void headers(boolean outFinished, boolean inFinished, int streamId, - int associatedStreamId, int priority, List nameValueBlock, - HeadersMode headersMode) { - SpdyStream stream; - synchronized (SpdyConnection.this) { - // If we're shutdown, don't bother with this stream. - if (shutdown) return; - - stream = getStream(streamId); - - if (stream == null) { - // The headers claim to be for an existing stream, but we don't have one. - if (headersMode.failIfStreamAbsent()) { - writeSynResetLater(streamId, ErrorCode.INVALID_STREAM); - return; - } - - // If the stream ID is less than the last created ID, assume it's already closed. - if (streamId <= lastGoodStreamId) return; - - // If the stream ID is in the client's namespace, assume it's already closed. - if (streamId % 2 == nextStreamId % 2) return; - - // Create a stream. - final SpdyStream newStream = new SpdyStream(streamId, SpdyConnection.this, outFinished, - inFinished, priority, nameValueBlock, settings); - lastGoodStreamId = streamId; - streams.put(streamId, newStream); - executor.submit(new NamedRunnable("OkHttp Callback %s stream %d", hostName, streamId) { - @Override public void execute() { - try { - handler.receive(newStream); - } catch (IOException e) { - throw new RuntimeException(e); - } - } - }); - return; - } - } - - // The headers claim to be for a new stream, but we already have one. - if (headersMode.failIfStreamPresent()) { - stream.closeLater(ErrorCode.PROTOCOL_ERROR); - removeStream(streamId); - return; - } - - // Update an existing stream. - stream.receiveHeaders(nameValueBlock, headersMode); - if (inFinished) stream.receiveFin(); - } - - @Override public void rstStream(int streamId, ErrorCode errorCode) { - SpdyStream rstStream = removeStream(streamId); - if (rstStream != null) { - rstStream.receiveRstStream(errorCode); - } - } - - @Override public void settings(boolean clearPrevious, Settings newSettings) { - SpdyStream[] streamsToNotify = null; - synchronized (SpdyConnection.this) { - if (settings == null || clearPrevious) { - settings = newSettings; - } else { - settings.merge(newSettings); - } - if (!streams.isEmpty()) { - streamsToNotify = streams.values().toArray(new SpdyStream[streams.size()]); - } - } - if (streamsToNotify != null) { - for (SpdyStream stream : streamsToNotify) { - // The synchronization here is ugly. We need to synchronize on 'this' to guard - // reads to 'settings'. We synchronize on 'stream' to guard the state change. - // And we need to acquire the 'stream' lock first, since that may block. - // TODO: this can block the reader thread until a write completes. That's bad! - synchronized (stream) { - synchronized (SpdyConnection.this) { - stream.receiveSettings(settings); - } - } - } - } - } - - @Override public void noop() { - } - - @Override public void ping(boolean reply, int payload1, int payload2) { - if (reply) { - Ping ping = removePing(payload1); - if (ping != null) { - ping.receive(); - } - } else { - // Send a reply to a client ping if this is a server and vice versa. - writePingLater(true, payload1, payload2, null); - } - } - - @Override public void goAway(int lastGoodStreamId, ErrorCode errorCode) { - synchronized (SpdyConnection.this) { - shutdown = true; - - // Fail all streams created after the last good stream ID. - for (Iterator> i = streams.entrySet().iterator(); - i.hasNext(); ) { - Map.Entry entry = i.next(); - int streamId = entry.getKey(); - if (streamId > lastGoodStreamId && entry.getValue().isLocallyInitiated()) { - entry.getValue().receiveRstStream(ErrorCode.REFUSED_STREAM); - i.remove(); - } - } - } - } - - @Override public void windowUpdate(int streamId, int deltaWindowSize, boolean endFlowControl) { - if (streamId == 0) { - // TODO: honor whole-stream flow control - return; - } - - // TODO: honor endFlowControl - SpdyStream stream = getStream(streamId); - if (stream != null) { - stream.receiveWindowUpdate(deltaWindowSize); - } - } - - @Override public void priority(int streamId, int priority) { - // TODO: honor priority. - } - } -} diff --git a/mobile/CordovaLib/src/com/squareup/okhttp/internal/spdy/SpdyStream.java b/mobile/CordovaLib/src/com/squareup/okhttp/internal/spdy/SpdyStream.java deleted file mode 100755 index a3ab3a4460d..00000000000 --- a/mobile/CordovaLib/src/com/squareup/okhttp/internal/spdy/SpdyStream.java +++ /dev/null @@ -1,684 +0,0 @@ -/* - * Copyright (C) 2011 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package com.squareup.okhttp.internal.spdy; - -import com.squareup.okhttp.internal.Util; -import java.io.IOException; -import java.io.InputStream; -import java.io.InterruptedIOException; -import java.io.OutputStream; -import java.net.SocketTimeoutException; -import java.util.ArrayList; -import java.util.List; - -import static com.squareup.okhttp.internal.Util.checkOffsetAndCount; - -/** A logical bidirectional stream. */ -public final class SpdyStream { - - // Internal state is guarded by this. No long-running or potentially - // blocking operations are performed while the lock is held. - - /** - * The number of unacknowledged bytes at which the input stream will send - * the peer a {@code WINDOW_UPDATE} frame. Must be less than this client's - * window size, otherwise the remote peer will stop sending data on this - * stream. (Chrome 25 uses 5 MiB.) - */ - public static final int WINDOW_UPDATE_THRESHOLD = Settings.DEFAULT_INITIAL_WINDOW_SIZE / 2; - - private final int id; - private final SpdyConnection connection; - private final int priority; - private long readTimeoutMillis = 0; - private int writeWindowSize; - - /** Headers sent by the stream initiator. Immutable and non null. */ - private final List requestHeaders; - - /** Headers sent in the stream reply. Null if reply is either not sent or not sent yet. */ - private List responseHeaders; - - private final SpdyDataInputStream in = new SpdyDataInputStream(); - private final SpdyDataOutputStream out = new SpdyDataOutputStream(); - - /** - * The reason why this stream was abnormally closed. If there are multiple - * reasons to abnormally close this stream (such as both peers closing it - * near-simultaneously) then this is the first reason known to this peer. - */ - private ErrorCode errorCode = null; - - SpdyStream(int id, SpdyConnection connection, boolean outFinished, boolean inFinished, - int priority, List requestHeaders, Settings settings) { - if (connection == null) throw new NullPointerException("connection == null"); - if (requestHeaders == null) throw new NullPointerException("requestHeaders == null"); - this.id = id; - this.connection = connection; - this.in.finished = inFinished; - this.out.finished = outFinished; - this.priority = priority; - this.requestHeaders = requestHeaders; - - setSettings(settings); - } - - /** - * Returns true if this stream is open. A stream is open until either: - *

    - *
  • A {@code SYN_RESET} frame abnormally terminates the stream. - *
  • Both input and output streams have transmitted all data and - * headers. - *
- * Note that the input stream may continue to yield data even after a stream - * reports itself as not open. This is because input data is buffered. - */ - public synchronized boolean isOpen() { - if (errorCode != null) { - return false; - } - if ((in.finished || in.closed) && (out.finished || out.closed) && responseHeaders != null) { - return false; - } - return true; - } - - /** Returns true if this stream was created by this peer. */ - public boolean isLocallyInitiated() { - boolean streamIsClient = (id % 2 == 1); - return connection.client == streamIsClient; - } - - public SpdyConnection getConnection() { - return connection; - } - - public List getRequestHeaders() { - return requestHeaders; - } - - /** - * Returns the stream's response headers, blocking if necessary if they - * have not been received yet. - */ - public synchronized List getResponseHeaders() throws IOException { - long remaining = 0; - long start = 0; - if (readTimeoutMillis != 0) { - start = (System.nanoTime() / 1000000); - remaining = readTimeoutMillis; - } - try { - while (responseHeaders == null && errorCode == null) { - if (readTimeoutMillis == 0) { // No timeout configured. - wait(); - } else if (remaining > 0) { - wait(remaining); - remaining = start + readTimeoutMillis - (System.nanoTime() / 1000000); - } else { - throw new SocketTimeoutException("Read response header timeout. readTimeoutMillis: " - + readTimeoutMillis); - } - } - if (responseHeaders != null) { - return responseHeaders; - } - throw new IOException("stream was reset: " + errorCode); - } catch (InterruptedException e) { - InterruptedIOException rethrow = new InterruptedIOException(); - rethrow.initCause(e); - throw rethrow; - } - } - - /** - * Returns the reason why this stream was closed, or null if it closed - * normally or has not yet been closed. - */ - public synchronized ErrorCode getErrorCode() { - return errorCode; - } - - /** - * Sends a reply to an incoming stream. - * - * @param out true to create an output stream that we can use to send data - * to the remote peer. Corresponds to {@code FLAG_FIN}. - */ - public void reply(List responseHeaders, boolean out) throws IOException { - assert (!Thread.holdsLock(SpdyStream.this)); - boolean outFinished = false; - synchronized (this) { - if (responseHeaders == null) { - throw new NullPointerException("responseHeaders == null"); - } - if (isLocallyInitiated()) { - throw new IllegalStateException("cannot reply to a locally initiated stream"); - } - if (this.responseHeaders != null) { - throw new IllegalStateException("reply already sent"); - } - this.responseHeaders = responseHeaders; - if (!out) { - this.out.finished = true; - outFinished = true; - } - } - connection.writeSynReply(id, outFinished, responseHeaders); - } - - /** - * Sets the maximum time to wait on input stream reads before failing with a - * {@code SocketTimeoutException}, or {@code 0} to wait indefinitely. - */ - public void setReadTimeout(long readTimeoutMillis) { - this.readTimeoutMillis = readTimeoutMillis; - } - - public long getReadTimeoutMillis() { - return readTimeoutMillis; - } - - /** Returns an input stream that can be used to read data from the peer. */ - public InputStream getInputStream() { - return in; - } - - /** - * Returns an output stream that can be used to write data to the peer. - * - * @throws IllegalStateException if this stream was initiated by the peer - * and a {@link #reply} has not yet been sent. - */ - public OutputStream getOutputStream() { - synchronized (this) { - if (responseHeaders == null && !isLocallyInitiated()) { - throw new IllegalStateException("reply before requesting the output stream"); - } - } - return out; - } - - /** - * Abnormally terminate this stream. This blocks until the {@code RST_STREAM} - * frame has been transmitted. - */ - public void close(ErrorCode rstStatusCode) throws IOException { - if (!closeInternal(rstStatusCode)) { - return; // Already closed. - } - connection.writeSynReset(id, rstStatusCode); - } - - /** - * Abnormally terminate this stream. This enqueues a {@code RST_STREAM} - * frame and returns immediately. - */ - public void closeLater(ErrorCode errorCode) { - if (!closeInternal(errorCode)) { - return; // Already closed. - } - connection.writeSynResetLater(id, errorCode); - } - - /** Returns true if this stream was closed. */ - private boolean closeInternal(ErrorCode errorCode) { - assert (!Thread.holdsLock(this)); - synchronized (this) { - if (this.errorCode != null) { - return false; - } - if (in.finished && out.finished) { - return false; - } - this.errorCode = errorCode; - notifyAll(); - } - connection.removeStream(id); - return true; - } - - void receiveHeaders(List headers, HeadersMode headersMode) { - assert (!Thread.holdsLock(SpdyStream.this)); - ErrorCode errorCode = null; - boolean open = true; - synchronized (this) { - if (responseHeaders == null) { - if (headersMode.failIfHeadersAbsent()) { - errorCode = ErrorCode.PROTOCOL_ERROR; - } else { - responseHeaders = headers; - open = isOpen(); - notifyAll(); - } - } else { - if (headersMode.failIfHeadersPresent()) { - errorCode = ErrorCode.STREAM_IN_USE; - } else { - List newHeaders = new ArrayList(); - newHeaders.addAll(responseHeaders); - newHeaders.addAll(headers); - this.responseHeaders = newHeaders; - } - } - } - if (errorCode != null) { - closeLater(errorCode); - } else if (!open) { - connection.removeStream(id); - } - } - - void receiveData(InputStream in, int length) throws IOException { - assert (!Thread.holdsLock(SpdyStream.this)); - this.in.receive(in, length); - } - - void receiveFin() { - assert (!Thread.holdsLock(SpdyStream.this)); - boolean open; - synchronized (this) { - this.in.finished = true; - open = isOpen(); - notifyAll(); - } - if (!open) { - connection.removeStream(id); - } - } - - synchronized void receiveRstStream(ErrorCode errorCode) { - if (this.errorCode == null) { - this.errorCode = errorCode; - notifyAll(); - } - } - - private void setSettings(Settings settings) { - // TODO: For HTTP/2.0, also adjust the stream flow control window size - // by the difference between the new value and the old value. - assert (Thread.holdsLock(connection)); // Because 'settings' is guarded by 'connection'. - this.writeWindowSize = settings != null - ? settings.getInitialWindowSize(Settings.DEFAULT_INITIAL_WINDOW_SIZE) - : Settings.DEFAULT_INITIAL_WINDOW_SIZE; - } - - void receiveSettings(Settings settings) { - assert (Thread.holdsLock(this)); - setSettings(settings); - notifyAll(); - } - - synchronized void receiveWindowUpdate(int deltaWindowSize) { - out.unacknowledgedBytes -= deltaWindowSize; - notifyAll(); - } - - int getPriority() { - return priority; - } - - /** - * An input stream that reads the incoming data frames of a stream. Although - * this class uses synchronization to safely receive incoming data frames, - * it is not intended for use by multiple readers. - */ - private final class SpdyDataInputStream extends InputStream { - // Store incoming data bytes in a circular buffer. When the buffer is - // empty, pos == -1. Otherwise pos is the first byte to read and limit - // is the first byte to write. - // - // { - - - X X X X - - - } - // ^ ^ - // pos limit - // - // { X X X - - - - X X X } - // ^ ^ - // limit pos - - private final byte[] buffer = new byte[Settings.DEFAULT_INITIAL_WINDOW_SIZE]; - - /** the next byte to be read, or -1 if the buffer is empty. Never buffer.length */ - private int pos = -1; - - /** the last byte to be read. Never buffer.length */ - private int limit; - - /** True if the caller has closed this stream. */ - private boolean closed; - - /** - * True if either side has cleanly shut down this stream. We will - * receive no more bytes beyond those already in the buffer. - */ - private boolean finished; - - /** - * The total number of bytes consumed by the application (with {@link - * #read}), but not yet acknowledged by sending a {@code WINDOW_UPDATE} - * frame. - */ - private int unacknowledgedBytes = 0; - - @Override public int available() throws IOException { - synchronized (SpdyStream.this) { - checkNotClosed(); - if (pos == -1) { - return 0; - } else if (limit > pos) { - return limit - pos; - } else { - return limit + (buffer.length - pos); - } - } - } - - @Override public int read() throws IOException { - return Util.readSingleByte(this); - } - - @Override public int read(byte[] b, int offset, int count) throws IOException { - synchronized (SpdyStream.this) { - checkOffsetAndCount(b.length, offset, count); - waitUntilReadable(); - checkNotClosed(); - - if (pos == -1) { - return -1; - } - - int copied = 0; - - // drain from [pos..buffer.length) - if (limit <= pos) { - int bytesToCopy = Math.min(count, buffer.length - pos); - System.arraycopy(buffer, pos, b, offset, bytesToCopy); - pos += bytesToCopy; - copied += bytesToCopy; - if (pos == buffer.length) { - pos = 0; - } - } - - // drain from [pos..limit) - if (copied < count) { - int bytesToCopy = Math.min(limit - pos, count - copied); - System.arraycopy(buffer, pos, b, offset + copied, bytesToCopy); - pos += bytesToCopy; - copied += bytesToCopy; - } - - // Flow control: notify the peer that we're ready for more data! - unacknowledgedBytes += copied; - if (unacknowledgedBytes >= WINDOW_UPDATE_THRESHOLD) { - connection.writeWindowUpdateLater(id, unacknowledgedBytes); - unacknowledgedBytes = 0; - } - - if (pos == limit) { - pos = -1; - limit = 0; - } - - return copied; - } - } - - /** - * Returns once the input stream is either readable or finished. Throws - * a {@link SocketTimeoutException} if the read timeout elapses before - * that happens. - */ - private void waitUntilReadable() throws IOException { - long start = 0; - long remaining = 0; - if (readTimeoutMillis != 0) { - start = (System.nanoTime() / 1000000); - remaining = readTimeoutMillis; - } - try { - while (pos == -1 && !finished && !closed && errorCode == null) { - if (readTimeoutMillis == 0) { - SpdyStream.this.wait(); - } else if (remaining > 0) { - SpdyStream.this.wait(remaining); - remaining = start + readTimeoutMillis - (System.nanoTime() / 1000000); - } else { - throw new SocketTimeoutException(); - } - } - } catch (InterruptedException e) { - throw new InterruptedIOException(); - } - } - - void receive(InputStream in, int byteCount) throws IOException { - assert (!Thread.holdsLock(SpdyStream.this)); - - if (byteCount == 0) { - return; - } - - int pos; - int limit; - int firstNewByte; - boolean finished; - boolean flowControlError; - synchronized (SpdyStream.this) { - finished = this.finished; - pos = this.pos; - firstNewByte = this.limit; - limit = this.limit; - flowControlError = byteCount > buffer.length - available(); - } - - // If the peer sends more data than we can handle, discard it and close the connection. - if (flowControlError) { - Util.skipByReading(in, byteCount); - closeLater(ErrorCode.FLOW_CONTROL_ERROR); - return; - } - - // Discard data received after the stream is finished. It's probably a benign race. - if (finished) { - Util.skipByReading(in, byteCount); - return; - } - - // Fill the buffer without holding any locks. First fill [limit..buffer.length) if that - // won't overwrite unread data. Then fill [limit..pos). We can't hold a lock, otherwise - // writes will be blocked until reads complete. - if (pos < limit) { - int firstCopyCount = Math.min(byteCount, buffer.length - limit); - Util.readFully(in, buffer, limit, firstCopyCount); - limit += firstCopyCount; - byteCount -= firstCopyCount; - if (limit == buffer.length) { - limit = 0; - } - } - if (byteCount > 0) { - Util.readFully(in, buffer, limit, byteCount); - limit += byteCount; - } - - synchronized (SpdyStream.this) { - // Update the new limit, and mark the position as readable if necessary. - this.limit = limit; - if (this.pos == -1) { - this.pos = firstNewByte; - SpdyStream.this.notifyAll(); - } - } - } - - @Override public void close() throws IOException { - synchronized (SpdyStream.this) { - closed = true; - SpdyStream.this.notifyAll(); - } - cancelStreamIfNecessary(); - } - - private void checkNotClosed() throws IOException { - if (closed) { - throw new IOException("stream closed"); - } - if (errorCode != null) { - throw new IOException("stream was reset: " + errorCode); - } - } - } - - private void cancelStreamIfNecessary() throws IOException { - assert (!Thread.holdsLock(SpdyStream.this)); - boolean open; - boolean cancel; - synchronized (this) { - cancel = !in.finished && in.closed && (out.finished || out.closed); - open = isOpen(); - } - if (cancel) { - // RST this stream to prevent additional data from being sent. This - // is safe because the input stream is closed (we won't use any - // further bytes) and the output stream is either finished or closed - // (so RSTing both streams doesn't cause harm). - SpdyStream.this.close(ErrorCode.CANCEL); - } else if (!open) { - connection.removeStream(id); - } - } - - /** - * An output stream that writes outgoing data frames of a stream. This class - * is not thread safe. - */ - private final class SpdyDataOutputStream extends OutputStream { - private final byte[] buffer = new byte[8192]; - private int pos = 0; - - /** True if the caller has closed this stream. */ - private boolean closed; - - /** - * True if either side has cleanly shut down this stream. We shall send - * no more bytes. - */ - private boolean finished; - - /** - * The total number of bytes written out to the peer, but not yet - * acknowledged with an incoming {@code WINDOW_UPDATE} frame. Writes - * block if they cause this to exceed the {@code WINDOW_SIZE}. - */ - private int unacknowledgedBytes = 0; - - @Override public void write(int b) throws IOException { - Util.writeSingleByte(this, b); - } - - @Override public void write(byte[] bytes, int offset, int count) throws IOException { - assert (!Thread.holdsLock(SpdyStream.this)); - checkOffsetAndCount(bytes.length, offset, count); - checkNotClosed(); - - while (count > 0) { - if (pos == buffer.length) { - writeFrame(false); - } - int bytesToCopy = Math.min(count, buffer.length - pos); - System.arraycopy(bytes, offset, buffer, pos, bytesToCopy); - pos += bytesToCopy; - offset += bytesToCopy; - count -= bytesToCopy; - } - } - - @Override public void flush() throws IOException { - assert (!Thread.holdsLock(SpdyStream.this)); - checkNotClosed(); - if (pos > 0) { - writeFrame(false); - connection.flush(); - } - } - - @Override public void close() throws IOException { - assert (!Thread.holdsLock(SpdyStream.this)); - synchronized (SpdyStream.this) { - if (closed) { - return; - } - closed = true; - } - if (!out.finished) { - writeFrame(true); - } - connection.flush(); - cancelStreamIfNecessary(); - } - - private void writeFrame(boolean outFinished) throws IOException { - assert (!Thread.holdsLock(SpdyStream.this)); - - int length = pos; - synchronized (SpdyStream.this) { - waitUntilWritable(length, outFinished); - unacknowledgedBytes += length; - } - connection.writeData(id, outFinished, buffer, 0, pos); - pos = 0; - } - - /** - * Returns once the peer is ready to receive {@code count} bytes. - * - * @throws IOException if the stream was finished or closed, or the - * thread was interrupted. - */ - private void waitUntilWritable(int count, boolean last) throws IOException { - try { - while (unacknowledgedBytes + count >= writeWindowSize) { - SpdyStream.this.wait(); // Wait until we receive a WINDOW_UPDATE. - - // The stream may have been closed or reset while we were waiting! - if (!last && closed) { - throw new IOException("stream closed"); - } else if (finished) { - throw new IOException("stream finished"); - } else if (errorCode != null) { - throw new IOException("stream was reset: " + errorCode); - } - } - } catch (InterruptedException e) { - throw new InterruptedIOException(); - } - } - - private void checkNotClosed() throws IOException { - synchronized (SpdyStream.this) { - if (closed) { - throw new IOException("stream closed"); - } else if (finished) { - throw new IOException("stream finished"); - } else if (errorCode != null) { - throw new IOException("stream was reset: " + errorCode); - } - } - } - } -} diff --git a/mobile/CordovaLib/src/com/squareup/okhttp/internal/spdy/Variant.java b/mobile/CordovaLib/src/com/squareup/okhttp/internal/spdy/Variant.java deleted file mode 100755 index 8f48bcd2442..00000000000 --- a/mobile/CordovaLib/src/com/squareup/okhttp/internal/spdy/Variant.java +++ /dev/null @@ -1,37 +0,0 @@ -/* - * Copyright (C) 2013 Square, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package com.squareup.okhttp.internal.spdy; - -import java.io.InputStream; -import java.io.OutputStream; - -/** A version and dialect of the framed socket protocol. */ -interface Variant { - Variant SPDY3 = new Spdy3(); - Variant HTTP_20_DRAFT_06 = new Http20Draft06(); - - /** - * @param client true if this is the HTTP client's reader, reading frames from - * a peer SPDY or HTTP/2 server. - */ - FrameReader newReader(InputStream in, boolean client); - - /** - * @param client true if this is the HTTP client's writer, writing frames to a - * peer SPDY or HTTP/2 server. - */ - FrameWriter newWriter(OutputStream out, boolean client); -} diff --git a/mobile/CordovaLib/src/com/squareup/okhttp/internal/tls/DistinguishedNameParser.java b/mobile/CordovaLib/src/com/squareup/okhttp/internal/tls/DistinguishedNameParser.java deleted file mode 100755 index e0aef149160..00000000000 --- a/mobile/CordovaLib/src/com/squareup/okhttp/internal/tls/DistinguishedNameParser.java +++ /dev/null @@ -1,407 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package com.squareup.okhttp.internal.tls; - -import javax.security.auth.x500.X500Principal; - -/** - * A distinguished name (DN) parser. This parser only supports extracting a - * string value from a DN. It doesn't support values in the hex-string style. - */ -final class DistinguishedNameParser { - private final String dn; - private final int length; - private int pos; - private int beg; - private int end; - - /** Temporary variable to store positions of the currently parsed item. */ - private int cur; - - /** Distinguished name characters. */ - private char[] chars; - - public DistinguishedNameParser(X500Principal principal) { - // RFC2253 is used to ensure we get attributes in the reverse - // order of the underlying ASN.1 encoding, so that the most - // significant values of repeated attributes occur first. - this.dn = principal.getName(X500Principal.RFC2253); - this.length = this.dn.length(); - } - - // gets next attribute type: (ALPHA 1*keychar) / oid - private String nextAT() { - // skip preceding space chars, they can present after - // comma or semicolon (compatibility with RFC 1779) - for (; pos < length && chars[pos] == ' '; pos++) { - } - if (pos == length) { - return null; // reached the end of DN - } - - // mark the beginning of attribute type - beg = pos; - - // attribute type chars - pos++; - for (; pos < length && chars[pos] != '=' && chars[pos] != ' '; pos++) { - // we don't follow exact BNF syntax here: - // accept any char except space and '=' - } - if (pos >= length) { - throw new IllegalStateException("Unexpected end of DN: " + dn); - } - - // mark the end of attribute type - end = pos; - - // skip trailing space chars between attribute type and '=' - // (compatibility with RFC 1779) - if (chars[pos] == ' ') { - for (; pos < length && chars[pos] != '=' && chars[pos] == ' '; pos++) { - } - - if (chars[pos] != '=' || pos == length) { - throw new IllegalStateException("Unexpected end of DN: " + dn); - } - } - - pos++; //skip '=' char - - // skip space chars between '=' and attribute value - // (compatibility with RFC 1779) - for (; pos < length && chars[pos] == ' '; pos++) { - } - - // in case of oid attribute type skip its prefix: "oid." or "OID." - // (compatibility with RFC 1779) - if ((end - beg > 4) && (chars[beg + 3] == '.') - && (chars[beg] == 'O' || chars[beg] == 'o') - && (chars[beg + 1] == 'I' || chars[beg + 1] == 'i') - && (chars[beg + 2] == 'D' || chars[beg + 2] == 'd')) { - beg += 4; - } - - return new String(chars, beg, end - beg); - } - - // gets quoted attribute value: QUOTATION *( quotechar / pair ) QUOTATION - private String quotedAV() { - pos++; - beg = pos; - end = beg; - while (true) { - - if (pos == length) { - throw new IllegalStateException("Unexpected end of DN: " + dn); - } - - if (chars[pos] == '"') { - // enclosing quotation was found - pos++; - break; - } else if (chars[pos] == '\\') { - chars[end] = getEscaped(); - } else { - // shift char: required for string with escaped chars - chars[end] = chars[pos]; - } - pos++; - end++; - } - - // skip trailing space chars before comma or semicolon. - // (compatibility with RFC 1779) - for (; pos < length && chars[pos] == ' '; pos++) { - } - - return new String(chars, beg, end - beg); - } - - // gets hex string attribute value: "#" hexstring - private String hexAV() { - if (pos + 4 >= length) { - // encoded byte array must be not less then 4 c - throw new IllegalStateException("Unexpected end of DN: " + dn); - } - - beg = pos; // store '#' position - pos++; - while (true) { - - // check for end of attribute value - // looks for space and component separators - if (pos == length || chars[pos] == '+' || chars[pos] == ',' - || chars[pos] == ';') { - end = pos; - break; - } - - if (chars[pos] == ' ') { - end = pos; - pos++; - // skip trailing space chars before comma or semicolon. - // (compatibility with RFC 1779) - for (; pos < length && chars[pos] == ' '; pos++) { - } - break; - } else if (chars[pos] >= 'A' && chars[pos] <= 'F') { - chars[pos] += 32; //to low case - } - - pos++; - } - - // verify length of hex string - // encoded byte array must be not less then 4 and must be even number - int hexLen = end - beg; // skip first '#' char - if (hexLen < 5 || (hexLen & 1) == 0) { - throw new IllegalStateException("Unexpected end of DN: " + dn); - } - - // get byte encoding from string representation - byte[] encoded = new byte[hexLen / 2]; - for (int i = 0, p = beg + 1; i < encoded.length; p += 2, i++) { - encoded[i] = (byte) getByte(p); - } - - return new String(chars, beg, hexLen); - } - - // gets string attribute value: *( stringchar / pair ) - private String escapedAV() { - beg = pos; - end = pos; - while (true) { - if (pos >= length) { - // the end of DN has been found - return new String(chars, beg, end - beg); - } - - switch (chars[pos]) { - case '+': - case ',': - case ';': - // separator char has been found - return new String(chars, beg, end - beg); - case '\\': - // escaped char - chars[end++] = getEscaped(); - pos++; - break; - case ' ': - // need to figure out whether space defines - // the end of attribute value or not - cur = end; - - pos++; - chars[end++] = ' '; - - for (; pos < length && chars[pos] == ' '; pos++) { - chars[end++] = ' '; - } - if (pos == length || chars[pos] == ',' || chars[pos] == '+' - || chars[pos] == ';') { - // separator char or the end of DN has been found - return new String(chars, beg, cur - beg); - } - break; - default: - chars[end++] = chars[pos]; - pos++; - } - } - } - - // returns escaped char - private char getEscaped() { - pos++; - if (pos == length) { - throw new IllegalStateException("Unexpected end of DN: " + dn); - } - - switch (chars[pos]) { - case '"': - case '\\': - case ',': - case '=': - case '+': - case '<': - case '>': - case '#': - case ';': - case ' ': - case '*': - case '%': - case '_': - //FIXME: escaping is allowed only for leading or trailing space char - return chars[pos]; - default: - // RFC doesn't explicitly say that escaped hex pair is - // interpreted as UTF-8 char. It only contains an example of such DN. - return getUTF8(); - } - } - - // decodes UTF-8 char - // see http://www.unicode.org for UTF-8 bit distribution table - private char getUTF8() { - int res = getByte(pos); - pos++; //FIXME tmp - - if (res < 128) { // one byte: 0-7F - return (char) res; - } else if (res >= 192 && res <= 247) { - - int count; - if (res <= 223) { // two bytes: C0-DF - count = 1; - res = res & 0x1F; - } else if (res <= 239) { // three bytes: E0-EF - count = 2; - res = res & 0x0F; - } else { // four bytes: F0-F7 - count = 3; - res = res & 0x07; - } - - int b; - for (int i = 0; i < count; i++) { - pos++; - if (pos == length || chars[pos] != '\\') { - return 0x3F; //FIXME failed to decode UTF-8 char - return '?' - } - pos++; - - b = getByte(pos); - pos++; //FIXME tmp - if ((b & 0xC0) != 0x80) { - return 0x3F; //FIXME failed to decode UTF-8 char - return '?' - } - - res = (res << 6) + (b & 0x3F); - } - return (char) res; - } else { - return 0x3F; //FIXME failed to decode UTF-8 char - return '?' - } - } - - // Returns byte representation of a char pair - // The char pair is composed of DN char in - // specified 'position' and the next char - // According to BNF syntax: - // hexchar = DIGIT / "A" / "B" / "C" / "D" / "E" / "F" - // / "a" / "b" / "c" / "d" / "e" / "f" - private int getByte(int position) { - if (position + 1 >= length) { - throw new IllegalStateException("Malformed DN: " + dn); - } - - int b1, b2; - - b1 = chars[position]; - if (b1 >= '0' && b1 <= '9') { - b1 = b1 - '0'; - } else if (b1 >= 'a' && b1 <= 'f') { - b1 = b1 - 87; // 87 = 'a' - 10 - } else if (b1 >= 'A' && b1 <= 'F') { - b1 = b1 - 55; // 55 = 'A' - 10 - } else { - throw new IllegalStateException("Malformed DN: " + dn); - } - - b2 = chars[position + 1]; - if (b2 >= '0' && b2 <= '9') { - b2 = b2 - '0'; - } else if (b2 >= 'a' && b2 <= 'f') { - b2 = b2 - 87; // 87 = 'a' - 10 - } else if (b2 >= 'A' && b2 <= 'F') { - b2 = b2 - 55; // 55 = 'A' - 10 - } else { - throw new IllegalStateException("Malformed DN: " + dn); - } - - return (b1 << 4) + b2; - } - - /** - * Parses the DN and returns the most significant attribute value - * for an attribute type, or null if none found. - * - * @param attributeType attribute type to look for (e.g. "ca") - */ - public String findMostSpecific(String attributeType) { - // Initialize internal state. - pos = 0; - beg = 0; - end = 0; - cur = 0; - chars = dn.toCharArray(); - - String attType = nextAT(); - if (attType == null) { - return null; - } - while (true) { - String attValue = ""; - - if (pos == length) { - return null; - } - - switch (chars[pos]) { - case '"': - attValue = quotedAV(); - break; - case '#': - attValue = hexAV(); - break; - case '+': - case ',': - case ';': // compatibility with RFC 1779: semicolon can separate RDNs - //empty attribute value - break; - default: - attValue = escapedAV(); - } - - // Values are ordered from most specific to least specific - // due to the RFC2253 formatting. So take the first match - // we see. - if (attributeType.equalsIgnoreCase(attType)) { - return attValue; - } - - if (pos >= length) { - return null; - } - - if (chars[pos] == ',' || chars[pos] == ';') { - } else if (chars[pos] != '+') { - throw new IllegalStateException("Malformed DN: " + dn); - } - - pos++; - attType = nextAT(); - if (attType == null) { - throw new IllegalStateException("Malformed DN: " + dn); - } - } - } -} diff --git a/mobile/CordovaLib/src/com/squareup/okhttp/internal/tls/OkHostnameVerifier.java b/mobile/CordovaLib/src/com/squareup/okhttp/internal/tls/OkHostnameVerifier.java deleted file mode 100755 index a08773f6f67..00000000000 --- a/mobile/CordovaLib/src/com/squareup/okhttp/internal/tls/OkHostnameVerifier.java +++ /dev/null @@ -1,194 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package com.squareup.okhttp.internal.tls; - -import java.security.cert.Certificate; -import java.security.cert.CertificateParsingException; -import java.security.cert.X509Certificate; -import java.util.ArrayList; -import java.util.Collection; -import java.util.Collections; -import java.util.List; -import java.util.Locale; -import java.util.regex.Pattern; -import javax.net.ssl.HostnameVerifier; -import javax.net.ssl.SSLException; -import javax.net.ssl.SSLSession; -import javax.security.auth.x500.X500Principal; - -/** - * A HostnameVerifier consistent with RFC 2818. - */ -public final class OkHostnameVerifier implements HostnameVerifier { - public static final OkHostnameVerifier INSTANCE = new OkHostnameVerifier(); - - /** - * Quick and dirty pattern to differentiate IP addresses from hostnames. This - * is an approximation of Android's private InetAddress#isNumeric API. - * - *

This matches IPv6 addresses as a hex string containing at least one - * colon, and possibly including dots after the first colon. It matches IPv4 - * addresses as strings containing only decimal digits and dots. This pattern - * matches strings like "a:.23" and "54" that are neither IP addresses nor - * hostnames; they will be verified as IP addresses (which is a more strict - * verification). - */ - private static final Pattern VERIFY_AS_IP_ADDRESS = Pattern.compile( - "([0-9a-fA-F]*:[0-9a-fA-F:.]*)|([\\d.]+)"); - - private static final int ALT_DNS_NAME = 2; - private static final int ALT_IPA_NAME = 7; - - private OkHostnameVerifier() { - } - - public boolean verify(String host, SSLSession session) { - try { - Certificate[] certificates = session.getPeerCertificates(); - return verify(host, (X509Certificate) certificates[0]); - } catch (SSLException e) { - return false; - } - } - - public boolean verify(String host, X509Certificate certificate) { - return verifyAsIpAddress(host) - ? verifyIpAddress(host, certificate) - : verifyHostName(host, certificate); - } - - static boolean verifyAsIpAddress(String host) { - return VERIFY_AS_IP_ADDRESS.matcher(host).matches(); - } - - /** - * Returns true if {@code certificate} matches {@code ipAddress}. - */ - private boolean verifyIpAddress(String ipAddress, X509Certificate certificate) { - for (String altName : getSubjectAltNames(certificate, ALT_IPA_NAME)) { - if (ipAddress.equalsIgnoreCase(altName)) { - return true; - } - } - return false; - } - - /** - * Returns true if {@code certificate} matches {@code hostName}. - */ - private boolean verifyHostName(String hostName, X509Certificate certificate) { - hostName = hostName.toLowerCase(Locale.US); - boolean hasDns = false; - for (String altName : getSubjectAltNames(certificate, ALT_DNS_NAME)) { - hasDns = true; - if (verifyHostName(hostName, altName)) { - return true; - } - } - - if (!hasDns) { - X500Principal principal = certificate.getSubjectX500Principal(); - // RFC 2818 advises using the most specific name for matching. - String cn = new DistinguishedNameParser(principal).findMostSpecific("cn"); - if (cn != null) { - return verifyHostName(hostName, cn); - } - } - - return false; - } - - private List getSubjectAltNames(X509Certificate certificate, int type) { - List result = new ArrayList(); - try { - Collection subjectAltNames = certificate.getSubjectAlternativeNames(); - if (subjectAltNames == null) { - return Collections.emptyList(); - } - for (Object subjectAltName : subjectAltNames) { - List entry = (List) subjectAltName; - if (entry == null || entry.size() < 2) { - continue; - } - Integer altNameType = (Integer) entry.get(0); - if (altNameType == null) { - continue; - } - if (altNameType == type) { - String altName = (String) entry.get(1); - if (altName != null) { - result.add(altName); - } - } - } - return result; - } catch (CertificateParsingException e) { - return Collections.emptyList(); - } - } - - /** - * Returns true if {@code hostName} matches the name or pattern {@code cn}. - * - * @param hostName lowercase host name. - * @param cn certificate host name. May include wildcards like - * {@code *.android.com}. - */ - public boolean verifyHostName(String hostName, String cn) { - // Check length == 0 instead of .isEmpty() to support Java 5. - if (hostName == null || hostName.length() == 0 || cn == null || cn.length() == 0) { - return false; - } - - cn = cn.toLowerCase(Locale.US); - - if (!cn.contains("*")) { - return hostName.equals(cn); - } - - if (cn.startsWith("*.") && hostName.regionMatches(0, cn, 2, cn.length() - 2)) { - return true; // "*.foo.com" matches "foo.com" - } - - int asterisk = cn.indexOf('*'); - int dot = cn.indexOf('.'); - if (asterisk > dot) { - return false; // malformed; wildcard must be in the first part of the cn - } - - if (!hostName.regionMatches(0, cn, 0, asterisk)) { - return false; // prefix before '*' doesn't match - } - - int suffixLength = cn.length() - (asterisk + 1); - int suffixStart = hostName.length() - suffixLength; - if (hostName.indexOf('.', asterisk) < suffixStart) { - // TODO: remove workaround for *.clients.google.com http://b/5426333 - if (!hostName.endsWith(".clients.google.com")) { - return false; // wildcard '*' can't match a '.' - } - } - - if (!hostName.regionMatches(suffixStart, cn, asterisk + 1, suffixLength)) { - return false; // suffix after '*' doesn't match - } - - return true; - } -} diff --git a/mobile/CordovaLib/src/org/apache/cordova/App.java b/mobile/CordovaLib/src/org/apache/cordova/App.java deleted file mode 100755 index 6c779b28f2b..00000000000 --- a/mobile/CordovaLib/src/org/apache/cordova/App.java +++ /dev/null @@ -1,295 +0,0 @@ -/* - Licensed to the Apache Software Foundation (ASF) under one - or more contributor license agreements. See the NOTICE file - distributed with this work for additional information - regarding copyright ownership. The ASF licenses this file - to you under the Apache License, Version 2.0 (the - "License"); you may not use this file except in compliance - with the License. You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, - software distributed under the License is distributed on an - "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - KIND, either express or implied. See the License for the - specific language governing permissions and limitations - under the License. -*/ - -package org.apache.cordova; - -import org.apache.cordova.CallbackContext; -import org.apache.cordova.CordovaPlugin; -import org.apache.cordova.LOG; -import org.apache.cordova.PluginResult; -import org.json.JSONArray; -import org.json.JSONException; -import org.json.JSONObject; - -import android.content.BroadcastReceiver; -import android.content.Context; -import android.content.Intent; -import android.content.IntentFilter; -import android.telephony.TelephonyManager; - -import java.util.HashMap; - -/** - * This class exposes methods in Cordova that can be called from JavaScript. - */ -public class App extends CordovaPlugin { - - protected static final String TAG = "CordovaApp"; - private BroadcastReceiver telephonyReceiver; - - /** - * Sets the context of the Command. This can then be used to do things like - * get file paths associated with the Activity. - * - * @param cordova The context of the main Activity. - * @param webView The CordovaWebView Cordova is running in. - */ - public void initialize(CordovaInterface cordova, CordovaWebView webView) { - super.initialize(cordova, webView); - this.initTelephonyReceiver(); - } - - - /** - * Executes the request and returns PluginResult. - * - * @param action The action to execute. - * @param args JSONArry of arguments for the plugin. - * @param callbackContext The callback context from which we were invoked. - * @return A PluginResult object with a status and message. - */ - public boolean execute(String action, JSONArray args, CallbackContext callbackContext) throws JSONException { - PluginResult.Status status = PluginResult.Status.OK; - String result = ""; - - try { - if (action.equals("clearCache")) { - this.clearCache(); - } - else if (action.equals("show")) { - // This gets called from JavaScript onCordovaReady to show the webview. - // I recommend we change the name of the Message as spinner/stop is not - // indicative of what this actually does (shows the webview). - cordova.getActivity().runOnUiThread(new Runnable() { - public void run() { - webView.postMessage("spinner", "stop"); - } - }); - } - else if (action.equals("loadUrl")) { - this.loadUrl(args.getString(0), args.optJSONObject(1)); - } - else if (action.equals("cancelLoadUrl")) { - //this.cancelLoadUrl(); - } - else if (action.equals("clearHistory")) { - this.clearHistory(); - } - else if (action.equals("backHistory")) { - this.backHistory(); - } - else if (action.equals("overrideButton")) { - this.overrideButton(args.getString(0), args.getBoolean(1)); - } - else if (action.equals("overrideBackbutton")) { - this.overrideBackbutton(args.getBoolean(0)); - } - else if (action.equals("exitApp")) { - this.exitApp(); - } - callbackContext.sendPluginResult(new PluginResult(status, result)); - return true; - } catch (JSONException e) { - callbackContext.sendPluginResult(new PluginResult(PluginResult.Status.JSON_EXCEPTION)); - return false; - } - } - - //-------------------------------------------------------------------------- - // LOCAL METHODS - //-------------------------------------------------------------------------- - - /** - * Clear the resource cache. - */ - public void clearCache() { - cordova.getActivity().runOnUiThread(new Runnable() { - public void run() { - webView.clearCache(true); - } - }); - } - - /** - * Load the url into the webview. - * - * @param url - * @param props Properties that can be passed in to the Cordova activity (i.e. loadingDialog, wait, ...) - * @throws JSONException - */ - public void loadUrl(String url, JSONObject props) throws JSONException { - LOG.d("App", "App.loadUrl("+url+","+props+")"); - int wait = 0; - boolean openExternal = false; - boolean clearHistory = false; - - // If there are properties, then set them on the Activity - HashMap params = new HashMap(); - if (props != null) { - JSONArray keys = props.names(); - for (int i = 0; i < keys.length(); i++) { - String key = keys.getString(i); - if (key.equals("wait")) { - wait = props.getInt(key); - } - else if (key.equalsIgnoreCase("openexternal")) { - openExternal = props.getBoolean(key); - } - else if (key.equalsIgnoreCase("clearhistory")) { - clearHistory = props.getBoolean(key); - } - else { - Object value = props.get(key); - if (value == null) { - - } - else if (value.getClass().equals(String.class)) { - params.put(key, (String)value); - } - else if (value.getClass().equals(Boolean.class)) { - params.put(key, (Boolean)value); - } - else if (value.getClass().equals(Integer.class)) { - params.put(key, (Integer)value); - } - } - } - } - - // If wait property, then delay loading - - if (wait > 0) { - try { - synchronized(this) { - this.wait(wait); - } - } catch (InterruptedException e) { - e.printStackTrace(); - } - } - this.webView.showWebPage(url, openExternal, clearHistory, params); - } - - /** - * Clear page history for the app. - */ - public void clearHistory() { - this.webView.getNavigationHistory().clear(); - } - - /** - * Go to previous page displayed. - * This is the same as pressing the backbutton on Android device. - */ - public void backHistory() { - cordova.getActivity().runOnUiThread(new Runnable() { - public void run() { - webView.backHistory(); - } - }); - } - - /** - * Override the default behavior of the Android back button. - * If overridden, when the back button is pressed, the "backKeyDown" JavaScript event will be fired. - * - * @param override T=override, F=cancel override - */ - public void overrideBackbutton(boolean override) { - LOG.i("App", "WARNING: Back Button Default Behavior will be overridden. The backbutton event will be fired!"); - webView.bindButton(override); - } - - /** - * Override the default behavior of the Android volume buttons. - * If overridden, when the volume button is pressed, the "volume[up|down]button" JavaScript event will be fired. - * - * @param button volumeup, volumedown - * @param override T=override, F=cancel override - */ - public void overrideButton(String button, boolean override) { - LOG.i("App", "WARNING: Volume Button Default Behavior will be overridden. The volume event will be fired!"); - webView.bindButton(button, override); - } - - /** - * Return whether the Android back button is overridden by the user. - * - * @return boolean - */ - public boolean isBackbuttonOverridden() { - return webView.isBackButtonBound(); - } - - /** - * Exit the Android application. - */ - public void exitApp() { - this.webView.postMessage("exit", null); - } - - - /** - * Listen for telephony events: RINGING, OFFHOOK and IDLE - * Send these events to all plugins using - * CordovaActivity.onMessage("telephone", "ringing" | "offhook" | "idle") - */ - private void initTelephonyReceiver() { - IntentFilter intentFilter = new IntentFilter(); - intentFilter.addAction(TelephonyManager.ACTION_PHONE_STATE_CHANGED); - //final CordovaInterface mycordova = this.cordova; - this.telephonyReceiver = new BroadcastReceiver() { - - @Override - public void onReceive(Context context, Intent intent) { - - // If state has changed - if ((intent != null) && intent.getAction().equals(TelephonyManager.ACTION_PHONE_STATE_CHANGED)) { - if (intent.hasExtra(TelephonyManager.EXTRA_STATE)) { - String extraData = intent.getStringExtra(TelephonyManager.EXTRA_STATE); - if (extraData.equals(TelephonyManager.EXTRA_STATE_RINGING)) { - LOG.i(TAG, "Telephone RINGING"); - webView.postMessage("telephone", "ringing"); - } - else if (extraData.equals(TelephonyManager.EXTRA_STATE_OFFHOOK)) { - LOG.i(TAG, "Telephone OFFHOOK"); - webView.postMessage("telephone", "offhook"); - } - else if (extraData.equals(TelephonyManager.EXTRA_STATE_IDLE)) { - LOG.i(TAG, "Telephone IDLE"); - webView.postMessage("telephone", "idle"); - } - } - } - } - }; - - // Register the receiver - this.cordova.getActivity().registerReceiver(this.telephonyReceiver, intentFilter); - } - - /* - * Unregister the receiver - * - */ - public void onDestroy() - { - this.cordova.getActivity().unregisterReceiver(this.telephonyReceiver); - } -} diff --git a/mobile/CordovaLib/src/org/apache/cordova/AuthenticationToken.java b/mobile/CordovaLib/src/org/apache/cordova/AuthenticationToken.java deleted file mode 100644 index d3a231a0ba4..00000000000 --- a/mobile/CordovaLib/src/org/apache/cordova/AuthenticationToken.java +++ /dev/null @@ -1,69 +0,0 @@ -/* - Licensed to the Apache Software Foundation (ASF) under one - or more contributor license agreements. See the NOTICE file - distributed with this work for additional information - regarding copyright ownership. The ASF licenses this file - to you under the Apache License, Version 2.0 (the - "License"); you may not use this file except in compliance - with the License. You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, - software distributed under the License is distributed on an - "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - KIND, either express or implied. See the License for the - specific language governing permissions and limitations - under the License. -*/ -package org.apache.cordova; - -/** - * The Class AuthenticationToken defines the userName and password to be used for authenticating a web resource - */ -public class AuthenticationToken { - private String userName; - private String password; - - /** - * Gets the user name. - * - * @return the user name - */ - public String getUserName() { - return userName; - } - - /** - * Sets the user name. - * - * @param userName - * the new user name - */ - public void setUserName(String userName) { - this.userName = userName; - } - - /** - * Gets the password. - * - * @return the password - */ - public String getPassword() { - return password; - } - - /** - * Sets the password. - * - * @param password - * the new password - */ - public void setPassword(String password) { - this.password = password; - } - - - - -} diff --git a/mobile/CordovaLib/src/org/apache/cordova/CallbackContext.java b/mobile/CordovaLib/src/org/apache/cordova/CallbackContext.java deleted file mode 100644 index 446c37d9f5a..00000000000 --- a/mobile/CordovaLib/src/org/apache/cordova/CallbackContext.java +++ /dev/null @@ -1,144 +0,0 @@ -/* - Licensed to the Apache Software Foundation (ASF) under one - or more contributor license agreements. See the NOTICE file - distributed with this work for additional information - regarding copyright ownership. The ASF licenses this file - to you under the Apache License, Version 2.0 (the - "License"); you may not use this file except in compliance - with the License. You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, - software distributed under the License is distributed on an - "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - KIND, either express or implied. See the License for the - specific language governing permissions and limitations - under the License. -*/ -package org.apache.cordova; - -import org.json.JSONArray; - -import android.util.Log; - -import org.apache.cordova.CordovaWebView; -import org.apache.cordova.PluginResult; -import org.json.JSONObject; - -public class CallbackContext { - private static final String LOG_TAG = "CordovaPlugin"; - - private String callbackId; - private CordovaWebView webView; - private boolean finished; - private int changingThreads; - - public CallbackContext(String callbackId, CordovaWebView webView) { - this.callbackId = callbackId; - this.webView = webView; - } - - public boolean isFinished() { - return finished; - } - - public boolean isChangingThreads() { - return changingThreads > 0; - } - - public String getCallbackId() { - return callbackId; - } - - public void sendPluginResult(PluginResult pluginResult) { - synchronized (this) { - if (finished) { - Log.w(LOG_TAG, "Attempted to send a second callback for ID: " + callbackId + "\nResult was: " + pluginResult.getMessage()); - return; - } else { - finished = !pluginResult.getKeepCallback(); - } - } - webView.sendPluginResult(pluginResult, callbackId); - } - - /** - * Helper for success callbacks that just returns the Status.OK by default - * - * @param message The message to add to the success result. - */ - public void success(JSONObject message) { - sendPluginResult(new PluginResult(PluginResult.Status.OK, message)); - } - - /** - * Helper for success callbacks that just returns the Status.OK by default - * - * @param message The message to add to the success result. - */ - public void success(String message) { - sendPluginResult(new PluginResult(PluginResult.Status.OK, message)); - } - - /** - * Helper for success callbacks that just returns the Status.OK by default - * - * @param message The message to add to the success result. - */ - public void success(JSONArray message) { - sendPluginResult(new PluginResult(PluginResult.Status.OK, message)); - } - - /** - * Helper for success callbacks that just returns the Status.OK by default - * - * @param message The message to add to the success result. - */ - public void success(byte[] message) { - sendPluginResult(new PluginResult(PluginResult.Status.OK, message)); - } - - /** - * Helper for success callbacks that just returns the Status.OK by default - * - * @param message The message to add to the success result. - */ - public void success(int message) { - sendPluginResult(new PluginResult(PluginResult.Status.OK, message)); - } - - /** - * Helper for success callbacks that just returns the Status.OK by default - */ - public void success() { - sendPluginResult(new PluginResult(PluginResult.Status.OK)); - } - - /** - * Helper for error callbacks that just returns the Status.ERROR by default - * - * @param message The message to add to the error result. - */ - public void error(JSONObject message) { - sendPluginResult(new PluginResult(PluginResult.Status.ERROR, message)); - } - - /** - * Helper for error callbacks that just returns the Status.ERROR by default - * - * @param message The message to add to the error result. - */ - public void error(String message) { - sendPluginResult(new PluginResult(PluginResult.Status.ERROR, message)); - } - - /** - * Helper for error callbacks that just returns the Status.ERROR by default - * - * @param message The message to add to the error result. - */ - public void error(int message) { - sendPluginResult(new PluginResult(PluginResult.Status.ERROR, message)); - } -} diff --git a/mobile/CordovaLib/src/org/apache/cordova/Config.java b/mobile/CordovaLib/src/org/apache/cordova/Config.java deleted file mode 100644 index 31a1370ad96..00000000000 --- a/mobile/CordovaLib/src/org/apache/cordova/Config.java +++ /dev/null @@ -1,233 +0,0 @@ -/* - Licensed to the Apache Software Foundation (ASF) under one - or more contributor license agreements. See the NOTICE file - distributed with this work for additional information - regarding copyright ownership. The ASF licenses this file - to you under the Apache License, Version 2.0 (the - "License"); you may not use this file except in compliance - with the License. You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, - software distributed under the License is distributed on an - "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - KIND, either express or implied. See the License for the - specific language governing permissions and limitations - under the License. -*/ - -package org.apache.cordova; - -import java.io.IOException; - -import java.util.Locale; - -import java.util.regex.Matcher; -import java.util.regex.Pattern; - -import org.apache.cordova.LOG; - -import org.xmlpull.v1.XmlPullParserException; - -import android.app.Activity; - -import android.content.res.XmlResourceParser; -import android.graphics.Color; - -import android.util.Log; - -public class Config { - - public static final String TAG = "Config"; - - private Whitelist whitelist = new Whitelist(); - private String startUrl; - - private static Config self = null; - - public static void init(Activity action) { - //Just re-initialize this! Seriously, we lose this all the time - self = new Config(action); - } - - // Intended to be used for testing only; creates an empty configuration. - public static void init() { - if (self == null) { - self = new Config(); - } - } - - // Intended to be used for testing only; creates an empty configuration. - private Config() { - } - - private Config(Activity action) { - if (action == null) { - LOG.i("CordovaLog", "There is no activity. Is this on the lock screen?"); - return; - } - - // First checking the class namespace for config.xml - int id = action.getResources().getIdentifier("config", "xml", action.getClass().getPackage().getName()); - if (id == 0) { - // If we couldn't find config.xml there, we'll look in the namespace from AndroidManifest.xml - id = action.getResources().getIdentifier("config", "xml", action.getPackageName()); - if (id == 0) { - LOG.i("CordovaLog", "config.xml missing. Ignoring..."); - return; - } - } - - // Add implicitly allowed URLs - whitelist.addWhiteListEntry("file:///*", false); - whitelist.addWhiteListEntry("content:///*", false); - whitelist.addWhiteListEntry("data:*", false); - - XmlResourceParser xml = action.getResources().getXml(id); - int eventType = -1; - while (eventType != XmlResourceParser.END_DOCUMENT) { - if (eventType == XmlResourceParser.START_TAG) { - String strNode = xml.getName(); - - if (strNode.equals("access")) { - String origin = xml.getAttributeValue(null, "origin"); - String subdomains = xml.getAttributeValue(null, "subdomains"); - if (origin != null) { - whitelist.addWhiteListEntry(origin, (subdomains != null) && (subdomains.compareToIgnoreCase("true") == 0)); - } - } - else if (strNode.equals("log")) { - String level = xml.getAttributeValue(null, "level"); - Log.d(TAG, "The tag is deprecated. Use instead."); - if (level != null) { - LOG.setLogLevel(level); - } - } - else if (strNode.equals("preference")) { - String name = xml.getAttributeValue(null, "name").toLowerCase(Locale.getDefault()); - /* Java 1.6 does not support switch-based strings - Java 7 does, but we're using Dalvik, which is apparently not Java. - Since we're reading XML, this has to be an ugly if/else. - - Also, due to cast issues, each of them has to call their separate putExtra! - Wheee!!! Isn't Java FUN!?!?!? - - Note: We should probably pass in the classname for the variable splash on splashscreen! - */ - if (name.equalsIgnoreCase("LogLevel")) { - String level = xml.getAttributeValue(null, "value"); - LOG.setLogLevel(level); - } else if (name.equalsIgnoreCase("SplashScreen")) { - String value = xml.getAttributeValue(null, "value"); - int resource = 0; - if (value == null) - { - value = "splash"; - } - resource = action.getResources().getIdentifier(value, "drawable", action.getClass().getPackage().getName()); - - action.getIntent().putExtra(name, resource); - } - else if(name.equalsIgnoreCase("BackgroundColor")) { - int value = xml.getAttributeIntValue(null, "value", Color.BLACK); - action.getIntent().putExtra(name, value); - } - else if(name.equalsIgnoreCase("LoadUrlTimeoutValue")) { - int value = xml.getAttributeIntValue(null, "value", 20000); - action.getIntent().putExtra(name, value); - } - else if(name.equalsIgnoreCase("SplashScreenDelay")) { - int value = xml.getAttributeIntValue(null, "value", 3000); - action.getIntent().putExtra(name, value); - } - else if(name.equalsIgnoreCase("KeepRunning")) - { - boolean value = xml.getAttributeValue(null, "value").equals("true"); - action.getIntent().putExtra(name, value); - } - else if(name.equalsIgnoreCase("InAppBrowserStorageEnabled")) - { - boolean value = xml.getAttributeValue(null, "value").equals("true"); - action.getIntent().putExtra(name, value); - } - else if(name.equalsIgnoreCase("DisallowOverscroll")) - { - boolean value = xml.getAttributeValue(null, "value").equals("true"); - action.getIntent().putExtra(name, value); - } - else - { - String value = xml.getAttributeValue(null, "value"); - action.getIntent().putExtra(name, value); - } - /* - LOG.i("CordovaLog", "Found preference for %s=%s", name, value); - */ - } - else if (strNode.equals("content")) { - String src = xml.getAttributeValue(null, "src"); - - LOG.i("CordovaLog", "Found start page location: %s", src); - - if (src != null) { - Pattern schemeRegex = Pattern.compile("^[a-z-]+://"); - Matcher matcher = schemeRegex.matcher(src); - if (matcher.find()) { - startUrl = src; - } else { - if (src.charAt(0) == '/') { - src = src.substring(1); - } - startUrl = "file:///android_asset/www/" + src; - } - } - } - - } - - try { - eventType = xml.next(); - } catch (XmlPullParserException e) { - e.printStackTrace(); - } catch (IOException e) { - e.printStackTrace(); - } - } - } - - /** - * Add entry to approved list of URLs (whitelist) - * - * @param origin URL regular expression to allow - * @param subdomains T=include all subdomains under origin - */ - public static void addWhiteListEntry(String origin, boolean subdomains) { - if (self == null) { - Log.e(TAG, "Config was not initialised. Did you forget to Config.init(this)?"); - return; - } - self.whitelist.addWhiteListEntry(origin, subdomains); - } - - /** - * Determine if URL is in approved list of URLs to load. - * - * @param url - * @return true if whitelisted - */ - public static boolean isUrlWhiteListed(String url) { - if (self == null) { - Log.e(TAG, "Config was not initialised. Did you forget to Config.init(this)?"); - return false; - } - return self.whitelist.isUrlWhiteListed(url); - } - - public static String getStartUrl() { - if (self == null || self.startUrl == null) { - return "file:///android_asset/www/index.html"; - } - return self.startUrl; - } -} diff --git a/mobile/CordovaLib/src/org/apache/cordova/CordovaActivity.java b/mobile/CordovaLib/src/org/apache/cordova/CordovaActivity.java deleted file mode 100755 index 8c5f28aaf2f..00000000000 --- a/mobile/CordovaLib/src/org/apache/cordova/CordovaActivity.java +++ /dev/null @@ -1,1241 +0,0 @@ -/* - Licensed to the Apache Software Foundation (ASF) under one - or more contributor license agreements. See the NOTICE file - distributed with this work for additional information - regarding copyright ownership. The ASF licenses this file - to you under the Apache License, Version 2.0 (the - "License"); you may not use this file except in compliance - with the License. You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, - software distributed under the License is distributed on an - "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - KIND, either express or implied. See the License for the - specific language governing permissions and limitations - under the License. -*/ -package org.apache.cordova; - -import java.util.HashMap; -import java.util.Locale; -import java.util.concurrent.ExecutorService; -import java.util.concurrent.Executors; - -import org.apache.cordova.CordovaInterface; -import org.apache.cordova.CordovaPlugin; -import org.apache.cordova.LOG; -import org.json.JSONException; -import org.json.JSONObject; - -import android.annotation.SuppressLint; -import android.app.Activity; -import android.app.AlertDialog; -import android.app.Dialog; -import android.app.ProgressDialog; -import android.content.Context; -import android.content.DialogInterface; -import android.content.Intent; -import android.content.res.Configuration; -import android.graphics.Color; -import android.graphics.Point; -import android.hardware.SensorManager; -import android.media.AudioManager; -import android.net.Uri; -import android.os.Bundle; -import android.os.Handler; -import android.util.Log; -import android.view.Display; -import android.view.KeyEvent; -import android.view.Menu; -import android.view.MenuItem; -import android.view.OrientationEventListener; -import android.view.View; -import android.view.ViewGroup; -import android.view.Window; -import android.view.WindowManager; -import android.widget.ImageView; -import android.webkit.ValueCallback; -import android.webkit.WebViewClient; -import android.widget.LinearLayout; - -/** - * This class is the main Android activity that represents the Cordova - * application. It should be extended by the user to load the specific - * html file that contains the application. - * - * As an example: - * - *

- *     package org.apache.cordova.examples;
- *
- *     import android.os.Bundle;
- *     import org.apache.cordova.*;
- *
- *     public class Example extends CordovaActivity {
- *       @Override
- *       public void onCreate(Bundle savedInstanceState) {
- *         super.onCreate(savedInstanceState);
- *         super.init();
- *         // Load your application
- *         super.loadUrl(Config.getStartUrl());
- *       }
- *     }
- * 
- * - * Cordova xml configuration: Cordova uses a configuration file at - * res/xml/config.xml to specify its settings. See "The config.xml File" - * guide in cordova-docs at http://cordova.apache.org/docs for the documentation - * for the configuration. The use of the set*Property() methods is - * deprecated in favor of the config.xml file. - * - */ -public class CordovaActivity extends Activity implements CordovaInterface { - public static String TAG = "CordovaActivity"; - - // The webview for our app - protected CordovaWebView appView; - protected CordovaWebViewClient webViewClient; - - protected LinearLayout root; - protected boolean cancelLoadUrl = false; - protected ProgressDialog spinnerDialog = null; - private final ExecutorService threadPool = Executors.newCachedThreadPool(); - - - // The initial URL for our app - // ie http://server/path/index.html#abc?query - //private String url = null; - - private static int ACTIVITY_STARTING = 0; - private static int ACTIVITY_RUNNING = 1; - private static int ACTIVITY_EXITING = 2; - private int activityState = 0; // 0=starting, 1=running (after 1st resume), 2=shutting down - - // Plugin to call when activity result is received - protected CordovaPlugin activityResultCallback = null; - protected boolean activityResultKeepRunning; - - // Default background color for activity - // (this is not the color for the webview, which is set in HTML) - private int backgroundColor = Color.BLACK; - - /* - * The variables below are used to cache some of the activity properties. - */ - - // Draw a splash screen using an image located in the drawable resource directory. - // This is not the same as calling super.loadSplashscreen(url) - protected int splashscreen = 0; - protected int splashscreenTime = 3000; - - // LoadUrl timeout value in msec (default of 20 sec) - protected int loadUrlTimeoutValue = 20000; - - // Keep app running when pause is received. (default = true) - // If true, then the JavaScript and native code continue to run in the background - // when another application (activity) is started. - protected boolean keepRunning = true; - - private int lastRequestCode; - - private Object responseCode; - - private Intent lastIntent; - - private Object lastResponseCode; - - private String initCallbackClass; - - private Object LOG_TAG; - - /** - * Sets the authentication token. - * - * @param authenticationToken - * @param host - * @param realm - */ - public void setAuthenticationToken(AuthenticationToken authenticationToken, String host, String realm) { - if (this.appView != null && this.appView.viewClient != null) { - this.appView.viewClient.setAuthenticationToken(authenticationToken, host, realm); - } - } - - /** - * Removes the authentication token. - * - * @param host - * @param realm - * - * @return the authentication token or null if did not exist - */ - public AuthenticationToken removeAuthenticationToken(String host, String realm) { - if (this.appView != null && this.appView.viewClient != null) { - return this.appView.viewClient.removeAuthenticationToken(host, realm); - } - return null; - } - - /** - * Gets the authentication token. - * - * In order it tries: - * 1- host + realm - * 2- host - * 3- realm - * 4- no host, no realm - * - * @param host - * @param realm - * - * @return the authentication token - */ - public AuthenticationToken getAuthenticationToken(String host, String realm) { - if (this.appView != null && this.appView.viewClient != null) { - return this.appView.viewClient.getAuthenticationToken(host, realm); - } - return null; - } - - /** - * Clear all authentication tokens. - */ - public void clearAuthenticationTokens() { - if (this.appView != null && this.appView.viewClient != null) { - this.appView.viewClient.clearAuthenticationTokens(); - } - } - - /** - * Called when the activity is first created. - * - * @param savedInstanceState - */ - @SuppressWarnings("deprecation") - @Override - public void onCreate(Bundle savedInstanceState) { - Config.init(this); - LOG.d(TAG, "CordovaActivity.onCreate()"); - super.onCreate(savedInstanceState); - - if(savedInstanceState != null) - { - initCallbackClass = savedInstanceState.getString("callbackClass"); - } - - if(!this.getBooleanProperty("ShowTitle", false)) - { - getWindow().requestFeature(Window.FEATURE_NO_TITLE); - } - - if(this.getBooleanProperty("SetFullscreen", false)) - { - Log.d(TAG, "The SetFullscreen configuration is deprecated in favor of Fullscreen, and will be removed in a future version."); - getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, - WindowManager.LayoutParams.FLAG_FULLSCREEN); - } - else - { - getWindow().setFlags(WindowManager.LayoutParams.FLAG_FORCE_NOT_FULLSCREEN, - WindowManager.LayoutParams.FLAG_FORCE_NOT_FULLSCREEN); - } - // This builds the view. We could probably get away with NOT having a LinearLayout, but I like having a bucket! - Display display = getWindowManager().getDefaultDisplay(); - int width = display.getWidth(); - int height = display.getHeight(); - - root = new LinearLayoutSoftKeyboardDetect(this, width, height); - root.setOrientation(LinearLayout.VERTICAL); - root.setBackgroundColor(this.backgroundColor); - root.setLayoutParams(new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, - ViewGroup.LayoutParams.MATCH_PARENT, 0.0F)); - - // Setup the hardware volume controls to handle volume control - setVolumeControlStream(AudioManager.STREAM_MUSIC); - } - - /** - * Get the Android activity. - * - * @return the Activity - */ - public Activity getActivity() { - return this; - } - - /** - * Construct the default web view object. - * - * This is intended to be overridable by subclasses of CordovaIntent which - * require a more specialized web view. - */ - protected CordovaWebView makeWebView() { - return new CordovaWebView(CordovaActivity.this); - } - - /** - * Construct the client for the default web view object. - * - * This is intended to be overridable by subclasses of CordovaIntent which - * require a more specialized web view. - * - * @param webView the default constructed web view object - */ - protected CordovaWebViewClient makeWebViewClient(CordovaWebView webView) { - if(android.os.Build.VERSION.SDK_INT < android.os.Build.VERSION_CODES.HONEYCOMB) { - return new CordovaWebViewClient(this, webView); - } else { - return new IceCreamCordovaWebViewClient(this, webView); - } - } - - /** - * Construct the chrome client for the default web view object. - * - * This is intended to be overridable by subclasses of CordovaIntent which - * require a more specialized web view. - * - * @param webView the default constructed web view object - */ - protected CordovaChromeClient makeChromeClient(CordovaWebView webView) { - return new CordovaChromeClient(this, webView); - } - - /** - * Create and initialize web container with default web view objects. - */ - public void init() { - CordovaWebView webView = makeWebView(); - this.init(webView, makeWebViewClient(webView), makeChromeClient(webView)); - } - - /** - * Initialize web container with web view objects. - * - * @param webView - * @param webViewClient - * @param webChromeClient - */ - @SuppressLint("NewApi") - public void init(CordovaWebView webView, CordovaWebViewClient webViewClient, CordovaChromeClient webChromeClient) { - LOG.d(TAG, "CordovaActivity.init()"); - - // Set up web container - this.appView = webView; - this.appView.setId(100); - - this.appView.setWebViewClient(webViewClient); - this.appView.setWebChromeClient(webChromeClient); - webViewClient.setWebView(this.appView); - webChromeClient.setWebView(this.appView); - - this.appView.setLayoutParams(new LinearLayout.LayoutParams( - ViewGroup.LayoutParams.MATCH_PARENT, - ViewGroup.LayoutParams.MATCH_PARENT, - 1.0F)); - - if (this.getBooleanProperty("DisallowOverscroll", false)) { - if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.GINGERBREAD) { - this.appView.setOverScrollMode(CordovaWebView.OVER_SCROLL_NEVER); - } - } - - // Add web view but make it invisible while loading URL - this.appView.setVisibility(View.INVISIBLE); - this.root.addView(this.appView); - setContentView(this.root); - - // Clear cancel flag - this.cancelLoadUrl = false; - - } - - /** - * Load the url into the webview. - * - * @param url - */ - public void loadUrl(String url) { - - // Init web view if not already done - if (this.appView == null) { - this.init(); - } - - this.splashscreenTime = this.getIntegerProperty("SplashScreenDelay", this.splashscreenTime); - if(this.splashscreenTime > 0) - { - this.splashscreen = this.getIntegerProperty("SplashScreen", 0); - if(this.splashscreen != 0) - { - this.showSplashScreen(this.splashscreenTime); - } - } - - // Set backgroundColor - this.backgroundColor = this.getIntegerProperty("BackgroundColor", Color.BLACK); - this.root.setBackgroundColor(this.backgroundColor); - - // If keepRunning - this.keepRunning = this.getBooleanProperty("KeepRunning", true); - - //Check if the view is attached to anything - if(appView.getParent() != null) - { - // Then load the spinner - this.loadSpinner(); - } - //Load the correct splashscreen - - if(this.splashscreen != 0) - { - this.appView.loadUrl(url, this.splashscreenTime); - } - else - { - this.appView.loadUrl(url); - } - } - - /** - * Load the url into the webview after waiting for period of time. - * This is used to display the splashscreen for certain amount of time. - * - * @param url - * @param time The number of ms to wait before loading webview - */ - public void loadUrl(final String url, int time) { - - this.splashscreenTime = time; - this.loadUrl(url); - - /* - // Init web view if not already done - if (this.appView == null) { - this.init(); - } - - this.splashscreenTime = time; - this.splashscreen = this.getIntegerProperty("SplashScreen", 0); - this.showSplashScreen(this.splashscreenTime); - this.appView.loadUrl(url, time); - */ - } - - /* - * Load the spinner - */ - void loadSpinner() { - - // If loadingDialog property, then show the App loading dialog for first page of app - String loading = null; - if ((this.appView == null) || - this.appView.getNavigationHistory() == null || - !this.appView.getNavigationHistory().canGoBack()) { - loading = this.getStringProperty("LoadingDialog", null); - } - else { - loading = this.getStringProperty("LoadingPageDialog", null); - } - if (loading != null) { - - String title = ""; - String message = "Loading Application..."; - - if (loading.length() > 0) { - int comma = loading.indexOf(','); - if (comma > 0) { - title = loading.substring(0, comma); - message = loading.substring(comma + 1); - } - else { - title = ""; - message = loading; - } - } - this.spinnerStart(title, message); - } - } - - - /** - * Cancel loadUrl before it has been loaded. - */ - // TODO NO-OP - @Deprecated - public void cancelLoadUrl() { - this.cancelLoadUrl = true; - } - - /** - * Clear the resource cache. - */ - public void clearCache() { - if (this.appView == null) { - this.init(); - } - this.appView.clearCache(true); - } - - /** - * Clear web history in this web view. - */ - public void clearHistory() { - if (this.appView.getNavigationHistory() != null) { - this.appView.getNavigationHistory().clear(); - } - } - - /** - * Go to previous page in history. (We manage our own history) - * - * @return true if we went back, false if we are already at top - */ - public boolean backHistory() { - if (this.appView != null) { - return appView.backHistory(); - } - return false; - } - - @Override - /** - * Called by the system when the device configuration changes while your activity is running. - * - * @param Configuration newConfig - */ - public void onConfigurationChanged(Configuration newConfig) { - //don't reload the current page when the orientation is changed - super.onConfigurationChanged(newConfig); - } - - /** - * Get boolean property for activity. - * - * @param name - * @param defaultValue - * @return the boolean value of the named property - */ - public boolean getBooleanProperty(String name, boolean defaultValue) { - Bundle bundle = this.getIntent().getExtras(); - if (bundle == null) { - return defaultValue; - } - name = name.toLowerCase(Locale.getDefault()); - Boolean p; - try { - p = (Boolean) bundle.get(name); - } catch (ClassCastException e) { - String s = bundle.get(name).toString(); - if ("true".equals(s)) { - p = true; - } - else { - p = false; - } - } - if (p == null) { - return defaultValue; - } - return p.booleanValue(); - } - - /** - * Get int property for activity. - * - * @param name - * @param defaultValue - * @return the int value for the named property - */ - public int getIntegerProperty(String name, int defaultValue) { - Bundle bundle = this.getIntent().getExtras(); - if (bundle == null) { - return defaultValue; - } - name = name.toLowerCase(Locale.getDefault()); - Integer p; - try { - p = (Integer) bundle.get(name); - } catch (ClassCastException e) { - p = Integer.parseInt(bundle.get(name).toString()); - } - if (p == null) { - return defaultValue; - } - return p.intValue(); - } - - /** - * Get string property for activity. - * - * @param name - * @param defaultValue - * @return the String value for the named property - */ - public String getStringProperty(String name, String defaultValue) { - Bundle bundle = this.getIntent().getExtras(); - if (bundle == null) { - return defaultValue; - } - name = name.toLowerCase(Locale.getDefault()); - String p = bundle.getString(name); - if (p == null) { - return defaultValue; - } - return p; - } - - /** - * Get double property for activity. - * - * @param name - * @param defaultValue - * @return the double value for the named property - */ - public double getDoubleProperty(String name, double defaultValue) { - Bundle bundle = this.getIntent().getExtras(); - if (bundle == null) { - return defaultValue; - } - name = name.toLowerCase(Locale.getDefault()); - Double p; - try { - p = (Double) bundle.get(name); - } catch (ClassCastException e) { - p = Double.parseDouble(bundle.get(name).toString()); - } - if (p == null) { - return defaultValue; - } - return p.doubleValue(); - } - - /** - * Set boolean property on activity. - * This method has been deprecated in 3.0 and will be removed at a future - * time. Please use config.xml instead. - * - * @param name - * @param value - * @deprecated - */ - @Deprecated - public void setBooleanProperty(String name, boolean value) { - Log.d(TAG, "Setting boolean properties in CordovaActivity will be deprecated in 3.0 on July 2013, please use config.xml"); - this.getIntent().putExtra(name.toLowerCase(), value); - } - - /** - * Set int property on activity. - * This method has been deprecated in 3.0 and will be removed at a future - * time. Please use config.xml instead. - * - * @param name - * @param value - * @deprecated - */ - @Deprecated - public void setIntegerProperty(String name, int value) { - Log.d(TAG, "Setting integer properties in CordovaActivity will be deprecated in 3.0 on July 2013, please use config.xml"); - this.getIntent().putExtra(name.toLowerCase(), value); - } - - /** - * Set string property on activity. - * This method has been deprecated in 3.0 and will be removed at a future - * time. Please use config.xml instead. - * - * @param name - * @param value - * @deprecated - */ - @Deprecated - public void setStringProperty(String name, String value) { - Log.d(TAG, "Setting string properties in CordovaActivity will be deprecated in 3.0 on July 2013, please use config.xml"); - this.getIntent().putExtra(name.toLowerCase(), value); - } - - /** - * Set double property on activity. - * This method has been deprecated in 3.0 and will be removed at a future - * time. Please use config.xml instead. - * - * @param name - * @param value - * @deprecated - */ - @Deprecated - public void setDoubleProperty(String name, double value) { - Log.d(TAG, "Setting double properties in CordovaActivity will be deprecated in 3.0 on July 2013, please use config.xml"); - this.getIntent().putExtra(name.toLowerCase(), value); - } - - @Override - /** - * Called when the system is about to start resuming a previous activity. - */ - protected void onPause() { - super.onPause(); - if (this.appView != null) - this.appView.onHide(); - - LOG.d(TAG, "Paused the application!"); - - // Don't process pause if shutting down, since onDestroy() will be called - if (this.activityState == ACTIVITY_EXITING) { - return; - } - - if (this.appView == null) { - return; - } - else - { - this.appView.handlePause(this.keepRunning); - } - - // hide the splash screen to avoid leaking a window - this.removeSplashScreen(); - } - - @Override - /** - * Called when the activity receives a new intent - **/ - protected void onNewIntent(Intent intent) { - super.onNewIntent(intent); - //Forward to plugins - if (this.appView != null) - this.appView.onNewIntent(intent); - } - - @Override - /** - * Called when the activity will start interacting with the user. - */ - protected void onResume() { - super.onResume(); - if (this.appView != null) - this.appView.onShow(); - //Reload the configuration - Config.init(this); - - LOG.d(TAG, "Resuming the App"); - - - //Code to test CB-3064 - String errorUrl = this.getStringProperty("ErrorUrl", null); - LOG.d(TAG, "CB-3064: The errorUrl is " + errorUrl); - - if (this.activityState == ACTIVITY_STARTING) { - this.activityState = ACTIVITY_RUNNING; - return; - } - - if (this.appView == null) { - return; - } - - this.appView.handleResume(this.keepRunning, this.activityResultKeepRunning); - - // If app doesn't want to run in background - if (!this.keepRunning || this.activityResultKeepRunning) { - - // Restore multitasking state - if (this.activityResultKeepRunning) { - this.keepRunning = this.activityResultKeepRunning; - this.activityResultKeepRunning = false; - } - } - } - - @Override - /** - * The final call you receive before your activity is destroyed. - */ - public void onDestroy() { - LOG.d(TAG, "CordovaActivity.onDestroy()"); - super.onDestroy(); - if (this.appView != null) - this.appView.onDestroy(); - - // hide the splash screen to avoid leaking a window - this.removeSplashScreen(); - - if (this.appView != null) { - appView.handleDestroy(); - } - else { - this.activityState = ACTIVITY_EXITING; - } - } - - /** - * Send a message to all plugins. - * - * @param id The message id - * @param data The message data - */ - public void postMessage(String id, Object data) { - if (this.appView != null) { - this.appView.postMessage(id, data); - } - } - - /** - * @deprecated - * Add services to res/xml/plugins.xml instead. - * - * Add a class that implements a service. - * - * @param serviceType - * @param className - */ - @Deprecated - public void addService(String serviceType, String className) { - if (this.appView != null && this.appView.pluginManager != null) { - this.appView.pluginManager.addService(serviceType, className); - } - } - - /** - * Send JavaScript statement back to JavaScript. - * (This is a convenience method) - * - * @param statement - */ - public void sendJavascript(String statement) { - if (this.appView != null) { - this.appView.jsMessageQueue.addJavaScript(statement); - } - } - - /** - * Show the spinner. Must be called from the UI thread. - * - * @param title Title of the dialog - * @param message The message of the dialog - */ - public void spinnerStart(final String title, final String message) { - if (this.spinnerDialog != null) { - this.spinnerDialog.dismiss(); - this.spinnerDialog = null; - } - final CordovaActivity me = this; - this.spinnerDialog = ProgressDialog.show(CordovaActivity.this, title, message, true, true, - new DialogInterface.OnCancelListener() { - public void onCancel(DialogInterface dialog) { - me.spinnerDialog = null; - } - }); - } - - /** - * Stop spinner - Must be called from UI thread - */ - public void spinnerStop() { - if (this.spinnerDialog != null && this.spinnerDialog.isShowing()) { - this.spinnerDialog.dismiss(); - this.spinnerDialog = null; - } - } - - /** - * End this activity by calling finish for activity - */ - public void endActivity() { - this.activityState = ACTIVITY_EXITING; - super.finish(); - } - - - /** - * Launch an activity for which you would like a result when it finished. When this activity exits, - * your onActivityResult() method will be called. - * - * @param command The command object - * @param intent The intent to start - * @param requestCode The request code that is passed to callback to identify the activity - */ - public void startActivityForResult(CordovaPlugin command, Intent intent, int requestCode) { - this.activityResultCallback = command; - this.activityResultKeepRunning = this.keepRunning; - - // If multitasking turned on, then disable it for activities that return results - if (command != null) { - this.keepRunning = false; - } - - // Start activity - super.startActivityForResult(intent, requestCode); - } - - @Override - /** - * Called when an activity you launched exits, giving you the requestCode you started it with, - * the resultCode it returned, and any additional data from it. - * - * @param requestCode The request code originally supplied to startActivityForResult(), - * allowing you to identify who this result came from. - * @param resultCode The integer result code returned by the child activity through its setResult(). - * @param data An Intent, which can return result data to the caller (various data can be attached to Intent "extras"). - */ - protected void onActivityResult(int requestCode, int resultCode, Intent intent) { - LOG.d(TAG, "Incoming Result"); - super.onActivityResult(requestCode, resultCode, intent); - if (this.appView != null) - this.appView.onActivityResult(requestCode, resultCode, intent); - Log.d(TAG, "Request code = " + requestCode); - if (appView != null && requestCode == CordovaChromeClient.FILECHOOSER_RESULTCODE) { - ValueCallback mUploadMessage = this.appView.getWebChromeClient().getValueCallback(); - Log.d(TAG, "did we get here?"); - if (null == mUploadMessage) - return; - Uri result = intent == null || resultCode != Activity.RESULT_OK ? null : intent.getData(); - Log.d(TAG, "result = " + result); -// Uri filepath = Uri.parse("file://" + FileUtils.getRealPathFromURI(result, this)); -// Log.d(TAG, "result = " + filepath); - mUploadMessage.onReceiveValue(result); - mUploadMessage = null; - } - CordovaPlugin callback = this.activityResultCallback; - if(callback == null && initCallbackClass != null) { - // The application was restarted, but had defined an initial callback - // before being shut down. - this.activityResultCallback = appView.pluginManager.getPlugin(initCallbackClass); - callback = this.activityResultCallback; - } - if(callback != null) { - LOG.d(TAG, "We have a callback to send this result to"); - callback.onActivityResult(requestCode, resultCode, intent); - } - } - - public void setActivityResultCallback(CordovaPlugin plugin) { - this.activityResultCallback = plugin; - } - - /** - * Report an error to the host application. These errors are unrecoverable (i.e. the main resource is unavailable). - * The errorCode parameter corresponds to one of the ERROR_* constants. - * - * @param errorCode The error code corresponding to an ERROR_* value. - * @param description A String describing the error. - * @param failingUrl The url that failed to load. - */ - public void onReceivedError(final int errorCode, final String description, final String failingUrl) { - final CordovaActivity me = this; - - // If errorUrl specified, then load it - final String errorUrl = me.getStringProperty("errorUrl", null); - if ((errorUrl != null) && (errorUrl.startsWith("file://") || Config.isUrlWhiteListed(errorUrl)) && (!failingUrl.equals(errorUrl))) { - - // Load URL on UI thread - me.runOnUiThread(new Runnable() { - public void run() { - // Stop "app loading" spinner if showing - me.spinnerStop(); - me.appView.showWebPage(errorUrl, false, true, null); - } - }); - } - // If not, then display error dialog - else { - final boolean exit = !(errorCode == WebViewClient.ERROR_HOST_LOOKUP); - me.runOnUiThread(new Runnable() { - public void run() { - if (exit) { - me.appView.setVisibility(View.GONE); - me.displayError("Application Error", description + " (" + failingUrl + ")", "OK", exit); - } - } - }); - } - } - - /** - * Display an error dialog and optionally exit application. - * - * @param title - * @param message - * @param button - * @param exit - */ - public void displayError(final String title, final String message, final String button, final boolean exit) { - final CordovaActivity me = this; - me.runOnUiThread(new Runnable() { - public void run() { - try { - AlertDialog.Builder dlg = new AlertDialog.Builder(me); - dlg.setMessage(message); - dlg.setTitle(title); - dlg.setCancelable(false); - dlg.setPositiveButton(button, - new AlertDialog.OnClickListener() { - public void onClick(DialogInterface dialog, int which) { - dialog.dismiss(); - if (exit) { - me.endActivity(); - } - } - }); - dlg.create(); - dlg.show(); - } catch (Exception e) { - finish(); - } - } - }); - } - - /** - * Determine if URL is in approved list of URLs to load. - * - * @param url - * @return true if the url is whitelisted - */ - public boolean isUrlWhiteListed(String url) { - return Config.isUrlWhiteListed(url); - } - - /* - * Hook in Cordova for menu plugins - * - */ - @Override - public boolean onCreateOptionsMenu(Menu menu) { - this.postMessage("onCreateOptionsMenu", menu); - return super.onCreateOptionsMenu(menu); - } - - @Override - public boolean onPrepareOptionsMenu(Menu menu) { - this.postMessage("onPrepareOptionsMenu", menu); - return true; - } - - @Override - public boolean onOptionsItemSelected(MenuItem item) { - this.postMessage("onOptionsItemSelected", item); - return true; - } - - /** - * Get Activity context. - * - * @return self - * @deprecated - */ - @Deprecated - public Context getContext() { - LOG.d(TAG, "This will be deprecated December 2012"); - return this; - } - - /** - * Load the specified URL in the Cordova webview or a new browser instance. - * - * NOTE: If openExternal is false, only URLs listed in whitelist can be loaded. - * - * @param url The url to load. - * @param openExternal Load url in browser instead of Cordova webview. - * @param clearHistory Clear the history stack, so new page becomes top of history - * @param params Parameters for new app - */ - public void showWebPage(String url, boolean openExternal, boolean clearHistory, HashMap params) { - if (this.appView != null) { - appView.showWebPage(url, openExternal, clearHistory, params); - } - } - - protected Dialog splashDialog; - protected OrientationEventListener splashOrientationListener; - protected int mCurrentOrientation; - protected LinearLayout splashLayout; - - /** - * Removes the Dialog that displays the splash screen - */ - public void removeSplashScreen() { - if (splashDialog != null && splashDialog.isShowing()) { - splashDialog.dismiss(); - splashDialog = null; - splashOrientationListener.disable(); - splashOrientationListener = null; - } - } - - protected int getScreenOrientation() { - // getResources().getConfiguration().orientation returns wrong value in some devices. - // Below is another way to calculate screen orientation. - Display display = getWindowManager().getDefaultDisplay(); - Point size = new Point(); - display.getSize(size); - int orientation; - if (size.x < size.y) { - orientation = Configuration.ORIENTATION_PORTRAIT; - } else { - orientation = Configuration.ORIENTATION_LANDSCAPE; - } - return orientation; - } - - protected LinearLayout getSplashLayout() { - // Get reference to display - Display display = getWindowManager().getDefaultDisplay(); - - LinearLayout root = new LinearLayout(getActivity()); - root.setMinimumHeight(display.getHeight()); - root.setMinimumWidth(display.getWidth()); - root.setOrientation(LinearLayout.VERTICAL); - root.setBackgroundColor(getIntegerProperty("backgroundColor", Color.BLACK)); - root.setLayoutParams(new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, - ViewGroup.LayoutParams.MATCH_PARENT, 0.0F)); - root.setBackgroundResource(splashscreen); - - return root; - } - - /** - * Shows the splash screen over the full Activity - */ - @SuppressWarnings("deprecation") - protected void showSplashScreen(final int time) { - final CordovaActivity that = this; - - Runnable runnable = new Runnable() { - public void run() { - // Create the layout for the dialog - splashLayout = getSplashLayout(); - // Create and show the dialog - splashDialog = new Dialog(that, android.R.style.Theme_Translucent_NoTitleBar); - // check to see if the splash screen should be full screen - if ((getWindow().getAttributes().flags & WindowManager.LayoutParams.FLAG_FULLSCREEN) - == WindowManager.LayoutParams.FLAG_FULLSCREEN) { - splashDialog.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, - WindowManager.LayoutParams.FLAG_FULLSCREEN); - } - splashDialog.setContentView(splashLayout); - splashDialog.setCancelable(false); - splashDialog.show(); - - mCurrentOrientation = getScreenOrientation(); - splashOrientationListener = new OrientationEventListener(that, - SensorManager.SENSOR_DELAY_NORMAL) { - public void onOrientationChanged(int ori) { - if (splashDialog == null || !splashDialog.isShowing()) { - return; - } - // Reset contentView of splashDialog when orientation changed. - int orientation = getScreenOrientation(); - if (orientation != mCurrentOrientation) { - splashLayout = getSplashLayout(); - splashDialog.setContentView(splashLayout); - mCurrentOrientation = orientation; - } - } - }; - splashOrientationListener.enable(); - - // Set Runnable to remove splash screen just in case - final Handler handler = new Handler(); - handler.postDelayed(new Runnable() { - public void run() { - removeSplashScreen(); - } - }, time); - } - }; - this.runOnUiThread(runnable); - } - - @Override - public boolean onKeyUp(int keyCode, KeyEvent event) - { - if (appView != null && (appView.hasEnteredFullscreen() || appView.getFocusedChild() != null ) && - (keyCode == KeyEvent.KEYCODE_BACK || keyCode == KeyEvent.KEYCODE_MENU)) { - return appView.onKeyUp(keyCode, event); - } else { - return super.onKeyUp(keyCode, event); - } - } - - /* - * Android 2.x needs to be able to check where the cursor is. Android 4.x does not - * - * (non-Javadoc) - * @see android.app.Activity#onKeyDown(int, android.view.KeyEvent) - */ - - @Override - public boolean onKeyDown(int keyCode, KeyEvent event) - { - //Determine if the focus is on the current view or not - if (appView != null && appView.getFocusedChild() != null && (keyCode == KeyEvent.KEYCODE_BACK || keyCode == KeyEvent.KEYCODE_MENU)) { - return appView.onKeyDown(keyCode, event); - } - else - return super.onKeyDown(keyCode, event); - } - - - /** - * Called when a message is sent to plugin. - * - * @param id The message id - * @param data The message data - * @return Object or null - */ - public Object onMessage(String id, Object data) { - if (!"onScrollChanged".equals(id)) { - LOG.d(TAG, "onMessage(" + id + "," + data + ")"); - } - - if ("splashscreen".equals(id)) { - if ("hide".equals(data.toString())) { - this.removeSplashScreen(); - } - else { - // If the splash dialog is showing don't try to show it again - if (this.splashDialog == null || !this.splashDialog.isShowing()) { - this.splashscreen = this.getIntegerProperty("SplashScreen", 0); - this.showSplashScreen(this.splashscreenTime); - } - } - } - else if ("spinner".equals(id)) { - if ("stop".equals(data.toString())) { - this.spinnerStop(); - this.appView.setVisibility(View.VISIBLE); - } - } - else if ("onReceivedError".equals(id)) { - JSONObject d = (JSONObject) data; - try { - this.onReceivedError(d.getInt("errorCode"), d.getString("description"), d.getString("url")); - } catch (JSONException e) { - e.printStackTrace(); - } - } - else if ("exit".equals(id)) { - this.endActivity(); - } - return null; - } - - public ExecutorService getThreadPool() { - return threadPool; - } - - protected void onSaveInstanceState(Bundle outState) - { - super.onSaveInstanceState(outState); - if(this.activityResultCallback != null) - { - String cClass = this.activityResultCallback.getClass().getName(); - outState.putString("callbackClass", cClass); - } - } -} diff --git a/mobile/CordovaLib/src/org/apache/cordova/CordovaArgs.java b/mobile/CordovaLib/src/org/apache/cordova/CordovaArgs.java deleted file mode 100644 index d40d26ebbf3..00000000000 --- a/mobile/CordovaLib/src/org/apache/cordova/CordovaArgs.java +++ /dev/null @@ -1,113 +0,0 @@ -/* - Licensed to the Apache Software Foundation (ASF) under one - or more contributor license agreements. See the NOTICE file - distributed with this work for additional information - regarding copyright ownership. The ASF licenses this file - to you under the Apache License, Version 2.0 (the - "License"); you may not use this file except in compliance - with the License. You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, - software distributed under the License is distributed on an - "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - KIND, either express or implied. See the License for the - specific language governing permissions and limitations - under the License. -*/ -package org.apache.cordova; - -import org.json.JSONArray; -import org.json.JSONException; -import org.json.JSONObject; - -import android.util.Base64; - -public class CordovaArgs { - private JSONArray baseArgs; - - public CordovaArgs(JSONArray args) { - this.baseArgs = args; - } - - - // Pass through the basics to the base args. - public Object get(int index) throws JSONException { - return baseArgs.get(index); - } - - public boolean getBoolean(int index) throws JSONException { - return baseArgs.getBoolean(index); - } - - public double getDouble(int index) throws JSONException { - return baseArgs.getDouble(index); - } - - public int getInt(int index) throws JSONException { - return baseArgs.getInt(index); - } - - public JSONArray getJSONArray(int index) throws JSONException { - return baseArgs.getJSONArray(index); - } - - public JSONObject getJSONObject(int index) throws JSONException { - return baseArgs.getJSONObject(index); - } - - public long getLong(int index) throws JSONException { - return baseArgs.getLong(index); - } - - public String getString(int index) throws JSONException { - return baseArgs.getString(index); - } - - - public Object opt(int index) { - return baseArgs.opt(index); - } - - public boolean optBoolean(int index) { - return baseArgs.optBoolean(index); - } - - public double optDouble(int index) { - return baseArgs.optDouble(index); - } - - public int optInt(int index) { - return baseArgs.optInt(index); - } - - public JSONArray optJSONArray(int index) { - return baseArgs.optJSONArray(index); - } - - public JSONObject optJSONObject(int index) { - return baseArgs.optJSONObject(index); - } - - public long optLong(int index) { - return baseArgs.optLong(index); - } - - public String optString(int index) { - return baseArgs.optString(index); - } - - public boolean isNull(int index) { - return baseArgs.isNull(index); - } - - - // The interesting custom helpers. - public byte[] getArrayBuffer(int index) throws JSONException { - String encoded = baseArgs.getString(index); - return Base64.decode(encoded, Base64.DEFAULT); - } -} - - diff --git a/mobile/CordovaLib/src/org/apache/cordova/CordovaChromeClient.java b/mobile/CordovaLib/src/org/apache/cordova/CordovaChromeClient.java deleted file mode 100755 index 88f0033ea02..00000000000 --- a/mobile/CordovaLib/src/org/apache/cordova/CordovaChromeClient.java +++ /dev/null @@ -1,409 +0,0 @@ -/* - Licensed to the Apache Software Foundation (ASF) under one - or more contributor license agreements. See the NOTICE file - distributed with this work for additional information - regarding copyright ownership. The ASF licenses this file - to you under the Apache License, Version 2.0 (the - "License"); you may not use this file except in compliance - with the License. You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, - software distributed under the License is distributed on an - "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - KIND, either express or implied. See the License for the - specific language governing permissions and limitations - under the License. -*/ -package org.apache.cordova; - -import org.apache.cordova.CordovaInterface; -//import org.apache.cordova.LOG; -import org.json.JSONArray; -import org.json.JSONException; - -//import android.annotation.TargetApi; -import android.app.AlertDialog; -import android.content.Context; -import android.content.DialogInterface; -import android.content.Intent; -import android.net.Uri; -import android.view.Gravity; -import android.view.KeyEvent; -import android.view.View; -import android.view.ViewGroup.LayoutParams; -import android.webkit.ValueCallback; -import android.widget.EditText; -import android.widget.LinearLayout; -import android.widget.ProgressBar; -import android.widget.RelativeLayout; - -import org.xwalk.core.XWalkJavascriptResult; -import org.xwalk.core.XWalkUIClient; -import org.xwalk.core.XWalkView; - -/** - * This class is the WebChromeClient that implements callbacks for our web view. - * The kind of callbacks that happen here are on the chrome outside the document, - * such as onCreateWindow(), onConsoleMessage(), onProgressChanged(), etc. Related - * to but different than CordovaWebViewClient. - * - * @see WebChromeClient - * @see WebView guide - * @see CordovaWebViewClient - * @see CordovaWebView - */ -public class CordovaChromeClient extends XWalkUIClient { - - public static final int FILECHOOSER_RESULTCODE = 5173; - protected CordovaInterface cordova; - protected CordovaWebView appView; - - // File Chooser - public ValueCallback mUploadMessage; - - boolean isCurrentlyLoading; - private boolean doClearHistory = false; - - /** - * Constructor. - * - * @param cordova - */ - public CordovaChromeClient(CordovaInterface cordova) { - super(null); - this.cordova = cordova; - } - - /** - * Constructor. - * - * @param ctx - * @param app - */ - public CordovaChromeClient(CordovaInterface ctx, CordovaWebView app) { - super(app); - this.cordova = ctx; - this.appView = app; - } - - /** - * Constructor. - * - * @param view - */ - public void setWebView(CordovaWebView view) { - this.appView = view; - } - - @Override - public boolean onJavascriptModalDialog(XWalkView view, JavascriptMessageType type, String url, - String message, String defaultValue, XWalkJavascriptResult result) { - switch(type) { - case JAVASCRIPT_ALERT: - return onJsAlert(view, url, message, result); - case JAVASCRIPT_CONFIRM: - return onJsConfirm(view, url, message, result); - case JAVASCRIPT_PROMPT: - return onJsPrompt(view, url, message, defaultValue, result); - case JAVASCRIPT_BEFOREUNLOAD: - // Reuse onJsConfirm to show the dialog. - return onJsConfirm(view, url, message, result); - default: - break; - } - assert(false); - return false; - } - - /** - * Tell the client to display a javascript alert dialog. - * - * @param view - * @param url - * @param message - * @param result - */ - private boolean onJsAlert(XWalkView view, String url, String message, - final XWalkJavascriptResult result) { - AlertDialog.Builder dlg = new AlertDialog.Builder(this.cordova.getActivity()); - dlg.setMessage(message); - dlg.setTitle("Alert"); - //Don't let alerts break the back button - dlg.setCancelable(true); - dlg.setPositiveButton(android.R.string.ok, - new AlertDialog.OnClickListener() { - public void onClick(DialogInterface dialog, int which) { - result.confirm(); - } - }); - dlg.setOnCancelListener( - new DialogInterface.OnCancelListener() { - public void onCancel(DialogInterface dialog) { - result.cancel(); - } - }); - dlg.setOnKeyListener(new DialogInterface.OnKeyListener() { - //DO NOTHING - public boolean onKey(DialogInterface dialog, int keyCode, KeyEvent event) { - if (keyCode == KeyEvent.KEYCODE_BACK) - { - result.confirm(); - return false; - } - else - return true; - } - }); - dlg.show(); - return true; - } - - /** - * Tell the client to display a confirm dialog to the user. - * - * @param view - * @param url - * @param message - * @param result - */ - private boolean onJsConfirm(XWalkView view, String url, String message, - final XWalkJavascriptResult result) { - AlertDialog.Builder dlg = new AlertDialog.Builder(this.cordova.getActivity()); - dlg.setMessage(message); - dlg.setTitle("Confirm"); - dlg.setCancelable(true); - dlg.setPositiveButton(android.R.string.ok, - new DialogInterface.OnClickListener() { - public void onClick(DialogInterface dialog, int which) { - result.confirm(); - } - }); - dlg.setNegativeButton(android.R.string.cancel, - new DialogInterface.OnClickListener() { - public void onClick(DialogInterface dialog, int which) { - result.cancel(); - } - }); - dlg.setOnCancelListener( - new DialogInterface.OnCancelListener() { - public void onCancel(DialogInterface dialog) { - result.cancel(); - } - }); - dlg.setOnKeyListener(new DialogInterface.OnKeyListener() { - //DO NOTHING - public boolean onKey(DialogInterface dialog, int keyCode, KeyEvent event) { - if (keyCode == KeyEvent.KEYCODE_BACK) - { - result.cancel(); - return false; - } - else - return true; - } - }); - dlg.show(); - return true; - } - - /** - * Tell the client to display a prompt dialog to the user. - * If the client returns true, WebView will assume that the client will - * handle the prompt dialog and call the appropriate JsPromptResult method. - * - * Since we are hacking prompts for our own purposes, we should not be using them for - * this purpose, perhaps we should hack console.log to do this instead! - * - * @param view - * @param url - * @param message - * @param defaultValue - * @param result - */ - private boolean onJsPrompt(XWalkView view, String url, String message, String defaultValue, - XWalkJavascriptResult result) { - - // Security check to make sure any requests are coming from the page initially - // loaded in webview and not another loaded in an iframe. - boolean reqOk = false; - if (url.startsWith("file://") || Config.isUrlWhiteListed(url)) { - reqOk = true; - } - - // Calling PluginManager.exec() to call a native service using - // prompt(this.stringify(args), "gap:"+this.stringify([service, action, callbackId, true])); - if (reqOk && defaultValue != null && defaultValue.length() > 3 && defaultValue.substring(0, 4).equals("gap:")) { - JSONArray array; - try { - array = new JSONArray(defaultValue.substring(4)); - String service = array.getString(0); - String action = array.getString(1); - String callbackId = array.getString(2); - String r = this.appView.exposedJsApi.exec(service, action, callbackId, message); - result.confirmWithResult(r == null ? "" : r); - } catch (JSONException e) { - e.printStackTrace(); - return false; - } - } - - // Sets the native->JS bridge mode. - else if (reqOk && defaultValue != null && defaultValue.equals("gap_bridge_mode:")) { - try { - this.appView.exposedJsApi.setNativeToJsBridgeMode(Integer.parseInt(message)); - result.confirmWithResult(""); - } catch (NumberFormatException e){ - result.confirmWithResult(""); - e.printStackTrace(); - } - } - - // Polling for JavaScript messages - else if (reqOk && defaultValue != null && defaultValue.equals("gap_poll:")) { - String r = this.appView.exposedJsApi.retrieveJsMessages("1".equals(message)); - result.confirmWithResult(r == null ? "" : r); - } - - // Do NO-OP so older code doesn't display dialog - else if (defaultValue != null && defaultValue.equals("gap_init:")) { - result.confirmWithResult("OK"); - } - - // Show dialog - else { - final XWalkJavascriptResult res = result; - AlertDialog.Builder dlg = new AlertDialog.Builder(this.cordova.getActivity()); - dlg.setMessage(message); - final EditText input = new EditText(this.cordova.getActivity()); - if (defaultValue != null) { - input.setText(defaultValue); - } - dlg.setView(input); - dlg.setCancelable(false); - dlg.setPositiveButton(android.R.string.ok, - new DialogInterface.OnClickListener() { - public void onClick(DialogInterface dialog, int which) { - String usertext = input.getText().toString(); - res.confirmWithResult(usertext); - } - }); - dlg.setNegativeButton(android.R.string.cancel, - new DialogInterface.OnClickListener() { - public void onClick(DialogInterface dialog, int which) { - res.cancel(); - } - }); - dlg.show(); - } - return true; - } - - /** - * Notify the host application that a page has started loading. - * This method is called once for each main frame load so a page with iframes or framesets will call onPageStarted - * one time for the main frame. This also means that onPageStarted will not be called when the contents of an - * embedded frame changes, i.e. clicking a link whose target is an iframe. - * - * @param view The webview initiating the callback. - * @param url The url of the page. - */ - @Override - public void onPageLoadStarted(XWalkView view, String url) { - isCurrentlyLoading = true; - - // Flush stale messages. - this.appView.jsMessageQueue.reset(); - - // Broadcast message that page has loaded - this.appView.postMessage("onPageStarted", url); - - // Notify all plugins of the navigation, so they can clean up if necessary. - if (this.appView.pluginManager != null) { - this.appView.pluginManager.onReset(); - } - } - - /** - * Notify the host application that a page has stopped loading. - * This method is called only for main frame. When onPageLoadStopped() is called, the rendering picture may not be updated yet. - * - * - * @param view The webview initiating the callback. - * @param url The url of the page. - * @param status The load status of the webview, can be FINISHED, CANCELLED or FAILED. - */ - @Override - public void onPageLoadStopped(XWalkView view, String url, LoadStatus status) { - // Ignore excessive calls. - if (!isCurrentlyLoading) { - return; - } - isCurrentlyLoading = false; - - /** - * Because of a timing issue we need to clear this history in onPageFinished as well as - * onPageStarted. However we only want to do this if the doClearHistory boolean is set to - * true. You see when you load a url with a # in it which is common in jQuery applications - * onPageStared is not called. Clearing the history at that point would break jQuery apps. - */ - if (this.doClearHistory) { - view.getNavigationHistory().clear(); - this.doClearHistory = false; - } - - // Clear timeout flag - this.appView.loadUrlTimeout++; - - // Broadcast message that page has loaded - this.appView.postMessage("onPageFinished", url); - - // Make app visible after 2 sec in case there was a JS error and Cordova JS never initialized correctly - if (this.appView.getVisibility() == View.INVISIBLE) { - Thread t = new Thread(new Runnable() { - public void run() { - try { - Thread.sleep(2000); - cordova.getActivity().runOnUiThread(new Runnable() { - public void run() { - appView.postMessage("spinner", "stop"); - } - }); - } catch (InterruptedException e) { - } - } - }); - t.start(); - } - - // Shutdown if blank loaded - if (url.equals("about:blank")) { - appView.postMessage("exit", null); - } - } - - @Override - public void openFileChooser(XWalkView view, ValueCallback uploadMsg, String acceptType, - String capture) { - this.openFileChooser(uploadMsg, "*/*"); - } - - public void openFileChooser( ValueCallback uploadMsg, String acceptType ) { - this.openFileChooser(uploadMsg, acceptType, null); - } - - public void openFileChooser(ValueCallback uploadMsg, String acceptType, String capture) - { - mUploadMessage = uploadMsg; - Intent i = new Intent(Intent.ACTION_GET_CONTENT); - i.addCategory(Intent.CATEGORY_OPENABLE); - i.setType("*/*"); - this.cordova.getActivity().startActivityForResult(Intent.createChooser(i, "File Browser"), - FILECHOOSER_RESULTCODE); - } - - public ValueCallback getValueCallback() { - return this.mUploadMessage; - } -} diff --git a/mobile/CordovaLib/src/org/apache/cordova/CordovaInterface.java b/mobile/CordovaLib/src/org/apache/cordova/CordovaInterface.java deleted file mode 100755 index 59ed4864ff2..00000000000 --- a/mobile/CordovaLib/src/org/apache/cordova/CordovaInterface.java +++ /dev/null @@ -1,72 +0,0 @@ -/* - Licensed to the Apache Software Foundation (ASF) under one - or more contributor license agreements. See the NOTICE file - distributed with this work for additional information - regarding copyright ownership. The ASF licenses this file - to you under the Apache License, Version 2.0 (the - "License"); you may not use this file except in compliance - with the License. You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, - software distributed under the License is distributed on an - "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - KIND, either express or implied. See the License for the - specific language governing permissions and limitations - under the License. -*/ -package org.apache.cordova; - -import android.app.Activity; -import android.content.Intent; - -import org.apache.cordova.CordovaPlugin; - -import java.util.concurrent.ExecutorService; - -/** - * The Activity interface that is implemented by CordovaActivity. - * It is used to isolate plugin development, and remove dependency on entire Cordova library. - */ -public interface CordovaInterface { - - /** - * Launch an activity for which you would like a result when it finished. When this activity exits, - * your onActivityResult() method will be called. - * - * @param command The command object - * @param intent The intent to start - * @param requestCode The request code that is passed to callback to identify the activity - */ - abstract public void startActivityForResult(CordovaPlugin command, Intent intent, int requestCode); - - /** - * Set the plugin to be called when a sub-activity exits. - * - * @param plugin The plugin on which onActivityResult is to be called - */ - abstract public void setActivityResultCallback(CordovaPlugin plugin); - - /** - * Get the Android activity. - * - * @return the Activity - */ - public abstract Activity getActivity(); - - - /** - * Called when a message is sent to plugin. - * - * @param id The message id - * @param data The message data - * @return Object or null - */ - public Object onMessage(String id, Object data); - - /** - * Returns a shared thread pool that can be used for background tasks. - */ - public ExecutorService getThreadPool(); -} diff --git a/mobile/CordovaLib/src/org/apache/cordova/CordovaPlugin.java b/mobile/CordovaLib/src/org/apache/cordova/CordovaPlugin.java deleted file mode 100644 index 3ea70561445..00000000000 --- a/mobile/CordovaLib/src/org/apache/cordova/CordovaPlugin.java +++ /dev/null @@ -1,191 +0,0 @@ -/* - Licensed to the Apache Software Foundation (ASF) under one - or more contributor license agreements. See the NOTICE file - distributed with this work for additional information - regarding copyright ownership. The ASF licenses this file - to you under the Apache License, Version 2.0 (the - "License"); you may not use this file except in compliance - with the License. You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, - software distributed under the License is distributed on an - "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - KIND, either express or implied. See the License for the - specific language governing permissions and limitations - under the License. -*/ -package org.apache.cordova; - -import org.apache.cordova.CordovaArgs; -import org.apache.cordova.CordovaWebView; -import org.apache.cordova.CordovaInterface; -import org.apache.cordova.CallbackContext; -import org.json.JSONArray; -import org.json.JSONException; - -import android.content.Intent; -import android.net.Uri; -import android.webkit.CookieSyncManager; - -/** - * Plugins must extend this class and override one of the execute methods. - */ -public class CordovaPlugin { - public String id; - public CordovaWebView webView; // WebView object - public CordovaInterface cordova; - - /** - * @param cordova The context of the main Activity. - * @param webView The associated CordovaWebView. - */ - public void initialize(CordovaInterface cordova, CordovaWebView webView) { - assert this.cordova == null; - this.cordova = cordova; - this.webView = webView; - // File Transfer API implementation leverages the android.webkit.CookieManager. - // But trying to getinstance() of CookieManager before the webview - // instantiated would cause crash. In the cordova with xwalk backend, - // there doesn't exist webview. From the android official document - // (http://developer.android.com/reference/android/webkit/CookieManager.html), - // it requires to call following API first. - // TODO: add condition only for xwalk backend when dynamic switch is ready. - CookieSyncManager.createInstance(cordova.getActivity()); - } - - /** - * Executes the request. - * - * This method is called from the WebView thread. To do a non-trivial amount of work, use: - * cordova.getThreadPool().execute(runnable); - * - * To run on the UI thread, use: - * cordova.getActivity().runOnUiThread(runnable); - * - * @param action The action to execute. - * @param rawArgs The exec() arguments in JSON form. - * @param callbackContext The callback context used when calling back into JavaScript. - * @return Whether the action was valid. - */ - public boolean execute(String action, String rawArgs, CallbackContext callbackContext) throws JSONException { - JSONArray args = new JSONArray(rawArgs); - return execute(action, args, callbackContext); - } - - /** - * Executes the request. - * - * This method is called from the WebView thread. To do a non-trivial amount of work, use: - * cordova.getThreadPool().execute(runnable); - * - * To run on the UI thread, use: - * cordova.getActivity().runOnUiThread(runnable); - * - * @param action The action to execute. - * @param args The exec() arguments. - * @param callbackContext The callback context used when calling back into JavaScript. - * @return Whether the action was valid. - */ - public boolean execute(String action, JSONArray args, CallbackContext callbackContext) throws JSONException { - CordovaArgs cordovaArgs = new CordovaArgs(args); - return execute(action, cordovaArgs, callbackContext); - } - - /** - * Executes the request. - * - * This method is called from the WebView thread. To do a non-trivial amount of work, use: - * cordova.getThreadPool().execute(runnable); - * - * To run on the UI thread, use: - * cordova.getActivity().runOnUiThread(runnable); - * - * @param action The action to execute. - * @param args The exec() arguments, wrapped with some Cordova helpers. - * @param callbackContext The callback context used when calling back into JavaScript. - * @return Whether the action was valid. - */ - public boolean execute(String action, CordovaArgs args, CallbackContext callbackContext) throws JSONException { - return false; - } - - /** - * Called when the system is about to start resuming a previous activity. - * - * @param multitasking Flag indicating if multitasking is turned on for app - */ - public void onPause(boolean multitasking) { - } - - /** - * Called when the activity will start interacting with the user. - * - * @param multitasking Flag indicating if multitasking is turned on for app - */ - public void onResume(boolean multitasking) { - } - - /** - * Called when the activity receives a new intent. - */ - public void onNewIntent(Intent intent) { - } - - /** - * The final call you receive before your activity is destroyed. - */ - public void onDestroy() { - } - - /** - * Called when a message is sent to plugin. - * - * @param id The message id - * @param data The message data - * @return Object to stop propagation or null - */ - public Object onMessage(String id, Object data) { - return null; - } - - /** - * Called when an activity you launched exits, giving you the requestCode you started it with, - * the resultCode it returned, and any additional data from it. - * - * @param requestCode The request code originally supplied to startActivityForResult(), - * allowing you to identify who this result came from. - * @param resultCode The integer result code returned by the child activity through its setResult(). - * @param intent An Intent, which can return result data to the caller (various data can be attached to Intent "extras"). - */ - public void onActivityResult(int requestCode, int resultCode, Intent intent) { - } - - /** - * By specifying a in config.xml you can map a URL (using startsWith atm) to this method. - * - * @param url The URL that is trying to be loaded in the Cordova webview. - * @return Return true to prevent the URL from loading. Default is false. - */ - public boolean onOverrideUrlLoading(String url) { - return false; - } - - /** - * Hook for redirecting requests. Applies to WebView requests as well as requests made by plugins. - */ - public Uri remapUri(Uri uri) { - return null; - } - - /** - * Called when the WebView does a top-level navigation or refreshes. - * - * Plugins should stop any long-running processes and clean up internal state. - * - * Does nothing by default. - */ - public void onReset() { - } -} diff --git a/mobile/CordovaLib/src/org/apache/cordova/CordovaResourceApi.java b/mobile/CordovaLib/src/org/apache/cordova/CordovaResourceApi.java deleted file mode 100644 index f1770fda01a..00000000000 --- a/mobile/CordovaLib/src/org/apache/cordova/CordovaResourceApi.java +++ /dev/null @@ -1,444 +0,0 @@ -/* - Licensed to the Apache Software Foundation (ASF) under one - or more contributor license agreements. See the NOTICE file - distributed with this work for additional information - regarding copyright ownership. The ASF licenses this file - to you under the Apache License, Version 2.0 (the - "License"); you may not use this file except in compliance - with the License. You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, - software distributed under the License is distributed on an - "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - KIND, either express or implied. See the License for the - specific language governing permissions and limitations - under the License. - */ -package org.apache.cordova; - -import android.content.ContentResolver; -import android.content.Context; -import android.content.res.AssetFileDescriptor; -import android.content.res.AssetManager; -import android.database.Cursor; -import android.net.Uri; -import android.os.Looper; -import android.util.Base64; -import android.webkit.MimeTypeMap; - -import com.squareup.okhttp.OkHttpClient; - -import org.apache.http.util.EncodingUtils; - -import java.io.ByteArrayInputStream; -import java.io.File; -import java.io.FileInputStream; -import java.io.FileNotFoundException; -import java.io.FileOutputStream; -import java.io.IOException; -import java.io.InputStream; -import java.io.OutputStream; -import java.net.HttpURLConnection; -import java.net.URL; -import java.nio.channels.FileChannel; -import java.util.Locale; - -/** - * What this class provides: - * 1. Helpers for reading & writing to URLs. - * - E.g. handles assets, resources, content providers, files, data URIs, http[s] - * - E.g. Can be used to query for mime-type & content length. - * - * 2. To allow plugins to redirect URLs (via remapUrl). - * - All plugins should call remapUrl() on URLs they receive from JS *before* - * passing the URL onto other utility functions in this class. - * - For an example usage of this, refer to the org.apache.cordova.file plugin. - * - * 3. It exposes a way to use the OkHttp library that ships with Cordova. - * - Through createHttpConnection(). - * - * Future Work: - * - Consider using a Cursor to query content URLs for their size (like the file plugin does). - * - Allow plugins to remapUri to "cdv-plugin://plugin-name/$ID", which CordovaResourceApi - * would then delegate to pluginManager.getPlugin(plugin-name).openForRead($ID) - * - Currently, plugins *can* do this by remapping to a data: URL, but it's inefficient - * for large payloads. - */ -public class CordovaResourceApi { - @SuppressWarnings("unused") - private static final String LOG_TAG = "CordovaResourceApi"; - - public static final int URI_TYPE_FILE = 0; - public static final int URI_TYPE_ASSET = 1; - public static final int URI_TYPE_CONTENT = 2; - public static final int URI_TYPE_RESOURCE = 3; - public static final int URI_TYPE_DATA = 4; - public static final int URI_TYPE_HTTP = 5; - public static final int URI_TYPE_HTTPS = 6; - public static final int URI_TYPE_UNKNOWN = -1; - - private static final String[] LOCAL_FILE_PROJECTION = { "_data" }; - - // Creating this is light-weight. - private static OkHttpClient httpClient = new OkHttpClient(); - - static Thread jsThread; - - private final AssetManager assetManager; - private final ContentResolver contentResolver; - private final PluginManager pluginManager; - private boolean threadCheckingEnabled = true; - - - public CordovaResourceApi(Context context, PluginManager pluginManager) { - this.contentResolver = context.getContentResolver(); - this.assetManager = context.getAssets(); - this.pluginManager = pluginManager; - } - - public void setThreadCheckingEnabled(boolean value) { - threadCheckingEnabled = value; - } - - public boolean isThreadCheckingEnabled() { - return threadCheckingEnabled; - } - - public static int getUriType(Uri uri) { - assertNonRelative(uri); - String scheme = uri.getScheme(); - if (ContentResolver.SCHEME_CONTENT.equals(scheme)) { - return URI_TYPE_CONTENT; - } - if (ContentResolver.SCHEME_ANDROID_RESOURCE.equals(scheme)) { - return URI_TYPE_RESOURCE; - } - if (ContentResolver.SCHEME_FILE.equals(scheme)) { - if (uri.getPath().startsWith("/android_asset/")) { - return URI_TYPE_ASSET; - } - return URI_TYPE_FILE; - } - if ("data".equals(scheme)) { - return URI_TYPE_DATA; - } - if ("http".equals(scheme)) { - return URI_TYPE_HTTP; - } - if ("https".equals(scheme)) { - return URI_TYPE_HTTPS; - } - return URI_TYPE_UNKNOWN; - } - - public Uri remapUri(Uri uri) { - assertNonRelative(uri); - Uri pluginUri = pluginManager.remapUri(uri); - return pluginUri != null ? pluginUri : uri; - } - - public String remapPath(String path) { - return remapUri(Uri.fromFile(new File(path))).getPath(); - } - - /** - * Returns a File that points to the resource, or null if the resource - * is not on the local filesystem. - */ - public File mapUriToFile(Uri uri) { - assertBackgroundThread(); - switch (getUriType(uri)) { - case URI_TYPE_FILE: - return new File(uri.getPath()); - case URI_TYPE_CONTENT: { - Cursor cursor = contentResolver.query(uri, LOCAL_FILE_PROJECTION, null, null, null); - if (cursor != null) { - try { - int columnIndex = cursor.getColumnIndex(LOCAL_FILE_PROJECTION[0]); - if (columnIndex != -1 && cursor.getCount() > 0) { - cursor.moveToFirst(); - String realPath = cursor.getString(columnIndex); - if (realPath != null) { - return new File(realPath); - } - } - } finally { - cursor.close(); - } - } - } - } - return null; - } - - public String getMimeType(Uri uri) { - switch (getUriType(uri)) { - case URI_TYPE_FILE: - case URI_TYPE_ASSET: - return getMimeTypeFromPath(uri.getPath()); - case URI_TYPE_CONTENT: - case URI_TYPE_RESOURCE: - return contentResolver.getType(uri); - case URI_TYPE_DATA: { - return getDataUriMimeType(uri); - } - case URI_TYPE_HTTP: - case URI_TYPE_HTTPS: { - try { - HttpURLConnection conn = httpClient.open(new URL(uri.toString())); - conn.setDoInput(false); - conn.setRequestMethod("HEAD"); - return conn.getHeaderField("Content-Type"); - } catch (IOException e) { - } - } - } - - return null; - } - - private String getMimeTypeFromPath(String path) { - String extension = path; - int lastDot = extension.lastIndexOf('.'); - if (lastDot != -1) { - extension = extension.substring(lastDot + 1); - } - // Convert the URI string to lower case to ensure compatibility with MimeTypeMap (see CB-2185). - extension = extension.toLowerCase(Locale.getDefault()); - if (extension.equals("3ga")) { - return "audio/3gpp"; - } else if (extension.equals("js")) { - // Missing from the map :(. - return "text/javascript"; - } - return MimeTypeMap.getSingleton().getMimeTypeFromExtension(extension); - } - - /** - * Opens a stream to the givne URI, also providing the MIME type & length. - * @return Never returns null. - * @throws Throws an InvalidArgumentException for relative URIs. Relative URIs should be - * resolved before being passed into this function. - * @throws Throws an IOException if the URI cannot be opened. - * @throws Throws an IllegalStateException if called on a foreground thread. - */ - public OpenForReadResult openForRead(Uri uri) throws IOException { - return openForRead(uri, false); - } - - /** - * Opens a stream to the givne URI, also providing the MIME type & length. - * @return Never returns null. - * @throws Throws an InvalidArgumentException for relative URIs. Relative URIs should be - * resolved before being passed into this function. - * @throws Throws an IOException if the URI cannot be opened. - * @throws Throws an IllegalStateException if called on a foreground thread and skipThreadCheck is false. - */ - public OpenForReadResult openForRead(Uri uri, boolean skipThreadCheck) throws IOException { - if (!skipThreadCheck) { - assertBackgroundThread(); - } - switch (getUriType(uri)) { - case URI_TYPE_FILE: { - FileInputStream inputStream = new FileInputStream(uri.getPath()); - String mimeType = getMimeTypeFromPath(uri.getPath()); - long length = inputStream.getChannel().size(); - return new OpenForReadResult(uri, inputStream, mimeType, length, null); - } - case URI_TYPE_ASSET: { - String assetPath = uri.getPath().substring(15); - AssetFileDescriptor assetFd = null; - InputStream inputStream; - long length = -1; - try { - assetFd = assetManager.openFd(assetPath); - inputStream = assetFd.createInputStream(); - length = assetFd.getLength(); - } catch (FileNotFoundException e) { - // Will occur if the file is compressed. - inputStream = assetManager.open(assetPath); - } - String mimeType = getMimeTypeFromPath(assetPath); - return new OpenForReadResult(uri, inputStream, mimeType, length, assetFd); - } - case URI_TYPE_CONTENT: - case URI_TYPE_RESOURCE: { - String mimeType = contentResolver.getType(uri); - AssetFileDescriptor assetFd = contentResolver.openAssetFileDescriptor(uri, "r"); - InputStream inputStream = assetFd.createInputStream(); - long length = assetFd.getLength(); - return new OpenForReadResult(uri, inputStream, mimeType, length, assetFd); - } - case URI_TYPE_DATA: { - OpenForReadResult ret = readDataUri(uri); - if (ret == null) { - break; - } - return ret; - } - case URI_TYPE_HTTP: - case URI_TYPE_HTTPS: { - HttpURLConnection conn = httpClient.open(new URL(uri.toString())); - conn.setDoInput(true); - String mimeType = conn.getHeaderField("Content-Type"); - int length = conn.getContentLength(); - InputStream inputStream = conn.getInputStream(); - return new OpenForReadResult(uri, inputStream, mimeType, length, null); - } - } - throw new FileNotFoundException("URI not supported by CordovaResourceApi: " + uri); - } - - public OutputStream openOutputStream(Uri uri) throws IOException { - return openOutputStream(uri, false); - } - - /** - * Opens a stream to the given URI. - * @return Never returns null. - * @throws Throws an InvalidArgumentException for relative URIs. Relative URIs should be - * resolved before being passed into this function. - * @throws Throws an IOException if the URI cannot be opened. - */ - public OutputStream openOutputStream(Uri uri, boolean append) throws IOException { - assertBackgroundThread(); - switch (getUriType(uri)) { - case URI_TYPE_FILE: { - File localFile = new File(uri.getPath()); - File parent = localFile.getParentFile(); - if (parent != null) { - parent.mkdirs(); - } - return new FileOutputStream(localFile, append); - } - case URI_TYPE_CONTENT: - case URI_TYPE_RESOURCE: { - AssetFileDescriptor assetFd = contentResolver.openAssetFileDescriptor(uri, append ? "wa" : "w"); - return assetFd.createOutputStream(); - } - } - throw new FileNotFoundException("URI not supported by CordovaResourceApi: " + uri); - } - - public HttpURLConnection createHttpConnection(Uri uri) throws IOException { - assertBackgroundThread(); - return httpClient.open(new URL(uri.toString())); - } - - // Copies the input to the output in the most efficient manner possible. - // Closes both streams. - public void copyResource(OpenForReadResult input, OutputStream outputStream) throws IOException { - assertBackgroundThread(); - try { - InputStream inputStream = input.inputStream; - if (inputStream instanceof FileInputStream && outputStream instanceof FileOutputStream) { - FileChannel inChannel = ((FileInputStream)input.inputStream).getChannel(); - FileChannel outChannel = ((FileOutputStream)outputStream).getChannel(); - long offset = 0; - long length = input.length; - if (input.assetFd != null) { - offset = input.assetFd.getStartOffset(); - } - outChannel.transferFrom(inChannel, offset, length); - } else { - final int BUFFER_SIZE = 8192; - byte[] buffer = new byte[BUFFER_SIZE]; - - for (;;) { - int bytesRead = inputStream.read(buffer, 0, BUFFER_SIZE); - - if (bytesRead <= 0) { - break; - } - outputStream.write(buffer, 0, bytesRead); - } - } - } finally { - input.inputStream.close(); - if (outputStream != null) { - outputStream.close(); - } - } - } - - public void copyResource(Uri sourceUri, OutputStream outputStream) throws IOException { - copyResource(openForRead(sourceUri), outputStream); - } - - // Added in 3.5.0. - public void copyResource(Uri sourceUri, Uri dstUri) throws IOException { - copyResource(openForRead(sourceUri), openOutputStream(dstUri)); - } - - private void assertBackgroundThread() { - if (threadCheckingEnabled) { - Thread curThread = Thread.currentThread(); - if (curThread == Looper.getMainLooper().getThread()) { - throw new IllegalStateException("Do not perform IO operations on the UI thread. Use CordovaInterface.getThreadPool() instead."); - } - if (curThread == jsThread) { - throw new IllegalStateException("Tried to perform an IO operation on the WebCore thread. Use CordovaInterface.getThreadPool() instead."); - } - } - } - - private String getDataUriMimeType(Uri uri) { - String uriAsString = uri.getSchemeSpecificPart(); - int commaPos = uriAsString.indexOf(','); - if (commaPos == -1) { - return null; - } - String[] mimeParts = uriAsString.substring(0, commaPos).split(";"); - if (mimeParts.length > 0) { - return mimeParts[0]; - } - return null; - } - - private OpenForReadResult readDataUri(Uri uri) { - String uriAsString = uri.getSchemeSpecificPart(); - int commaPos = uriAsString.indexOf(','); - if (commaPos == -1) { - return null; - } - String[] mimeParts = uriAsString.substring(0, commaPos).split(";"); - String contentType = null; - boolean base64 = false; - if (mimeParts.length > 0) { - contentType = mimeParts[0]; - } - for (int i = 1; i < mimeParts.length; ++i) { - if ("base64".equalsIgnoreCase(mimeParts[i])) { - base64 = true; - } - } - String dataPartAsString = uriAsString.substring(commaPos + 1); - byte[] data = base64 ? Base64.decode(dataPartAsString, Base64.DEFAULT) : EncodingUtils.getBytes(dataPartAsString, "UTF-8"); - InputStream inputStream = new ByteArrayInputStream(data); - return new OpenForReadResult(uri, inputStream, contentType, data.length, null); - } - - private static void assertNonRelative(Uri uri) { - if (!uri.isAbsolute()) { - throw new IllegalArgumentException("Relative URIs are not supported."); - } - } - - public static final class OpenForReadResult { - public final Uri uri; - public final InputStream inputStream; - public final String mimeType; - public final long length; - public final AssetFileDescriptor assetFd; - - OpenForReadResult(Uri uri, InputStream inputStream, String mimeType, long length, AssetFileDescriptor assetFd) { - this.uri = uri; - this.inputStream = inputStream; - this.mimeType = mimeType; - this.length = length; - this.assetFd = assetFd; - } - } -} diff --git a/mobile/CordovaLib/src/org/apache/cordova/CordovaWebView.java b/mobile/CordovaLib/src/org/apache/cordova/CordovaWebView.java deleted file mode 100755 index dd63bd12344..00000000000 --- a/mobile/CordovaLib/src/org/apache/cordova/CordovaWebView.java +++ /dev/null @@ -1,946 +0,0 @@ -/* - Licensed to the Apache Software Foundation (ASF) under one - or more contributor license agreements. See the NOTICE file - distributed with this work for additional information - regarding copyright ownership. The ASF licenses this file - to you under the Apache License, Version 2.0 (the - "License"); you may not use this file except in compliance - with the License. You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, - software distributed under the License is distributed on an - "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - KIND, either express or implied. See the License for the - specific language governing permissions and limitations - under the License. -*/ - -package org.apache.cordova; - -import java.lang.reflect.InvocationTargetException; -import java.lang.reflect.Method; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.Locale; - -import org.apache.cordova.Config; -import org.apache.cordova.CordovaInterface; -import org.apache.cordova.LOG; -import org.apache.cordova.PluginManager; -import org.apache.cordova.PluginResult; - -import android.app.Activity; -import android.annotation.SuppressLint; -import android.annotation.TargetApi; -import android.content.BroadcastReceiver; -import android.content.Context; -import android.content.Intent; -import android.content.IntentFilter; -import android.content.pm.ApplicationInfo; -import android.content.pm.PackageManager; -import android.content.pm.PackageManager.NameNotFoundException; -import android.net.Uri; -import android.os.Build; -import android.os.Bundle; -import android.util.AttributeSet; -import android.util.Log; -import android.view.Gravity; -import android.view.KeyEvent; -import android.view.View; -import android.view.ViewGroup; -import android.view.WindowManager; -import android.view.inputmethod.InputMethodManager; -//import android.webkit.WebBackForwardList; -//import android.webkit.WebHistoryItem; -//import android.webkit.WebChromeClient; -//import android.webkit.WebSettings; -//import android.webkit.WebView; -//import android.webkit.WebSettings.LayoutAlgorithm; -import android.widget.FrameLayout; - -import org.xwalk.core.XWalkNavigationHistory; -import org.xwalk.core.XWalkNavigationItem; -import org.xwalk.core.XWalkPreferences; -import org.xwalk.core.XWalkView; - -/* - * This class is our web view. - * - * @see WebView guide - * @see WebView - */ -public class CordovaWebView extends XWalkView { - - public static final String TAG = "CordovaWebView"; - public static final String CORDOVA_VERSION = "3.5.0"; - - private ArrayList keyDownCodes = new ArrayList(); - private ArrayList keyUpCodes = new ArrayList(); - - public PluginManager pluginManager; - private boolean paused; - - private BroadcastReceiver receiver; - - - /** Activities and other important classes **/ - private CordovaInterface cordova; - CordovaWebViewClient viewClient; - @SuppressWarnings("unused") - private CordovaChromeClient chromeClient; - - private String url; - - // Flag to track that a loadUrl timeout occurred - int loadUrlTimeout = 0; - - private boolean bound; - - private boolean handleButton = false; - - private long lastMenuEventTime = 0; - - NativeToJsMessageQueue jsMessageQueue; - ExposedJsApi exposedJsApi; - - private ActivityResult mResult = null; - - private CordovaResourceApi resourceApi; - - class ActivityResult { - - int request; - int result; - Intent incoming; - - public ActivityResult(int req, int res, Intent intent) { - request = req; - result = res; - incoming = intent; - } - - - } - - static final FrameLayout.LayoutParams COVER_SCREEN_GRAVITY_CENTER = - new FrameLayout.LayoutParams( - ViewGroup.LayoutParams.MATCH_PARENT, - ViewGroup.LayoutParams.MATCH_PARENT, - Gravity.CENTER); - - /** - * Constructor. - * - * @param context - */ - public CordovaWebView(Context context) { - super(context, (Activity)null); - if (CordovaInterface.class.isInstance(context)) - { - this.cordova = (CordovaInterface) context; - } - else - { - Log.d(TAG, "Your activity must implement CordovaInterface to work"); - } - this.loadConfiguration(); - this.setup(); - } - - /** - * Constructor. - * - * @param context - * @param attrs - */ - public CordovaWebView(Context context, AttributeSet attrs) { - super(context, attrs); - if (CordovaInterface.class.isInstance(context)) - { - this.cordova = (CordovaInterface) context; - } - else - { - Log.d(TAG, "Your activity must implement CordovaInterface to work"); - } - this.setWebChromeClient(new CordovaChromeClient(this.cordova, this)); - this.initWebViewClient(this.cordova); - this.loadConfiguration(); - this.setup(); - } - - /** - * Constructor. - * - * @param context - * @param attrs - * @param defStyle - * - */ - public CordovaWebView(Context context, AttributeSet attrs, int defStyle) { - super(context, attrs); - if (CordovaInterface.class.isInstance(context)) - { - this.cordova = (CordovaInterface) context; - } - else - { - Log.d(TAG, "Your activity must implement CordovaInterface to work"); - } - this.setWebChromeClient(new CordovaChromeClient(this.cordova, this)); - this.loadConfiguration(); - this.setup(); - } - - /** - * Constructor. - * - * @param context - * @param attrs - * @param defStyle - * @param privateBrowsing - */ - @TargetApi(11) - public CordovaWebView(Context context, AttributeSet attrs, int defStyle, boolean privateBrowsing) { - super(context, attrs); - if (CordovaInterface.class.isInstance(context)) - { - this.cordova = (CordovaInterface) context; - } - else - { - Log.d(TAG, "Your activity must implement CordovaInterface to work"); - } - this.setWebChromeClient(new CordovaChromeClient(this.cordova)); - this.initWebViewClient(this.cordova); - this.loadConfiguration(); - this.setup(); - } - - /** - * set the WebViewClient, but provide special case handling for IceCreamSandwich. - */ - private void initWebViewClient(CordovaInterface cordova) { - if(android.os.Build.VERSION.SDK_INT < android.os.Build.VERSION_CODES.HONEYCOMB || - android.os.Build.VERSION.SDK_INT > android.os.Build.VERSION_CODES.JELLY_BEAN_MR1) - { - this.setWebViewClient(new CordovaWebViewClient(this.cordova, this)); - } - else - { - this.setWebViewClient(new IceCreamCordovaWebViewClient(this.cordova, this)); - } - } - - /** - * Initialize webview. - */ - @SuppressWarnings("deprecation") - @SuppressLint("NewApi") - private void setup() { - // this.setInitialScale(0); - this.setVerticalScrollBarEnabled(false); - if (shouldRequestFocusOnInit()) { - this.requestFocusFromTouch(); - } - - // Enable JavaScript - //XWalkSettings settings = this.getSettings(); - //if (settings == null) return; - // wang16: covered by XWalkPreferences setting in static code. - //settings.setJavaScriptEnabled(true); - //settings.setJavaScriptCanOpenWindowsAutomatically(true); - // nhu: N/A - //settings.setLayoutAlgorithm(LayoutAlgorithm.NORMAL); - - //We don't save any form data in the application - // nhu: N/A - //settings.setSaveFormData(false); - //settings.setSavePassword(false); - - // wang16: covered by XWalkPreferences setting in static code. - //settings.setAllowUniversalAccessFromFileURLs(true); - // Enable database - // We keep this disabled because we use or shim to get around DOM_EXCEPTION_ERROR_16 - String databasePath = this.cordova.getActivity().getApplicationContext().getDir("database", Context.MODE_PRIVATE).getPath(); - //settings.setDatabaseEnabled(true); - //TODO: bring it back when it's ready in the XWalk. - //settings.setDatabasePath(databasePath); - - - //Determine whether we're in debug or release mode, and turn on Debugging! - try { - final String packageName = this.cordova.getActivity().getPackageName(); - final PackageManager pm = this.cordova.getActivity().getPackageManager(); - ApplicationInfo appInfo; - - appInfo = pm.getApplicationInfo(packageName, PackageManager.GET_META_DATA); - - if((appInfo.flags & ApplicationInfo.FLAG_DEBUGGABLE) != 0) { - enableRemoteDebugging(); - } - } catch (IllegalArgumentException e) { - Log.d(TAG, "You have one job! To turn on Remote Web Debugging! YOU HAVE FAILED! "); - e.printStackTrace(); - } catch (NameNotFoundException e) { - Log.d(TAG, "This should never happen: Your application's package can't be found."); - e.printStackTrace(); - } - - //settings.setGeolocationDatabasePath(databasePath); - - // Enable DOM storage - // wang16: default value in xwalk is true. - //settings.setDomStorageEnabled(true); - - // Enable built-in geolocation - // wang16: default value in xwalk is true. - //settings.setGeolocationEnabled(true); - - // Enable AppCache - // Fix for CB-2282 - // nhu: N/A - //settings.setAppCacheMaxSize(5 * 1048576); - String pathToCache = this.cordova.getActivity().getApplicationContext().getDir("database", Context.MODE_PRIVATE).getPath(); - // wang16: setAppCachePath is not implemented in xwalk indeed. - //settings.setAppCachePath(pathToCache); - // wang16: default value in xwalk is true. - //settings.setAppCacheEnabled(true); - - pluginManager = new PluginManager(this, this.cordova); - jsMessageQueue = new NativeToJsMessageQueue(this, cordova); - exposedJsApi = new ExposedJsApi(pluginManager, jsMessageQueue); - resourceApi = new CordovaResourceApi(this.getContext(), pluginManager); - exposeJsInterface(); - } - - public void enableRemoteDebugging() { - XWalkPreferences.setValue(XWalkPreferences.REMOTE_DEBUGGING, true); - } - - /** - * Override this method to decide whether or not you need to request the - * focus when your application start - * - * @return true unless this method is overriden to return a different value - */ - protected boolean shouldRequestFocusOnInit() { - return true; - } - - private void exposeJsInterface() { - int SDK_INT = Build.VERSION.SDK_INT; - if ((SDK_INT < Build.VERSION_CODES.JELLY_BEAN_MR1)) { - Log.i(TAG, "Disabled addJavascriptInterface() bridge since Android version is old."); - // Bug being that Java Strings do not get converted to JS strings automatically. - // This isn't hard to work-around on the JS side, but it's easier to just - // use the prompt bridge instead. - return; - } - this.addJavascriptInterface(exposedJsApi, "_cordovaNative"); - } - - /** - * Set the WebViewClient. - * - * @param client - */ - public void setWebViewClient(CordovaWebViewClient client) { - this.viewClient = client; - super.setResourceClient(client); - } - - /** - * Set the WebChromeClient. - * - * @param client - */ - public void setWebChromeClient(CordovaChromeClient client) { - this.chromeClient = client; - super.setUIClient(client); - } - - public CordovaChromeClient getWebChromeClient() { - return this.chromeClient; - } - - /** - * Load the url into the webview. - * - * @param url - */ - @Override - public void load(String url, String content) { - if (url.equals("about:blank") || url.startsWith("javascript:")) { - this.loadUrlNow(url); - } - else { - - String initUrl = this.getProperty("url", null); - - // If first page of app, then set URL to load to be the one passed in - if (initUrl == null) { - this.loadUrlIntoView(url); - } - // Otherwise use the URL specified in the activity's extras bundle - else { - this.loadUrlIntoView(initUrl); - } - } - } - - public void loadUrl(String url) { - load(url, null); - } - - /** - * Load the url into the webview after waiting for period of time. - * This is used to display the splashscreen for certain amount of time. - * - * @param url - * @param time The number of ms to wait before loading webview - */ - public void loadUrl(final String url, int time) { - String initUrl = this.getProperty("url", null); - - // If first page of app, then set URL to load to be the one passed in - if (initUrl == null) { - this.loadUrlIntoView(url, time); - } - // Otherwise use the URL specified in the activity's extras bundle - else { - this.loadUrlIntoView(initUrl); - } - } - - public void loadUrlIntoView(final String url) { - loadUrlIntoView(url, true); - } - - /** - * Load the url into the webview. - * - * @param url - */ - public void loadUrlIntoView(final String url, boolean recreatePlugins) { - LOG.d(TAG, ">>> loadUrl(" + url + ")"); - - if (recreatePlugins) { - this.url = url; - if (this.pluginManager != null) { - this.pluginManager.init(); - } - } - - // Create a timeout timer for loadUrl - final CordovaWebView me = this; - final int currentLoadUrlTimeout = me.loadUrlTimeout; - final int loadUrlTimeoutValue = Integer.parseInt(this.getProperty("LoadUrlTimeoutValue", "20000")); - - // Timeout error method - final Runnable loadError = new Runnable() { - public void run() { - me.stopLoading(); - LOG.e(TAG, "CordovaWebView: TIMEOUT ERROR!"); - if (viewClient != null) { - viewClient.onReceivedLoadError(me, -6, "The connection to the server was unsuccessful.", url); - } - } - }; - - // Timeout timer method - final Runnable timeoutCheck = new Runnable() { - public void run() { - try { - synchronized (this) { - wait(loadUrlTimeoutValue); - } - } catch (InterruptedException e) { - e.printStackTrace(); - } - - // If timeout, then stop loading and handle error - if (me.loadUrlTimeout == currentLoadUrlTimeout) { - me.cordova.getActivity().runOnUiThread(loadError); - } - } - }; - - // Load url - this.cordova.getActivity().runOnUiThread(new Runnable() { - public void run() { - cordova.getThreadPool().execute(timeoutCheck); - me.loadUrlNow(url); - } - }); - } - - /** - * Load URL in webview. - * - * @param url - */ - void loadUrlNow(String url) { - if (LOG.isLoggable(LOG.DEBUG) && !url.startsWith("javascript:")) { - LOG.d(TAG, ">>> loadUrlNow()"); - } - if (url.startsWith("file://") || url.startsWith("javascript:") || Config.isUrlWhiteListed(url)) { - super.load(url, null); - } - } - - /** - * Load the url into the webview after waiting for period of time. - * This is used to display the splashscreen for certain amount of time. - * - * @param url - * @param time The number of ms to wait before loading webview - */ - public void loadUrlIntoView(final String url, final int time) { - - // If not first page of app, then load immediately - // Add support for browser history if we use it. - if ((url.startsWith("javascript:")) || this.getNavigationHistory().canGoBack()) { - } - - // If first page, then show splashscreen - else { - - LOG.d(TAG, "loadUrlIntoView(%s, %d)", url, time); - - // Send message to show splashscreen now if desired - this.postMessage("splashscreen", "show"); - } - - // Load url - this.loadUrlIntoView(url); - } - - @Override - public void stopLoading() { - chromeClient.isCurrentlyLoading = false; - super.stopLoading(); - } - - public void onScrollChanged(int l, int t, int oldl, int oldt) - { - super.onScrollChanged(l, t, oldl, oldt); - //We should post a message that the scroll changed - ScrollEvent myEvent = new ScrollEvent(l, t, oldl, oldt, this); - this.postMessage("onScrollChanged", myEvent); - } - - /** - * Send JavaScript statement back to JavaScript. - * (This is a convenience method) - * - * @param statement - */ - public void sendJavascript(String statement) { - this.jsMessageQueue.addJavaScript(statement); - } - - /** - * Send a plugin result back to JavaScript. - * (This is a convenience method) - * - * @param result - * @param callbackId - */ - public void sendPluginResult(PluginResult result, String callbackId) { - this.jsMessageQueue.addPluginResult(result, callbackId); - } - - /** - * Send a message to all plugins. - * - * @param id The message id - * @param data The message data - */ - public void postMessage(String id, Object data) { - if (this.pluginManager != null) { - this.pluginManager.postMessage(id, data); - } - } - - - /** - * Go to previous page in history. (We manage our own history) - * - * @return true if we went back, false if we are already at top - */ - public boolean backHistory() { - - // Check webview first to see if there is a history - // This is needed to support curPage#diffLink, since they are added to appView's history, but not our history url array (JQMobile behavior) - if (super.getNavigationHistory().canGoBack()) { - printBackForwardList(); - - super.getNavigationHistory().navigate(XWalkNavigationHistory.Direction.BACKWARD, 1); - return true; - } - return false; - } - - - /** - * Load the specified URL in the Cordova webview or a new browser instance. - * - * NOTE: If openExternal is false, only URLs listed in whitelist can be loaded. - * - * @param url The url to load. - * @param openExternal Load url in browser instead of Cordova webview. - * @param clearHistory Clear the history stack, so new page becomes top of history - * @param params Parameters for new app - */ - public void showWebPage(String url, boolean openExternal, boolean clearHistory, HashMap params) { - LOG.d(TAG, "showWebPage(%s, %b, %b, HashMap", url, openExternal, clearHistory); - - // If clearing history - if (clearHistory) { - this.getNavigationHistory().clear(); - } - - // If loading into our webview - if (!openExternal) { - - // Make sure url is in whitelist - if (url.startsWith("file://") || Config.isUrlWhiteListed(url)) { - // TODO: What about params? - // Load new URL - this.loadUrl(url); - return; - } - // Load in default viewer if not - LOG.w(TAG, "showWebPage: Cannot load URL into webview since it is not in white list. Loading into browser instead. (URL=" + url + ")"); - } - try { - // Omitting the MIME type for file: URLs causes "No Activity found to handle Intent". - // Adding the MIME type to http: URLs causes them to not be handled by the downloader. - Intent intent = new Intent(Intent.ACTION_VIEW); - Uri uri = Uri.parse(url); - if ("file".equals(uri.getScheme())) { - intent.setDataAndType(uri, resourceApi.getMimeType(uri)); - } else { - intent.setData(uri); - } - cordova.getActivity().startActivity(intent); - } catch (android.content.ActivityNotFoundException e) { - LOG.e(TAG, "Error loading url " + url, e); - } - } - - /** - * Check configuration parameters from Config. - * Approved list of URLs that can be loaded into Cordova - * - * Log level: ERROR, WARN, INFO, DEBUG, VERBOSE (default=ERROR) - * - */ - private void loadConfiguration() { - - if ("true".equals(this.getProperty("Fullscreen", "false"))) { - this.cordova.getActivity().getWindow().clearFlags(WindowManager.LayoutParams.FLAG_FORCE_NOT_FULLSCREEN); - this.cordova.getActivity().getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN); - } - } - - /** - * Get string property for activity. - * - * @param name - * @param defaultValue - * @return the String value for the named property - */ - public String getProperty(String name, String defaultValue) { - Bundle bundle = this.cordova.getActivity().getIntent().getExtras(); - if (bundle == null) { - return defaultValue; - } - name = name.toLowerCase(Locale.getDefault()); - Object p = bundle.get(name); - if (p == null) { - return defaultValue; - } - return p.toString(); - } - - /* - * onKeyDown - */ - @Override - public boolean onKeyDown(int keyCode, KeyEvent event) - { - if(keyDownCodes.contains(keyCode)) - { - if (keyCode == KeyEvent.KEYCODE_VOLUME_DOWN) { - // only override default behavior is event bound - LOG.d(TAG, "Down Key Hit"); - this.loadUrl("javascript:cordova.fireDocumentEvent('volumedownbutton');"); - return true; - } - // If volumeup key - else if (keyCode == KeyEvent.KEYCODE_VOLUME_UP) { - LOG.d(TAG, "Up Key Hit"); - this.loadUrl("javascript:cordova.fireDocumentEvent('volumeupbutton');"); - return true; - } - else - { - return super.onKeyDown(keyCode, event); - } - } - else if(keyCode == KeyEvent.KEYCODE_BACK) - { - return !(this.startOfHistory()) || this.bound; - } - else if(keyCode == KeyEvent.KEYCODE_MENU) - { - //How did we get here? Is there a childView? - View childView = this.getFocusedChild(); - if(childView != null) - { - //Make sure we close the keyboard if it's present - InputMethodManager imm = (InputMethodManager) cordova.getActivity().getSystemService(Context.INPUT_METHOD_SERVICE); - imm.hideSoftInputFromWindow(childView.getWindowToken(), 0); - cordova.getActivity().openOptionsMenu(); - return true; - } else { - return super.onKeyDown(keyCode, event); - } - } - - return super.onKeyDown(keyCode, event); - } - - - @Override - public boolean dispatchKeyEvent(KeyEvent event) - { - if (event.getAction() != KeyEvent.ACTION_UP) { - return super.dispatchKeyEvent(event); - } - int keyCode = event.getKeyCode(); - // If back key - if (keyCode == KeyEvent.KEYCODE_BACK) { - // A custom view is currently displayed (e.g. playing a video) - if (this.hasEnteredFullscreen()) { - this.leaveFullscreen(); - return true; - } else { - // The webview is currently displayed - // If back key is bound, then send event to JavaScript - if (this.bound) { - this.loadUrl("javascript:cordova.fireDocumentEvent('backbutton');"); - return true; - } else { - // If not bound - // Go to previous page in webview if it is possible to go back - if (this.backHistory()) { - return true; - } - // If not, then invoke default behavior - else { - //this.activityState = ACTIVITY_EXITING; - //return false; - // If they hit back button when app is initializing, app should exit instead of hang until initialization (CB2-458) - this.cordova.getActivity().finish(); - return false; - } - } - } - } - // Legacy - else if (keyCode == KeyEvent.KEYCODE_MENU) { - if (this.lastMenuEventTime < event.getEventTime()) { - this.loadUrl("javascript:cordova.fireDocumentEvent('menubutton');"); - } - this.lastMenuEventTime = event.getEventTime(); - return super.dispatchKeyEvent(event); - } - // If search key - else if (keyCode == KeyEvent.KEYCODE_SEARCH) { - this.loadUrl("javascript:cordova.fireDocumentEvent('searchbutton');"); - return true; - } - else if(keyUpCodes.contains(keyCode)) - { - //What the hell should this do? - return super.dispatchKeyEvent(event); - } - - //Does webkit change this behavior? - return super.dispatchKeyEvent(event); - } - - - public void bindButton(boolean override) - { - this.bound = override; - } - - public void bindButton(String button, boolean override) { - // TODO Auto-generated method stub - if (button.compareTo("volumeup")==0) { - keyDownCodes.add(KeyEvent.KEYCODE_VOLUME_UP); - } - else if (button.compareTo("volumedown")==0) { - keyDownCodes.add(KeyEvent.KEYCODE_VOLUME_DOWN); - } - } - - public void bindButton(int keyCode, boolean keyDown, boolean override) { - if(keyDown) - { - keyDownCodes.add(keyCode); - } - else - { - keyUpCodes.add(keyCode); - } - } - - public boolean isBackButtonBound() - { - return this.bound; - } - - public void handlePause(boolean keepRunning) - { - LOG.d(TAG, "Handle the pause"); - // Send pause event to JavaScript - this.loadUrl("javascript:try{cordova.fireDocumentEvent('pause');}catch(e){console.log('exception firing pause event from native');};"); - - // Forward to plugins - if (this.pluginManager != null) { - this.pluginManager.onPause(keepRunning); - } - - // If app doesn't want to run in background - if (!keepRunning) { - // Pause JavaScript timers (including setInterval) - this.pauseTimers(); - } - this.onHide(); - paused = true; - - } - - public void handleResume(boolean keepRunning, boolean activityResultKeepRunning) - { - - this.loadUrl("javascript:try{cordova.fireDocumentEvent('resume');}catch(e){console.log('exception firing resume event from native');};"); - - // Forward to plugins - if (this.pluginManager != null) { - this.pluginManager.onResume(keepRunning); - } - - // Resume JavaScript timers (including setInterval) - this.resumeTimers(); - this.onShow(); - paused = false; - } - - public void handleDestroy() - { - // Send destroy event to JavaScript - this.loadUrl("javascript:try{cordova.require('cordova/channel').onDestroy.fire();}catch(e){console.log('exception firing destroy event from native');};"); - - // Load blank page so that JavaScript onunload is called - this.loadUrl("about:blank"); - - // Forward to plugins - if (this.pluginManager != null) { - this.pluginManager.onDestroy(); - } - - // unregister the receiver - if (this.receiver != null) { - try { - this.cordova.getActivity().unregisterReceiver(this.receiver); - } catch (Exception e) { - Log.e(TAG, "Error unregistering configuration receiver: " + e.getMessage(), e); - } - } - this.onDestroy(); - } - - @Override - public boolean onNewIntent(Intent intent) - { - if (super.onNewIntent(intent)) return true; - //Forward to plugins - if (this.pluginManager != null) { - this.pluginManager.onNewIntent(intent); - } - return false; - } - - public boolean isPaused() - { - return paused; - } - - public boolean hadKeyEvent() { - return handleButton; - } - - public void printBackForwardList() { - XWalkNavigationHistory currentList = this.getNavigationHistory(); - int currentSize = currentList.size(); - for(int i = 0; i < currentSize; ++i) - { - XWalkNavigationItem item = currentList.getItemAt(i); - String url = item.getUrl(); - LOG.d(TAG, "The URL at index: " + Integer.toString(i) + " is " + url ); - } - } - - - //Can Go Back is BROKEN! - public boolean startOfHistory() - { - XWalkNavigationHistory currentList = this.getNavigationHistory(); - XWalkNavigationItem item = currentList.getItemAt(0); - if( item!=null){ // Null-fence in case they haven't called loadUrl yet (CB-2458) - String url = item.getUrl(); - String currentUrl = this.getUrl(); - LOG.d(TAG, "The current URL is: " + currentUrl); - LOG.d(TAG, "The URL at item 0 is: " + url); - return currentUrl.equals(url); - } - return false; - } - - @Override - public boolean restoreState(Bundle savedInstanceState) - { - boolean result = super.restoreState(savedInstanceState); - Log.d(TAG, "WebView restoration crew now restoring!"); - //Initialize the plugin manager once more - if (this.pluginManager != null) { - this.pluginManager.init(); - } - return result; - } - - public void storeResult(int requestCode, int resultCode, Intent intent) { - mResult = new ActivityResult(requestCode, resultCode, intent); - } - - public CordovaResourceApi getResourceApi() { - return resourceApi; - } - - static { - // XWalkPreferencesInternal.ENABLE_JAVASCRIPT - XWalkPreferences.setValue("enable-javascript", true); - // XWalkPreferencesInternal.JAVASCRIPT_CAN_OPEN_WINDOW - XWalkPreferences.setValue("javascript-can-open-window", true); - // XWalkPreferencesInternal.ALLOW_UNIVERSAL_ACCESS_FROM_FILE - XWalkPreferences.setValue("allow-universal-access-from-file", true); - } -} diff --git a/mobile/CordovaLib/src/org/apache/cordova/CordovaWebViewClient.java b/mobile/CordovaLib/src/org/apache/cordova/CordovaWebViewClient.java deleted file mode 100755 index 29c976210f7..00000000000 --- a/mobile/CordovaLib/src/org/apache/cordova/CordovaWebViewClient.java +++ /dev/null @@ -1,367 +0,0 @@ -/* - Licensed to the Apache Software Foundation (ASF) under one - or more contributor license agreements. See the NOTICE file - distributed with this work for additional information - regarding copyright ownership. The ASF licenses this file - to you under the Apache License, Version 2.0 (the - "License"); you may not use this file except in compliance - with the License. You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, - software distributed under the License is distributed on an - "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - KIND, either express or implied. See the License for the - specific language governing permissions and limitations - under the License. -*/ -package org.apache.cordova; - -import java.io.ByteArrayInputStream; -import java.util.Hashtable; - -import org.apache.cordova.CordovaInterface; - -import org.apache.cordova.LOG; -import org.json.JSONException; -import org.json.JSONObject; - -import android.annotation.TargetApi; -import android.content.Context; -import android.content.Intent; -import android.content.pm.ApplicationInfo; -import android.content.pm.PackageManager; -import android.content.pm.PackageManager.NameNotFoundException; -import android.graphics.Bitmap; -import android.net.Uri; -import android.net.http.SslError; -import android.util.Log; -import android.view.View; -//import android.webkit.HttpAuthHandler; -//import android.webkit.SslErrorHandler; -import android.webkit.ValueCallback; -import android.webkit.WebResourceResponse; -//import android.webkit.WebView; -//import android.webkit.WebViewClient; -import org.chromium.net.NetError; -import org.xwalk.core.XWalkResourceClient; -import org.xwalk.core.XWalkView; - -/** - * This class is the XWalkResourceClient that implements callbacks for our web view. - * The kind of callbacks that happen here are regarding the rendering of the - * document instead of the chrome surrounding it, such as onPageStarted(), - * shouldOverrideUrlLoading(), etc. Related to but different than - * CordovaChromeClient. - * - * @see WebViewClient - * @see WebView guide - * @see CordovaChromeClient - * @see CordovaWebView - */ -public class CordovaWebViewClient extends XWalkResourceClient { - - private static final String TAG = "CordovaWebViewClient"; - private static final String CORDOVA_EXEC_URL_PREFIX = "http://cdv_exec/"; - CordovaInterface cordova; - CordovaWebView appView; - - // Success - public static final int ERROR_OK = 0; - // Generic error - public static final int ERROR_UNKNOWN = -1; - // Server or proxy hostname lookup failed - public static final int ERROR_HOST_LOOKUP = -2; - // Unsupported authentication scheme (not basic or digest) - public static final int ERROR_UNSUPPORTED_AUTH_SCHEME = -3; - // User authentication failed on server - public static final int ERROR_AUTHENTICATION = -4; - // User authentication failed on proxy - public static final int ERROR_PROXY_AUTHENTICATION = -5; - // Failed to connect to the server - public static final int ERROR_CONNECT = -6; - // Failed to read or write to the server - public static final int ERROR_IO = -7; - // Connection timed out - public static final int ERROR_TIMEOUT = -8; - // Too many redirects - public static final int ERROR_REDIRECT_LOOP = -9; - // Unsupported URI scheme - public static final int ERROR_UNSUPPORTED_SCHEME = -10; - // Failed to perform SSL handshake - public static final int ERROR_FAILED_SSL_HANDSHAKE = -11; - // Malformed URL - public static final int ERROR_BAD_URL = -12; - // Generic file error - public static final int ERROR_FILE = -13; - // File not found - public static final int ERROR_FILE_NOT_FOUND = -14; - // Too many requests during this load - public static final int ERROR_TOO_MANY_REQUESTS = -15; - - /** The authorization tokens. */ - private Hashtable authenticationTokens = new Hashtable(); - - /** - * Constructor. - * - * @param cordova - */ - public CordovaWebViewClient(CordovaInterface cordova) { - super(null); - this.cordova = cordova; - } - - /** - * Constructor. - * - * @param cordova - * @param view - */ - public CordovaWebViewClient(CordovaInterface cordova, CordovaWebView view) { - super(view); - this.cordova = cordova; - this.appView = view; - } - - /** - * Constructor. - * - * @param view - */ - public void setWebView(CordovaWebView view) { - this.appView = view; - } - - - // Parses commands sent by setting the webView's URL to: - // cdvbrg:service/action/callbackId#jsonArgs - private void handleExecUrl(String url) { - int idx1 = CORDOVA_EXEC_URL_PREFIX.length(); - int idx2 = url.indexOf('#', idx1 + 1); - int idx3 = url.indexOf('#', idx2 + 1); - int idx4 = url.indexOf('#', idx3 + 1); - if (idx1 == -1 || idx2 == -1 || idx3 == -1 || idx4 == -1) { - Log.e(TAG, "Could not decode URL command: " + url); - return; - } - String service = url.substring(idx1, idx2); - String action = url.substring(idx2 + 1, idx3); - String callbackId = url.substring(idx3 + 1, idx4); - String jsonArgs = url.substring(idx4 + 1); - appView.pluginManager.exec(service, action, callbackId, jsonArgs); - } - - /** - * Report an error to the host application. These errors are unrecoverable (i.e. the main resource is unavailable). - * The errorCode parameter corresponds to one of the ERROR_* constants. - * - * @param view The WebView that is initiating the callback. - * @param errorCode The error code corresponding to an ERROR_* value. - * @param description A String describing the error. - * @param failingUrl The url that failed to load. - */ - @Override - public void onReceivedLoadError(XWalkView view, int errorCode, String description, - String failingUrl) { - LOG.d(TAG, "CordovaWebViewClient.onReceivedError: Error code=%s Description=%s URL=%s", errorCode, description, failingUrl); - - // Clear timeout flag - this.appView.loadUrlTimeout++; - - // Handle error - JSONObject data = new JSONObject(); - try { - data.put("errorCode", errorCode); - data.put("description", description); - data.put("url", failingUrl); - } catch (JSONException e) { - e.printStackTrace(); - } - this.appView.postMessage("onReceivedError", data); - } - - @Override - public boolean shouldOverrideUrlLoading(XWalkView view, String url) { - // Check if it's an exec() bridge command message. - if (NativeToJsMessageQueue.ENABLE_LOCATION_CHANGE_EXEC_MODE && url.startsWith(CORDOVA_EXEC_URL_PREFIX)) { - handleExecUrl(url); - } - - // Give plugins the chance to handle the url - else if ((this.appView.pluginManager != null) && this.appView.pluginManager.onOverrideUrlLoading(url)) { - } - - // If dialing phone (tel:5551212) - else if (url.startsWith("tel:")) { - try { - Intent intent = new Intent(Intent.ACTION_DIAL); - intent.setData(Uri.parse(url)); - this.cordova.getActivity().startActivity(intent); - } catch (android.content.ActivityNotFoundException e) { - LOG.e(TAG, "Error dialing " + url + ": " + e.toString()); - } - } - - // If displaying map (geo:0,0?q=address) - else if (url.startsWith("geo:")) { - try { - Intent intent = new Intent(Intent.ACTION_VIEW); - intent.setData(Uri.parse(url)); - this.cordova.getActivity().startActivity(intent); - } catch (android.content.ActivityNotFoundException e) { - LOG.e(TAG, "Error showing map " + url + ": " + e.toString()); - } - } - - // If sending email (mailto:abc@corp.com) - else if (url.startsWith("mailto:")) { - try { - Intent intent = new Intent(Intent.ACTION_VIEW); - intent.setData(Uri.parse(url)); - this.cordova.getActivity().startActivity(intent); - } catch (android.content.ActivityNotFoundException e) { - LOG.e(TAG, "Error sending email " + url + ": " + e.toString()); - } - } - - // If sms:5551212?body=This is the message - else if (url.startsWith("sms:")) { - try { - Intent intent = new Intent(Intent.ACTION_VIEW); - - // Get address - String address = null; - int parmIndex = url.indexOf('?'); - if (parmIndex == -1) { - address = url.substring(4); - } - else { - address = url.substring(4, parmIndex); - - // If body, then set sms body - Uri uri = Uri.parse(url); - String query = uri.getQuery(); - if (query != null) { - if (query.startsWith("body=")) { - intent.putExtra("sms_body", query.substring(5)); - } - } - } - intent.setData(Uri.parse("sms:" + address)); - intent.putExtra("address", address); - intent.setType("vnd.android-dir/mms-sms"); - this.cordova.getActivity().startActivity(intent); - } catch (android.content.ActivityNotFoundException e) { - LOG.e(TAG, "Error sending sms " + url + ":" + e.toString()); - } - } - - //Android Market - else if(url.startsWith("market:")) { - try { - Intent intent = new Intent(Intent.ACTION_VIEW); - intent.setData(Uri.parse(url)); - this.cordova.getActivity().startActivity(intent); - } catch (android.content.ActivityNotFoundException e) { - LOG.e(TAG, "Error loading Google Play Store: " + url, e); - } - } - - // All else - else { - - // If our app or file:, then load into a new Cordova webview container by starting a new instance of our activity. - // Our app continues to run. When BACK is pressed, our app is redisplayed. - if (url.startsWith("file://") || url.startsWith("data:") || Config.isUrlWhiteListed(url)) { - return false; - } - - // If not our application, let default viewer handle - else { - try { - Intent intent = new Intent(Intent.ACTION_VIEW); - intent.setData(Uri.parse(url)); - this.cordova.getActivity().startActivity(intent); - } catch (android.content.ActivityNotFoundException e) { - LOG.e(TAG, "Error loading url " + url, e); - } - } - } - return true; - } - - /** - * Sets the authentication token. - * - * @param authenticationToken - * @param host - * @param realm - */ - public void setAuthenticationToken(AuthenticationToken authenticationToken, String host, String realm) { - if (host == null) { - host = ""; - } - if (realm == null) { - realm = ""; - } - this.authenticationTokens.put(host.concat(realm), authenticationToken); - } - - /** - * Removes the authentication token. - * - * @param host - * @param realm - * - * @return the authentication token or null if did not exist - */ - public AuthenticationToken removeAuthenticationToken(String host, String realm) { - return this.authenticationTokens.remove(host.concat(realm)); - } - - /** - * Gets the authentication token. - * - * In order it tries: - * 1- host + realm - * 2- host - * 3- realm - * 4- no host, no realm - * - * @param host - * @param realm - * - * @return the authentication token - */ - public AuthenticationToken getAuthenticationToken(String host, String realm) { - AuthenticationToken token = null; - token = this.authenticationTokens.get(host.concat(realm)); - - if (token == null) { - // try with just the host - token = this.authenticationTokens.get(host); - - // Try the realm - if (token == null) { - token = this.authenticationTokens.get(realm); - } - - // if no host found, just query for default - if (token == null) { - token = this.authenticationTokens.get(""); - } - } - - return token; - } - - /** - * Clear all authentication tokens. - */ - public void clearAuthenticationTokens() { - this.authenticationTokens.clear(); - } - -} diff --git a/mobile/CordovaLib/src/org/apache/cordova/DirectoryManager.java b/mobile/CordovaLib/src/org/apache/cordova/DirectoryManager.java deleted file mode 100644 index a6cf3f38f5b..00000000000 --- a/mobile/CordovaLib/src/org/apache/cordova/DirectoryManager.java +++ /dev/null @@ -1,162 +0,0 @@ -/* - Licensed to the Apache Software Foundation (ASF) under one - or more contributor license agreements. See the NOTICE file - distributed with this work for additional information - regarding copyright ownership. The ASF licenses this file - to you under the Apache License, Version 2.0 (the - "License"); you may not use this file except in compliance - with the License. You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, - software distributed under the License is distributed on an - "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - KIND, either express or implied. See the License for the - specific language governing permissions and limitations - under the License. -*/ -package org.apache.cordova; - -import java.io.File; - -import android.content.Context; -import android.os.Environment; -import android.os.StatFs; - -/** - * This class provides file directory utilities. - * All file operations are performed on the SD card. - * - * It is used by the FileUtils class. - */ -@Deprecated // Deprecated in 3.1. To be removed in 4.0. -public class DirectoryManager { - - @SuppressWarnings("unused") - private static final String LOG_TAG = "DirectoryManager"; - - /** - * Determine if a file or directory exists. - * @param name The name of the file to check. - * @return T=exists, F=not found - */ - public static boolean testFileExists(String name) { - boolean status; - - // If SD card exists - if ((testSaveLocationExists()) && (!name.equals(""))) { - File path = Environment.getExternalStorageDirectory(); - File newPath = constructFilePaths(path.toString(), name); - status = newPath.exists(); - } - // If no SD card - else { - status = false; - } - return status; - } - - /** - * Get the free disk space - * - * @return Size in KB or -1 if not available - */ - public static long getFreeDiskSpace(boolean checkInternal) { - String status = Environment.getExternalStorageState(); - long freeSpace = 0; - - // If SD card exists - if (status.equals(Environment.MEDIA_MOUNTED)) { - freeSpace = freeSpaceCalculation(Environment.getExternalStorageDirectory().getPath()); - } - else if (checkInternal) { - freeSpace = freeSpaceCalculation("/"); - } - // If no SD card and we haven't been asked to check the internal directory then return -1 - else { - return -1; - } - - return freeSpace; - } - - /** - * Given a path return the number of free KB - * - * @param path to the file system - * @return free space in KB - */ - private static long freeSpaceCalculation(String path) { - StatFs stat = new StatFs(path); - long blockSize = stat.getBlockSize(); - long availableBlocks = stat.getAvailableBlocks(); - return availableBlocks * blockSize / 1024; - } - - /** - * Determine if SD card exists. - * - * @return T=exists, F=not found - */ - public static boolean testSaveLocationExists() { - String sDCardStatus = Environment.getExternalStorageState(); - boolean status; - - // If SD card is mounted - if (sDCardStatus.equals(Environment.MEDIA_MOUNTED)) { - status = true; - } - - // If no SD card - else { - status = false; - } - return status; - } - - /** - * Create a new file object from two file paths. - * - * @param file1 Base file path - * @param file2 Remaining file path - * @return File object - */ - private static File constructFilePaths (String file1, String file2) { - File newPath; - if (file2.startsWith(file1)) { - newPath = new File(file2); - } - else { - newPath = new File(file1 + "/" + file2); - } - return newPath; - } - - /** - * Determine if we can use the SD Card to store the temporary file. If not then use - * the internal cache directory. - * - * @return the absolute path of where to store the file - */ - public static String getTempDirectoryPath(Context ctx) { - File cache = null; - - // SD Card Mounted - if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) { - cache = new File(Environment.getExternalStorageDirectory().getAbsolutePath() + - "/Android/data/" + ctx.getPackageName() + "/cache/"); - } - // Use internal storage - else { - cache = ctx.getCacheDir(); - } - - // Create the cache directory if it doesn't exist - if (!cache.exists()) { - cache.mkdirs(); - } - - return cache.getAbsolutePath(); - } -} diff --git a/mobile/CordovaLib/src/org/apache/cordova/DroidGap.java b/mobile/CordovaLib/src/org/apache/cordova/DroidGap.java deleted file mode 100644 index d72d2a4539e..00000000000 --- a/mobile/CordovaLib/src/org/apache/cordova/DroidGap.java +++ /dev/null @@ -1,34 +0,0 @@ -/* - Licensed to the Apache Software Foundation (ASF) under one - or more contributor license agreements. See the NOTICE file - distributed with this work for additional information - regarding copyright ownership. The ASF licenses this file - to you under the Apache License, Version 2.0 (the - "License"); you may not use this file except in compliance - with the License. You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, - software distributed under the License is distributed on an - "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - KIND, either express or implied. See the License for the - specific language governing permissions and limitations - under the License. -*/ - -package org.apache.cordova; - -/** - * This used to be the class that should be extended by application - * developers, but everything has been moved to CordovaActivity. So - * you should extend CordovaActivity instead of DroidGap. This class - * will be removed at a future time. - * - * @see CordovaActivity - * @deprecated - */ -@Deprecated -public class DroidGap extends CordovaActivity { - -} diff --git a/mobile/CordovaLib/src/org/apache/cordova/ExifHelper.java b/mobile/CordovaLib/src/org/apache/cordova/ExifHelper.java deleted file mode 100644 index 5c426104767..00000000000 --- a/mobile/CordovaLib/src/org/apache/cordova/ExifHelper.java +++ /dev/null @@ -1,186 +0,0 @@ -/* - Licensed to the Apache Software Foundation (ASF) under one - or more contributor license agreements. See the NOTICE file - distributed with this work for additional information - regarding copyright ownership. The ASF licenses this file - to you under the Apache License, Version 2.0 (the - "License"); you may not use this file except in compliance - with the License. You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, - software distributed under the License is distributed on an - "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - KIND, either express or implied. See the License for the - specific language governing permissions and limitations - under the License. -*/ -package org.apache.cordova; - -import java.io.IOException; - -import android.media.ExifInterface; - -@Deprecated // Deprecated in 3.1. To be removed in 4.0. -public class ExifHelper { - private String aperture = null; - private String datetime = null; - private String exposureTime = null; - private String flash = null; - private String focalLength = null; - private String gpsAltitude = null; - private String gpsAltitudeRef = null; - private String gpsDateStamp = null; - private String gpsLatitude = null; - private String gpsLatitudeRef = null; - private String gpsLongitude = null; - private String gpsLongitudeRef = null; - private String gpsProcessingMethod = null; - private String gpsTimestamp = null; - private String iso = null; - private String make = null; - private String model = null; - private String orientation = null; - private String whiteBalance = null; - - private ExifInterface inFile = null; - private ExifInterface outFile = null; - - /** - * The file before it is compressed - * - * @param filePath - * @throws IOException - */ - public void createInFile(String filePath) throws IOException { - this.inFile = new ExifInterface(filePath); - } - - /** - * The file after it has been compressed - * - * @param filePath - * @throws IOException - */ - public void createOutFile(String filePath) throws IOException { - this.outFile = new ExifInterface(filePath); - } - - /** - * Reads all the EXIF data from the input file. - */ - public void readExifData() { - this.aperture = inFile.getAttribute(ExifInterface.TAG_APERTURE); - this.datetime = inFile.getAttribute(ExifInterface.TAG_DATETIME); - this.exposureTime = inFile.getAttribute(ExifInterface.TAG_EXPOSURE_TIME); - this.flash = inFile.getAttribute(ExifInterface.TAG_FLASH); - this.focalLength = inFile.getAttribute(ExifInterface.TAG_FOCAL_LENGTH); - this.gpsAltitude = inFile.getAttribute(ExifInterface.TAG_GPS_ALTITUDE); - this.gpsAltitudeRef = inFile.getAttribute(ExifInterface.TAG_GPS_ALTITUDE_REF); - this.gpsDateStamp = inFile.getAttribute(ExifInterface.TAG_GPS_DATESTAMP); - this.gpsLatitude = inFile.getAttribute(ExifInterface.TAG_GPS_LATITUDE); - this.gpsLatitudeRef = inFile.getAttribute(ExifInterface.TAG_GPS_LATITUDE_REF); - this.gpsLongitude = inFile.getAttribute(ExifInterface.TAG_GPS_LONGITUDE); - this.gpsLongitudeRef = inFile.getAttribute(ExifInterface.TAG_GPS_LONGITUDE_REF); - this.gpsProcessingMethod = inFile.getAttribute(ExifInterface.TAG_GPS_PROCESSING_METHOD); - this.gpsTimestamp = inFile.getAttribute(ExifInterface.TAG_GPS_TIMESTAMP); - this.iso = inFile.getAttribute(ExifInterface.TAG_ISO); - this.make = inFile.getAttribute(ExifInterface.TAG_MAKE); - this.model = inFile.getAttribute(ExifInterface.TAG_MODEL); - this.orientation = inFile.getAttribute(ExifInterface.TAG_ORIENTATION); - this.whiteBalance = inFile.getAttribute(ExifInterface.TAG_WHITE_BALANCE); - } - - /** - * Writes the previously stored EXIF data to the output file. - * - * @throws IOException - */ - public void writeExifData() throws IOException { - // Don't try to write to a null file - if (this.outFile == null) { - return; - } - - if (this.aperture != null) { - this.outFile.setAttribute(ExifInterface.TAG_APERTURE, this.aperture); - } - if (this.datetime != null) { - this.outFile.setAttribute(ExifInterface.TAG_DATETIME, this.datetime); - } - if (this.exposureTime != null) { - this.outFile.setAttribute(ExifInterface.TAG_EXPOSURE_TIME, this.exposureTime); - } - if (this.flash != null) { - this.outFile.setAttribute(ExifInterface.TAG_FLASH, this.flash); - } - if (this.focalLength != null) { - this.outFile.setAttribute(ExifInterface.TAG_FOCAL_LENGTH, this.focalLength); - } - if (this.gpsAltitude != null) { - this.outFile.setAttribute(ExifInterface.TAG_GPS_ALTITUDE, this.gpsAltitude); - } - if (this.gpsAltitudeRef != null) { - this.outFile.setAttribute(ExifInterface.TAG_GPS_ALTITUDE_REF, this.gpsAltitudeRef); - } - if (this.gpsDateStamp != null) { - this.outFile.setAttribute(ExifInterface.TAG_GPS_DATESTAMP, this.gpsDateStamp); - } - if (this.gpsLatitude != null) { - this.outFile.setAttribute(ExifInterface.TAG_GPS_LATITUDE, this.gpsLatitude); - } - if (this.gpsLatitudeRef != null) { - this.outFile.setAttribute(ExifInterface.TAG_GPS_LATITUDE_REF, this.gpsLatitudeRef); - } - if (this.gpsLongitude != null) { - this.outFile.setAttribute(ExifInterface.TAG_GPS_LONGITUDE, this.gpsLongitude); - } - if (this.gpsLongitudeRef != null) { - this.outFile.setAttribute(ExifInterface.TAG_GPS_LONGITUDE_REF, this.gpsLongitudeRef); - } - if (this.gpsProcessingMethod != null) { - this.outFile.setAttribute(ExifInterface.TAG_GPS_PROCESSING_METHOD, this.gpsProcessingMethod); - } - if (this.gpsTimestamp != null) { - this.outFile.setAttribute(ExifInterface.TAG_GPS_TIMESTAMP, this.gpsTimestamp); - } - if (this.iso != null) { - this.outFile.setAttribute(ExifInterface.TAG_ISO, this.iso); - } - if (this.make != null) { - this.outFile.setAttribute(ExifInterface.TAG_MAKE, this.make); - } - if (this.model != null) { - this.outFile.setAttribute(ExifInterface.TAG_MODEL, this.model); - } - if (this.orientation != null) { - this.outFile.setAttribute(ExifInterface.TAG_ORIENTATION, this.orientation); - } - if (this.whiteBalance != null) { - this.outFile.setAttribute(ExifInterface.TAG_WHITE_BALANCE, this.whiteBalance); - } - - this.outFile.saveAttributes(); - } - - public int getOrientation() { - int o = Integer.parseInt(this.orientation); - - if (o == ExifInterface.ORIENTATION_NORMAL) { - return 0; - } else if (o == ExifInterface.ORIENTATION_ROTATE_90) { - return 90; - } else if (o == ExifInterface.ORIENTATION_ROTATE_180) { - return 180; - } else if (o == ExifInterface.ORIENTATION_ROTATE_270) { - return 270; - } else { - return 0; - } - } - - public void resetOrientation() { - this.orientation = "" + ExifInterface.ORIENTATION_NORMAL; - } -} diff --git a/mobile/CordovaLib/src/org/apache/cordova/ExposedJsApi.java b/mobile/CordovaLib/src/org/apache/cordova/ExposedJsApi.java deleted file mode 100755 index 39e613ebe3d..00000000000 --- a/mobile/CordovaLib/src/org/apache/cordova/ExposedJsApi.java +++ /dev/null @@ -1,82 +0,0 @@ -/* - Licensed to the Apache Software Foundation (ASF) under one - or more contributor license agreements. See the NOTICE file - distributed with this work for additional information - regarding copyright ownership. The ASF licenses this file - to you under the Apache License, Version 2.0 (the - "License"); you may not use this file except in compliance - with the License. You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, - software distributed under the License is distributed on an - "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - KIND, either express or implied. See the License for the - specific language governing permissions and limitations - under the License. -*/ -package org.apache.cordova; - -import org.xwalk.core.JavascriptInterface; -import org.apache.cordova.PluginManager; -import org.json.JSONException; - -import android.os.Looper; - -/** - * Contains APIs that the JS can call. All functions in here should also have - * an equivalent entry in CordovaChromeClient.java, and be added to - * cordova-js/lib/android/plugin/android/promptbasednativeapi.js - */ -/* package */ class ExposedJsApi { - - private PluginManager pluginManager; - private NativeToJsMessageQueue jsMessageQueue; - - public ExposedJsApi(PluginManager pluginManager, NativeToJsMessageQueue jsMessageQueue) { - this.pluginManager = pluginManager; - this.jsMessageQueue = jsMessageQueue; - } - - @JavascriptInterface - public String exec(String service, String action, String callbackId, String arguments) throws JSONException { - // If the arguments weren't received, send a message back to JS. It will switch bridge modes and try again. See CB-2666. - // We send a message meant specifically for this case. It starts with "@" so no other message can be encoded into the same string. - if (Looper.myLooper() == null) { - Looper.prepare(); - } - - if (arguments == null) { - return "@Null arguments."; - } - - jsMessageQueue.setPaused(true); - try { - // Tell the resourceApi what thread the JS is running on. - CordovaResourceApi.jsThread = Thread.currentThread(); - - pluginManager.exec(service, action, callbackId, arguments); - String ret = ""; - if (!NativeToJsMessageQueue.DISABLE_EXEC_CHAINING) { - ret = jsMessageQueue.popAndEncode(false); - } - return ret; - } catch (Throwable e) { - e.printStackTrace(); - return ""; - } finally { - jsMessageQueue.setPaused(false); - } - } - - @JavascriptInterface - public void setNativeToJsBridgeMode(int value) { - jsMessageQueue.setBridgeMode(value); - } - - @JavascriptInterface - public String retrieveJsMessages(boolean fromOnlineEvent) { - return jsMessageQueue.popAndEncode(fromOnlineEvent); - } -} diff --git a/mobile/CordovaLib/src/org/apache/cordova/FileHelper.java b/mobile/CordovaLib/src/org/apache/cordova/FileHelper.java deleted file mode 100644 index eac5098cf7c..00000000000 --- a/mobile/CordovaLib/src/org/apache/cordova/FileHelper.java +++ /dev/null @@ -1,163 +0,0 @@ -/* - Licensed to the Apache Software Foundation (ASF) under one - or more contributor license agreements. See the NOTICE file - distributed with this work for additional information - regarding copyright ownership. The ASF licenses this file - to you under the Apache License, Version 2.0 (the - "License"); you may not use this file except in compliance - with the License. You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, - software distributed under the License is distributed on an - "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - KIND, either express or implied. See the License for the - specific language governing permissions and limitations - under the License. - */ -package org.apache.cordova; - -import android.database.Cursor; -import android.net.Uri; -import android.webkit.MimeTypeMap; - -import org.apache.cordova.CordovaInterface; -import org.apache.cordova.LOG; - -import java.io.FileInputStream; -import java.io.FileNotFoundException; -import java.io.FileOutputStream; -import java.io.IOException; -import java.io.InputStream; -import java.io.OutputStream; -import java.nio.charset.Charset; -import java.util.Locale; - -@Deprecated // Deprecated in 3.1. To be removed in 4.0. -public class FileHelper { - private static final String LOG_TAG = "FileUtils"; - private static final String _DATA = "_data"; - - /** - * Returns the real path of the given URI string. - * If the given URI string represents a content:// URI, the real path is retrieved from the media store. - * - * @param uriString the URI string of the audio/image/video - * @param cordova the current application context - * @return the full path to the file - */ - @SuppressWarnings("deprecation") - public static String getRealPath(String uriString, CordovaInterface cordova) { - String realPath = null; - - if (uriString.startsWith("content://")) { - String[] proj = { _DATA }; - Cursor cursor = cordova.getActivity().managedQuery(Uri.parse(uriString), proj, null, null, null); - int column_index = cursor.getColumnIndexOrThrow(_DATA); - cursor.moveToFirst(); - realPath = cursor.getString(column_index); - if (realPath == null) { - LOG.e(LOG_TAG, "Could get real path for URI string %s", uriString); - } - } else if (uriString.startsWith("file://")) { - realPath = uriString.substring(7); - if (realPath.startsWith("/android_asset/")) { - LOG.e(LOG_TAG, "Cannot get real path for URI string %s because it is a file:///android_asset/ URI.", uriString); - realPath = null; - } - } else { - realPath = uriString; - } - - return realPath; - } - - /** - * Returns the real path of the given URI. - * If the given URI is a content:// URI, the real path is retrieved from the media store. - * - * @param uri the URI of the audio/image/video - * @param cordova the current application context - * @return the full path to the file - */ - public static String getRealPath(Uri uri, CordovaInterface cordova) { - return FileHelper.getRealPath(uri.toString(), cordova); - } - - /** - * Returns an input stream based on given URI string. - * - * @param uriString the URI string from which to obtain the input stream - * @param cordova the current application context - * @return an input stream into the data at the given URI or null if given an invalid URI string - * @throws IOException - */ - public static InputStream getInputStreamFromUriString(String uriString, CordovaInterface cordova) throws IOException { - if (uriString.startsWith("content")) { - Uri uri = Uri.parse(uriString); - return cordova.getActivity().getContentResolver().openInputStream(uri); - } else if (uriString.startsWith("file://")) { - int question = uriString.indexOf("?"); - if (question > -1) { - uriString = uriString.substring(0,question); - } - if (uriString.startsWith("file:///android_asset/")) { - Uri uri = Uri.parse(uriString); - String relativePath = uri.getPath().substring(15); - return cordova.getActivity().getAssets().open(relativePath); - } else { - return new FileInputStream(getRealPath(uriString, cordova)); - } - } else { - return new FileInputStream(getRealPath(uriString, cordova)); - } - } - - /** - * Removes the "file://" prefix from the given URI string, if applicable. - * If the given URI string doesn't have a "file://" prefix, it is returned unchanged. - * - * @param uriString the URI string to operate on - * @return a path without the "file://" prefix - */ - public static String stripFileProtocol(String uriString) { - if (uriString.startsWith("file://")) { - uriString = uriString.substring(7); - } - return uriString; - } - - public static String getMimeTypeForExtension(String path) { - String extension = path; - int lastDot = extension.lastIndexOf('.'); - if (lastDot != -1) { - extension = extension.substring(lastDot + 1); - } - // Convert the URI string to lower case to ensure compatibility with MimeTypeMap (see CB-2185). - extension = extension.toLowerCase(Locale.getDefault()); - if (extension.equals("3ga")) { - return "audio/3gpp"; - } - return MimeTypeMap.getSingleton().getMimeTypeFromExtension(extension); - } - - /** - * Returns the mime type of the data specified by the given URI string. - * - * @param uriString the URI string of the data - * @return the mime type of the specified data - */ - public static String getMimeType(String uriString, CordovaInterface cordova) { - String mimeType = null; - - Uri uri = Uri.parse(uriString); - if (uriString.startsWith("content://")) { - mimeType = cordova.getActivity().getContentResolver().getType(uri); - } else { - mimeType = getMimeTypeForExtension(uri.getPath()); - } - - return mimeType; - } -} diff --git a/mobile/CordovaLib/src/org/apache/cordova/IceCreamCordovaWebViewClient.java b/mobile/CordovaLib/src/org/apache/cordova/IceCreamCordovaWebViewClient.java deleted file mode 100644 index b10c6bddce0..00000000000 --- a/mobile/CordovaLib/src/org/apache/cordova/IceCreamCordovaWebViewClient.java +++ /dev/null @@ -1,101 +0,0 @@ -/* - Licensed to the Apache Software Foundation (ASF) under one - or more contributor license agreements. See the NOTICE file - distributed with this work for additional information - regarding copyright ownership. The ASF licenses this file - to you under the Apache License, Version 2.0 (the - "License"); you may not use this file except in compliance - with the License. You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, - software distributed under the License is distributed on an - "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - KIND, either express or implied. See the License for the - specific language governing permissions and limitations - under the License. -*/ -package org.apache.cordova; - -import java.io.FileNotFoundException; -import java.io.IOException; - -import org.apache.cordova.CordovaInterface; -import org.apache.cordova.CordovaResourceApi.OpenForReadResult; -import org.apache.cordova.LOG; - -import android.annotation.TargetApi; -import android.net.Uri; -import android.os.Build; -import android.webkit.WebResourceResponse; -//import android.webkit.WebView; -import org.xwalk.core.XWalkView; - -@TargetApi(Build.VERSION_CODES.HONEYCOMB) -public class IceCreamCordovaWebViewClient extends CordovaWebViewClient { - - private static final String TAG = "IceCreamCordovaWebViewClient"; - - public IceCreamCordovaWebViewClient(CordovaInterface cordova) { - super(cordova); - } - - public IceCreamCordovaWebViewClient(CordovaInterface cordova, CordovaWebView view) { - super(cordova, view); - } - - @Override - public WebResourceResponse shouldInterceptLoadRequest(XWalkView view, String url) { - try { - // Check the against the white-list. - if ((url.startsWith("http:") || url.startsWith("https:")) && !Config.isUrlWhiteListed(url)) { - LOG.w(TAG, "URL blocked by whitelist: " + url); - // Results in a 404. - return new WebResourceResponse("text/plain", "UTF-8", null); - } - - CordovaResourceApi resourceApi = appView.getResourceApi(); - Uri origUri = Uri.parse(url); - // Allow plugins to intercept WebView requests. - Uri remappedUri = resourceApi.remapUri(origUri); - - if (!origUri.equals(remappedUri) || needsSpecialsInAssetUrlFix(origUri) || needsKitKatContentUrlFix(origUri)) { - OpenForReadResult result = resourceApi.openForRead(remappedUri, true); - return new WebResourceResponse(result.mimeType, "UTF-8", result.inputStream); - } - // If we don't need to special-case the request, let the browser load it. - return null; - } catch (IOException e) { - if (!(e instanceof FileNotFoundException)) { - LOG.e("IceCreamCordovaWebViewClient", "Error occurred while loading a file (returning a 404).", e); - } - // Results in a 404. - return new WebResourceResponse("text/plain", "UTF-8", null); - } - } - - private static boolean needsKitKatContentUrlFix(Uri uri) { - return android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.KITKAT && "content".equals(uri.getScheme()); - } - - private static boolean needsSpecialsInAssetUrlFix(Uri uri) { - if (CordovaResourceApi.getUriType(uri) != CordovaResourceApi.URI_TYPE_ASSET) { - return false; - } - if (uri.getQuery() != null || uri.getFragment() != null) { - return true; - } - - if (!uri.toString().contains("%")) { - return false; - } - - switch(android.os.Build.VERSION.SDK_INT){ - case android.os.Build.VERSION_CODES.ICE_CREAM_SANDWICH: - case android.os.Build.VERSION_CODES.ICE_CREAM_SANDWICH_MR1: - return true; - } - return false; - } -} diff --git a/mobile/CordovaLib/src/org/apache/cordova/JSONUtils.java b/mobile/CordovaLib/src/org/apache/cordova/JSONUtils.java deleted file mode 100644 index 86038bbf07d..00000000000 --- a/mobile/CordovaLib/src/org/apache/cordova/JSONUtils.java +++ /dev/null @@ -1,43 +0,0 @@ -/* - Licensed to the Apache Software Foundation (ASF) under one - or more contributor license agreements. See the NOTICE file - distributed with this work for additional information - regarding copyright ownership. The ASF licenses this file - to you under the Apache License, Version 2.0 (the - "License"); you may not use this file except in compliance - with the License. You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, - software distributed under the License is distributed on an - "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - KIND, either express or implied. See the License for the - specific language governing permissions and limitations - under the License. -*/ -package org.apache.cordova; - -import java.util.ArrayList; -import java.util.List; - -import org.json.JSONArray; -import org.json.JSONException; - -@Deprecated // Deprecated in 3.1. To be removed in 4.0. -public class JSONUtils { - public static List toStringList(JSONArray array) throws JSONException { - if(array == null) { - return null; - } - else { - List list = new ArrayList(); - - for (int i = 0; i < array.length(); i++) { - list.add(array.get(i).toString()); - } - - return list; - } - } -} diff --git a/mobile/CordovaLib/src/org/apache/cordova/LOG.java b/mobile/CordovaLib/src/org/apache/cordova/LOG.java deleted file mode 100755 index 3dd1a754c50..00000000000 --- a/mobile/CordovaLib/src/org/apache/cordova/LOG.java +++ /dev/null @@ -1,234 +0,0 @@ -/* - Licensed to the Apache Software Foundation (ASF) under one - or more contributor license agreements. See the NOTICE file - distributed with this work for additional information - regarding copyright ownership. The ASF licenses this file - to you under the Apache License, Version 2.0 (the - "License"); you may not use this file except in compliance - with the License. You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, - software distributed under the License is distributed on an - "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - KIND, either express or implied. See the License for the - specific language governing permissions and limitations - under the License. -*/ -package org.apache.cordova; - -import android.util.Log; - -/** - * Log to Android logging system. - * - * Log message can be a string or a printf formatted string with arguments. - * See http://developer.android.com/reference/java/util/Formatter.html - */ -public class LOG { - - public static final int VERBOSE = Log.VERBOSE; - public static final int DEBUG = Log.DEBUG; - public static final int INFO = Log.INFO; - public static final int WARN = Log.WARN; - public static final int ERROR = Log.ERROR; - - // Current log level - public static int LOGLEVEL = Log.ERROR; - - /** - * Set the current log level. - * - * @param logLevel - */ - public static void setLogLevel(int logLevel) { - LOGLEVEL = logLevel; - Log.i("CordovaLog", "Changing log level to " + logLevel); - } - - /** - * Set the current log level. - * - * @param logLevel - */ - public static void setLogLevel(String logLevel) { - if ("VERBOSE".equals(logLevel)) LOGLEVEL = VERBOSE; - else if ("DEBUG".equals(logLevel)) LOGLEVEL = DEBUG; - else if ("INFO".equals(logLevel)) LOGLEVEL = INFO; - else if ("WARN".equals(logLevel)) LOGLEVEL = WARN; - else if ("ERROR".equals(logLevel)) LOGLEVEL = ERROR; - Log.i("CordovaLog", "Changing log level to " + logLevel + "(" + LOGLEVEL + ")"); - } - - /** - * Determine if log level will be logged - * - * @param logLevel - * @return true if the parameter passed in is greater than or equal to the current log level - */ - public static boolean isLoggable(int logLevel) { - return (logLevel >= LOGLEVEL); - } - - /** - * Verbose log message. - * - * @param tag - * @param s - */ - public static void v(String tag, String s) { - if (LOG.VERBOSE >= LOGLEVEL) Log.v(tag, s); - } - - /** - * Debug log message. - * - * @param tag - * @param s - */ - public static void d(String tag, String s) { - if (LOG.DEBUG >= LOGLEVEL) Log.d(tag, s); - } - - /** - * Info log message. - * - * @param tag - * @param s - */ - public static void i(String tag, String s) { - if (LOG.INFO >= LOGLEVEL) Log.i(tag, s); - } - - /** - * Warning log message. - * - * @param tag - * @param s - */ - public static void w(String tag, String s) { - if (LOG.WARN >= LOGLEVEL) Log.w(tag, s); - } - - /** - * Error log message. - * - * @param tag - * @param s - */ - public static void e(String tag, String s) { - if (LOG.ERROR >= LOGLEVEL) Log.e(tag, s); - } - - /** - * Verbose log message. - * - * @param tag - * @param s - * @param e - */ - public static void v(String tag, String s, Throwable e) { - if (LOG.VERBOSE >= LOGLEVEL) Log.v(tag, s, e); - } - - /** - * Debug log message. - * - * @param tag - * @param s - * @param e - */ - public static void d(String tag, String s, Throwable e) { - if (LOG.DEBUG >= LOGLEVEL) Log.d(tag, s, e); - } - - /** - * Info log message. - * - * @param tag - * @param s - * @param e - */ - public static void i(String tag, String s, Throwable e) { - if (LOG.INFO >= LOGLEVEL) Log.i(tag, s, e); - } - - /** - * Warning log message. - * - * @param tag - * @param s - * @param e - */ - public static void w(String tag, String s, Throwable e) { - if (LOG.WARN >= LOGLEVEL) Log.w(tag, s, e); - } - - /** - * Error log message. - * - * @param tag - * @param s - * @param e - */ - public static void e(String tag, String s, Throwable e) { - if (LOG.ERROR >= LOGLEVEL) Log.e(tag, s, e); - } - - /** - * Verbose log message with printf formatting. - * - * @param tag - * @param s - * @param args - */ - public static void v(String tag, String s, Object... args) { - if (LOG.VERBOSE >= LOGLEVEL) Log.v(tag, String.format(s, args)); - } - - /** - * Debug log message with printf formatting. - * - * @param tag - * @param s - * @param args - */ - public static void d(String tag, String s, Object... args) { - if (LOG.DEBUG >= LOGLEVEL) Log.d(tag, String.format(s, args)); - } - - /** - * Info log message with printf formatting. - * - * @param tag - * @param s - * @param args - */ - public static void i(String tag, String s, Object... args) { - if (LOG.INFO >= LOGLEVEL) Log.i(tag, String.format(s, args)); - } - - /** - * Warning log message with printf formatting. - * - * @param tag - * @param s - * @param args - */ - public static void w(String tag, String s, Object... args) { - if (LOG.WARN >= LOGLEVEL) Log.w(tag, String.format(s, args)); - } - - /** - * Error log message with printf formatting. - * - * @param tag - * @param s - * @param args - */ - public static void e(String tag, String s, Object... args) { - if (LOG.ERROR >= LOGLEVEL) Log.e(tag, String.format(s, args)); - } - -} diff --git a/mobile/CordovaLib/src/org/apache/cordova/LinearLayoutSoftKeyboardDetect.java b/mobile/CordovaLib/src/org/apache/cordova/LinearLayoutSoftKeyboardDetect.java deleted file mode 100755 index bb6b6a81586..00000000000 --- a/mobile/CordovaLib/src/org/apache/cordova/LinearLayoutSoftKeyboardDetect.java +++ /dev/null @@ -1,105 +0,0 @@ -/* - Licensed to the Apache Software Foundation (ASF) under one - or more contributor license agreements. See the NOTICE file - distributed with this work for additional information - regarding copyright ownership. The ASF licenses this file - to you under the Apache License, Version 2.0 (the - "License"); you may not use this file except in compliance - with the License. You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, - software distributed under the License is distributed on an - "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - KIND, either express or implied. See the License for the - specific language governing permissions and limitations - under the License. -*/ -package org.apache.cordova; - -import org.apache.cordova.LOG; - -import android.content.Context; -//import android.view.View.MeasureSpec; -import android.widget.LinearLayout; - -/** - * This class is used to detect when the soft keyboard is shown and hidden in the web view. - */ -public class LinearLayoutSoftKeyboardDetect extends LinearLayout { - - private static final String TAG = "SoftKeyboardDetect"; - - private int oldHeight = 0; // Need to save the old height as not to send redundant events - private int oldWidth = 0; // Need to save old width for orientation change - private int screenWidth = 0; - private int screenHeight = 0; - private CordovaActivity app = null; - - public LinearLayoutSoftKeyboardDetect(Context context, int width, int height) { - super(context); - screenWidth = width; - screenHeight = height; - app = (CordovaActivity) context; - } - - @Override - /** - * Start listening to new measurement events. Fire events when the height - * gets smaller fire a show keyboard event and when height gets bigger fire - * a hide keyboard event. - * - * Note: We are using app.postMessage so that this is more compatible with the API - * - * @param widthMeasureSpec - * @param heightMeasureSpec - */ - protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { - super.onMeasure(widthMeasureSpec, heightMeasureSpec); - - LOG.v(TAG, "We are in our onMeasure method"); - - // Get the current height of the visible part of the screen. - // This height will not included the status bar.\ - int width, height; - - height = MeasureSpec.getSize(heightMeasureSpec); - width = MeasureSpec.getSize(widthMeasureSpec); - LOG.v(TAG, "Old Height = %d", oldHeight); - LOG.v(TAG, "Height = %d", height); - LOG.v(TAG, "Old Width = %d", oldWidth); - LOG.v(TAG, "Width = %d", width); - - // If the oldHeight = 0 then this is the first measure event as the app starts up. - // If oldHeight == height then we got a measurement change that doesn't affect us. - if (oldHeight == 0 || oldHeight == height) { - LOG.d(TAG, "Ignore this event"); - } - // Account for orientation change and ignore this event/Fire orientation change - else if (screenHeight == width) - { - int tmp_var = screenHeight; - screenHeight = screenWidth; - screenWidth = tmp_var; - LOG.v(TAG, "Orientation Change"); - } - // If the height as gotten bigger then we will assume the soft keyboard has - // gone away. - else if (height > oldHeight) { - if (app != null) - app.appView.sendJavascript("cordova.fireDocumentEvent('hidekeyboard');"); - } - // If the height as gotten smaller then we will assume the soft keyboard has - // been displayed. - else if (height < oldHeight) { - if (app != null) - app.appView.sendJavascript("cordova.fireDocumentEvent('showkeyboard');"); - } - - // Update the old height for the next event - oldHeight = height; - oldWidth = width; - } - -} diff --git a/mobile/CordovaLib/src/org/apache/cordova/NativeToJsMessageQueue.java b/mobile/CordovaLib/src/org/apache/cordova/NativeToJsMessageQueue.java deleted file mode 100755 index 5d0c061b1dd..00000000000 --- a/mobile/CordovaLib/src/org/apache/cordova/NativeToJsMessageQueue.java +++ /dev/null @@ -1,518 +0,0 @@ -/* - Licensed to the Apache Software Foundation (ASF) under one - or more contributor license agreements. See the NOTICE file - distributed with this work for additional information - regarding copyright ownership. The ASF licenses this file - to you under the Apache License, Version 2.0 (the - "License"); you may not use this file except in compliance - with the License. You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, - software distributed under the License is distributed on an - "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - KIND, either express or implied. See the License for the - specific language governing permissions and limitations - under the License. -*/ -package org.apache.cordova; - -import java.lang.reflect.Field; -import java.lang.reflect.Method; -import java.util.LinkedList; - -import org.apache.cordova.CordovaInterface; -import org.apache.cordova.PluginResult; - -import android.os.Message; -import android.util.Log; -import android.webkit.WebView; - -/** - * Holds the list of messages to be sent to the WebView. - */ -public class NativeToJsMessageQueue { - private static final String LOG_TAG = "JsMessageQueue"; - - // This must match the default value in cordova-js/lib/android/exec.js - private static final int DEFAULT_BRIDGE_MODE = 2; - - // Set this to true to force plugin results to be encoding as - // JS instead of the custom format (useful for benchmarking). - private static final boolean FORCE_ENCODE_USING_EVAL = false; - - // Disable URL-based exec() bridge by default since it's a bit of a - // security concern. - static final boolean ENABLE_LOCATION_CHANGE_EXEC_MODE = false; - - // Disable sending back native->JS messages during an exec() when the active - // exec() is asynchronous. Set this to true when running bridge benchmarks. - static final boolean DISABLE_EXEC_CHAINING = false; - - // Arbitrarily chosen upper limit for how much data to send to JS in one shot. - // This currently only chops up on message boundaries. It may be useful - // to allow it to break up messages. - private static int MAX_PAYLOAD_SIZE = 50 * 1024 * 10240; - - /** - * The index into registeredListeners to treat as active. - */ - private int activeListenerIndex; - - /** - * When true, the active listener is not fired upon enqueue. When set to false, - * the active listener will be fired if the queue is non-empty. - */ - private boolean paused; - - /** - * The list of JavaScript statements to be sent to JavaScript. - */ - private final LinkedList queue = new LinkedList(); - - /** - * The array of listeners that can be used to send messages to JS. - */ - private final BridgeMode[] registeredListeners; - - private final CordovaInterface cordova; - private final CordovaWebView webView; - - public NativeToJsMessageQueue(CordovaWebView webView, CordovaInterface cordova) { - this.cordova = cordova; - this.webView = webView; - registeredListeners = new BridgeMode[4]; - registeredListeners[0] = new PollingBridgeMode(); - registeredListeners[1] = new LoadUrlBridgeMode(); - registeredListeners[2] = new OnlineEventsBridgeMode(); - registeredListeners[3] = new PrivateApiBridgeMode(); - reset(); - } - - /** - * Changes the bridge mode. - */ - public void setBridgeMode(int value) { - if (value < 0 || value >= registeredListeners.length) { - Log.d(LOG_TAG, "Invalid NativeToJsBridgeMode: " + value); - } else { - if (value != activeListenerIndex) { - Log.d(LOG_TAG, "Set native->JS mode to " + value); - synchronized (this) { - activeListenerIndex = value; - BridgeMode activeListener = registeredListeners[value]; - activeListener.reset(); - if (!paused && !queue.isEmpty()) { - activeListener.onNativeToJsMessageAvailable(); - } - } - } - } - } - - /** - * Clears all messages and resets to the default bridge mode. - */ - public void reset() { - synchronized (this) { - queue.clear(); - setBridgeMode(DEFAULT_BRIDGE_MODE); - registeredListeners[activeListenerIndex].reset(); - } - } - - private int calculatePackedMessageLength(JsMessage message) { - int messageLen = message.calculateEncodedLength(); - String messageLenStr = String.valueOf(messageLen); - return messageLenStr.length() + messageLen + 1; - } - - private void packMessage(JsMessage message, StringBuilder sb) { - int len = message.calculateEncodedLength(); - sb.append(len) - .append(' '); - message.encodeAsMessage(sb); - } - - /** - * Combines and returns queued messages combined into a single string. - * Combines as many messages as possible, while staying under MAX_PAYLOAD_SIZE. - * Returns null if the queue is empty. - */ - public String popAndEncode(boolean fromOnlineEvent) { - synchronized (this) { - registeredListeners[activeListenerIndex].notifyOfFlush(fromOnlineEvent); - if (queue.isEmpty()) { - return null; - } - int totalPayloadLen = 0; - int numMessagesToSend = 0; - for (JsMessage message : queue) { - int messageSize = calculatePackedMessageLength(message); - if (numMessagesToSend > 0 && totalPayloadLen + messageSize > MAX_PAYLOAD_SIZE && MAX_PAYLOAD_SIZE > 0) { - break; - } - totalPayloadLen += messageSize; - numMessagesToSend += 1; - } - - StringBuilder sb = new StringBuilder(totalPayloadLen); - for (int i = 0; i < numMessagesToSend; ++i) { - JsMessage message = queue.removeFirst(); - packMessage(message, sb); - } - - if (!queue.isEmpty()) { - // Attach a char to indicate that there are more messages pending. - sb.append('*'); - } - String ret = sb.toString(); - return ret; - } - } - - /** - * Same as popAndEncode(), except encodes in a form that can be executed as JS. - */ - private String popAndEncodeAsJs() { - synchronized (this) { - int length = queue.size(); - if (length == 0) { - return null; - } - int totalPayloadLen = 0; - int numMessagesToSend = 0; - for (JsMessage message : queue) { - int messageSize = message.calculateEncodedLength() + 50; // overestimate. - if (numMessagesToSend > 0 && totalPayloadLen + messageSize > MAX_PAYLOAD_SIZE && MAX_PAYLOAD_SIZE > 0) { - break; - } - totalPayloadLen += messageSize; - numMessagesToSend += 1; - } - boolean willSendAllMessages = numMessagesToSend == queue.size(); - StringBuilder sb = new StringBuilder(totalPayloadLen + (willSendAllMessages ? 0 : 100)); - // Wrap each statement in a try/finally so that if one throws it does - // not affect the next. - for (int i = 0; i < numMessagesToSend; ++i) { - JsMessage message = queue.removeFirst(); - if (willSendAllMessages && (i + 1 == numMessagesToSend)) { - message.encodeAsJsMessage(sb); - } else { - sb.append("try{"); - message.encodeAsJsMessage(sb); - sb.append("}finally{"); - } - } - if (!willSendAllMessages) { - sb.append("window.setTimeout(function(){cordova.require('cordova/plugin/android/polling').pollOnce();},0);"); - } - for (int i = willSendAllMessages ? 1 : 0; i < numMessagesToSend; ++i) { - sb.append('}'); - } - String ret = sb.toString(); - return ret; - } - } - - /** - * Add a JavaScript statement to the list. - */ - public void addJavaScript(String statement) { - enqueueMessage(new JsMessage(statement)); - } - - /** - * Add a JavaScript statement to the list. - */ - public void addPluginResult(PluginResult result, String callbackId) { - if (callbackId == null) { - Log.e(LOG_TAG, "Got plugin result with no callbackId", new Throwable()); - return; - } - // Don't send anything if there is no result and there is no need to - // clear the callbacks. - boolean noResult = result.getStatus() == PluginResult.Status.NO_RESULT.ordinal(); - boolean keepCallback = result.getKeepCallback(); - if (noResult && keepCallback) { - return; - } - JsMessage message = new JsMessage(result, callbackId); - if (FORCE_ENCODE_USING_EVAL) { - StringBuilder sb = new StringBuilder(message.calculateEncodedLength() + 50); - message.encodeAsJsMessage(sb); - message = new JsMessage(sb.toString()); - } - - enqueueMessage(message); - } - - private void enqueueMessage(JsMessage message) { - synchronized (this) { - queue.add(message); - if (!paused) { - registeredListeners[activeListenerIndex].onNativeToJsMessageAvailable(); - } - } - } - - public void setPaused(boolean value) { - if (paused && value) { - // This should never happen. If a use-case for it comes up, we should - // change pause to be a counter. - Log.e(LOG_TAG, "nested call to setPaused detected.", new Throwable()); - } - paused = value; - if (!value) { - synchronized (this) { - if (!queue.isEmpty()) { - registeredListeners[activeListenerIndex].onNativeToJsMessageAvailable(); - } - } - } - } - - public boolean getPaused() { - return paused; - } - - private abstract class BridgeMode { - abstract void onNativeToJsMessageAvailable(); - void notifyOfFlush(boolean fromOnlineEvent) {} - void reset() {} - } - - /** Uses JS polls for messages on a timer.. */ - private class PollingBridgeMode extends BridgeMode { - @Override void onNativeToJsMessageAvailable() { - } - } - - /** Uses webView.loadUrl("javascript:") to execute messages. */ - private class LoadUrlBridgeMode extends BridgeMode { - final Runnable runnable = new Runnable() { - public void run() { - String js = popAndEncodeAsJs(); - if (js != null) { - webView.loadUrlNow("javascript:" + js); - } - } - }; - - @Override void onNativeToJsMessageAvailable() { - cordova.getActivity().runOnUiThread(runnable); - } - } - - /** Uses online/offline events to tell the JS when to poll for messages. */ - private class OnlineEventsBridgeMode extends BridgeMode { - private boolean online; - final Runnable runnable = new Runnable() { - public void run() { - if (!queue.isEmpty()) { - webView.setNetworkAvailable(online); - } - } - }; - @Override void reset() { - online = false; - webView.setNetworkAvailable(true); - } - @Override void onNativeToJsMessageAvailable() { - cordova.getActivity().runOnUiThread(runnable); - } - // Track when online/offline events are fired so that we don't fire excess events. - @Override void notifyOfFlush(boolean fromOnlineEvent) { - if (fromOnlineEvent) { - online = !online; - } - } - } - - /** - * Uses Java reflection to access an API that lets us eval JS. - * Requires Android 3.2.4 or above. - */ - private class PrivateApiBridgeMode extends BridgeMode { - // Message added in commit: - // http://omapzoom.org/?p=platform/frameworks/base.git;a=commitdiff;h=9497c5f8c4bc7c47789e5ccde01179abc31ffeb2 - // Which first appeared in 3.2.4ish. - private static final int EXECUTE_JS = 194; - - Method sendMessageMethod; - Object webViewCore; - boolean initFailed; - - @SuppressWarnings("rawtypes") - private void initReflection() { - Object webViewObject = webView; - Class webViewClass = WebView.class; - try { - Field f = webViewClass.getDeclaredField("mProvider"); - f.setAccessible(true); - webViewObject = f.get(webView); - webViewClass = webViewObject.getClass(); - } catch (Throwable e) { - // mProvider is only required on newer Android releases. - } - - try { - Field f = webViewClass.getDeclaredField("mWebViewCore"); - f.setAccessible(true); - webViewCore = f.get(webViewObject); - - if (webViewCore != null) { - sendMessageMethod = webViewCore.getClass().getDeclaredMethod("sendMessage", Message.class); - sendMessageMethod.setAccessible(true); - } - } catch (Throwable e) { - initFailed = true; - Log.e(LOG_TAG, "PrivateApiBridgeMode failed to find the expected APIs.", e); - } - } - - @Override void onNativeToJsMessageAvailable() { - if (sendMessageMethod == null && !initFailed) { - initReflection(); - } - // webViewCore is lazily initialized, and so may not be available right away. - if (sendMessageMethod != null) { - String js = popAndEncodeAsJs(); - Message execJsMessage = Message.obtain(null, EXECUTE_JS, js); - try { - sendMessageMethod.invoke(webViewCore, execJsMessage); - } catch (Throwable e) { - Log.e(LOG_TAG, "Reflection message bridge failed.", e); - } - } - } - } - private static class JsMessage { - final String jsPayloadOrCallbackId; - final PluginResult pluginResult; - JsMessage(String js) { - if (js == null) { - throw new NullPointerException(); - } - jsPayloadOrCallbackId = js; - pluginResult = null; - } - JsMessage(PluginResult pluginResult, String callbackId) { - if (callbackId == null || pluginResult == null) { - throw new NullPointerException(); - } - jsPayloadOrCallbackId = callbackId; - this.pluginResult = pluginResult; - } - - int calculateEncodedLength() { - if (pluginResult == null) { - return jsPayloadOrCallbackId.length() + 1; - } - int statusLen = String.valueOf(pluginResult.getStatus()).length(); - int ret = 2 + statusLen + 1 + jsPayloadOrCallbackId.length() + 1; - switch (pluginResult.getMessageType()) { - case PluginResult.MESSAGE_TYPE_BOOLEAN: // f or t - case PluginResult.MESSAGE_TYPE_NULL: // N - ret += 1; - break; - case PluginResult.MESSAGE_TYPE_NUMBER: // n - ret += 1 + pluginResult.getMessage().length(); - break; - case PluginResult.MESSAGE_TYPE_STRING: // s - ret += 1 + pluginResult.getStrMessage().length(); - break; - case PluginResult.MESSAGE_TYPE_BINARYSTRING: - ret += 1 + pluginResult.getMessage().length(); - break; - case PluginResult.MESSAGE_TYPE_ARRAYBUFFER: - ret += 1 + pluginResult.getMessage().length(); - break; - case PluginResult.MESSAGE_TYPE_JSON: - default: - ret += pluginResult.getMessage().length(); - } - return ret; - } - - void encodeAsMessage(StringBuilder sb) { - if (pluginResult == null) { - sb.append('J') - .append(jsPayloadOrCallbackId); - return; - } - int status = pluginResult.getStatus(); - boolean noResult = status == PluginResult.Status.NO_RESULT.ordinal(); - boolean resultOk = status == PluginResult.Status.OK.ordinal(); - boolean keepCallback = pluginResult.getKeepCallback(); - - sb.append((noResult || resultOk) ? 'S' : 'F') - .append(keepCallback ? '1' : '0') - .append(status) - .append(' ') - .append(jsPayloadOrCallbackId) - .append(' '); - switch (pluginResult.getMessageType()) { - case PluginResult.MESSAGE_TYPE_BOOLEAN: - sb.append(pluginResult.getMessage().charAt(0)); // t or f. - break; - case PluginResult.MESSAGE_TYPE_NULL: // N - sb.append('N'); - break; - case PluginResult.MESSAGE_TYPE_NUMBER: // n - sb.append('n') - .append(pluginResult.getMessage()); - break; - case PluginResult.MESSAGE_TYPE_STRING: // s - sb.append('s'); - sb.append(pluginResult.getStrMessage()); - break; - case PluginResult.MESSAGE_TYPE_BINARYSTRING: // S - sb.append('S'); - sb.append(pluginResult.getMessage()); - break; - case PluginResult.MESSAGE_TYPE_ARRAYBUFFER: // A - sb.append('A'); - sb.append(pluginResult.getMessage()); - break; - case PluginResult.MESSAGE_TYPE_JSON: - default: - sb.append(pluginResult.getMessage()); // [ or { - } - } - - void encodeAsJsMessage(StringBuilder sb) { - if (pluginResult == null) { - sb.append(jsPayloadOrCallbackId); - } else { - int status = pluginResult.getStatus(); - boolean success = (status == PluginResult.Status.OK.ordinal()) || (status == PluginResult.Status.NO_RESULT.ordinal()); - sb.append("cordova.callbackFromNative('") - .append(jsPayloadOrCallbackId) - .append("',") - .append(success) - .append(",") - .append(status) - .append(",["); - switch (pluginResult.getMessageType()) { - case PluginResult.MESSAGE_TYPE_BINARYSTRING: - sb.append("atob('") - .append(pluginResult.getMessage()) - .append("')"); - break; - case PluginResult.MESSAGE_TYPE_ARRAYBUFFER: - sb.append("cordova.require('cordova/base64').toArrayBuffer('") - .append(pluginResult.getMessage()) - .append("')"); - break; - default: - sb.append(pluginResult.getMessage()); - } - sb.append("],") - .append(pluginResult.getKeepCallback()) - .append(");"); - } - } - } -} diff --git a/mobile/CordovaLib/src/org/apache/cordova/PluginEntry.java b/mobile/CordovaLib/src/org/apache/cordova/PluginEntry.java deleted file mode 100755 index dcc197439df..00000000000 --- a/mobile/CordovaLib/src/org/apache/cordova/PluginEntry.java +++ /dev/null @@ -1,132 +0,0 @@ -/* - Licensed to the Apache Software Foundation (ASF) under one - or more contributor license agreements. See the NOTICE file - distributed with this work for additional information - regarding copyright ownership. The ASF licenses this file - to you under the Apache License, Version 2.0 (the - "License"); you may not use this file except in compliance - with the License. You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, - software distributed under the License is distributed on an - "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - KIND, either express or implied. See the License for the - specific language governing permissions and limitations - under the License. - */ -package org.apache.cordova; - -import org.apache.cordova.CordovaWebView; -import org.apache.cordova.CordovaInterface; -import org.apache.cordova.CordovaPlugin; - -//import android.content.Context; -//import android.webkit.WebView; - -/** - * This class represents a service entry object. - */ -public class PluginEntry { - - /** - * The name of the service that this plugin implements - */ - public String service = ""; - - /** - * The plugin class name that implements the service. - */ - public String pluginClass = ""; - - /** - * The plugin object. - * Plugin objects are only created when they are called from JavaScript. (see PluginManager.exec) - * The exception is if the onload flag is set, then they are created when PluginManager is initialized. - */ - public CordovaPlugin plugin = null; - - /** - * Flag that indicates the plugin object should be created when PluginManager is initialized. - */ - public boolean onload = false; - - /** - * Constructor - * - * @param service The name of the service - * @param pluginClass The plugin class name - * @param onload Create plugin object when HTML page is loaded - */ - public PluginEntry(String service, String pluginClass, boolean onload) { - this.service = service; - this.pluginClass = pluginClass; - this.onload = onload; - } - - /** - * Alternate constructor - * - * @param service The name of the service - * @param plugin The plugin associated with this entry - */ - public PluginEntry(String service, CordovaPlugin plugin) { - this.service = service; - this.plugin = plugin; - this.pluginClass = plugin.getClass().getName(); - this.onload = false; - } - - /** - * Create plugin object. - * If plugin is already created, then just return it. - * - * @return The plugin object - */ - public CordovaPlugin createPlugin(CordovaWebView webView, CordovaInterface ctx) { - if (this.plugin != null) { - return this.plugin; - } - try { - @SuppressWarnings("rawtypes") - Class c = getClassByName(this.pluginClass); - if (isCordovaPlugin(c)) { - this.plugin = (CordovaPlugin) c.newInstance(); - this.plugin.initialize(ctx, webView); - return plugin; - } - } catch (Exception e) { - e.printStackTrace(); - System.out.println("Error adding plugin " + this.pluginClass + "."); - } - return null; - } - - /** - * Get the class. - * - * @param clazz - * @return a reference to the named class - * @throws ClassNotFoundException - */ - @SuppressWarnings("rawtypes") - private Class getClassByName(final String clazz) throws ClassNotFoundException { - Class c = null; - if ((clazz != null) && !("".equals(clazz))) { - c = Class.forName(clazz); - } - return c; - } - - /** - * Returns whether the given class extends CordovaPlugin. - */ - @SuppressWarnings("rawtypes") - private boolean isCordovaPlugin(Class c) { - if (c != null) { - return org.apache.cordova.CordovaPlugin.class.isAssignableFrom(c); - } - return false; - } -} diff --git a/mobile/CordovaLib/src/org/apache/cordova/PluginManager.java b/mobile/CordovaLib/src/org/apache/cordova/PluginManager.java deleted file mode 100755 index f0957222a83..00000000000 --- a/mobile/CordovaLib/src/org/apache/cordova/PluginManager.java +++ /dev/null @@ -1,461 +0,0 @@ -/* - Licensed to the Apache Software Foundation (ASF) under one - or more contributor license agreements. See the NOTICE file - distributed with this work for additional information - regarding copyright ownership. The ASF licenses this file - to you under the Apache License, Version 2.0 (the - "License"); you may not use this file except in compliance - with the License. You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, - software distributed under the License is distributed on an - "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - KIND, either express or implied. See the License for the - specific language governing permissions and limitations - under the License. - */ -package org.apache.cordova; - -import java.io.IOException; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.Iterator; -import java.util.List; -import java.util.concurrent.atomic.AtomicInteger; - -import org.apache.cordova.CordovaArgs; -import org.apache.cordova.CordovaWebView; -import org.apache.cordova.CallbackContext; -import org.apache.cordova.CordovaInterface; -import org.apache.cordova.CordovaPlugin; -import org.apache.cordova.PluginEntry; -import org.apache.cordova.PluginResult; -import org.json.JSONException; -import org.xmlpull.v1.XmlPullParserException; - -import android.content.Intent; -import android.content.res.XmlResourceParser; - -import android.net.Uri; -import android.os.Debug; -import android.util.Log; - -/** - * PluginManager is exposed to JavaScript in the Cordova WebView. - * - * Calling native plugin code can be done by calling PluginManager.exec(...) - * from JavaScript. - */ -public class PluginManager { - private static String TAG = "PluginManager"; - private static final int SLOW_EXEC_WARNING_THRESHOLD = Debug.isDebuggerConnected() ? 60 : 16; - - // List of service entries - private final HashMap entries = new HashMap(); - - private final CordovaInterface ctx; - private final CordovaWebView app; - - // Flag to track first time through - private boolean firstRun; - - // Stores mapping of Plugin Name -> values. - // Using is deprecated. - protected HashMap> urlMap = new HashMap>(); - - private AtomicInteger numPendingUiExecs; - - /** - * Constructor. - * - * @param app - * @param ctx - */ - public PluginManager(CordovaWebView app, CordovaInterface ctx) { - this.ctx = ctx; - this.app = app; - this.firstRun = true; - this.numPendingUiExecs = new AtomicInteger(0); - } - - /** - * Init when loading a new HTML page into webview. - */ - public void init() { - LOG.d(TAG, "init()"); - - // If first time, then load plugins from config.xml file - if (this.firstRun) { - this.loadPlugins(); - this.firstRun = false; - } - - // Stop plugins on current HTML page and discard plugin objects - else { - this.onPause(false); - this.onDestroy(); - this.clearPluginObjects(); - } - - // Insert PluginManager service - this.addService(new PluginEntry("PluginManager", new PluginManagerService())); - - // Start up all plugins that have onload specified - this.startupPlugins(); - } - - /** - * Load plugins from res/xml/config.xml - */ - public void loadPlugins() { - // First checking the class namespace for config.xml - int id = this.ctx.getActivity().getResources().getIdentifier("config", "xml", this.ctx.getActivity().getClass().getPackage().getName()); - if (id == 0) { - // If we couldn't find config.xml there, we'll look in the namespace from AndroidManifest.xml - id = this.ctx.getActivity().getResources().getIdentifier("config", "xml", this.ctx.getActivity().getPackageName()); - if (id == 0) { - this.pluginConfigurationMissing(); - //We have the error, we need to exit without crashing! - return; - } - } - XmlResourceParser xml = this.ctx.getActivity().getResources().getXml(id); - int eventType = -1; - String service = "", pluginClass = "", paramType = ""; - boolean onload = false; - boolean insideFeature = false; - while (eventType != XmlResourceParser.END_DOCUMENT) { - if (eventType == XmlResourceParser.START_TAG) { - String strNode = xml.getName(); - if (strNode.equals("url-filter")) { - Log.w(TAG, "Plugin " + service + " is using deprecated tag "); - if (urlMap.get(service) == null) { - urlMap.put(service, new ArrayList(2)); - } - List filters = urlMap.get(service); - filters.add(xml.getAttributeValue(null, "value")); - } - else if (strNode.equals("feature")) { - //Check for supported feature sets aka. plugins (Accelerometer, Geolocation, etc) - //Set the bit for reading params - insideFeature = true; - service = xml.getAttributeValue(null, "name"); - } - else if (insideFeature && strNode.equals("param")) { - paramType = xml.getAttributeValue(null, "name"); - if (paramType.equals("service")) // check if it is using the older service param - service = xml.getAttributeValue(null, "value"); - else if (paramType.equals("package") || paramType.equals("android-package")) - pluginClass = xml.getAttributeValue(null,"value"); - else if (paramType.equals("onload")) - onload = "true".equals(xml.getAttributeValue(null, "value")); - } - } - else if (eventType == XmlResourceParser.END_TAG) - { - String strNode = xml.getName(); - if (strNode.equals("feature") || strNode.equals("plugin")) - { - PluginEntry entry = new PluginEntry(service, pluginClass, onload); - this.addService(entry); - - //Empty the strings to prevent plugin loading bugs - service = ""; - pluginClass = ""; - insideFeature = false; - } - } - try { - eventType = xml.next(); - } catch (XmlPullParserException e) { - e.printStackTrace(); - } catch (IOException e) { - e.printStackTrace(); - } - } - } - - /** - * Delete all plugin objects. - */ - public void clearPluginObjects() { - for (PluginEntry entry : this.entries.values()) { - entry.plugin = null; - } - } - - /** - * Create plugins objects that have onload set. - */ - public void startupPlugins() { - for (PluginEntry entry : this.entries.values()) { - if (entry.onload) { - entry.createPlugin(this.app, this.ctx); - } - } - } - - /** - * Receives a request for execution and fulfills it by finding the appropriate - * Java class and calling it's execute method. - * - * PluginManager.exec can be used either synchronously or async. In either case, a JSON encoded - * string is returned that will indicate if any errors have occurred when trying to find - * or execute the class denoted by the clazz argument. - * - * @param service String containing the service to run - * @param action String containing the action that the class is supposed to perform. This is - * passed to the plugin execute method and it is up to the plugin developer - * how to deal with it. - * @param callbackId String containing the id of the callback that is execute in JavaScript if - * this is an async plugin call. - * @param rawArgs An Array literal string containing any arguments needed in the - * plugin execute method. - */ - public void exec(final String service, final String action, final String callbackId, final String rawArgs) { - if (numPendingUiExecs.get() > 0) { - numPendingUiExecs.getAndIncrement(); - this.ctx.getActivity().runOnUiThread(new Runnable() { - public void run() { - execHelper(service, action, callbackId, rawArgs); - numPendingUiExecs.getAndDecrement(); - } - }); - } else { - execHelper(service, action, callbackId, rawArgs); - } - } - - private void execHelper(final String service, final String action, final String callbackId, final String rawArgs) { - CordovaPlugin plugin = getPlugin(service); - if (plugin == null) { - Log.d(TAG, "exec() call to unknown plugin: " + service); - PluginResult cr = new PluginResult(PluginResult.Status.CLASS_NOT_FOUND_EXCEPTION); - app.sendPluginResult(cr, callbackId); - return; - } - CallbackContext callbackContext = new CallbackContext(callbackId, app); - try { - long pluginStartTime = System.currentTimeMillis(); - boolean wasValidAction = plugin.execute(action, rawArgs, callbackContext); - long duration = System.currentTimeMillis() - pluginStartTime; - - if (duration > SLOW_EXEC_WARNING_THRESHOLD) { - Log.w(TAG, "THREAD WARNING: exec() call to " + service + "." + action + " blocked the main thread for " + duration + "ms. Plugin should use CordovaInterface.getThreadPool()."); - } - if (!wasValidAction) { - PluginResult cr = new PluginResult(PluginResult.Status.INVALID_ACTION); - callbackContext.sendPluginResult(cr); - } - } catch (JSONException e) { - PluginResult cr = new PluginResult(PluginResult.Status.JSON_EXCEPTION); - callbackContext.sendPluginResult(cr); - } catch (Exception e) { - Log.e(TAG, "Uncaught exception from plugin", e); - callbackContext.error(e.getMessage()); - } - } - - @Deprecated - public void exec(String service, String action, String callbackId, String jsonArgs, boolean async) { - exec(service, action, callbackId, jsonArgs); - } - - /** - * Get the plugin object that implements the service. - * If the plugin object does not already exist, then create it. - * If the service doesn't exist, then return null. - * - * @param service The name of the service. - * @return CordovaPlugin or null - */ - public CordovaPlugin getPlugin(String service) { - PluginEntry entry = this.entries.get(service); - if (entry == null) { - return null; - } - CordovaPlugin plugin = entry.plugin; - if (plugin == null) { - plugin = entry.createPlugin(this.app, this.ctx); - } - return plugin; - } - - /** - * Add a plugin class that implements a service to the service entry table. - * This does not create the plugin object instance. - * - * @param service The service name - * @param className The plugin class name - */ - public void addService(String service, String className) { - PluginEntry entry = new PluginEntry(service, className, false); - this.addService(entry); - } - - /** - * Add a plugin class that implements a service to the service entry table. - * This does not create the plugin object instance. - * - * @param entry The plugin entry - */ - public void addService(PluginEntry entry) { - this.entries.put(entry.service, entry); - } - - /** - * Called when the system is about to start resuming a previous activity. - * - * @param multitasking Flag indicating if multitasking is turned on for app - */ - public void onPause(boolean multitasking) { - for (PluginEntry entry : this.entries.values()) { - if (entry.plugin != null) { - entry.plugin.onPause(multitasking); - } - } - } - - /** - * Called when the activity will start interacting with the user. - * - * @param multitasking Flag indicating if multitasking is turned on for app - */ - public void onResume(boolean multitasking) { - for (PluginEntry entry : this.entries.values()) { - if (entry.plugin != null) { - entry.plugin.onResume(multitasking); - } - } - } - - /** - * The final call you receive before your activity is destroyed. - */ - public void onDestroy() { - for (PluginEntry entry : this.entries.values()) { - if (entry.plugin != null) { - entry.plugin.onDestroy(); - } - } - } - - /** - * Send a message to all plugins. - * - * @param id The message id - * @param data The message data - * @return Object to stop propagation or null - */ - public Object postMessage(String id, Object data) { - Object obj = this.ctx.onMessage(id, data); - if (obj != null) { - return obj; - } - for (PluginEntry entry : this.entries.values()) { - if (entry.plugin != null) { - obj = entry.plugin.onMessage(id, data); - if (obj != null) { - return obj; - } - } - } - return null; - } - - /** - * Called when the activity receives a new intent. - */ - public void onNewIntent(Intent intent) { - for (PluginEntry entry : this.entries.values()) { - if (entry.plugin != null) { - entry.plugin.onNewIntent(intent); - } - } - } - - /** - * Called when the URL of the webview changes. - * - * @param url The URL that is being changed to. - * @return Return false to allow the URL to load, return true to prevent the URL from loading. - */ - public boolean onOverrideUrlLoading(String url) { - // Deprecated way to intercept URLs. (process tags). - // Instead, plugins should not include and instead ensure - // that they are loaded before this function is called (either by setting - // the onload or by making an exec() call to them) - for (PluginEntry entry : this.entries.values()) { - List urlFilters = urlMap.get(entry.service); - if (urlFilters != null) { - for (String s : urlFilters) { - if (url.startsWith(s)) { - return getPlugin(entry.service).onOverrideUrlLoading(url); - } - } - } else if (entry.plugin != null) { - if (entry.plugin.onOverrideUrlLoading(url)) { - return true; - } - } - } - return false; - } - - /** - * Called when the app navigates or refreshes. - */ - public void onReset() { - Iterator it = this.entries.values().iterator(); - while (it.hasNext()) { - CordovaPlugin plugin = it.next().plugin; - if (plugin != null) { - plugin.onReset(); - } - } - } - - - private void pluginConfigurationMissing() { - LOG.e(TAG, "====================================================================================="); - LOG.e(TAG, "ERROR: config.xml is missing. Add res/xml/config.xml to your project."); - LOG.e(TAG, "https://git-wip-us.apache.org/repos/asf?p=cordova-android.git;a=blob;f=framework/res/xml/config.xml"); - LOG.e(TAG, "====================================================================================="); - } - - Uri remapUri(Uri uri) { - for (PluginEntry entry : this.entries.values()) { - if (entry.plugin != null) { - Uri ret = entry.plugin.remapUri(uri); - if (ret != null) { - return ret; - } - } - } - return null; - } - - private class PluginManagerService extends CordovaPlugin { - @Override - public boolean execute(String action, CordovaArgs args, final CallbackContext callbackContext) throws JSONException { - if ("startup".equals(action)) { - // The onPageStarted event of CordovaWebViewClient resets the queue of messages to be returned to javascript in response - // to exec calls. Since this event occurs on the UI thread and exec calls happen on the WebCore thread it is possible - // that onPageStarted occurs after exec calls have started happening on a new page, which can cause the message queue - // to be reset between the queuing of a new message and its retrieval by javascript. To avoid this from happening, - // javascript always sends a "startup" exec upon loading a new page which causes all future exec calls to happen on the UI - // thread (and hence after onPageStarted) until there are no more pending exec calls remaining. - numPendingUiExecs.getAndIncrement(); - ctx.getActivity().runOnUiThread(new Runnable() { - public void run() { - numPendingUiExecs.getAndDecrement(); - } - }); - return true; - } - return false; - } - } -} diff --git a/mobile/CordovaLib/src/org/apache/cordova/PluginResult.java b/mobile/CordovaLib/src/org/apache/cordova/PluginResult.java deleted file mode 100755 index 920cbc2eabc..00000000000 --- a/mobile/CordovaLib/src/org/apache/cordova/PluginResult.java +++ /dev/null @@ -1,179 +0,0 @@ -/* - Licensed to the Apache Software Foundation (ASF) under one - or more contributor license agreements. See the NOTICE file - distributed with this work for additional information - regarding copyright ownership. The ASF licenses this file - to you under the Apache License, Version 2.0 (the - "License"); you may not use this file except in compliance - with the License. You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, - software distributed under the License is distributed on an - "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - KIND, either express or implied. See the License for the - specific language governing permissions and limitations - under the License. -*/ -package org.apache.cordova; - -import org.json.JSONArray; -import org.json.JSONObject; - -import android.util.Base64; - -public class PluginResult { - private final int status; - private final int messageType; - private boolean keepCallback = false; - private String strMessage; - private String encodedMessage; - - public PluginResult(Status status) { - this(status, PluginResult.StatusMessages[status.ordinal()]); - } - - public PluginResult(Status status, String message) { - this.status = status.ordinal(); - this.messageType = message == null ? MESSAGE_TYPE_NULL : MESSAGE_TYPE_STRING; - this.strMessage = message; - } - - public PluginResult(Status status, JSONArray message) { - this.status = status.ordinal(); - this.messageType = MESSAGE_TYPE_JSON; - encodedMessage = message.toString(); - } - - public PluginResult(Status status, JSONObject message) { - this.status = status.ordinal(); - this.messageType = MESSAGE_TYPE_JSON; - encodedMessage = message.toString(); - } - - public PluginResult(Status status, int i) { - this.status = status.ordinal(); - this.messageType = MESSAGE_TYPE_NUMBER; - this.encodedMessage = ""+i; - } - - public PluginResult(Status status, float f) { - this.status = status.ordinal(); - this.messageType = MESSAGE_TYPE_NUMBER; - this.encodedMessage = ""+f; - } - - public PluginResult(Status status, boolean b) { - this.status = status.ordinal(); - this.messageType = MESSAGE_TYPE_BOOLEAN; - this.encodedMessage = Boolean.toString(b); - } - - public PluginResult(Status status, byte[] data) { - this(status, data, false); - } - - public PluginResult(Status status, byte[] data, boolean binaryString) { - this.status = status.ordinal(); - this.messageType = binaryString ? MESSAGE_TYPE_BINARYSTRING : MESSAGE_TYPE_ARRAYBUFFER; - this.encodedMessage = Base64.encodeToString(data, Base64.NO_WRAP); - } - - public void setKeepCallback(boolean b) { - this.keepCallback = b; - } - - public int getStatus() { - return status; - } - - public int getMessageType() { - return messageType; - } - - public String getMessage() { - if (encodedMessage == null) { - encodedMessage = JSONObject.quote(strMessage); - } - return encodedMessage; - } - - /** - * If messageType == MESSAGE_TYPE_STRING, then returns the message string. - * Otherwise, returns null. - */ - public String getStrMessage() { - return strMessage; - } - - public boolean getKeepCallback() { - return this.keepCallback; - } - - @Deprecated // Use sendPluginResult instead of sendJavascript. - public String getJSONString() { - return "{\"status\":" + this.status + ",\"message\":" + this.getMessage() + ",\"keepCallback\":" + this.keepCallback + "}"; - } - - @Deprecated // Use sendPluginResult instead of sendJavascript. - public String toCallbackString(String callbackId) { - // If no result to be sent and keeping callback, then no need to sent back to JavaScript - if ((status == PluginResult.Status.NO_RESULT.ordinal()) && keepCallback) { - return null; - } - - // Check the success (OK, NO_RESULT & !KEEP_CALLBACK) - if ((status == PluginResult.Status.OK.ordinal()) || (status == PluginResult.Status.NO_RESULT.ordinal())) { - return toSuccessCallbackString(callbackId); - } - - return toErrorCallbackString(callbackId); - } - - @Deprecated // Use sendPluginResult instead of sendJavascript. - public String toSuccessCallbackString(String callbackId) { - return "cordova.callbackSuccess('"+callbackId+"',"+this.getJSONString()+");"; - } - - @Deprecated // Use sendPluginResult instead of sendJavascript. - public String toErrorCallbackString(String callbackId) { - return "cordova.callbackError('"+callbackId+"', " + this.getJSONString()+ ");"; - } - - public static final int MESSAGE_TYPE_STRING = 1; - public static final int MESSAGE_TYPE_JSON = 2; - public static final int MESSAGE_TYPE_NUMBER = 3; - public static final int MESSAGE_TYPE_BOOLEAN = 4; - public static final int MESSAGE_TYPE_NULL = 5; - public static final int MESSAGE_TYPE_ARRAYBUFFER = 6; - // Use BINARYSTRING when your string may contain null characters. - // This is required to work around a bug in the platform :(. - public static final int MESSAGE_TYPE_BINARYSTRING = 7; - - public static String[] StatusMessages = new String[] { - "No result", - "OK", - "Class not found", - "Illegal access", - "Instantiation error", - "Malformed url", - "IO error", - "Invalid action", - "JSON error", - "Error" - }; - - public enum Status { - NO_RESULT, - OK, - CLASS_NOT_FOUND_EXCEPTION, - ILLEGAL_ACCESS_EXCEPTION, - INSTANTIATION_EXCEPTION, - MALFORMED_URL_EXCEPTION, - IO_EXCEPTION, - INVALID_ACTION, - JSON_EXCEPTION, - ERROR - } -} diff --git a/mobile/CordovaLib/src/org/apache/cordova/ScrollEvent.java b/mobile/CordovaLib/src/org/apache/cordova/ScrollEvent.java deleted file mode 100644 index 55466131c89..00000000000 --- a/mobile/CordovaLib/src/org/apache/cordova/ScrollEvent.java +++ /dev/null @@ -1,67 +0,0 @@ -/* - Licensed to the Apache Software Foundation (ASF) under one - or more contributor license agreements. See the NOTICE file - distributed with this work for additional information - regarding copyright ownership. The ASF licenses this file - to you under the Apache License, Version 2.0 (the - "License"); you may not use this file except in compliance - with the License. You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, - software distributed under the License is distributed on an - "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - KIND, either express or implied. See the License for the - specific language governing permissions and limitations - under the License. -*/ - -package org.apache.cordova; - -import android.view.View; - -/* - * This can be used by any view, including native views - * - */ - - -public class ScrollEvent { - - public int l, t, nl, nt; - private View targetView; - - /* - * ScrollEvent constructor - * No idea why it uses l and t instead of x and y - * - * @param x - * @param y - * @param nx - * @param ny - * @param view - */ - - ScrollEvent(int nx, int ny, int x, int y, View view) - { - l = x; y = t; nl = nx; nt = ny; - targetView = view; - } - - public int dl() - { - return nl - l; - } - - public int dt() - { - return nt - t; - } - - public View getTargetView() - { - return targetView; - } - -} diff --git a/mobile/CordovaLib/src/org/apache/cordova/Whitelist.java b/mobile/CordovaLib/src/org/apache/cordova/Whitelist.java deleted file mode 100644 index a01d7aaf39a..00000000000 --- a/mobile/CordovaLib/src/org/apache/cordova/Whitelist.java +++ /dev/null @@ -1,170 +0,0 @@ -/* - Licensed to the Apache Software Foundation (ASF) under one - or more contributor license agreements. See the NOTICE file - distributed with this work for additional information - regarding copyright ownership. The ASF licenses this file - to you under the Apache License, Version 2.0 (the - "License"); you may not use this file except in compliance - with the License. You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, - software distributed under the License is distributed on an - "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - KIND, either express or implied. See the License for the - specific language governing permissions and limitations - under the License. -*/ -package org.apache.cordova; - -import java.net.MalformedURLException; -import java.util.ArrayList; -import java.util.Iterator; -import java.util.regex.Matcher; -import java.util.regex.Pattern; - -import org.apache.cordova.LOG; - -import android.net.Uri; - -public class Whitelist { - private static class URLPattern { - public Pattern scheme; - public Pattern host; - public Integer port; - public Pattern path; - - private String regexFromPattern(String pattern, boolean allowWildcards) { - final String toReplace = "\\.[]{}()^$?+|"; - StringBuilder regex = new StringBuilder(); - for (int i=0; i < pattern.length(); i++) { - char c = pattern.charAt(i); - if (c == '*' && allowWildcards) { - regex.append("."); - } else if (toReplace.indexOf(c) > -1) { - regex.append('\\'); - } - regex.append(c); - } - return regex.toString(); - } - - public URLPattern(String scheme, String host, String port, String path) throws MalformedURLException { - try { - if (scheme == null || "*".equals(scheme)) { - this.scheme = null; - } else { - this.scheme = Pattern.compile(regexFromPattern(scheme, false), Pattern.CASE_INSENSITIVE); - } - if ("*".equals(host)) { - this.host = null; - } else if (host.startsWith("*.")) { - this.host = Pattern.compile("([a-z0-9.-]*\\.)?" + regexFromPattern(host.substring(2), false), Pattern.CASE_INSENSITIVE); - } else { - this.host = Pattern.compile(regexFromPattern(host, false), Pattern.CASE_INSENSITIVE); - } - if (port == null || "*".equals(port)) { - this.port = null; - } else { - this.port = Integer.parseInt(port,10); - } - if (path == null || "/*".equals(path)) { - this.path = null; - } else { - this.path = Pattern.compile(regexFromPattern(path, true)); - } - } catch (NumberFormatException e) { - throw new MalformedURLException("Port must be a number"); - } - } - - public boolean matches(Uri uri) { - try { - return ((scheme == null || scheme.matcher(uri.getScheme()).matches()) && - (host == null || host.matcher(uri.getHost()).matches()) && - (port == null || port.equals(uri.getPort())) && - (path == null || path.matcher(uri.getPath()).matches())); - } catch (Exception e) { - LOG.d(TAG, e.toString()); - return false; - } - } - } - - private ArrayList whiteList; - - public static final String TAG = "Whitelist"; - - public Whitelist() { - this.whiteList = new ArrayList(); - } - - /* Match patterns (from http://developer.chrome.com/extensions/match_patterns.html) - * - * := :// - * := '*' | 'http' | 'https' | 'file' | 'ftp' | 'chrome-extension' - * := '*' | '*.' + - * := '/' - * - * We extend this to explicitly allow a port attached to the host, and we allow - * the scheme to be omitted for backwards compatibility. (Also host is not required - * to begin with a "*" or "*.".) - */ - public void addWhiteListEntry(String origin, boolean subdomains) { - if (whiteList != null) { - try { - // Unlimited access to network resources - if (origin.compareTo("*") == 0) { - LOG.d(TAG, "Unlimited access to network resources"); - whiteList = null; - } - else { // specific access - Pattern parts = Pattern.compile("^((\\*|[A-Za-z-]+)://)?(\\*|((\\*\\.)?[^*/:]+))?(:(\\d+))?(/.*)?"); - Matcher m = parts.matcher(origin); - if (m.matches()) { - String scheme = m.group(2); - String host = m.group(3); - // Special case for two urls which are allowed to have empty hosts - if (("file".equals(scheme) || "content".equals(scheme)) && host == null) host = "*"; - String port = m.group(7); - String path = m.group(8); - if (scheme == null) { - // XXX making it stupid friendly for people who forget to include protocol/SSL - whiteList.add(new URLPattern("http", host, port, path)); - whiteList.add(new URLPattern("https", host, port, path)); - } else { - whiteList.add(new URLPattern(scheme, host, port, path)); - } - } - } - } catch (Exception e) { - LOG.d(TAG, "Failed to add origin %s", origin); - } - } - } - - - /** - * Determine if URL is in approved list of URLs to load. - * - * @param uri - * @return true if wide open or whitelisted - */ - public boolean isUrlWhiteListed(String uri) { - // If there is no whitelist, then it's wide open - if (whiteList == null) return true; - - Uri parsedUri = Uri.parse(uri); - // Look for match in white list - Iterator pit = whiteList.iterator(); - while (pit.hasNext()) { - URLPattern p = pit.next(); - if (p.matches(parsedUri)) { - return true; - } - } - return false; - } - -} diff --git a/mobile/CordovaLib/xwalk_core_library/AndroidManifest.xml b/mobile/CordovaLib/xwalk_core_library/AndroidManifest.xml deleted file mode 100644 index e5f96229acd..00000000000 --- a/mobile/CordovaLib/xwalk_core_library/AndroidManifest.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - - diff --git a/mobile/CordovaLib/xwalk_core_library/ant.properties b/mobile/CordovaLib/xwalk_core_library/ant.properties deleted file mode 100644 index b0971e891ef..00000000000 --- a/mobile/CordovaLib/xwalk_core_library/ant.properties +++ /dev/null @@ -1,17 +0,0 @@ -# This file is used to override default values used by the Ant build system. -# -# This file must be checked into Version Control Systems, as it is -# integral to the build system of your project. - -# This file is only used by the Ant script. - -# You can use this to override default values such as -# 'source.dir' for the location of your java source folder and -# 'out.dir' for the location of your output folder. - -# You can also use it define how the release builds are signed by declaring -# the following properties: -# 'key.store' for the location of your keystore and -# 'key.alias' for the name of the key to use. -# The password will be asked during the build when you use the 'release' target. - diff --git a/mobile/CordovaLib/xwalk_core_library/build.xml b/mobile/CordovaLib/xwalk_core_library/build.xml deleted file mode 100644 index b2e291faefa..00000000000 --- a/mobile/CordovaLib/xwalk_core_library/build.xml +++ /dev/null @@ -1,29 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - diff --git a/mobile/CordovaLib/xwalk_core_library/libs/armeabi-v7a/libxwalkcore.so b/mobile/CordovaLib/xwalk_core_library/libs/armeabi-v7a/libxwalkcore.so deleted file mode 100755 index 3d9e493526dd7c35497604728d8915cd749e43eb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 26250444 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

4mjk3 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 z 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

FH8YoK>! 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

Cm|!Ec`hPFg$r)E|X7 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%0AYOgf>f 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

=%76F`D| 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

dwH?&7IP{h;Dy4ah67k$Mat&6Si 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�yT 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%0AXGl$ zuVzniu0>h>p;yCa29$f&coe>&%RK~H?Klk-i7EPzSW)9=Iz+W!KnJHFbWS98O z&$*ptLHV$szQkMg$KxR7GcK+{x3ydf$%TFak~@cZrOM{_;hukpIQS?Q_!ZMEUWJkVh!V&9+Y=P%P}0+tD_i?NFkANybC^~z2n#dPXB)! z$9#DF{^vOAqvLo4mVX+@2jLgn>D$*G55KucW)iRO{8}MP@c(SU5LlCf+Ds?c1Py3#7u!{Y!W5{aud=(H_+vkE?}$7wn)t^3Oo=_x5G> z|D!MKl>gS3T(mE9qkZ|MpZc;N`ttIc7!>Kt6${2+?#t4v`tm74MHH@Y{KN0oL?R+E zXQ?ZI(^K0`;zlLY&Rf4|p6QL#Up@DOa#8mR@S2Fzr)r0I>(zZtJf|PH3F_;gf(iBU z=&QolEp5UNO(- z{HkVvTP0j`d2A+LH8y)c@a`TWPMWfA4axs~qf(LA_r15~3bHHKB4=c#Am7hk@IdzD{&QqM#I1IsPb!n%!3@aR0~=5xyEsGdL`LBDb^M1ENs%lrzTl; zg&4~lc8C3EJ8YSdERmljcUB7`b;9~bh+=TXEh9=aJJ?q#L;T+c8#cylyx_ATuRAc<7Sx0I7B3J0 z@#>g-HU@S%wDC%xhJ?S~%x>-w807NW)1q9@R?MJZitnE0-m6v02TbH@z&HE--mA zm0wWb{YHKF`b+PUAMMtz^ys@I)!fU(T_Ex=tm%Krjfx z?-S*dc_s4DZsFqQhv2_qI(UX*g^SxOK2c`Q|3tYS$2=T2&gZ={bju%CWQoc0F9Ae2 z$JMI&gi6_fvzqy{eJl~+>h_zId)sT_f=((s-t{&EQ5L_%gfQH z_shEjlqLLrL`8{|GicxCufP}N(wv&G`~PtE=5bNg`~Ubkv$LasfS?Qv$^b4bE~u%9 zdT`W4&CHg2?*NvAD{7gQ6{eMy6^c7nmMw!zfn^`5YkJeVw%rS9-4?w~*`k6lZ0DTW zf6v!@23)f4_woDV%$b?yxF@Q?BC{u0HQ5eP0JW9$ABh*>CERGV(CxHL8y5+EWhXKp^%~ zS00PK(8YCaC~rX7QogxlYMbSU-L<()Q^RlaqqH6Zo^fXZ^hDnc3GAV;zhQf*Oz4S< zI=^1=z@!Z6B`^kLNGTY%r({#fpO!apOHjLK^Od`0f5BUXT_f&t$p^`tTZsa&W_ zG-V={Z&)g8un*~N<1!VMz0St=gd5D>7Hzr(;l5?zES_8NwkG(Hc!ygGUsrfbawcY} zExp3+dikNA9v*sW4Rldwhm`V`KGS8v5W#fZMM&N&eL^B79tpH~Il@3X)?sP+>Nh~iB``VyWv4kP*Oi?HC&Qb=8% z@M+{B_Mu7C!!p4dqRXUkc@`tVKhk>78S=yi=2LYRM^0>vFym9xqMCJ|9)3u z;9bZ5$GiBe-ZlKXcin||O~bpud|;?VPuq;##ne^EFJzCkRmi)u@om;%X*IB0>6mvD za6a@=R9|LA&Q*q6(}8)5n-&6|@rNb_R|W6a9VEUs74w)$xh4KFpxF3Ocz#?CKc?`) zWetUG?`9uoDC&H0MV9adN;x|zpeJl{No?@_povJFAf^nIgaesR9P`-c}Za4J?jpe zmV#XAatmbL7-~C&W$Ye{lRS$orNw!cJ;ju(K~k)T+Ryo78Sh(-_xxGAq!otdLMXWG zM#BQwC!K&4G};bzD4G1-?JgnwN;%Vd8y=`N;4i5KhYa{^li?F9W3vTn3S&vHG0-jQ?5RM#a>kiJCoh#E9Av+{ zR0?rWPh8-bY#T6*+6k@yrfj0N#2G@W9O7-R=xWVD)PRPAS1h9t1#gxrw4V($+bQ_u zX;>@q+leDru{GF!*{#Le!Xf?#`W(zy^1o?3P?K&;Y5&2a1Byv2edP43FR8QEq$9t>T znO_Ec3q>;YLZ_&}xj=^WsN*Yyq7gK&uHmA}F#D2{4?R{1W-MNx9PTE7N!9m=CT6+K0Zx-E0=!g!#zlCA$7oJ|x6X!%Btn`g1K&EuU)<@4Rf6$qPBx#}2ip53KnsQfWijvVB-3)ln8jj9 zj((=uEXL>VS%_hR7qPxJ8rfoj!z-`vV_Jo<53sO5I-*Svvas*EA3)e#HUg##PVrSA z(8F0T2Yd~*it|uLhKKDKPo7RI83gCd4c;DJU<4!S}a)D%j*hFk0I1UEEFKPrZp_oQ1?R!bpSR52OgLrDC|K#WBnAN z2L9d@_F&&_z$DO`i)wCGpk!Bh%j-v&o0=k=vz4Bu3A?&u%|V@2;E73ox#*$eHQ0s8StIkfzVjf zqfSSmuKwkXsWbK)Bqd_L+Q`!ynP!38r2}rNL#&sJ&&i8ZyYY&x;)=`tx{kQZ_(q1hV zcz`QAMZHkdA!2>xw_4eWc2IffU{~40nAb4!`Wdzr)~B)0Ab#!NswTiEwNX&KL@bs| zuxl-^-(mU|rFD#z)-&=p({WZ>X4f&~{~Wv_ERh_ZiI}%S?E{hb>Df_rN%K$0lPWO6 zpsb%U{e;-tS?tB~2Gb4}dxC2_Vt;@=7wn5XwRMsDpWB~k&KFa&wZatXUT5&3InO zo)3|in5MAjN>?GCS3t))v)3r#vu~Ba&emlu=YYWe+=+cpaj10)tT`xW8$F>lp;&{^ zyqIs_RT1|Va#$P+%+VC-po{$V9D(NIfwIwM&^LOH%B!>Dthwvk#QS85y~LxmC^Adn zE;_7jrtatV=w__`QzG92!?MsSu5KpZsokC?xwLn2Dm1eEezRyES*+fMae3_$oD_uG zM>@C2FDB0ddnRxXh{@USWu-pOqprru#y;}c6I7*vFZyq!8hKrE@IFo31#X&j$Q_I^ zI)zDML|Dys^>!`x2*d;Q3z&gm)484e$rZ!P1T+H*qwwXSF#Au)s}3Q~c*%OY5u9v3 z;6|1wf-R7ZUMJnF>-*u1|JfBPLlVj}U0UnwYtpllo$E|O$)5I5NE7fBr`LD?0&C0^?GCyQ4SdqYZgQ|0n71GopnRxmVZ4A*UYXl)R#)OQFCr3}HF_ z(J>fd{|bHUdR|%SU+*PhR@jgYzCFx4Bi-OhuTk!RwHdHnW?whYc&oUoX)e~yk0oP0 z(O1iBkf)zZwY-PrOC`{5HdgBG=7mU{kI`CyJ}cQi)SuIz-luh`oz~deyqgbVFW_g} z%fxz&b^|m&XS*>rMsmj4ja>TFh9cmHjsu-VPg30t^3P`MLWhiR+=3m10V9S_GGfg* z9xH;4y=bS+rDrvySWpTp^+F%mVOJ*C7WzvN-gPT`H74|w;orfuJ_Th297B66E5jn- z7}6PzbtBIW#3;zt!naH5PSO@s7W3eF90~>-_>urBp0JL=4O$zQez5Va-$;^Y9a%#A zZ>{3bmj<(a)^0u8Mx2)au!PRER${&Tj+*v?)Vn@#+3R?W2gl9OWn|Gmhg~P24TDxA zYY9;C*d_3x_A+@rcKG!4bs#vQ=kV{vpMtLADc;IU?Ow1;V1KKXb^_}`wl6fs9Leg> z%72Or?}$qPc~%yxA*9UHS4Gj-l)BiZ-)d)1`dA|tdssF`*A0o;wLiUPST}m zPCxFXQ#>vc?j#*&oP;~+6pzSp7z0(zw?jIiXRUp44u6FgzE!+~c|7Ef#U;Tvn@Yp~ zg6mscnBRfnPi5K!zb;`g7&-`fLTi-X4gIHbUHi(3bCEDkRAUKf^+lZru_jBGR(Yt^ zJ6xHTraG`gT8El3->z0v4LPXV?vm16it2npv3;_9U@WwVb`5r5E-BHau)3sp=mR!l zw5NKjgKq=BzOPl(T=FCFEBlx7p{TdWV*h#M@!HvR&Jw_;j7NJ_G8wDtZe|ktktuVS zgeFrgB;3U$9N>wCgjT$5diKit<0z$a?5gKTL7023&`EivHq6;Gp%0mkmFzq4Dz`+c zb%xkUuMhueuv-B816uf<@LGz0mM@WBb~ec0=o{p-S!(Nh^Ih}v-=cOjC)+G-fR5ED z6w3CoOJI#k@zphB1XWIm{T@m!TeU;kma3a44fbeh1iv^+7#)`{*u|5;G5OP83GJyx zz}vm#^V%qkp8wE%|C4(lQ;u(r6ycRiDJ_ify_9XQa;N1z`nfni@VB#Q#P|38YSfHb zdeg(}$M=-&yo>qlY_hpuDgP?Ub*Y*B+H-AjO6&v`x-4#!^3)RPk~bVWEczWHC{L}I zgnIuk<*9e2)%A*WZ6gnh#^V?-kGCnIw}-bK`i{FIJ^GkBS(&^6_&NHI7=K9fLV8HM z80sKf@2mMEe{TQuf}XJ7j>iN1k#_NI2YGLFi4#2kZ~T#Wo={^A69cb(onjGojd5H$ zzD>o*mv?mQG(|evH$(7j7Cr%j2eu`^@Dy%VoO>SqhPTmYh_zE3>pRk>h)|r{$o_o> zpS|#JjxQFUcli3@^EO`yv`yjCeK$_Vwjhtc-P zqh^0kgsm5gaaSP5uPnw%79$oh?2cIA20Fz~ufeKMc8QnW{qQ?jT7%yle*fZr$MQIK z6-GWCp?>soX<==tA%kByCm*T&q)DxOsUY%8&HyjPa$;5x7-OH6qqEfeH2XWnLq01w zM?Y!e)O;hx-r++LU-B+W3~Ojg(CtgF;WiJ)*+i$<=pAYuUSk*cJBC|BZRtQuWC~-f z*lpK#iYM@F44%E<7z0@cxv6}xC+F`6Mm=Hm=**Rk!TWKtRW-p%qkE^gA5u@K36}bK zCm?*Zdvvk^exug8haykQ5`(2)UXK0qpnE8u!}rDTosH@E=5w6~3uQ>X3f#iGm@nmE z;NJbdl)q)ZlpDc{rUOnOk(K*Il;WeE_r5huf4+TVs{uH>Iq=jTjd6r9z~9MxW_~K~ z$-f!e2XMZ+jkwR2R$xt9(*eIqsRrxQvN9h%jywmZQoS8>QC(WuMFpiwv%>J-)9DL8i##hLP2{I-j0T*T(CXuRT+`vQD&M>LGW zi9Rf#J!+IZ;VtrDVX8&=`7Uk{dFT$?b;XLQMYO;tA?Y>poc zb&8BQocwf(Z+PY~t1X;$`m`7U?BWc^ld#LtqWvrJmfNusRn`n@n+dJK<2FTx;+zS3 z2HrLWpUMn)PB^P>6!2YTqfg#88J~&_oO7L<#C}i2XOLA<)hVt3PN!2`22>6>)jef+ zmk(@~{&zyFdt(CLo8^hI>8B=x1O7qG-Wz;r*5sOqeVwAlmtak+iNQA>|KWtsnT*dR z&IIVT2DN<&Kg)LU9w((=3V(Zc(G1^vcJVJxnm_%gf-U0wmZ4bv3`Dudp4aeq&(iX` zJG8tKml5C3pq*yo{{BxIe$i7Jo)FoQ7R9~-=1)8pCp5%<=*Jw_)DD4GYy+$~NHZo_ z49x!^Y~z{#!A^MUBmaY4;$<)SAGC|{0sn(tZ}ndr-zwm?`~43huWl{c zGWkyV5;!cXS+Ao7K2;;E{Ps@q0oW^aiZ8n(YJ&D9VDHcyezW;~3V0qQPDMp^00 z(ox_#?cz@kDuEvyY4A7*znl!`)FS?R+3#_1RUiKu?hfIN8UI9!(^#p^MGLPM<$`S) z``FF6UYT4q3z&Q5wpV66GHISI2s|F080*6S(BEJf^EViT^;xUa%i9@s~bKgC$7%cb2Jm)$D1f|tnuPqT|h381ID z?f{}Q0y!^rYj;LiQtriU{-B z<*X0Mup3y0Im{(~?^w$I@ky~hb=!QtRXprn6!<3`42K%j+casDGX^tNtM~@|8`{MY zj?zE~k2iB6mx)?BOKtXRm&T^5xm3n&N&puJW*Juki?z{9tug`jGWppL)!iD1`-2xA z&xK^`TyWp&g=9#++M8@$W}6Xs{%`g?4bL<1JPpq+-Zbmqz+tM4h-(xAq5kfj#PV^! zV`AW+w-HYx42IMraMm*z@uq{xJKT0t;Q3zmJQvRg;(0Ef-{j4Oe4oj~SqNF0?e&*L zmNz@_kEti0qma)M)Yw*=ip!qu@ECB zo#^YpCfEHtf$^_h`F-bgzy17dSDt@=-SY&TieH`H_v|sx=JGnM6_wK% zDiEv7NP+nEwHyb(-*mE~uoe>=^>`gdah$jD#L^#{;P*|V7hW;b?v}g<0pE|b>|or9 zn5KFQnk~r0CF^n{QznBMHV?9#ZQ2eQmI~d{aE4#Zu#;cD7uW=_AKhPie-PU{?m;?v zc(ZQWM;1D>QL@uQ^bu%wtR0Kp{*x7An9VyHjj)MZyU+fA#@f@`aVI;ACvSnU(ARIe zkk6lQAJ(L4(rMwN2pp06VsmjTd>Lm6qlA*OR`Dt99rVS@@)iqmv9yR=nwrey`MOnH z3Y?3zBiG$*jvP*`;(qoK#eVYpOXqKX4r|~T3=_E0UdPe144TwEVEMcJfu2ln1KT^;c%z z!7No2iliid(254dpz;Q8(9#B@v6}>eK?8CN`rQT!iwKrVg_iB{SYRS;Z0;Z`wlV0k-^^itTWx(2cb;}9ecJ9 zLcfU6q_3ZSz$o?i_GY6(huDGhiFC+#pK}(-_thrC9>lMoNoS=NB2K-O0g1R{?(kCn z>)BdU zu5AZH(GCWq9b}>%q@x|Ap&blBJ20RfB%>W9p&j%?J4iq~pd8#4$U#wOc((--N-^6L z7RZ4nkb?~@2ame=)O6HncOLd#^p~GA4E+G>t8sxmkWY(ln;w5H#`|kg5gbf9<7M6_ z3evv^1~VB9T==~JzmvZYg=HmltN0GPb3M;WIF!j3ff80%ZXqA_OW}9@@~(hvMq_FJ;LH&AYw*&cn(W-+BXy(3a4LP7 zEl9t>mL`1!^nCHzk&xyez5VuDMyVQ@c(U+r7t7%zo@8kUUxdk4+CMBaj-{myiHPkr zB`7vFHY_$OhSwLMCFY|Ajk9U=H`%oM(HLFwY{B{wwh;X=yk#@q;_sW^<1PNaX>t4e zW;=H6{=RukroNdbJ%rHIH;X#$sKM^OIn(X$o9*HNjDXZP-;k+qz6ib@L#sAL0AIa6g1Qwaq`PSK^#3^7-pE1ocY43-LSo`*2pT z6Y#yeUehE!q>esI^;#MzN$R~_uI_sM6qfN+meWy|Mroq+>Uv#zfm+>PLrVEL$VPHf zy^jA~z0SC*UNwPwO*dx_R%u|{ss9T~|4x+t?I^=g8w5z-B{^q5+OM_jf zzwTZ@Xn)=9ysGY2z|xMmJle%Voc5$6{3kxDyW@`E*WG3DLaV>-J`679pPr%R_o6)V zalak+-nfgnsP59P8&{H$2O3v;^(yVJ3AEJV*{UdwE{0R;hoXHBMhRu29V;^fV{j@; zPM?CD>QQd}k=wD5KOSRnQRh0yPv^x{i@jkN=(p|q4Gcq+-!kwU(43=0+f$$~aW=vW z_(ze;;uEb@pRWXA9K@RLnSi`WzZ*lM0`;j<@yXDJqkSpSru5%yS^M(zj2m%~%+CskJ>NQ*9|xQ~p`Ad$hPLzS%-8t_0;X z0_F20%BNwPe?9&x?i=vmjpng*l0{`Z>J`7>)>&|s%=g2(-rsAc2W0*i@D?=Z zT-`eDmr2s4no>Rya&jndTCay-hd`_K6J@v5!S{?h85UK2q-dbJ?k+Z9&vCx^if@QK zjPw0B&gDyztORrp?t5!2K%IwENs?wVee#N{juL>v1hY? zNXFoRj1$YI)v5cv49$%i9)@Wr;@^c_y|)NPy2m$k%Rzp0-sl+2Qi2_7c1YdvtnxzU zi_EajO!o@Qo;Hng9(;%?fqdq=`hey9TKsVaPL}o92_0f`pL(V{ZNe8yj>KVVw7YOuU(6~Od(ed%)Mz`9nhNZe`(V`^Bfam5#yj^k6Kal=COIO3 zUQ^UiedYr(*D5N3>hnM- z!WD;REs}P7x-rGU_WPXVBS{5h@Hg4KekG7;p*Ty*z$sjQoxY6FaEqk%9{=06yqCxD z$FTN?H0C;0S3@~xKjO&?$W@MTk&x<_`pBbMhqu>8Kntg|`uA!vRezJ_IAEm)`S0?; z_Z#>Zl{LZk;n0gJUih1ISdIbu%&!Z)EdI4Q7WlJv1###n3GkPIwJ7*{GvmR|MJbE{ zE-M3`07LAz0maa#d~9-t@V3Py9RXi-A~y=w_G>*SbWXqG_ zvEVXpZiocOTEqPg=`|n#j24Gf4co@?$=pCC{_j(6lAed3GWaVqE4OJ5a#ao~-osVn zY;D_QIT~k!oLvUW#36-yEcguZsM?}|rHTRmMJ;5#e@6a1o66{n+>pG}!r3z*HN0S0 zTSO<;MlsS$Zs?l2el5RE(z{eUPRb3l6gBGV9fc}r%>UuTx*8IUPmU5yV7YGmjWD>R zx$u_nJ0NW;p)#n3p=u&<@Jamlwy7o7QMLH4y& zGIZzk{-+J)gf!ypU%4xw`}?i&>))ttus00g?0@mV{+r2riqfA&>BmSnxv8Y7++(B> z?$^xSEoiI@$RV&HQwu6}`&-bz(1Pd;`OmP*Kef9rK?9QI6X9FsPq51ASc7$Am1CqB z_qAB%lTXg&)6`5KJV9Y-0D^c!?K?N?a|->HBu_Z6I1_E|YfQ0+4cwS{C?B#O;gTV}vMi+F-r zSsvqc9LJ?oJA1rVC*1Zutb(!=7QGEWD@CW%q2ECotGEGVpRe4isIs69)UJ%h8(zoy z@X_QfVIgXKhRcEz#t+CQGP`==+g;lq4Qe2CWL1H_;Z&xvQG*lPz2$@!Xjnf)0q+@=9m_&C4UoP+b*-G~b- zIOzJw+r%>aQjYjvXQS^CwuCUB)CSW18Z5;|W|KklW(wK@^$-JQ0998s>?h{rWJph; zKibP%#Ls}%|9sY1pu^Ik!;PyWiyhM5`Nxb2c)FXUjr%a%L%9stB&lzJa-Q+TT>i+qxqQ~R>oLx|**wt% zt!=k`gdammv+eUhl)$2B(;|%a!9e-1m%rhG7!v>L)!+n!8=#idP7P`~)w$O)%%rux zlynE!#)<7wlNowUYseIyF97Rf8dx8-dx0g0UY;TS3>?>-5-oV=GGIxnwFYe?yl{r3 za0Wx$-Xh9aBgB9|#NT_O)%Vw>3!xYrnt?Wmfo?l=2VWD0(I6CU>^)C!8~t11EU!0M z!VfAdC(A~7{7G1r4u5zw0)2sT)FFN9q_*NO6;gLY{O)psoQkeU#3d`w90=ixs|r&rE8YDq-HvzLsuG;s@>N}3yu127aM$opNWEp+E-!OA;9;=TvOD(FziEuq-W%?ns{qQ+aY&R=c)3a z+U*y(dP|5iIz@>Vaay)VPLTv}j!D(F zfqP)mr~O()lXI4k1F7D1#flLhF#sF`XbPg9P364EDF;vvRCl*>I^Q?s(BBxKJ8LQ}M z?V28x`j{#eR(uiG2~wl;D~ti~r~sY3a*Gkn-@EyU8vMp65!QBZP-OBK^7_i&Z%#pd zZ>Ve$56H>YY9I;JUB@5f(z1l4a&=dqdnZT-o%4hUcsrhkS^0?ctz0rKe0zwMT5wpE zWMN)?xWdE;+PXSxS<`m!+ z=K-IS$m-@-JZZ$9O@D5z$#6is7Zj4&L;JOAkCEDz*%vgVBDFut3^!2c}$D= zrAxaz*F^ikE^!UUtaNzEm=0}2l5L1-Xds1+Jt+(gq%dq}E>dt|J=!AHA%#@aaF)WI zNMSfq$n*_Ie|XhJ?Pa&Dt>y-3VJUgj0bP|A7)sa(gJCWMs3G0fN%H4olZ9aWJg*uu zdeDb;cwPuwbFx&<5{jfGoS(LckGLYNMc~s@?i_>D{19gM*epKQI+nG$OU@Erg?4va zu9hE^cwoQ6pY1nU0 z1FzGXWRnz%Q*dKm5NTSOyf zifD{63XH=_jG79x6VaK}vyP-bv(Cc9o=%X z>j%Iqm66~2?!6Lv7*--r!4d`*kT!#*zlF|UWa({aNM7$)39oVni)wTgtWs6E!8Wsn zc8TXLef#}nzSE*?t5CcG>so_Z38W<6g|j{bc<^==Bs5H(9RFpKAgg_!9R_Lg8R^kg~82rGBn9=tEb z{8)jm@h3}UKbv{BMbTEl?J<{_Q_TG=!!fGJ(w$gIzuuAH%Z9wq6#UXi9w@-%Q7hL) zoYEbnbFavQLDgI(Ulm*p*4=7YWrJfq;xqNd2+kseR;y}MRbka?_$1I&MO15n@jZ^V z|Ectms~7eXk*tot#y_-2`BZxEeg8il_~$0+0(u_p9y$0$R+}fA(}l;)ADPv~lZziO z{-{`8GP&d?DaH9(3GE@tsW2Pc`0WZvM(f5v+%;Fny-|8A zS$dd-_<@%2Pgw4d!kVL}55p>HL6Al9$O+^mOW-z*0^{9ToC#l_mut&w3^VhfW9ct{x-(dbEbfqwDe9-#SRQ@Onohi^W~# zBbaQP)1?7ep+<7)!17bvdstj^Ph7HXe!b)EK-_C}8R_Uh6lXe%Gp8qx|9w0EAkJl+ z&0Yq&k7UfhF3zKW5a%?D6UX8tUKi)?KZsM$;&_?1Mt5DDX@3ysB^Kvr7N_%}Ys)YD z58@Duz-94M7N`8W_rwO`TwQ;c#dlcP(4O>3zx8?tf5WgZvasBBVVm$y!jfN`?gkb% z^}4WM-7xG57IxlsVUOJ~>|HGEP1l93xnWp=h0VGyY}F0JX5CQUhi@3RFAIC&!R|Wo zm)U|FhE=h!yRQp7>xN-lSgDskaBaF{ZW#6(7FKm#x&v+)_Cpr-!gc9J+%W6`7Iyb_ zVIA0u|Gtj5v9S8LqM^@qB+BE|Q73Vkmx zM2H+^mtx{+c|Ew2b!Sg3+p%y@8y|YMjpOp0LZKby5vo_4FZ=j1>_C%mm4?-mmh8kb zKVtbCi{DFGR{8m5^qu^9r3-mx|1aWImycG;t8=32PT;v;3rjvl>Ax{`KH$pX3&~Qw zWCz|8c{C0snFn6eh0I-tZF z;4R-A_=okc;K=KHj5mp`D<}^6&F+r%ejpab*$RXi$*PiqonV@%*;}kS0F;UxI+oI+ zwIHQr_mCeYS_Mui3lsF%{Tihm-u=+qlPBes7@7QfS+6+8JKszt;T1=CvBE&g1B$(3 zmiIMi=ve+?wXvQPq@S=ShV=;8Dk#4Pu>Pd;SV{-=1D$l2n84a)6#O==2itPQS=BPE z8NvK@9KS7i9)jm(g4W*8MX%(!mB5L3#7J6F+{78N5&42p^`Q|Km z8qPPo|AIUtYh4}r>bgsMLRPoM@j=$Rq_yx<6$Cz;R3L6=*6{;4TR$OUM>hB@w2GUh zVPIYwTNh-#EZz=&hs)wz57rT>^scu&$v`NK3G685T{NJsr(Z6)hQlOu%w_n@q4{GU z>y?%Fb@x^O97@~AEfavr6nVvEcdqnF6HPXA|4_FRH3AAfoD2;N5R@13mf@ObkwDb?hwR*~J zcvsVqKi7%s@var@U8$ak8)`(m-=)0jU18M;mL|M$Lr=~~gZ$~rx%|r+|NDKT+54K^ zfBwGDT%kKr+sNg|sD*Uwmu6j;zlC_;I=qiG*D4^&NN>FZbrF0)i?aK>I~;X!)I5sS z#Taw0#bw?Bi_9_iYN``fKXk7apYPwRLrxw-P7FP1`}M4GNc()J&v$Lww)V5Fl=gG( zkl&?EmZ)QjDeW=$MN2NZyDt3c-GuZm-XOhqSbF#T&-6}Tm)@EcbNRm^y+3b9w)XX{ z)Q(1=EN;Zi(OtJOuB+S83q9}hb8`&AyY{DFU(UAnxlDH5pUKY3_P(C<{AE#z^lrI9 zSqx$6*<628wk*AyuTO9JTz)~vpO*zd3GLn%DvMgzpSQc`oma}DyPZeN{_{saYs3n? z?`WpKJo?dGn?qg~!{I|MR=A~s>-v0kK6D(!QK+rf^JfQZ`HNF1KfVdDRmFIg2>YZm>0Qj$ssj!3y%h?`cPlvPxfJ+S z+B^ZCa8$^JK_Cy+q(=&p#=0rYXq?6P){@rX=~^vN@(OD_{258oUp$KH-~-WmjQYV} z$htkj2PesiV{PrjT9ScWmZTRvIz3LkmV6;c?y2 ze?B%PqK!0PrZ)1T^UwRs!;UL$BuY{T{MUAKiVRscmw&3KzeESdC0qLkmuc)McLx2z z*bxPcdUrdco?=^y@znn3?K%!JZ)P%2a)$nCA2(puN*AJ}H+$Yez56}9Bcw;x?lIKX zZeg(z_z>g=VU&U5?P-$=fr|BR$L^ zOh(l;GM+@5kN2c`MaB|wuSutK@mxT%eZDJeAR8C} zX${0Ve!m8al2-P_mX97s+}98{3um>VVCUgBsjP9Pg}}6tc3-t`Q?j~iWqG0GbgM94 zEd;{hE9`7E2U?}~ov_2Ld0ei|;VY?MXTzFSmCU7pUt#kktf7N3Ci$deSi4EmX(xqf zz-cS`zmvRkdBCakXY(b^5zS4k|I2?iN0h-^V`%kh@Q;0TQG@dk>QzclcR%pYnf;N+ zY9nDk2>)! z2Er;5)>$)PDH}QrCpBFU-U}Vter~JAO5;1R0&Vx5L7is_!8ODxrP*hcrua0l*!VZb zK%=B^hXeON8i-k|Q2J4>gxzznHDQ_>j0vzQs0wR~Qo@@yR`c7y znNTS81z$p^__Xf@IV$V>df3e83=nwmwJCB>;(OP{Hx0ex^uoj@UilGZhmQo7PlXlw z@amKDsT?IfKhM$Pjh7u^sK22>99NtMJehnPe%WEme~jxIvT`I!7;WbhAc21oH?e%JN$b- zIfvhOXJ1nRzbVLcT$XdVu5l}YUbN1WYT&17W%;gT1@gBKR@{3bC$G{C z^1SSDpc<_Ab5&ZKr7RnJ^zqQKkCMK1bCui+M+-W^3$S4p&L{8H+KlY^Q1<*2;5vAm z4rD`5&R4%sU~lwZ$I;d#_HOFtXp_JIVH95LsB`%_+Wh0~AU!c_?ZEi3;gVKJmPY$R zr=<%Yn6=m;(vD<|xeZ*WgP+mE!s6(98YP~TjagCBtFEiZoI{qme90}osQEa z_}=s*ZNjQ-?RNk{F%IK?ZxbOpJH>g<(a=L1h4Io?u+nc9_jp5bicL?Z0q+9-shaW9 zDYq6+s=Q%6IGiSN*Cje1-ta>SUp_#~--Qc#C^`>Y(fRPdv}1i|6R}1^gW}K~C3rAx2l_zYN0W?7GM<$WA z4yEu${o^J&0q%sKitgB9f!I-q9fsKBz4yakr9b|Ih`;BW`1hNlSp2g+@uLFqJ7B{e zh4@L{1wHW>BmS$`#4j_&v-p4Si60+`e;V=Q5#Q&zttb9p5#M@M{O$F3nusN&Q``-I zV2Tu_A<4>Z%9Qp)_9Vpp(KDqd?yMPGdYMY7Ub;wS|xl)rL6tQMt(W_pxwRL zG@sX@-KF6EbE=mA_0oL)B<}lge-rnmxNpLJ1nvuQ_gsL~b+S$EiXXiQI;JsD*uk@YJ^RaXLor z^Nf5T=j|^2-|{>DU2#s1tYAGruh?uYRP5SUzr-|_rML$v&NrM&8Ou_vcPoUkR>kIK z@n?4l(p2m^1!k-$OXM|ao+`@kc&!3Vy*={XVVcNNdmtd+M3&lS$Tt!4ec&!aTA$uf zz9~hIo;xQ;UngCm$;8r|6_C!v(pw1WOia41?lFHX-T1lZ;C1bq6uFE-@aq+^G}D-j zMb`NSD#LuFS!B(EhuI_7#Te3=CF5!BmA9A?onVU{C%nBVLWdGEC1i%f#Qodl{>r46fJMXH4klMG42_---5gI*ZKT#+%fJ=+>UYY^9rqyGd(QecW%gxHEiUI zsX7BpN^K!o!}o3^?oyKX1;}eiNd=P__5K6ywb*Mmi$A$)3r`|6vA|8ix+HESwW}oN zt)W9)hn-+h4VN-Zs)W`o2;o0Aq*j^vY{5N#KzRsU|1WWy4H*EJ2 z`fXPb%3>fiDdg>lQjXb0?Uz`IFNud*V=3q0-lDuGepkZJLH=G&*78dRX!uF^ZpQcW z!%t)V(MM2J>8#<^%6-aB!3Psfsw&m~2e5)r?DtBYzOBi+eKgAoU@O#NhAnd`b}4tB z!J4H7SRZwbx>92mrChIu?W*;HhOJeUY_0MS%%!6Am4`xn=~3+Pf+w8VGYIFP#($?g zgoNdeEmG22@cG)lGZLng74#QaHLsZzb2IsJNW(nwPcX{SEY=}j@J3DriqA^xE8_3W z0c$r8rWFqJ&1me+(tN!`Fcj^A9kyOi8q#Qtdhu01wC`)tV1E6NvmcvZJ4CBD1M@5S7aQQ9`PJ@> z4Mycd3)x6@Qq{s2LpaL4)>C{tA)+~|0&@geow>r*ia^gmFNe%D~VrxV3FUa*Q1lD zHAkRi`m;Arbw=xdXpdv1wAe`uJI>J2*xgRH; zfR?3MoCVGIC@Bh@5tAmL2fKI>%Y*14NrP&}0ryG$Vw^LAF)8{n!^6-#u00g&qQBzC3aFjD9PW%VK6!-MN=yfmJbRj{*f zpsWsiGO$vjCpoOFJdPN)PC@;9QiL$}WB{vOJFFM{^;+$j3cLi>Yn)8=dfpMw`eR<8 zW-nb%U_EmF*CqUN$h!>Jd|aiUfa4SGZ%b{`%~aBU@4XSQ+lzwC3ool6^L9skKxT`l z05TIN`!BGEX%=hY0oz}{cX~!cW_t3CkLq`?BRnAU4CGS}smDosftYI+w>gMW-tR}^ zlKA4~Xp(E~zOPF77l0c(e@e}N2=2XZOemFWqF|WuOf8>L8DKXGs>*JpU5hG9lD>1? z^>**-WFcXCT;KVIc@x)6`l0>l%YAO9aq@WEe65v@l~Ik+fw5BSnIPPqau3Ez;0fR{ zG6p^os4Yx$Sg#r_N3jttsHg8vy&Q7Ycoq&>7yme)&xf3UTy~!Wr$0_|$lYc4sk^)E z3R&6p?kT&Y?(VW1&B{*QQ+BoP?y?)q%1)NAE;}wzc1zEc@OS^8ns5Gxnr}U-Mqk}p zn{drqo$7LZGxgOvxqB>ojPYnqlnOjNMhqjKordL0Gx-0h{!YkYf%;nt8H}v{luU+q zA;XoP`$51bz}eF!{5P>0emMB#{U(hTry{1f7HT&Ds9gyedcQyP0Tq*zO=keN5+ph>nbhZBsN?S$el5ur@ zOt4yrogR%@7VV~@maW?&8lwWO{<4ctCO*?U9TnJ>HH*V#HnUd5v_(YZ3(;(4>J_(n zv=~XdM~R$fKT4a%`%_;67x}|{ej+&csBHd7j%rvt{Fxjz0Xbrs98F@I??!UWzDACg zrYmyfLyklLozFLe8}G*B`3h(}#!4^wy2tZ!mw!ATCtZexQImMY*FBz>y8Pq$IQVbU z;>mvB)#Lf0CK}I=Gy?w_q~V*vzgK>ES8f04G&1^kk2E6Q#NKA{#RtZaQSeikEldPo zT6c?ln!WX5^ol0&L0@EGtQ!Ds$V5KOS`Xh&Vf&(3+r7^dhAp2r(LdVgD1s{H>o~*=O;3TA#RjTx%H-fRUwu;*w zN^2^7OP{-#14MkXKr4U(U_pcIEplehI57f#1CL%P$GYdeh7x{FAK0v;tjTv_EY7aG zxdfHV9;%PVdooM9-}9WeSKvLR>^(O3z-7d<9m*RP@R-$afgJ~5qqeWX$dM-Xb9H+v zyd-+z-=5YmGx5G?yf3#8`AU4Vb^zGmaAq3W%~?lzOU66jLEgv{d@6iS^fzhntyN5S zsFAnVaptfd9;i|qUXZm}w*cdRFDw(Eb6(kBk>_;M{TPMG(gj~d9m=LHPN9Uy7p;=; zrYFGtusK<|PXJb538|~R-Mn>|#C_ncBRS9hyM*5pqvbE5O+4lD`63U0X8F*fvV7Th zqGf|+bL9EH{OIo^l}(DMU`s_`Ws?mol;z-H4Hd#{KcaW}B$;`7c-^A5E1}z)nGB{S z&oF@-)CwfujYFojT?Srt145qb38}O^W+6McDqsaq05$kw0HydCJV7YU<%M?WZz4|Z ztW~`g`ljw6@pAZ4fKTGv3%H0`l$bIi-y+1|HeB>%E3UYMgcMZ4-q7UCgS?;mB6mbr z?nUxP0m>;TJgqjWqJ1ecqQl-CnEX+Q+ zRUC$uMk+iwoL`1|ykFHd;Q>|G;#Gv+_#P{G@?|v<`+}#F1!*ztE7p`Zf&GfJ8OIe( zj&E35W*pCD$_=??Ut^3^wyA>Ews}3d$nrEymQI(K)s=C^UmGYNX`Y{cqjh>DMp(Z^ zMq+uIbj+dZiZ2(X8l?Yud5}FDt*#QhIM9KuLi_8L1;3#0dWa=*L-9#@JrML8ajyiQ z-)a`>9fVqpP(CmeQmAq~U5rro;=UT8%q)}@q2{o(9%X6G!_zqkbr&jCD~o5SYvU*^x{Q|1t6lWJdel@|=c4ii@H)sCYKb3n+!$53-RhPl<{ zhT8Hi{uZ^+{d?SPB;iR@fUMDTE=9+N+%Mujn>VEFMeuF)Zu8~zKHc$KJeUxDH8bFYS$bIXe7YllM5YEA~)CHr)o zuP^)pRd55b8m?3vkijOkyVfyj1Td=UNcDZBYLT7;D^p%Wn)I2QAMu!AkeCBJ=a z?j7)<$yEkh4d5vzUvnxeXMo@2%Al$au>m$x+?H;Aw?}I91>-DpCS>~7SmKHB&%$MX05mo|dsz1S1$yjJJ%2bG7`Zr4>=4~9 z!ufn3t>sVPvLCLiHDU}`RQWw`D>vm@hO!wd6@B}k7{zJbohmJNC7X2k)*=d6C#6a! zU=2j0czOf0**g`x$kzn5rE6Gx*jH0{RojfBxH2fi$N`g66>ranxEeaZ5`B(2qeUH&l1N4$O9z_u=r zwnl+fUMuW{Xw@+uYY`*#XBzu#tWcZ8k?>|{V2GiMu>YqM74F!{QziT~^x^WuFV-3` zI)@9UGXGrP4=AsbILWZ)zzWdBTw$dC-=dhMU9{Ll5_(XD&Dw(%mX0vyU-1cmCieI z0y4h?JKt;}3%z&1H8SsDGUqdy+Z|~EnP2FUne+us;xCSrfXtNveZe@1^aV}gH;zQM zhHe+vL0=GsvKS|E&=)j`pE+XLSwy?I$}?nFJf4h&7n68A`M}YOoienGWuBqC@`R+C zvC^-;Bs{5e47jEQj$BS-B`^i~S0n$C$p6tuaKhlKw`%x}xT6iS`fI3o`37Z?gtEwD zW$_ny4xrUbyEufEMLNpjCGXYs*PE5ad(eY5iHjY{fwG7Vl*L&1HlVWj8*)r%Jndp| zpe$&ALuE1B(I-$A9=E?N#=_eKmBnP_n9gP3U)gO$j^mNzC9Ev+97)&Yc--aWK%L+8 zQ3>w=U$hGKU5D}TbzBGE(C|14q;*@-3($1JM^ja-aBdnm@SJ?0BCJgxTG|RdX!`S!DN|t0I5RR^ zXj&9~u=MVWqPuw~R-jm|gp=*qdU>At*SoRev7MCX+g`tC-~w8!=2^@Obaey4|NoFB zRKIrtXE?v$zwN7Lb5A8RN_GZyH12$`&G1=A(zzPKFO$`+VI+aa%L3u<>53R98Mg z>+6&9yyaNME%&dw$&x5CWxYI;R(G_rE50bM3B-Blet-CKgui!r99yM#hqoZ?VqB{c zetsbQ@%yQ4C=RVlvHC>3jmuSCh4-(QD-d=)uF7Ja{Vyn;`6VZ1ONpv05#bh>xWz~1 zLAz8qeTFZE$MCiiPQPAWUBV@wl-HCT0yi(MB2cD?F<~`QLhKDClL>)~ZnUb-zg#Aag2>UN7a?H((g%bSoz?c8?YbC!+XEMJGo@~AMe5} zW6#N`UN2uLd7HgmuUs!*L^{p5I&)6SGVX3%T)G*!LtRaqAu4Q5M^bc^%pWFQ&vt}d+cFb4JD0?u7jzzCY1=EqH7r}=p-Wxddk z`XqcGaC?93Mg5QT?cd!zm;a>I=XZ}$ z>r6wKKq%-Y@FfEooYku#9rNdNj?8CNZCM=kX2au6W#>y;#r2NN=U;`_?xscO=X3C2 zwAXyzJPxaM#esf;3LJ)!LbR|z5?z&8&n%GIU7BjJ-M`S+qOFdx^AX(c1dF0!Y2*{P z54)Xfx|<{0rYOc)9u2EnVkv+2LT^ra$|rs8OFa5?fz0;Oec;VX*BB|pV^*|+pSRXr zZnm5I+qBhH^_uF;dIjvIaDrif)-$ti6gx55>Z>(tg}s&+(W3U4gKYkPpZ3}D?|JsG z4QC#Yn3MZKV=fzjPUm5lHq2X5L^}uCSrKSLm1Hgos+lS}p9nxVCw`1)<*b zh4++9ESNPljm^MmYJ?-^)n?fohf-OIQc0*+Sjg^L_hqwG<33{6pfp}$rJ=PoOMBch z{yES7v6-`k`%w~2V!f}sB!-|Q?BHQ1Mv4fm5T{xAlwe!BrEl4$0>zg*@r$>8YvEG* z3n2oR+1{w!_E_C}mTkyC53jJ9!YBcJ8NfO2XZfdHa;vPYR6>*9t88Zhu#`&Uu@rOg zm%x2m`KnQ1D$haAw)Es5{z$N1Co6($?XR2QZItYy}NB^TVL1agO$xz@RuBX_1gvNMq;!7FWXaw+72+Z*JOBd2!ik6N4z`` z?YEaD&wxc)bZB01Q>uzKJtGC%jtKkewaAxwCwV0dFl8O9kawbIwXT)oW(-fJDT9lLm|V=Y)=ZfPVe z1o516#z$ehK2jRzv=&qd>PF&afW7PX3Br8%1Eq1qE{<^+>s%Ht^R|X(FL27g+Gxz6 zwC_iMvDlt3h;H;)vYDlXT^s=KdsIu$Uf2NMnhas8O#{Yi3T^gjs%K$zfh<9yIL>Dh zDsWy%z8M}9R@c!uLlUVSQ!r+QW<}LMdqKw=ZP-t2=c^JCZ=}==-TZqP!NMD-FzH+6 zwSv9QIytDpKjPWNU*)*^7%-l4LA`A*OD59Tz>#KTw4gysbSlMH(eDB_f}QgQ+diGl zH>R02HeDc3VLly3HND`+F=Mv5W~TU2Ud?8Tb27i1+Zl~HLeWqfd1Bt}^S*-4nroWR zZ6J%)tL7}9bne(6`CEyRXtyy6_AhM#a>?Ww~``N;hf-sNoqXPdCA{OiuAOP z{He{92e^XQxdC(v$gJd6{`NnPLjD=8MbVKg=M# z=L~@cX)H7t*40WYzi$GxFNb`}>WP!18}2MqS;tLI6L}wZII+iJ_=aXF$f>E( zRKlx(bi$*p9tEobjN+ShRY57b{T^wy3_OH%4^Ce?rBYxVIwiAbe?UKT0sH?jlpxJ? z+_AnWW4%htpY&?@2;A4>9)$Z`+#g%4=lkM&7QXMd`FwuNqZ^nl^x(sWVO;%N5>+FO$>Y9U)&PT#%s%y!{oAPWlhLlpHU7pW%e`Y&Y8` zKIQS_&ww%9WRzZUtOLUElK3yj@xp&1H0glmLCZr}p8vCGZKKNGEAs-YohOWd7c#Bz ze+7D>vvCx1lkSMEPQXebdZ#G<8#`jEGs2Ht5a0Fhhq3m~`M(nW{6amy@Wc5$oq@i^ zv%NoNfgj{ak2SE}upc84%lv;7k!}Ug`GPu8Sp4OGYJ7<1RMIzEdNYbq5#77WryQ7!v(m4Ft<1GzLw z8t;52SsUox1sGS_#Y6D^tK)6UW=R)aTd=?L`=c^=(-wriIS{))E{zcKb9hm9|W&h*WUE0V#rr0!P{a(iQ}T!%16)Rz&Gh4xp%b)MJaF$e>~Fz|bJy(wbx$bv!3zyz?)xP9bsRK%uQj{8_8!KIrF^iBTqzC3~abP z*~LHv-nm!~gYSE_m*#e-Jc;XDf~#xQwaLWsy+P|KXMcg{cWcC10gdPuwBqE$v&38Y zoHti5nq3-k(g03hM)_+pphXu;x`cd3mi*xii9g#Hxv_>71y7Mzy+pBlS&*|%IvM|B zZYuog)#yngyu5!uMc(!*w~QGR(~t~r{h#84x$9CPK_v3rb=Rfk?*4d2@Xy03gKVws zr;H96F2~h&fKOtMbc)w*4NODH7T>(Wp^&h|vgr!~tk}Dxor1?+do{%09{&J3cArLk zRn~|P;(86Vx)T5E@tNo21L~1j611yNYqt^12w8el*^GdJTY9fcgWS}kTHi@diTle~~cmjA}j$HR~~sO9mN{>Vc&Zy}9KM1cDESJXm2ICogQEH&lA ze}A-7P<{y>V_HZ<-YD(i`S@^h`*rSbMU!!|CyQrz{wR$Bl*lI?W)Rw z)<tX@D`#VSiscbT=Cx>4UtJL63o@t{O$L(M;i6OQ zIq27Qpdw{19daZKsk+kiJTJQ+I#n;5AU}ec33_)lN~V_SBu$}TZ=gTTl1BUp*93f~ zex;#bY2$3e>@WT*Ke+5>O@;ZjkoTz?bELDAcc;ayu3Eh1 z#jW#geirW0y?g(dBj%Wf@o3RASt?^PAMG^%SW9<4+CDiMqy3V1QDK;U^msMj3t{N} zYdo`Ij%5sHbzv6G&;{QZl$;Ixf+%OQ#tY6NNagMaf@epa2%IYykjv1oGNn1AXl>&* zoW(>1bNvIrZ-%dnu{)(icMPl}ec{gwM+p!t*7SedWQ*sT9lAwrFkm(q*UAYQ%CB`iAANWg@i3Y@ z_GgrKKeAnHkz+Gnt|MG^Csq@oc%`!O$VYGwpSu+KZq&LNw(ZBu+bq|O(w9w7z^atC zr$FqFKAb{c60>*S?JQ=1)->NAj9( zc^6x9cuijgMxv%%kFr8cpVUB4Jnmjxw-BZ0p!8f``iysh#mY<91m>c2e;|v^ftSXU z<2B&yKewvwYV1!9R%oV=MtQd7ZH)5VDb(f?@7s8yBc2d?&S3)xmzQU9t?&`8&~4D# zJZuQ|u(r~}UPO-daQH%oZ3u_PBR&w0m6(p-JiwOL;%`sCsw~1DVeJNNkBBnzhoEfl zkv1=j^3&?-2I=KCO8{p*OJT32$R}&oZ^-!`Qwe>ug7nS;bIP$5G05ZoY*tU!$)&QZ zv8!|(Yb*w*XC(jTMgK6!FjNc16gA8bL~-nj9&EAi;sW5zAwT&nMby@F)^zI+(4_sw z9tr?A6jt|_VG9(Dossu84y(SSH@aGZTz1i=9qg2|Jg(Zy@)2*7W$u8S^oM~8)&Zq9 zd*krt?_ptNgHLg>xz>{-+-IlZy9NrvB~Up*vON;Rj*JlG+@K{tfPQxb&{S!ImoYDqxgRmOz^{};mih2g-GI9lvl}`+ZMAlmC%0|x4 zdx6o8`3KK5hZ)ePyI_eXS*I`VdHEwgaV(h3{_0QImk5ggVlMLQ1%Q+(hE+jMYF#O- z)`fv$g(Iu2dgJQ4`0W-V6W}A%;Bd5mV-4ZXn6dVbC{>@+p=r#}L#M6j$Uc~C?f|*u4o1zsXp1QU9tM4|2K;O}JT40H zi6X%74mjZTv+4mo{_g|%VGMo~E8*$9L1=vlQV_C#r{6#g-y*NKwsjMboCC`gcCAy? z!7nNB*;SJN8*3g$u6boir%xje_PnsN-EnKE9J`M^MPNQm9>S6xI#F4+1QBBv)26ZDw?n?6@eOxd;`mJdil@@YXBp$bZ}(=hyBIsB zN$P>v3-H^ah#ti9#1p@5gx_BpC{kxo!XW)Bb@vR>uem;=UzZ?5uE-LB(bsbUt-mm| zahf{}+_AECE^@#1U?~A5b{66$d%}`51@tL60iKy>ZM`(&)Ao_hS zw57q7(R{-i;w6c97S7*McdslEzs1@A?;FqwKsGPI=W8F%0v?G*Ou~1=Zm7Xqeo&JH zpG|o7JP_nAGi}2^2}<$C`Yzm~x)t$tw3d}s?sej+ggZ$uybhTW_IIq} z*=#`|-MY!7Xvj7nVei2X+{dbF-Qxic5FdvKSd4qHxA+cLU<5yOr9t zkXK8i+@V%X*ESGxo{yFL$TKJaNsxBHd_N(~E#2Q4Xp^c+Xve`Fs&*w70(Eq_P^vf=+@EbPfiVa=(@OnqiP)qCzqZmzC?XA%WPz zb&;%`%I3T7=CblN$>c@0M97NJG-Pct-FprgJO(fFh9h^hc>wZE_QM>|j!?1~U*GXD zJjdd7=|_Ls_)hj1(4Fg2Ju=pjo?-yo7BJX5Rd%boE?N8wZrh(RfMNw$f4>29`~k8p zHc5M3o$z-Tat$^~m6*{cX(v2bo8bT7$4#Gzi5)?c5DRS>|M;-e^zezfa^nHu4^S=rf{ELtM%DdylIN{tk4}KF z{p=7U$!`oED5ZQL$O#JpqHaJL8o$W z$>-P~UChBa89I4KagB-vtK|Ju74!kLN*eRX?_uCcy2$662(LVb$G=BZ z^?*Jw0^>ai8igM0HSZ|Smj@|g!L`vu5tncC2Lji&7l^wMy&n&{cQ1I0o`2DcQlmzU z2n4Yu4nRk#U#2osTv$+NMY7Of&e@vKQfs`*7=uwYK$kPp63fSTDe{jRn3r3IbMh8Pysl^FR zoSK0h@ecy70qvNLpl$}llhFtfo`6sx^asXwmI(g*L{_)cl(V2~k(Z@I4<7Ulu|f;@ zRMrtT+1n#@Rvtrpfdqusu7-zvqZAwH>*xs{ah9Tw`8W0*IG0(9-rMDhLuN2|*d1utNkiE7rfy!LC;5r2$;t#)a!}^KDqU+1 zo~s{iD-d700>89ojkpecVbT5*+{aV|rxlD7n96Aed6*g@HIb#)z;gTsi;9mxCs1|+ zEA_&j4(<@h?CFYnMS2)NL*bh&(^*O$zEgoK99;J*^leR6L~UWxl?Eds5Genh1vOLj zIL6W+W$DLjZj{qe^K78pPAxa0-)$}bYx9Gc!4J0I^{Jz>}5A_O^@y2kkP^cy;%ULd)O7THBSSuuty_Kcp;L@32XLJE3(By-NmGed<>0 z5X^D0qOZA`y&Cer)#j4t?Yb#yNB=~j|BbT(c+^!>3jeSYcQ!rwAAINNe=h2vgE3j^BasmV>5IF*G%x-H<9 zFCgzMXviYaH;OVzyl+(vkSrB#Xc$^s!oHL8D+*y>Cky3fGCHpZ(&{>dK3@%N!!GU$ zY8>N2se9GD^+FT$G(SrZMrNH}XJ?^UM z2^op9)hy+RiadG=dZCBH6mHSOHXqJ;kCkDGX@& zXwSreke1W>_u`8S9=`t!?D}`tKRhXD)vDoEt(b;sq5aSu@%>TuUTh8WNYieZ3;gk4jn z->YoR_eE6ZU^KfxYZzfaCaW@fz@uJ=UFc>r{W|!#^tg|-&12bN{;8h*JE{mL@vI23;9=7{?#h140;np}|{ zyEzcM++0>5>X1Kr3h2$+&qyD;`%e6l>Hnp*C7kO21+DFm))Gf;fbHu+PW4-)l|G{S z%1~>C*1r}!`~Buo(?5s4>i_lSmlD-dl!b;5^>UZ0smq5t1A+*lN9Ao6uy|7iHuvs zjdg%7K-u~a@b!)G|5tNeD86494y!>=#OyXo>)j>o zTAG8?=QQH$I2U?iPB!DS0iTy5h9eC6K9zYqGCdD8hZRm);9;lz>5$YpFSw8-XFqfL zmXhb;#O~%6XrXB;WIP!l-oT zx)`EMn~NdAfh#ew`S8M=YSC5`N)WQHR7E+vDZ@5;*gruX--eyQ#CD>8tx{)jXoyy^ zYa!=*VOI)AtP0KGKfGevvu8)+z2TTa!f-LbHz3C{g1>jRcZ6Mw8JzDPZr8J40y7+s z7eYHVUR&7$TU-QY@Un|$@E*%-%wPX}k|*R-3McGvu#fA4wzwnU>%+mF zo_ej@t3vu9?4M#qGut66(>kB+#nC-(N=to^m$+1*Y(4J{#~epiim8#d7~qLnU`c6& z|9>}lQ)RPOtnA1^Dm!G7>P=(u*BD-=H!qVD;DJfeuv5&_%?fDQCcBjmikMNicJizZ zoex)}s_Rjh1)LCTg+s?T7KrQ4!tUh2dHQ`Ikbut`oUKzZ@2Ahe78N`@Fn3Q(x&f({ zW-bgfXT;3S=QH;RM(}IQ99f(U?56w>w>Y&(M?J|HjZq=qPH43i!?PH3m(5CCBpYgg z+@XR-oH&{^Grp-dvE}Y{wPP(|)zIu?PQx*$MrAnm44BJ*K0`D=G&4=u zZ_2ce=X!I^;!WuTkqHJ-PnOFRAK(L9ZNPP8!x+G{oDT=o| zRK5$!dp%S>8s(#HT~K}&bRCV-&vLk9Ip&K_e40PZS~bns3$FR?^Yr7jr|BGDo3H^o z1`ksPUp ze>&tyj=Hwa^h}FV_3W9Gq2Gpc?`{10Ci#*kv?z3z7G;=Vgol$Y+;&nf0)0<%oM_S; zO=A|dgo*K|!^*-d%Alv;z91qmtU@&~%%*ctgu-Hl01O#A1-h_*d-Uc(u(W8_X*Pdo z`n93Y{kqMs=5}|$*1cF`Play63yd61*{Crc>KEMp`@%H*p9;%yCbYg<+f7M==2Tm$ zOpU;}9rHzC+=k1lL17h}P3IcgT24KR<*i5mo-5}5=a8aB-KMnK@UpN(L#tABN;?DO zuS)ucD^lNU9cWyalmEH!cy}NkLJu4APk-K4AdUbJO#IUBJ4fd)0}f1-bFeD9)L8VZ ze0Wey31t~NCr|zel-K&5oYYIP4cl!Q7$l@=wroR?$2cqJO*-Qs*Nw`QoirI@@0sL6n)!|0uLBdWkF(x0Y{Z*cf z+K$bP97tNDxT>{{n}q0Ur7h~t*E7G9b8En(_{W*o8WOQf`gju&HCGmhsW`1oKB-3z zA2Ch%?YCvW%CV@U9PLa|h@p0N4g@SwcQ*4@HoNH45Nk3J;i+6I%~VlBWrA%7yX=>1 z^(=+g^zUWA;h87|xBO9eYG&QAP!8l4=?h3cRL^&)XAkf9y}l35lb1q|#Z8pg z6+8-K_aYw@@tzuUc*97mahHQXeN%EH<_*|<$RZP6Apjk$wV0l4Vv&9&`q5PU^sXN* z(d94Z5@L8JyXq3w4}pCk%d9kdSUJ|*RjE(l<@3|*F#T@)Nz{44M|GYkj<1+HCa1N&c)+eBmYA(ncXW9st8*zJ)pL*U^&a*VuiN9_ z?$|HudZhog+?3OLxcDQEZe?`-1J^<&C*NEA0eV6$%w(H@2RMqiO+XD3cnzoh znU461r|pjvDqD}rZ`hx%G&)avx7nxR{-bwWOSuTIN_+fIqwKw|sSdhlyRerRpOl{(6+zL1!nDfk(tMAuZo5@< zT(stzw;^&!=;v%esYRQ{6p&Xe%3PDoutrU<502hI*K3wheDq*zW3UnOd4X(VeBml+ zwg|cBZ!VAI_6=W1FPzuw~XaW7M73XOVy7@yb>_vB^zd>EFq- ziYcF1*Q(ZPjQcYk5jT2|i+<0SkK^wXGSxmEJ`5coktE8UDmp{@`%ZpvU1ysQezTo1 zYTv-0!o`jO->D0tKfTCY*QEk0d!fy=^!D9*r(6vyI|sTH%+7U1`k*Q5PS}#DJH_)s z^WN@US|I-WC+Jsk&JX@35a@-^|G-)Q%a0nd6!+(G&BOHyuBUMQ;8u$d<30e_CCHLz zaZx-p=@H2)7}Qk-HHqCI@lIG6l>hat*_*)S|7I@#>$&_-TAr@;IJ;j^!|pKzZQt!u zSA1g9Li3|66Cg(k8$8%^T1Q5u-Ylk$lI`#%g?`Z8rb)aajfW-xc_7w84{%%~c1HWj zCS`w~Y*L+IRTWFfhbjeiFLf!vt!udzr!TkS3`1Qz++q_&~WcZ3;nKR-BL z!L6&w>;>)t@c`Eil`Nz-#d=4fB{m>#ow@ZyV;{4kTx)iMW|OCqo7F%sN*=B$7*$1? zA9-%$_Num!96f466np^VptFz1>3YNS4m=2=z-_r%8T1h`mABX$SdVT>uXv;2AH5gW z68m!+%oK6Xr(_Mdta0G7v|N%QK3Hq}C(GxWt9~TO-1-}D-4RbAT9@layEf5I`ke#T zRHVH6acycy-q(Ut@4)$8MQb6v{SjpiE=gzWfYZJKh-g)q21a4ryp2w7|EJvss0|V_hX7tJM{0D7+UsENMMxT7!IaSR?miZ7(_y2vk9y zDQeJ&$`gUWc&wY_^%~I+S%&1xmGhUhTd@R4!{5pM1`$pRd|IS6kTARPwNUJN&XUB} z!Zg_B^z3-Mgjru)1YdG3_a%3;Bu~(HbCbaYYoZn-`h!O-r&$sD0&O@w;cN*~50+-x7b(}l9T*w3!NKynC! z9YbU{xrHnSnn*u0$}t!_yC=*(*WqV(xtBSF^hCUI6yEsq*$H^xUc7G}e_t2RILlM~ zeb;H!9@f5O_Pxi3G0Jg`g7mAhXSI7^{*#U69{G1!J^^Qb5VDh={oVZu%Jy{$<;see z>iSqZ!T;yQ+zjS|z5rP?Q#)Zzdb{8j z6fR|jQ1&oR*_-e^?$;xzXSfXfKX7C7NzToFt3Z^$*NCPQ8ga%4fxt$57O*B#NXEt0 z3;%b;y&tZ#{|3Fmz4J+p_%1%*0S*1>2dpoACabdjIkALeD8jlcR(XJfufUG^qZQf5 z=J~lS4F9Zt@XsPk*6&uVYA#RZg8DR=RK^HCs$<=wERlRvlfeJ#S(&T=#$ixv7~e2# zyy}htK0Ghwdf6pz)gMfe6Ss~-gREyh*FZc`EMJ7LLl$a1fm#VwQ;$5A11yj6TAkkM zDDyPRoUy)KmyS{=QEE9a73NN}tl*`7@h(TH=_oa+RSbtF`TZzok1$9|MMPE3!CNcc z`mQw@cA+rPmT=IP!!8xPJt*@*8E6dU4{*VM5)^KVwt5KkRFp}X_QhB?dBMKqujY2F zU_9An>EX7Bi8sD{qd;8wokpz3zSUv8$K!JbE(x+}IPTYQzp3EzvZHqQT5?g5ly zWl3;U6{Tby`%d0Pd%1Qwdbb(9Ba}WpFyxCZ9eM8-cstlr*tLKHbhvF~U*aRH;v+kl zkL(MUVHnvhd}JrPhT(}HAlt4=RaTUn;_Hi0J~cEGDZKoA%S@DimzU3W%|!W60)-QW zUWJoH1^J=s%=T@aj&k|g#@q7i>mpS|z zhXS-f=yUAQ^9g?TyhpJv*y_v%1!&B=ENahWw5P{23V6JJ&mQOXO|WyuRWPzWuBg2la|&DNxd&tX+30)Pt;H$qAqks?GbH&LHgu z-3AwX!5dQ<0ezJbdJ#Gqhk(APvZs91N`=k1WP2U36z&w~<=pxgW-%ybeJpp!cdtQu zX_i)d=-0@M6sCbK4srcGjL*^hD>jkbcUig%dXJ671tAWnXeBT|zXi{OGhh#7>DF(+ z-{5{2_w%@~zL<>)Cqo814;_x2?GE!M>-n^|<@*2l60b(Erx6!vRi3F;{D)7aClSO+^p+?iBFUIq8WZvNI3%ir*X zjX&{a;BR=sg136ueXe+im?5Uc{M-c=Tw4M38yJNY<_L7O{G0E&{qFBjI?I12bZTFg zp12l;ktCYzT@Jg&*RWe)d~;60#~z=b$9)R!1-M6t?q`o_!~?iSLn53Wo)uPcTo_t>Skq}iosrgOy?yjO!B~I(Q#iTl( zfVjh}(iZP9$G;MBKA%&!ydiWo7bjkpqOWB-_9fMh>32xk5~g{#>qpMwN$MYx#x2gh zEX7~DEOowCW4;IbcAr4;QCx3@2j4X<_k7`)T!&SaN$)B2w&9Dl zf}=bt>x<_UT+S0mrdwy`6$7aXZ&zN-pCNU zMU6U9GmhI)+ps*RLTB{5C1@t>$w9l+6ZJaO^Ria}(jV~`W87M^FkmXy()z4{utBYh zgEheLRzkVy{^Q7m#^w-`B;Nw+h>SEjHH{&bX1@Cg-ZsS1xWch#Wnh5AC>uub6c zgMD3s_*-2l2P;{>=MaUSZaRH+HlK6_dE_i+jop}^>MZwYc;35I=i7ehy`1x0Y0w21XHd4gO~`gf8SjvJ8ad!v zrS6m&N9qQRCnO5nOm@g)Kx`7lc_>3zs!9dyWnEzPp!s;0SOt%Aj;d61XH?O$LM1Zk2J`6R(?Dgu!l9}>LGpIUI&m2p03YH$B!iX~ zh)2P%T{@}}_u>8#?xe2^0L3N}ks8M*s7rY^duZsEls3pKQWbqw@TXGd>7bcp4#ZWw z5C$)_A)r+A-C@Z65YzA_=+qp@eEm6{TI2hi#}GA3`JDFt;+bC%BOPP(nuRc0-k~| zjS#Lm*RnuJ|CWCy&gv7VA|`?U(@}Jyob>~IakKgVlbXkcQM{a{o-i3A@tqhpsZ|;F ziBpU*G*nDlKVfO^P(&&aCVExfCW`_6xB={%N1z{4q#6iex27j_&kC~v_~}=qGT$o8 zDwG|XN0{{83XKkWcWT31lU^GiwC%3rw%ra5Z&=8y@do_sM1v|-4If9Lq$eBcUvBPg zzal;7dmeVq-(wcxoeO^)F6pEj&rypLk>gr#eqCOiK|Asr|Fgu~Lo=4c0z7BOHbbYX zQLG-mi#MbkU=KvuqcCng9Fb+s3rc9jN+L@Y>Af1L-%0g*@T#?AvPS zg1V~U6?j8R^hE=&E*f~=sTanc~-X6Q5 zm6-!nW;D1;lHQGw-XqIgu;2FO{8Kkb?y*}^Y$Xl1wR4yD9J zx!|*xW=^hjvPyVI-jK??-LUJwm18SA+MVoISI3Huh?D79N+Yt@6^rl4SF{xtV^vv( zc}WN>|FTrxxRhw$+hmI_dbL1|#r_%re&<14XFu17Rd3D`CqwQzhI<xDHrm9<8p8C+%x8F zz%PXPTW+!gaZ#VAYiL24W?p6<&c^Dz^gN2Q6h~Gf60%R8PZ}gYg6GHK5(XSUOFB2w zw*ldT>-Q-pp_BPtv;v4vdv$vVQHY|BBX?7&cX35IbD}Bsn6QmH?j@Wi($OWfm!xva zYVg{&XF!dI0?UMuOx^|`o(vrl^>ZWo8HJv{UK8^*^|Xlh^ilLQ9xD#`0VAo!Iq;+K zO6LMU!`~pyOkM|WtQN9|FY^fln*V=m`OZ+wGxm=L&MWX;TP`Y3k3Ja_0~#dsL>!hn zxmMM3M5W4uuTA<9>xn}Pn&aaW!^D=?R7dk3kW*vh#fn7HS*%)-H!4qT`CJrHlExtt zBfZQV^RL}Csy({B!C7##cpuFPjXTMF&_Qe6>|1Y?b6a$=nSP-W&o)1UaX8{V&@wqD z={VP$Iy0hU`E1Z^b=*zQw;_61QF{pTDx*;x=}&M_i701YbkZKGm1b1W z+d*|u4fG^=O$OLxJmZ0Og5K3*H_bn3=qV!~m3IZJYG`8mhb!95tK4E&heIi|u8 z$K+ubdFeTp87Lj#rM<2hD7_T^>}kEDoUcSj?9qCZf9bY+)nFPQYJZD0W_QH8$dYIq za5j`tr7_>o==}mjjTl4^#FiM$aizU?#e)y|-bEvvzK68eG)`*1icuoeLuZHDPEYOdq}5VOw7evFMz~qM zr}u8Py$^of;K`{=!#7_+0_$DYd$-KicoJ&0yQnt`M|!n(SIjrmJGI@o%fK?gn;PI> zPva8&UR$j#TZU-=m~T4lqHfP5z!MGg?+hR|O$_27m=doZ}7YJz(D?2?poAUgG@>ptsP@;QkFxRXs8k8`y_< zK9)a~Gf(BzD>s?K>T_xhPlhEH_fh=(?r#tIfqZn!d_AvlTksca+bN}D{LMVX$~M@MPqV1Dxlqtw1aebY18}#1 zj;9w7HfHD8S;?n@9=Veb>h>!Lb;%lLU1d_%?>Yo;DZTFCy47W?>HmIh{}(<`SY9~2 zuvvP^b2vu#U*6RARQ5qTB$35+eODV-m$yHgeb8Fir?8;Vh-V+ev)KpL7&D9;ZwGSJ z9g^YILR!2ObF=h{r~hh1tDvPlmp>q@hF#2WmKJ(GLY}UxGkd)u2Yvp>CY$e@K>q&g zYF^HL%dB+j6oev}rnq+?p$MkITKrV81G%CN>^0XsDo9i1yz&_z@>LGVxdMh)wPF+|K+t1(&1~Aw^`$pJRS(tsz;}y1<*usyKE*A6DSP`XS2tMtA=-F3*m(Y7kYca_EL*-?Qhv z;s$XGFt{7^*0kF9u=)(GTJfgz6)5&Au-PE*`2F2^UYJ)9$=w?{$47qBjr(t2mmD6k za&oHHKAcU2_xTkmO^(KAn@3@YuIgmp$L{h*>ae?^LtlOZE%$CaBF=L%M_{u1PT$~(S(VS$*lbe8xL^bNnfI*a?AMw;UszvG}! z7Ixx1>V&-)D+Jif(1Sc|7zCWT!hq1P1$gK|w6}Qv1f7HdCSl*|@f7)lWFsEv2aHZ0 ze`XS%X>O453^M$fbFFG~7`NaK0TQSp5L?&Nyu&IuE?I?szcuWK^b5RPV8jh)xBWs| z!lAoCU1aQuD02yBO$7w44#@GI7Z8ED)K9P@o|4djvkxva(GG>gRBtIvExauK=rt0y zrI5b-VqpsqFNr=V>+|QO&burf^Y(Z<&D`&eVE*^LHN9Xh(cxSqfA5Zi(yje*jy>ts zB1)wIyAG(#h-}VbXXPry+GxR<=dfSlWq)0ogxs(N$XRQEhMc0V=CGZR=eL`pk>TM& zYEWC&oqg+%<=V0)&@{EZJA9#qio0MD?2fpvn&I!TR9E*}%62pzDER$D^5G?EM9Too z6nuoADG)u7(>r|yKN(QS|BAA9McM;dS#VAUWgOulq+!?ueaWE24;yYurO+S*(bgy@ zBX;$~-8JEmzNw!EWMWB26!DaRSgvyRQxa8+h1|FoawB>9c4tNKq9_0SCg7GT(eBS6 z=k|l--%lV*W`G?Cv}FspBwcCl4_`-pQGqxbZC#G5=ug`EZ~*8~8fvc|?VJomw*l}c zq}Jx4wZlTKEdnN5wE6R=1ZS>Vuyw#%(St4o*a+XaT12q1xn8kyZDSnx9N_%~C^jIA zJx+NKH}5hvHoU^uCV7??uvH!)w85ee{0r>40#@AqKOvA8u*DwL)4=M}M$vlIkZ)Ol z&4aFj?gvpKi)DHVU-%|gFJUh}9Kv3_BFV`89-E;9_Tnz~5O&FAATQ>K1vtm(>{NGH4&a;=?|+58ktj?ekD3>z=y{nCMdjZ($cQ zUlKo7z+B!=mA&!*`zS&C&FR%T`-#1)L_6UyW`NQjarMUMG~&M4Cy>1ZggF8ZV?Xv= zfF*gi00;8rx+tvfO04c7e07VyaLZ79YLtEq48iK2>d6mz$6o>h;7q>vcFsrs8_0;G z{}I&5RG2F!)xn2KV<*3~Xy9iKLqvE0Hfl|o275^LPMHaK>h-1ftwY8a@~(cnZXLIH zU6&ZV$w}h?bcd22OoNPsk@m~dy}lac^crRr4cX9Jz^i)GhBIVjD0ky`XWsELpq};D5Bh!_{IvmU*=m%Cgn)Z+U3% z`Kv0-=irdG;*w-)9Ky8~LErgbo+=QnFU}GdU=42iOe21~c$Rn%t||EJeqomAI|5$- z(51X~y0lA<1tmk?Jy50$oS_Fi8k`AqqV8e}cN=Z`a|FrL|1E7Aj#%S1+Vs_*(xy-U zls3%)+GpDTC%o3-%;)}pqfJg^ru!pp8V;Y9{~Ou_c^24V$FYvrgfJw#m^Y0X#Ze?- z=f|vX2h!uV5U%WSF*~IgKOsUY*1g78zyrub zHn}!D)Y9>8eXXMW2W!N>p;n^&7F+>bF0K`hGQ>~43l`BZHc@Fnpq zkT8dXDkap#6TYM_#zAfGPzRl2snVe=N2^MM*pj4CY5=n25nyct$+bQ_)E_Yr&XFY} zIloLg1Un)&wB}XNI1x9J3#5?VwxDOG;B@FvtpKiV4DvaU&MN@Ba|iof>gm)AYWy``^7O5irAjjGfxoa)4T6!2?{D7_5d04f*MP%An0n{@lN zywkunKXvQU_4V@XSje}E^^i)0lJ)Z3SP_4%v5J!OPb*6d3sfcf3)Cg=Ezp#lUl8_= z&|6yq*+$frWSWaXi##&LWyjiys>Qw&Wt+%Gc%v$i(eIt^dvky&l7r};WcT0VfJY_Wqqrs_NRd(LHP?!MrHD5AxH68X@^5Os_Lb$rBA zX_#z|s~X83hp+f`={whNg^Khp4KxGGps~#dl2(UG7yH;XxlZNG6*@rP*9IVWqOSh# z-{xJMNwWZddPMKhNRl=CqV(nUln~u(ol_u|FA8G&y#XCV?EVFMd_vM7o}H` zQ6Q)GOF@NP6RP=_5ihBHSJG+Wk1uSigY8tUJQG`Cj&{(_QrC|&KY(>uz)GOO3U}(l z!<@RX2xnjzSx~N@H8x*dbO81bZOi9jNr%E(j)jl=ElJn0fu2?3S+T4D9{+eIJc`%X z_T7`R&Kbz2x=6}(p4}qfoAE>4Ol!UQixy?Xq~?~0pUn{t`b}A%11eL%9*}i+>zq1W zm@_bhYHvN8-rVwXc*{58Kml#}QWIb^11lPfRXg*z<{5EZ`=SW5LolwaQ6h_#%Dg;J zbavEySD51HQ>cPZYpf^Vy4_j^ZBo}-$S0KrEJdD)ELb!1wD6**-KVM&ZAy4OO@UXR zo;6`jWwPbKhu#n0cS6oCf;_B&-Z=`=NhbKJ6pZ+n0rA~vM+R2Z4siZ&*V3o0K46Aq zcBrF#K%;AQ_b4jfHC=BYPH?15o{&^#t*;L>Szb2Ob>k}KW?5Ae3*5BWc1c@nivs6F z`S$vw9fVLLR#9enLXf^JEt2OwNk}rdX`XU@JjkACT=Hq4`6jQC~tOykVI&Ad2s=9BbGNA-I+ zah=jAdM1B+e$RrL1*A9AV~6V|wB?V|gz`tJ`Q4ZYIrz}6YtzK|ozujE?bF1C_G$lH zKZDx2Rgj9d{8ownV2?qje6uDR7=aXZN;ocvPPJ-n*Q8}0(MZv!G`56OCE71R>(Lf{ zdQqxx3FGmv-{u#H|2jajVw5==aj(%94VMro#yVKjW55X$;YCB%wi`h7xFl`=Lp{5Y zgAn`m&yy44UIxgj2*R$qu*W0229AeVc)IcPpCJ2DQ-mtqAY@_7l! zWRXD#q{RILCp9mYXJDdTugcW3YWHqvjDg>Q*eTIIJ5SHP1+Kw}gY~jQ*ydD6p5>9$ zkwVc}e3P-=sa9<2KGih3MWGba)*MPOBO6!nH=*7s3dqr==Oyv1D2_Abw9v1u`w1yO z1sL7H39a4&F`B}#GF8U-7O%DG0!$CKx+ zeSx`>og=Zuhe%tzCLW_;s1Up3+!XOO_8pwZ;&_Tb*_tbh|UAhas*ftP>wPYkFedT5JqGC z1SJr7*)_N5&^vo#K8r$aX>@;%Os2@;H*eF}-&=GJ7Phd*Y3eRPQSF7;|Z9wK{ynhec zF_QfY9^KcZp*~Gb?7;wqr2h}=@0Z5l`djAvKd-;1K|g5yxm^Es{mECRi5{f*BOY62 zPS6vs)h6?)TOTxP`MRFwi(>&y8O@Lo`cRy1+M zHK;F{=hIw;`A}C=f7PYbd%*^8dUz55?*O{rMxh4zR7L_#Q-l6~=GCFUTmFasCSkwL z3H3M37yWZB9C7NV*C#U$9(;tE2*|;uh$sf;pQ9BX>;{e(CQ0J!kVpsaIo1 zF2Vfc(E@SzaE-Wf8)EHo(K`6^HraWbPI}tfw6ncUM&70yp0+lXwYRA=Z_{~CTbtIj zx9Pl#+H}J6dz&suXKx1E)C+CuiZ;!ds1`@O&)YP%3iu7G_eJp7zoR$wu{oP^jKB-R zR9-~f$%-}vDg1w?*a&1r)gkcK%aH43U0D5zrV&(D6k5M4hCd80@4ET-TPMDnJJ@O; z`&HdMpmS05-q66T@#MiovBZSFo&{^O2>&j@mg6AW#2QuLSzyuM(~Gf;CJYM$W9 zg}y0Rx8;7+D^kB+&80W|vHl*Ye^{vg94<=&r@(&?THfVPTRs5wcR~H#JpDrTuUItj zziE3a>W<=dzXPv$ifwL@_Ciig0ZI&fZc0+wF?c~Hqqf`b1YX-PYqmM{{u6RS+^bx> zM*SXcey6Ux#mJvtho@ulw2?nu=~kPKc>1I}3{T&Ue57fRfs*3rl<(7y;(kFoaU+{xIck=<6dBr;Jy|2PiM^%7vWBEPTD2Ixu0h+ zR_k@_@%0&tYKK@}guR9Gu_d#P?t3iJ_;gijf{dHY=E%?04Ya(3-wBI0nW@|v9El^IP(%-C5&!epUkb#gJ;2bw^))UTR|&44am7XG z#TmH2j`RaE&MABCIv^SAC>QX&yC65+U{SEOZ2s*#|3TC3hE!{w^)=YSMDV6>`ty)K zsAzvx%~06D+VGCnLB?8CJJ|9p`cAxfGJDcBh~phyl|~}7WD@%n{9*tRVThdxjO%s(R8*WuoPNTOpI$h`}GVL57IK>@#bMr3c_0HF04AcFTaf#FV(Qku>6&DAs znn5oZHP1N^W$Q>5rLZA5M_MGe7t(uW6Y`ua!~f9nx=89)H2iM&Y=qr2rXIMZD1FgO z+FC7;>-;{7D!BywKcOGlL8G8CX~Rdm0RMlUYj*j!58@2s`M8wFD%mXZUm8_aa}Q>7 zRr`FBH%^&p#5v-{@|e#z%6tW0gnkhgCL!?02E_|nFA0e0a_u#epF zB?Hf}IJPhQ!f&*9sZ6dy#tR?tg;I^x*^sk$dT8(e1Wazwf0<}fgG`j~--vs-Bz=Pn zua~4_GUA*P52GDN5P=FTL+}p@#6(fnGbOzK6xA!q8V4?7FKnzM;6<&(ZrCcfp=Vu? zKDx$f$FgkncNET$3AmQv`c4i6w2;OAm|1B9d)6EMr`gI}-~f_nj1aRlXvuO=k{}(~ z$9V;0hRq@hplYW8+kp!`>Go(?jVR70iCqaS=5aPxrBB=)F)EJOBz7+%Zj#tQ-OpXB3KiwS z2&Wh)rR@e&ARCGRltEZ%*?IVtU(1?0CgYrPQxxn-H`qLP6!I}@!KLTHwun`xP-Wa? zgXJNK$emIWK-LW9)(HE+3CLWJgdi8pZ?WbGgS~T!Dy}=}JOl7KB zhqb6(uiGH8e|v$k&w2y#PhdU3joyH-4n4cs8-u#5VY$Bnyv}{?6n0fh6xIUyadezo zAg-;_h#ypI#B;bN;PU`n`|u1WIa5Ajr)iO<*^6&_)wl* zActmsQ`^ZAiTuqMtS{z{V69vt*o_R%BiIqhIW1BqqI&f3a9IrA@ngTjaS^`LSI#CK zJU9?>I{V+Q>46;_#4}1q9^oJ-dk@JS>0Qr-L$e}``a1C~Q-^ciEEJjcV(vw2f5IK( zEs6A=w`x;AG z1VBrpLf!}$B&j(DI*;ck7l=P#45lI>J!n5q1Joa|`cejz_ZMjLgF79~$kOzNPHiYk(zC0RfG<*t^*l~F9C&7b* z>U*aB*)fQ9Ty9dWi~CuRI5LV6>dLzDXOrP0Kk0VdLVET?_{b-*!Cplf_@qqQsna1} zCS(qS&OEqpTL!`{4+r9b7bpdrx0=5NF zOrlk`+PgtBw{e;oK&~(H6U{`d3?dZyECsyjDE}HT_Z%62Mx%RU^=!rJnaWpBM_&)i zgZOksY6?6UT0Kv?rlN*?)Bvhmn+%$s2AcjdFYomxT3+Gh8v-w*)cqbBo5ZFpAW|#? zmF(=Xz-w-^a39+(BbVxAn$KUn+uOY)FGyCP67(brvK$yh6Op4B^EdWypck0SF1R=C zK%5umunzaF_%3!o@Sm-l!Gn<=CBWjKsUp1|o!z_dJhWsM=WyFH%bfhfn9c}|sm#4& z9|KYy;_~BU5hJ)Z#OWqM z8#uxefyYtm3!nthxQ#)nzoOLZeBAQ9Cd*1bZg&S>N2w3oBk@LupsW;(lxYQ6 zq@kJLjaI(RTbbzHjgnj3=~l8M>L{a9@pp(CQ`v4I_ES|xTpi9HeAlr!0Gw+zqT!$P zP)z(>55~SINZ&TY0uL`T=wcl{1LQY9GF?St&T<-&6^^ZUr9giXQTcK%>0wpF^5C&6 zf*KOqIkGnuYu8Jld9cJwoe;kikmCJx=4=I)FX9sAlQuaaHrg7gxi?;qm+uZ!<1 z5Nk1qzirou6}W$n``>YWjL*w(pNsnzTodv6my^>#!%x<92MzB&Uci_TXHB~y-8vOg zfQYg2@fiW;9LDAzJ~nG`G9|GXK7+(Z0Ixs9M|7pkW7reXd`}GKrJwWAo{-_~I2HJr zjtoH`j0e9U=^LkkR__^)95PsYnc$HMaaZC_>x(pNzsmP5^K$K4kZbJ%4wyL0mu-3M zhTKL~YrSun4!5o>Cfazh{o8%`_T^JAI7VYF#9%FuuUHa$)RV(~#jZ#L{3=**x&d>a zdSiE~97r_QDBB`%MjDU5gFvbU2H&Pk3$92R5hdoM+Tztz#a9& zJ1A>cI)6u+r;mkDU9U(!ANBnutOC-<{{m{eULdc}yv%n^N^9hyZpdyD)YaeX6ElKY zd(u%)kUprO@d(m~pM69X9&!o2L_40&@6I+u79pKccmws?DxbGzfx~@4Ryf4FUO!cK z_2u?me_nd(<||y|A{^?Bv3~A7#C2nT$KhU$``6IDEWw>*R`rrmut1F(FJdJSzZr=* zRW-5_Eyr3=V=XYmU**&e1t)%#&+Qw?(~-o&Aw_M=Y8cf#=d z1HQ0|FnicL>3P=?;ik1;XXAX!v5SJSdFQ25kYLr2V1+|F#ubQ5us?cZY@%?Tp?!n# z`e`eTQ)IFlmKkm-3uM=+s?+jD%dt^b^L1d(r(o@dNLS$mg1(|I-?AQaI)l&Yr>-X~d3;Vwyfg4bH0EhN{ICv)usLBJ z3u&1RTCDRQJz_?5!-JO1c=8SYdi{urqOoQ#(0DVJRr_^ABXPy{Ax$2$FXmjc43sdvrl|KwWG10m&y^p@CecGx8uhmmoI4Go9}{N zCAfj-CVPkxH)7_R!sN1N^uu?F$^(&UYy7+nDf?MIMKH7)K`V>>x#hBJ^&B?2d+vb9@6t%mDb{JFM0r)Hlr1E^8rPA^v^vkPh3uqwEX*<>iE&M(6c;>3ziAt2rljEw@0N zTcHt;fVL!(9vq(|aTjr?bMPO~-K+;m_28+QCLFhvmoq{nv&n5lr z+3Bd4>-AN24|Bb8vlQ(m6vYURQd5L}UX-A3!in@&2Xsri8vQnsk3o9 z((gn~X0Wb!3+;+D-y@)olxa^444Q!0A@cxh8+M7GO>%_+yTk@rTV3sEhaqiiD~TRz zk=ybn@(^~1uPjA{tP-ZN?Knx3GOgx!fzO?kpM{(rLIw729%cAAD(f;utmMedp}PiJ zw_2~WWYP_!0+F>eS3ZRtB?rb5y={Vj)pf+v#5i2iNN9AZ-oN{Fj^L;Fp@E?Dep7?( z>X1L2rC+uT4V|U&qk)%zeL10ABR-0`n{b)OU`~oQzdrG+n%9vloOmfh!cMo20q*NC zzqp~sq&4dfy>1m+OR@K8{8oD}Szm^vqlT8NSsFrdSkPAymhU9Uk*Ppv>#^;mtgo4B zRy#V#V*03|$3N)WSMl@oF|6Sj+Ddg4qKh_+5iP!2#u_F^2k6au4BO zEfEo?WW7E<@zF5}4G&;vXSHk#(YtXmf59py>p?eQY4qk^wpXOV|BJUbkB_3t`iHB! zt2>=NKp;DG(g6~}(n(mtqJ{*D#GoL{4B*yT&*kGA?PFu zK17W{MMa01=?EyYNCP4XVd)T3RY@o5_j_)2Lf~aMzV>(pJ&J@+i% zgXr8CWhb%&>QdsJTFdSC{4AMS>qnsV|JX@w7J-aj9$?Z&pw&J@G}=(*m(B;SyjvRR zqGw2W2BP0E(w$bicDNI_HC4XEi6F5TE@=yIGke(Vt69e3l7Fm?ycpJ3k|ez?Pe9mOem0U=kF>flp? zIE3$r2J{~-M;?)^Nj_3;6@`apv_eD>3)3vUI|;`1|x4m4x8PaCMB8Rv!MMW z4=Nu17MjI=HwT=IF!(T#Bn3KlTEnjM(;2F~j##Br@-NJjrRnQlpBVCQscK7y2MX=Y z2j!La`Su7?$*SHa|GoPy8|~4qAZmnc8ErD+fA9>4l~(#4Sn1=GOWh^#*WIh`w(V7G ztQrNSkcIc+If$Q31kK>D>5{%8t~gK%vhk3pXCcd#Rpcv#9VFexiw?$Fr@<?gl(+XN~2RBqfWI3KRR5^rW5Z9$#?tI&3 zj)QEcYBT~Bh54*42aSK))7xL)v;MlBqVnK_LMwYM_~~0l*cx~V{w>e<6vHFBLoP#h zRtY`gunq+_lNEG5jGbf;{2u6y5QW0>CqCiZD{!ql;7|XT8mssM`1lsQQz~L3W?}z| z-b~4MCg#P*864cm$7cj@3bGG{x8B>5VH?n)TZ2qP;Rk7O_-z;p{$_eN1RQWsvyn5x z4{|8%=97VIoeAALXVd{Fa%#5`dh~Ph@Gc`-cai!P(QXKUclQ;Duri zf2=adMR8)Jv=tGpaY|HI33jcgZFeJk9A||k$ZSStR~oCDFO}YwC-Ly#%(ijBbWnkK z)PnXnZA*E=@^D7IUV2&z$2hhF58?|cI_`5Dp%ksuJq@2(y{&W>d1RHtGHc@uWSIrE zdWm=yMTlOt$({njsLfUin{0>}y05%O*l{1mh=v(pV)5z}UrU$-6dNA4Luf{fx65RW zLq0N!QTfDcstl^C%xZ58gQb(68M+UiJMZ4lYQa7Q@!u3_OK4dXKWBm8=*eQjb3$Gh zZ!enDdHG@RJ@T$3F8VZlz`~~hJ;xcI9^}fDw017+1nNcHDc@VZVJoy*;LnG34Kc(g z)Wc=(0l}tMI~>mROJnT%l`Cqkxi?^^K$`v-<;Ko2Ow)fx9@K5XT2T%xfTVczS%I!q z2>1?u9!JzL^UX6SILX5uQWaz@!ky5S^LFa7Ob=u%D^^TSZ#P*tBlGNw_{1r@d*>aLIVH-US_V`X}FU z<}rN|s!M+K;#gXdp4~aAfG@||vke~_7Z`nz7foFF_&DXso*h|gV+LB?Anug{TsG_? zR>JGF#cT7m**6{I#g^g`aUW#451*5gARPobw@F^*h?gR{G176gvQfOVLkI6_FEFPW zK0#}kKvDXo)V|2i@=OiIs~Y1EUCz8HygMsaZ#5-lG?>h`f--KVDg-BCJ$t98aM{=J z0bgmEbME#)uH^;)GSOV%-}0>Ax1t{;6d)YgPs#S4n=uyos*h&2AAodUZWR})DOO`V zja=%}DZ@_X|6UdDu-FWACVy%Eq09GQ47cb#{KDb+2DVC%X;!m|+r;{Dt^57C#4^zc zPCY@ajxi$UX*Ak+xs8k8VLNY2nlMW>&7P$Sv!~gfuq91;Wv;O`QTNJRuVVM!GV_;=5H|My%pv!-I1;H7_u^>%fj>?&TOs! z=l=cs|NmmYos$3BeLeP@OAfp6pRnIta`*+89C@KX_S-3W9isMr8~g2)T+)4&TiglD zh`As3+sf;(-|#uj0Yc=qzM-aMUkribF(0aro3%fepB{Hc(0d?=G>elN{{+#Ev$p#g_g=%EOl8 zaA2&J){`GCeEu3pH=yyaciVMO8i9nM>B#w)*S$hI^3`lKj>}EOXrxST(aJGozNAcU zXXILB=!sUwGEV?x@Pwvgq)&^e0CA2q9f`TAjx=a5qLCLV6=fr#>ClkI!j2F1*(nv| zE2FY8xr-g?tn4c9VwBavDti~A$ALDM0DLtEP~+|yC6RW*A_^G6o4SN;v;vfQjqpyI z)U~=F_ZkAdh>qDYE~f!&y4=X0!DrDritxPABBiJHu3ZI+|`R?{EZrqV;@PP=s`u_~B(Pl`4glj}Ry1Xfg z8*=lVG4F<9z71~5{yfw$W`6^h03R=1bZt2B_xSW^7dJ+LCou8UjV*c?9oM()$v!RV zTgr5V?PRuUJkgj?Xw!MZ7KWQSkAX>|G;ddd=MNE=1D}ajYl+2>f99pNnpRuj1z|09 z@A@@_B`^Ft{KNnkwUZfZ!9Hj!ys%l3)#Q+e8+ZBtQj692T8vhhFKU7?^7-;gpdcCF zh16iAw;&BKr}8%AKJMLaSG18(7mSLIjeXh&aLkLwuR%k7H8?lEw<29_8!5l z86gAvP>qH#R3p-85~|UI@I^@zb&lx2dx7*wd(?SogLz(h*3fHktTI^p-sf>i(>KGG z)=6t5t&h`OR9A58I{)C-N@z$OA%uWLSU;pGC7htK42!8iT!H80qV`4JUNoj8@mplK z^eVsfP;J4j`$8tZOS;wmh)tzTYD)E_R-P;ttRyovbW*J(kMWi9;u6$|e9x8HY+ZCi zhKoa1p+VA%*yF#D72k+_!Nu#c;u@`D7-npXhn~&3Lcb;2hu{bdl@L=OS`k_MlCIq3(65h{g!M}#!}=}Q z`5MbJ?XDQUR>4ui*UDUc9EVL~!i;lmx7 zXt`$PV29Q};~BQn2$Gy&ZHWY5dmp<2$~Zy4ci{Ku(#uVxk)zzp-i}514(n+KhgVlmOXQP!byB6gp;@8je z7Ow@Z7lBx*3^AqjE+w@S7LoPYK&dp?!;Z|k8D0d?dn?fW(`qm~H_tJTtp+Q*@^GK0 z6S)cO24GZ%9T!p7kCn|~WwUcvIOemm1zjsp_6%&wl=~(rF~A=9o}ntZb+*4%d|wni z`US%Hc(j?RBL}msSrIxmW6TA&P77%jY3wHhF~G##rJU|qgPq!4z};IjQ)o<$GodF6 zklBDFZ$itszk}rMr#c{^Tf-+J4%PNrR$wE^=FxHAKntq%(KpbF;+i!A`o?C(MNzA^ z2t@GhZw#y+_Fm{eXcon=Yu~A9phps8&`&R6JvBK}&_{PM41~M7s`{;L+hL)PV-_B+ zVbACS{H1{s;}vmwoL4x4_&r4kt83dJgb`H zPRidh&Clo$d-V%Hfj@3(OJVv2j-z=eSTD=(_Qlm@s-~%z<+nBTD4PYc$ea1R<#c{n z{dc>xI$o+-S1XCPAxA6iql*#CP&un!6*47pXM5(ViUux`PrQxAS%t7UNpg%q3L>9s zpxK4NjvfUJEgN(xBjT3A%4xcLH0+C{`%eIhT$Iw@ZI&Q&vb=kAuRkJHy^v1~aim)q z4KxC)WQP0`tGoq!=xD`^d#Su`QW0;m>Xlia()W)I{o~8bQ*TrL%GRR0@cv=-k-m4) z;@Gydy@@)Ae^7f6>RhjeCR3$5hv3ez`eQp6@_HcG=z%S>i=)zM|95fF?}!kguVwf^uPYnr&s^+ZofK{m3Noz z?mZXi8xMqVH7#9-Jv!~_Irj>$k?FxGdR6enN8jlkM=xTh=!ONdtr1+l8@>0)l$M^UFx4M6PPtykr`6r<-3fo2TR)&|2xx#wGc0FbI zs75>!=HIt?B1JE84XIen2kp{r7sM=8h|@zy{3C32$ODgShj0yi5H`~jYE9YeKuIy1 zHOV>L=Up<)eh@oHKQUdY>P%!fS55MAU`6r3i60Mb6Yn@F@9fNh$JGJP*4kM3HW50@ z?XU+^q}xcP2N65L+x)hVSE`|hM*AQN=A>NJ`AY3TmcOz|o{2m>@#19VC0L-Nwhcnb zjmW%tQhu&83g3SMVsJ*E2lWa0&lh_!gLjWC;E&#A;P>K_0sl)vN(@IFk=d+85(R_u zffo&+{Kn2u_*)WPp@>FJ#j_T5@Z0^Mog1&%*c;48gv?2KZYSyfH4lgr$N<2w6C30a zkiFB4d^wGG>q&X@ZULkAv5)Axh<(pz-?P|vXC0k?n|-&klFjVw2~GGDXv z@3HRz?9Au}I{&**InJ+-?~yMQ=hpZ1&QQ|Ua1G~c7xMG)(Z*O48)J3oQ<~Gkd2Z;u zpMf67lrD%O?ngYKgNu(4{giq{fatcTK%)xJ5qG$%gU9;U7_p?Gt3iE)#wAFj!K+3o z{{$D<-1ZVAx(sM$hl7{Sq`_|ILd;FApks}Yb4FeFWIX}hL6Oup}Pg9kTIwjG#c`AI6lf(r0=Hgek zBsR;1cn|1*8}{NoUc%>h_zc@6R0|2&827*^UvEmtgr>BtSrAXi`z~-&cuk05RqE_`^fEUs)9s7m*#XS%3FYC&~Y6WX7%im4-+D~xM zpW6MD)7=YHQ!u|xUsVaqK(id!F^ryx_{6o`)w|w@K6@SRTI;)O-*tDn)nSkx`S>p+ zitIb$r+?XW2zK`bild~r3v1?*?mT*0s`B&4dAzmVm|&Ci)h=1UmAOYxN(0;iAKv&T zEPuvE-U7{A7-vsF83Qz5gA#<7lj8;8l?b@wToacx>1bgwpEB6_hNK(i*GPIgE}pkQ zM`n*tpgWS|2PO#i-aEd-9Yc=-5&Z+IA4no8k-&E-;i4K%t{{tFIXo8Z#+S|Xv}!+> z34N0sPyRxvZ~cG-m;8Q{x%PzId7hIdD<{1ajYwDkf#Qf;{#+wUq*;0}c9cYz@F85_ z`pHhRkk5-2M(Lbkqs9V*a}Az4s!?CeCF&hQg~5J8md*!RENC6F0hi1`?>BADax|F5 zm?L2*9gs2zrHzgNlw5E=9Mo7vV>P$lB`?RDn2wx~cQRV4Ai>jna4yaq=+iEpkj3*s z*dGqH5O(?VH3_$96poVo*FO}i(U|Hqe$z`|a$^XiZ+Ih@sB`EmPRP;cO%}{Vd%T#K zP%rjzf5B9 z{lj+U#YQ=wmYzclwr*ClvRgUTU{%I+R&HA4-j z?N<=rI%dv0HJONVUIjd^tk|i({v2-4b`}D~A)~R(qTlvyq{W{2@(CH4>BS_B33m&P zi64-)F3f!J@`#o)F+)l0$rKYeTecuFp)3P>@T58k(#)&f)FyGrRwT40a@@wF$~tiU z{AIu`BR_O*Ry@CbDxwuA!*;Hh?pWJhw2bzx8OUgMTH?$tw&A`^jTjXzBWULUjG0^G z8O99gA2H{xKKiHk(QmO&aK5?h_K(XfJgASiCxH44ANA`Q^(%W48TDVCBkI5G&J+_i z$NQ-7?9r&dkx?JUs83?llUCEKq;1B#yD zp22-PfD^Lg+z_G}c_n@sR=|J!B-@Vx)9C~ddfurCZvC^VH^wv=bkm-8xV_9`0hdd( zCss`nZPGUB#U>LXc~8jiU94&K-n3dA-grVjc1|w|DW=BrXP-h09gU6*Wp>ZuT9XUo z@*It!UENw~KWAbUWf$KLUS_Ex{FLEaa@dog5px<`T+;C)KcB@|@;`U>ggo~g8wa3w zEa)Zul+ap)JRpQLg~(&;04EoZGhD9nNC&d1VeNbKp40bq%Sl+3lc68afS&T=CmC$# zpD8_I^+TQnbDd4ne93=kU^bZP!^B~?uBTozaLJm_X*qf#T^fMi%45B?uhZh1f+!-X zmU6RG9FSM(!b+ISdgXrD;F{#0xcw|jsu zn&yOjs(BzALDr#&8+d~CMRqKWq4K}g=n*5Sd0U1cYkT4*vgv4j5ngAh7%7Ii{94O& z#6#t#Bz8@x0Zhq^3PS)wG>0%sMdQ=3jeFP{|~h2Ao<-n!&GA#<#6 z&UR(TBE}7oOOwU-B@1eJ81mzApKqX_Q$Vjc8vMkIN6w&6{)A`;j3M~%zZKWpC#9@U z{_33`YY@X(pOm6cs#WTpm0bS4N0rs!0-0R5d^^K}(0XQSU(c*X&zSo4%t6*ON;btz zl#4?_(SxkN$2Z0*4!LS5A!cdaBPZ63MhguMH_6Fl_R z<^kj(f+&+F`FY^%QGEQPu-@_*8{c&inkgdn;SGS+hku#2wj}$!VNS@-CW^x38id#a ze*7P`F%mF5V$O3l5r}+PHDev3@+`|JAE*m;Ob1eh1S*2MiWwr6!@C;)lYxyG)oKq7 zY2OX zBOp&;&gB5-iR7$zAT?Tn1n|o})W$hV4bHCR?zz`b8IH5mvPTh*LUXel_<-6dSkz^c zz!{pdVhtFNpEeQq&^1P2oDDt_sWkWKk_H@$R4m@m+y@hM$oRyS>l{%^qbG=Y&YuQa zEB%l1kStsXS@=y`FTUytd1BLOv{-CR0YBt1Bfs!#0epi?SPd*Dlc>w3fzNO${vX2sA{-k%A&|E-fsbNJKMiD}Ze(E8+T$FKNw}j2 za(W_;ojAtgj@?WbFyozte5BaB-=H|+&26jM-kGeXWYx?-+#nBL>2Q# zfdv%4$%G%wCHaZ>9DTExOG!mG4qa$?Ls+~J|Dx(=4Q}<*@zpxVzu=*UoRb($e}@G` zSD9HWAOkbSCU0&_QhC>b%aND3aRZNxLjD+vsWN(j{DygOxr@9GUGlA-6zQ=nU;|+c z$Ggfbfmq9v#1#AJmotFHm{fsfyV5Sm6iq5agF8t?M@%Ztjfq&4xfk9YiVXJARVU%6NZo2mF=S4}zCJ z>ASp2ttZ$;S%zrNp6uSMN@YOvE~hbj8+JsefK6-#!ZCRTqXjRHW)i~p5e2;IQRLzp zY2RrZ0W8!SGJZC2G4=Zri-MPKm>t16j&_a zXIy{1Ry6J>TjKM`L==ji(lgZMA)v|M-YSpvWGvTjE6P}?96*#e#pq8K_1kY(-tS2I zcn^B_$OYnl54ipHRR5T+0q~L>2ppU}wRGInxwUrAm9?b@E`P8q&}Vf+tNdOAsl zr+D{)&QKRO`c&hbE0rku{smL3pr4FA0m-RZn0o0|X)1i()Ou4torP)Y8Tm?wIqrCsZ<@>S|RJL_?)3tNwuhr8~ zz0vq+WAb0@ozFn-pezNksRFPZ{>=C*uCss7uzws!@}(d2Ez|;}0V1pu;>XFjV+G0( z_FL1|g+Nhp?Y^qBxkFilx+~jucGFs+ou39ju^8p$j!5POR>f9#@^zt%A_Hnoxb|4b zaQJv>9|HY$r1D7T+}h!B zN#Zw3L6-rVSkmt#;QX_lW{GGe?2vJsrf=2*qaj~q(T|T+6xFV&;3{U8l29?8RX#VkyYC75*$Mz)xdZpXx3ah4!aQ zV_G}d|3k3E2<;!DjFf7G7d~%^+Ok&7NF%OIoGR;lG}if31CghQ+Q#*!L>PLJ@B^v` z&Nm0|HPT}UIi_8t*}vOc5411fd4bOHpwp{d1`b%cni#f53bGPr*R@!2K~o1JzRwJu zRVf>*!e4vG6ZyJUw$=ME>4{xPOorrEee_48@gEs$==6PLV3H9U|#R=iik zI+VZ4Lo(H!Q_sr#K$+1UfLRz;Uxe$_E}HG3vTdo4Uc!Bfx<$Vu)Q2XEvhjWuDUzwe zAKDnV#}9D|1EFz_E`4lrP|>oT)tB6ISP!_m#TGN-gw& zw^tYPlf1Hp(4M%4-929Ki~$9F0Y3eC!Ka|B|Np1(AA0g?U9rg;BM@v>*;J+N$ISz63su8 zPzJg7H%ez0udDGdF07qjJg}In2#V3!i^T)cKmo4M+owZj4|LHL0auK6VcUUd<90)Z zAFj9&jTQ#a@ywD)LM1F=bH>cYYiND9luW3jC@DfV+|#VH3_!NMpgv40gOhI$crf%E zvfT?VT62@dD%3zcmEI?}Bv3j4#1lFb1`I<^S2~MX!P+N2xL)~N9X%B*-~;qb?YD-r z=ljjhYwgkuBn+)xO!d}XRW(7_t4Y3{T9iGewXw4psDwFOOzT(BU&pk*p+@=kT9E(F z#UL7(YgiIe!0%Br2M|Kz0(|?PzU=DLZ@>TQ?<(y#W|{(yLUbPOcQuC5mR&Na_CRw8 zU&_3Jv1>_%JrDMw0O+CTVhyU|`9nf-3?dOS((G9g&cYI8bxEkI4FD>}V>7Tn@!G(7 zlelG&Ehj+}e^&lmx2*)F2jXd1U1IBh`M|(G531)5&>a%ufh-M732G6ix_}Q5smJ0O zUTPTgxTLco;vf+S*HW^05V28PXO-5&cD^hCvTT&NMCtg1W@+R~vO88RD?p64fUCi{ zC#jZvo$H&dnM;(GPk2_!T7N&vKntkyOD-KlxkJ;?8mD~oo zhmb{curK)v=wOJHcxWWN(|>+nY5v55?0E&iI13u!d^&4I3vb|$e2p?AM7jA>3p*3U zAECQ|e>U$?X{4w$?_ro|;m~`eidu$RG#N*JjrLqePNKGU|ED9r0yqPFj+6 zin6e-9KX_mmVWh|wXSp))rL`$8Z1`TmaDVV*VJK+M|A1}o_ZhiA2p?{9E6=25FWe~ zQ9e6eo6F>xYr`zK9V1`UuL&YWgMI;haUAwRLvY8JRO0au>OQSKs4hz7QwAL-AO955 z;6CCtiV}Pnvu6ez)2Rh78x%d%Qj6L^ir<$WDBo$6)s-3P(`#4NIEgxsR z1gOUePW29C!wztAm@{|APeJ64&_1Y?_`+%V+j^P<@N~m_2ZI_5a%-Fh-}Wkh#QPC7 zgAeO0lwE02s?dH6^2Z&w%|TwH3bl0L^t!>VdgMpq5R00`jlyjFSgkG@{ag!SeLpF}$w*2!qf8-n9RWi4ck%C@P9tH@wpi9&na zAF6AF_K}YU;~C$>Z&>F@MBax~WbQ~*{Cb8sCSq4Q1n7W?$a-mp?`0zJq3G;W7@vEw zZt!CekDJD?4{++n1UsLsqmgD~qn2VQ{9r94?Lua^4!^ug79!Q*fr{M66Om&g1ro<^ z#rcGrzq`B-Hfh1?mP=ss|23>yii=GaQ}PXqXE9*vkv@w>}g znGbi=)_OFsGo z|114}>Z_mVAC3AuWaRTiudl;y54#Wa;}k@~?JYoy&$|`->1bsd^5I*o?+zZsx$K zY#_mZ1{oq5+7!B*?%O-4h#y^q@w-be>Lh-O&Niw}$k00}hbZwOEq;wwUYdWl5(D<@ zwi3=#SZKzsTGREPghsh^*LO8Z&}S}z{xXT-j0o+{M^mKR?31BcqW3-OH9NAAN6frU zXs;>F2F?ooukMhLeJQQ;Rru}-h$-5N{mWaa6O}f25ew}TOJ7!g2P}mX@+|dx^t8~P z!Q#Q`o*f-@k8ayuicm(Jw%)G)X0O_mAhhpz=xHD%--aEHIZe~O9G8z=n8(^lG?HzT z_KF5z?QKIe#&P+l3$#BQgMH%dN*?S#o7$e}8DT4}M_k;9K;#Jvp?D!=4kWykT9w~y zXwBddD|8=^ybeDy?)DCRE?_rNS5aI6P( zo9xl8$nGq1N%NfP%U&trM&IgOtd5?>rRa~D5y5Tl@^k67Emp0g%|NzH2LJVV(w9Xp z>sE$!o44uE_afGAK{TUf?gB2~IA`#CTw-wRN`FHI?7bC0Agl1N2&f3G2&#x_6}lpG zjR`pz2gl``FX*@HD-geJ53XL1Rx%)JH@uurBuwcM@JWnrUE4DPydYM000`n(wXZ)CxQo*6hZ$OQ$=PCeej16122QHxVOF6%A?g0G4K^21#oH)u;1 z^%!vnLt|)e65it{*@P@r@3e1xl)sT58+bU-ceWcm)IZmZ5~t<)9-}J}`|zUt;^I-o z@S|fIfDb=0@b6X&{3mq+=si#q)2D;K&7NKIcwHo-Twh4j@FpXbG+`Ibx6>P{{yW;pW(k*uV@}j8*JJ-H$h0(r- z$+{+s9{EqaX{4dQ)p1jM#=u=8I4tj#6JAT(Lo*A)QHF-;v@ zi%9JB5}U1LX(8#vyovxih4wcdg#3@W-e2l{y(9|jE@nN>lLTVM99s(+iO_8hs+p-= zN_wNvUhzl}8#B*%gB(kgIUb{!QEOgal(9s~^#J?a2<-C_K^R4^cK%Wu0bF$z zEpxzs1JIT(j6avn$OAW;{~bP>qy{WI?DBf8lyiKj+0=7?Zh-s}kKGiw)ROqgN=cW& z{Uofy1)ofpc9bY>LzKbWC5?*(>daUG!_$b8oI_* zjO2jrwBz}G2M3=ilCmZ%pL%r2&^Xq+2kZFH=cpahVcX-~lOToA`cm5y;P^=%?VX6& z>^)}0y#v!_1oG(!??$)Ihs9|JAAtU??ulkI@U&dnG3Ux#rQcotl+~4aIepNJhMZjvDQ2yiDQ)zMB3?S6=4_=w2u6{L+4vZ(mHi`6HE7@ zYu1sm@TK5@C()F~- zUXsJY;)!QB$sx#7G_(w{aTd~*hPg17u%i#!VMK}W3bQyEWx9I8tCB=6A-W7@O5ky$ z@aVI1@?G$$9fGwkr-Vy71^;}_AM#`9|NX?|*?vs_AA()`3H6n-6lpS6qIZCX!Ikfs zMd%QrjS0*r^0fQ`v!}))qtj~0(m%IbzV3Em`3Wud3t2`1n@&IS+mT zA;52&89fR;557NBdC{-EqVy-^d!_%d=eg*ADn`Hxj~~w1)yaL_G2q-(-+HpWC!c>S zP|LgX_q&Wd_#Wz5@-b;wHYxAak%UdVix4rrj%#=JYC-s+jj*`34|>E4iNY!#m%nXJ z71Lnn`bi$_@z14rI%H!_du+xi*s6Yj6_xfb%U~6rf*n7yS9X)1-KIN@%q}~pZ%s(C z-{SKT_A2fU+p9+(z%q=9; z;V8st`A~=l6L|TClwy*2Y`SaS2{s?691!1f01tl zGV&l?&%v>#Gz)k);QFOEDL>&q_0cpOshu-m|KGtywSI{f%E9q79H()JiiGVngX>Y! zz>Bq&<1BbxlH%$i+pvaed|XayChIWQu(ms&f9i#W{2H{U>vp40e>V^FepB1OF-F6n z4-VUvg=pRb(Lpy?h0V{_wU%Y^Qw~PIj;u=LEe`(C)SFeQJWJ2ADut1af$nWczT+>S zAAC!T-|N5IifS$PUfpf==2g=3T3)3l`PNUa&#M%&nP2Z!>byC5m08HC^kWX5eH?xP z$K`{_Q&3tv$6aJHc{rJ@G{Su+3AIQV~1`3@*gLBBq!2F*kdMp|3SP{<1l+)wU*?G%vX!*b}Az zH|KtDCT3)6w^UmQi|Z&zZW-9qW{S5XYsF;c0ad{2bi!j>7RfYYiBIhw}HRzjEwRre868Rvcmxcz-PQa+$DzeGYF64HyZywL3dPf=V6Mm?+s zUS(@XkS~AT*PR0@!?xfV0}iU@)Pd2rM{mhm+IUQMT$=kqzH4eO=FOuNW$7=CK*n6F z7_jXo}a1m}!6_Z((Z2K)n%;|cR~U1`uZ0ohhbnmSsC zdHCo+cydR#p6DFtSgdU8DT6GPBrXPi3nVF12J*LXrh$&AR;8P=Xz83*#8wYPjwx-1 zPViE@m_>f-UL3v1AQS|iJs0u3@OrsYRhq(NrvRs)D>ye3t$bX*7rqA{Iyam>CeOaa z?9!{h#UAn?K1rSVeEt*z|4v6fzY(8XyYl(fTLq?Le7z=b&K7ahYnq&q0tDtT|6uf` zU4&D40$-jZ4uh3F$+TiwVZnnEJk`231LtcUJ{qOmaOg>Ts2$hA3i562Px4GP99Edb zv_QwiypRpRufWb^ubK(0uerC8H>`g(q|bSfJ@LuGr)b_@b;0Y<;lA%*(F1%(V8?>T zHOZra^Zkqb4LD)iinVI#Jb2QW2}?|eJZ~F2bya3$OMoVAzR+(>@O#u}}K%Y#)3_T7s4RGc375t7$IKu?MzDp*_rpsWu38v;c2|+D}j-afQ|l;2N}# zUjhBaL$s#QT@#ei-2qjE9+QLfb5~4<)G|s8tm5sIXYmSl_lT)}5%`nOkgq}i_gm{p z{SWUK_ABp~;(Nc5zV~|-t5gMO+{{+1RG{o%`+g&T<^7(#?)@I`dp`%V1kn2x|H}J) z(sk|oz1Xx48c2G(XMArraqU7rHjg;j<1?V4gucg=KGTNLZ_?Wy5TCJqX*1-{%zq~T z%X~w@%mUh7T#`?BoGBPy7-?Qw_;%r$!r?_ri{373yllOYEQTc*5yN^6DE}0PI3b@R z&M02jEKVqW#P*?0w*69MB8h1AQ)?DNH^VJYg1o`>F|}NKQK<=fhBoNT=3Mz5ygf@R%;p$vW`b7=Q@^_+*3%|-lBlvrDb~~-A*ZV zIPbOxJvr?b4e#Iu`xncji*@U{QA?dwQfx8p>!Ml@dCC&>Vzy&(@d(8OUc4X`-recI zD1qgfyp}LCQUieLU_>;r8E7^?c40?|Y59hdKdhVeMCOW^0k z9hZL(f6n9b0bMT_cYZ((t~ty4Su*7Uqp@H!A4!hVI$43zVa}hL%+<-*Mgon(4~KM2=a0U=SEqAefdQMv~F-`AP^D>que4U zDD7VTE8|&P)T?1=FSq=MZY|f|SMLntOCEM<)irzem4ei!D$J2Ex`U`5(wFsoTJB*y=-uIVM-O zkjG_jZSUB0KswtEyTd7Ymvi&gzjqkaIA~a1JjnSyF zknL+`C>dQu<8IH=!mBh!6_uf^Mx#J9LW||2vG6L5i;MR3m2#g0jeVug^eYurxMx{! zT|ZH&g5J8$6lirVP|bnCqS<<0?!pYxbV=uB85!;VR1+xC8W0S`H2ntZ$Fn`Yeq5#@ z{2Y^aqRuz_>U^hw`tcy5HcrWnJ+ChtE(s1uqi8qc55l%9@?)Kdp?0(sL@BRzQpUIb z{tX8APt131+LOI=ntUNPwk5-cr0u23B+L+X_Usw8MHzFIx-KD)GX6!1gfGSC(EKL3 zj(Cc}eX3K}=l>E`?|R}|Uzf0{QOcco+Hv^}=GC&Y@0sMAv$5?Gqr?fX8NXe{qCVk8 z=-~D4P;2ynuIqnau&+My@{N*;bea-6A{KMi<>V+OZ z`19`O;FrVj*ete-@=ZPP&dD@m9&rs&>6|3ZC;9j^ii?hJcvnv)u-9u(HD&3BDKU<9h*)!OF{CiuVIXGPIQ@ z*m3;rQOXOjyM2^LmypG1$e{1uv z7}noKx%fA+{vv^leYMR`T!-~{`0<5Mv2w8CzQo#mOtGAJB^Sk5c{(xtyD>wfj4&*6x?ojo3p7XnVv_^|ks?*6JU0QLF!=QdI22TZi!j zZ$Zv497$u#jWmhFY(uffKOc5bZJK*u^!BXX4THryYezwDdj}EvhY{50zhQyEpgvVO(r&-HC4CcKhwhg+~GZav7e28Hl~M z-o36zz^=Ot{Yd$PLzr|pm~?|S-Q#5I;?3XHnZ@Uj=aV1lRsQ0|-cqDpWN2e5^kQwL zMAb~_;z`C==N1E_4ZDALad#$3_N#lJOlt+nLlmpN6S3-)UzO%Lm&#$ZL@DFY{#WMG zS{kW**5#8d!Q-f{j>`ei7VqIgl~x>SL}qrAUnN<0$p=sGz5{QcQ6KWhg}g0jA>!?| zx7Eh<=Zsg>!h%C%k?0^^@d$F7(XMhg*Gp3Z{9Jb;7w1mvT;*&RU85)74XxH;E)15% zCh(Q>pk)*&Z8B3-Qx`X=bS>tv{6W-Po21e}3m>>!oq9s$@V1Fn)9T7OnNN)p3wsCC|W0vc_Dt zI@sO*>~7w7cRag0?9!ljCm<6`h;jpRJkfEocj~qzF;w}^lYxK9unyC4g7;})NeZk) zy7zdqV404m!rQOJ_k64^qf&{$VJcAkhgj8 zal)x(+A;S>o@BALIma?Erm*Gb6=avEe1)k}f_MN~PLQh+m|E$!n`$#Ko1#6DwUi5y zq)=|O(5S0`ZJ@bbd!Gq*<%feuaMB&Qz5AqgIjIt zh9-r}s6CG7?ZxL+Af>ET6A+(m;*-RM%2_Y8Ex?UBF2AIb4VLDgQ{B&@w7Q?=OlCB| zd$^*M&O{LY}SO7OU=nU{n9+M9bh*6h4&yP(Mr`p(c_^=FyR zaxX7|*CstLS**_IEK_ZIV8Hi2)5!MjR~}i&Pd4?Ji!#+n#1Z@f+Vn6kQrQNMcTA@J zSy=rZl+}10$weF5rlM8<`?~AA9N?q%-Hza2rB%xly#(mlM5$gG-bW*i5UxSObF=;a z+xqUj{QY^YO&)B#Ad*{mQJPb#GK2t$+rM>L}067$Iv{z;aj3C(t~5hfn4616~5w2e0Wy@vUU8h1AcVtC!RDwlaHu=DrZ4Cq~C zg+b3omRs?(07&40c4RB|{!@hVjq4alIa{G}^458nBZQGoah{D^(C5F?E&lAEv}|5>hp{wfmjSR7a@k`2fsBAy!EL<754i&M?mc)J2>+o8b#0* z+dIA9vygv@50JliSiGxAXW5$X%0GrU$2W>OWa=Yn#SD%e&$xCN+jE!KB;gH&7Lxu? zdJn0pZ7^*7=G<8pvu~#ogq_N?jyPcX@6-vfR3Ijx!i$VK(RtK@M(kaBTkfSE!rKX` z26kHo%??6|UfK;y#dex6Ny<$N;yoCA7HHaIA z@k6qV{Fx4~_g)>z^~ggd3a{$imEH)f0jW&-qxgzYlUfpsn9U3+wgU1MCq#|0^1WiH>S1YI)J*$ks1CiSWLPY#rW{=!k6PJ2Eei z8I&WY+oD=0f*%}{?*%gO4gDml`_J7-qvzT8PUMq)X8KDt!*BK5u@2*y;!Wv&0xQy? ztq7_JwjYz<>kO=t#JJoz7J-t89FUnT>-`PNV_rA(bnv;`VAx>Xkfq$zU5PkTL)Gok zw-4Y`42^zh^{9lS@~CruF679v2jpd7?*gAYH*kB==NaG($K*)l8qi{hj>_h9A#4@Y z*747O%I9791d22Yg2lEb9sj4Az0Ko!k}fN=^v>qu?ZwCB8$BB^z9}Zvz>{3QL5(*< zHaBm8j6!m67JMhU_>_-(dAo#}IZE0nh28we8N&LX<+0sH#LSW(WeH}3txH!8o(eCr zctpU~U^M7J>;E7+ArgA}hw>tWr?@N+gnl4&v@ zz&`Mpe5sRU)G*OhPe*NUP6*(o$_I6mcIkG+i2`D5!oar{D=&7gM2jv~p6lda!OCR` zN7N0sS?63DHgj?DBCe%~TQ>_RTzx3w@bzv0S{D$?=v-B?{+l-x^G7Ro#fc(Ndxx-? zofTpKSQNWBOyXPaG4c$RCjxk^!06vLO4>S$xKb`W8CC&5^+k-TFyMd=1qC^s>zE~R zMyGxw&_Ur%5CMG#A#dxqn}8GXPw3u%mPdE5LWCNg{xVU~O9K!U1D0GZn}T+gJiyTA*yRf8rL+FO#35ZT=U)I9J|?Fzy-CJ> zy=xiiw>Gq`Vv_v--WwcX_e8RL!mqn$>3_JVj@{G4G%@bw*FGojKiu`vO1~;_D{AyW>OAo6beO+0DuPnv%gv<`^i|EOgDkWPjzg!ZD zGo3=zND?^HVUHw6wC)5S>W%IJS7@T>o^?m^uZiJWtE^?u`{cUkfkT1{TIIAckR3b3 znR)r;L6w+o#`Map(8hymX{tUY*vXsss-=8b{Xz9%{70^E{C^n#S)NMhHZ^acMQQ0D z7({0?P%xV-wRjX`+z|=Lf<|P)K@H5e>)|w-g|q|lZ+sov^G5g@H^SE#F^~y}*-kr% z`-S#MCPzMj5l^F#ynL#(amS*uw6koiva=*PQMq8TtoBOtRu+d62uzQIc+!{6(H27E z2Lc7+YPh5;Kx8-Vg3ctYZ@lBY=3m{YW)6%3IyCtw7+k$`iDJE|r4Y4>2tL>j_R*}C zu*2J`bR&N>VfJ> zf9dthh5Q5LKH|2C%3sK8zD>8?f}F$mbQ&;D>~9;e$1hiRr%i=5GpW=i|4$c1GVOU^ z7=- zQfq}(90)Ab)yu!BONbN8T?I2)pVAvqob?*1kcA4m#pC8n0yZUn8n&OO9ws#oCaOD9{I6Tw; zmOZFXq7PT*dj{m8FPZ!vxFG=hp1-TT(tEG${w%U_1Z^{Ik3^0clH4aFlXZl$yqhHS zrssz74^1@kb1X1)fI5=QK&v?f5>_vb|HOWiXoTk4ZrGr6-`z{)L#g22r@74|Dzny?Qw-_Hpqf>Qojv83S+qXRQ zx^z*_g;##24ww{@(EiCIXu*e)MeCkQQ%I~}B{H2~H zuC3BQ!XNBu7=qI@GG%n`1Lov=z_WSFqC3&EZ^)P7oi-78>c7g8O-tWYLU^cW}#+ZM1r z0ysqhpeh9|AEDgUMaY29>jnF_XOq}I?)mTY`9=7we0CVWXuOf15dYirG!paZ(-zVf zU6AwD-_lDhQf`H`k}T?A2fJ2Zw675Qx*`AlInVo^Gv>cMC))R%x37CnDW0<$&!N53 z^EF(8AM~^2Y4^`&6Obe$%dl5f{m_z>37Yhpl6a@|u{3mfa9+`k#OqJX?LEK_WNk{k z{%?3rs%YGei`*c5w?N{0POUCgFI4(g8hiMOzfg zlJz{8*7N~_Sd43#z#2dnZLGY8)~(?8BOlc8!oF{StOA^(11LE+^(N&kiz)ce`Mro& z?mtI;d>$ADzr`yTDR=br=aoNu`t!UN_r3Jj!d;flr>&s zRU}Ya>GzXpAr*W75A(@J{2bPJonx3NyjRBb82Wv^I$kqqzyDllRVsN)*+ZDGRD*AP zZ0MuTpXo>a2W$4GM#uq7Gse5*n2s@j9=?Wmr7IzjZ!;+7Yx)~CNw@kzW2K=y#oGr0 z!%n|^e%&5CE92Z`;MxI|5-2)7%JZt#g?ZMx6V@2hwl3tT++C}CH!7Fnnq0D~QvAff zFAqIOu@jTAk4xgRMBs`-BRBx@6G!EHdV*aUScCU>8cOC|nSrtT9f8<$GZkIBq?B* zs(+IPL7$j3$*}#g855Cf7?_ybGZ4%8CQ$iK%Y(3f>D<3Sn%6_0C2T+j5qAJ`c^;L+ zdjfrWfFpA3Im!?4+Q0I7-B=^YC(mg_Z6F52e`3hw8<$ee4Lsl#@ zKx22V#p1lvpdC5H7eg9`1S}y&MM2~SET)LcArEhg**Vyt{nELsc5~b+l)Sk(SPU#i zw1P7zmuuhhD8>ByOBQ8@rvy=9R%kzTu+8a!G<}1z5LvAEst#fBXqiY;q)blW!#330w7s%gq3r6e?I^IkA?hvi~*W2 zuhc96E?O^&O$;oji{RDGxt|AeK`gTc%{|BK9%)?d(vQh?a$}xs%)MpioF``-LZtid zS)|zwZ=C6){4VdDE1eJCbTbc%IeQVPe5PTWO5XxGh=$aPzu***jbqsSQ&yM%iaj9-( z?qF6!R9_97J0e*PgMX!l4X9x-+HiH3!`Ft8sb`y7ShjW=ujaU#h#^ z*F!mdHSJSxMNL}&Tsy|U^l1H4>zRqVCb3Z-jr|1qwsI*s&X|>++8kfa+_-6tVr~rU z{ph~Bx2Tg)cg(NMpG~Mc#u4Y5(ns0kT*_yH2w3<4X>IqonuNRKf939#xH}$iS>zeo zkFr8gHY4>gAAjgg=-F(kEp@|vwcj9asm|vRDWg9EG%&btZ^4omA;)g>1>Cr}h z0gjnCns6M1<2~OO@&{6k{3sl2adaLk!1y@&jpWZshXEW)x)%XB}Y+bLo#1ub<7lqmvdoxs<6+J9_4OjPR{&=7cwvv$ghw+|@-qY#n$QvUoBc zmesjhq_y<^&aJb)!X1QCJ6U|@)*P(b)K8P3@tr1e<1*c!m#t>Gz)#3O0?8{7_fuVu z+)SKs81O0s9o4SK*ofE)ewXR~y6g{#g`hF_8Ojgvl`m%H{ebT{z)|aZUs|s&jps(q z2h~%Y%dexlI5&db|2m_338;?nQGK>!wHN`a2VFz;UH^;fdmESJQV!=6@+!~}=c6Hq z(ePyl{Cga?x#soJd|%_-T*_O6{zqwxuktNX;$`c-I=)*pM65U zh0$pRoyk5r?VvLmbT)MKZ`~=^(fPN!iMiug4WsegalYpcWzT&GRE|RpuXRLWE{?ZZ zU~P#hj&Y^z>5b9`R-)I*x`5r$Da-q^55h57LI#xya&g3 zaGZ$a>o}Tl+=Sz|-xcz!aa@jLDUPJcELRr;wMFv^T#Oi^mM(rwV57PC4e7Ip&((cE zME+deKTz8*EJW^H(%_P2aUJ%tF(uG(#zVWvO;e_O^;l~&b%SvJ=rZ1gtI(E0Qj6E5 zv~PUUpQhJ8dd;pPPh?o(zim@$y|-r4`(a|h6Rm*3~}=ku9`JNG{KxzBQ* z^PKZN-$U6fLz)`fQU9@C-UqRA$1Mm)*njIc+@ z%mr#lojKqV_@-2CQ#LT`)4-TC%4@{DWd}c6d{p>{uesGIpBaHOi*Tl@;pb9jeFRYS zr-W2*vOG7B3h!ank3gS4gIv7Fgw@h3t<|uAHnpf>U!yZednUI=J8gWdcnUmQ1+Ybs z4Fjw^h7hYYMuy)OCy6>4qOwMroPU%kBH=gZyy>+mYYz|?zw-C>ucFj?mxUdFgW1;x1 zo3uO=P?X1nVNwDx4*{_aD>rd9I6RRu${-!tD~T_PZB#amgP)ekI%_|CHl{lY>WE;t z7%Pw5y`NjyF9wD5zRKn_=zSG@sHLfHJk>3?_P(bV-MnLmbZ7YuAFpf8?5$NAY!smy zeTNzy70$v}byWBz7^>0B(DSH9YkO-n$6o*@m{5&I$Td2G8ijU3M}$M|dRcp7_GF+= zg{TwhPo$4xZ}8Av(`%dWl9``x0HZY3a4Z->`&rY)VL(r@4dcXU?49#-YY-85tElo; zaORdNUsxjI+PW;(T2*SxD zahH+tXv^y{&vfxj_HcUyA8#W}dZ>0W_7qwB3ggqoZQbR>G{mBu*v2@Nv(Zggrv~Gk zVERT~>U?ps7MLz>^o4JF9lq2ueb{d&hmLVL2@3o8<~Px|SxH8-sN%)-9; zg@wI06ME`Hscb#Q^O+3N6PlWfdiOWk)(Nr|TWLmi-n?ZkHzNocInliFKys%2dTz=uMl1k+N6!>p9EYaJLJ*GnBvK5 zp_u?%`~$a&1H26U``~JaZ7{36k83>QH3ye(5GNycEE5rF8xi|MR&?0PNA?kSz$Usj z*d&T53pS%y?W#pS@`?7l2OVzTn(HUyaPWA%kcRL;`SO5-_}@uO4tn4^)99s z5diRUcN_?2_r_Kq5gxmcBkMEL9t->V%-QU{X&QC~+K6OuP%MK)vv#G)-pP=D&t7g` zI)0im7tB#IJ2K)xvvc@t>)+byc_wSV-6MK1JMOX9^BzR&oRaJnBN(Uz|Hp(D_jz@r+=Wqg@;QQ7&CrcFAO*D&DFf9v0}TB~meQ%bXM*k|uDI5tF`D z+QNslp-;gAFd3OX%JIue{Bp09f@|sAdyrXeEPlIFdujk2I%vFj*xjf5 z$c;E+!I2;2Uj5QLzx3{cXD^(7rL0NKD;EnFyAND(#kdOdEn5n?r}_J9v@cC!q&Q98c;cq#u+>!gd$)O zGx>K9*>4oUzwDc&flUehFYnJOzFEuZTela69b=rsIiP^dKfsE@Vtn1^OK>g){s;P8 zC44-vDF9nxWjgi*G?1kl*h{n9wq!ZP;}J_l=QMs?Nk9Zt_DhlK^z6yRoRXviI5Gn z#(mjb2-&uhkCi1G3*1j0Uu5m$de^swA7UdJ)W_A~9@0Q#u#fAEZ-^}s@&9CveyLn} zdF=z0;Pc*(xM+C7(~b&dkXx`7!mhD)1pGa@O4N?&@cWq-^vQHsau8#CBd}?-28}^P z*o&T!1l77g%)(F_3OyxGD^Ynz7=I!3fBtgYxR1fIbR{BZ72?yMjf% zYruhX6R~F6KC!UHm`gw46SBYDDlXpz+=G&M$@Ll)kbz2uGM+0L6L*{Vt~(#L*4xA_ z?l((W*q&Y&$9usT@n6q>x%>PVde6_4&(|w-Cc=xRjS(gWdNwaiUxG3gQ`C@)1#S&Zpi;*5gF+v@fcTMvAJDv67eKW7zKwiHIe{ z`*?{wXEG)Pb=_M^tpV&mOV|`dm&!3ew072FZxU*UL8># zS$$I2i7^=vcS@@2v4}Cn9@`mZTP1$tiP#j04A|;QFqyXKkPB3m7h%;Ro*^7Mv$~O( z1XhVwp!qczF+6grsSr661&!kd@C`9p$Kg3yOL!6Jkx4t^ZJE#*CYuD1Ndy z!Wj=#`w^idXoBZv?MNp54t}*XIXwcamJa0=$mQu8<56B;FEkhjt!f`2vURN@ykQk| z;E1|#tkoKzN!P}OqrNsT(0NXS#syLaLBG zK5Is5<=lq>*!TO0Z{n%r#D)Gu_yZp-O6c_m#)(tGD0j6#@Mqy&kGdPpr>+ip1Os9M zBJ0Q_*a!LVbdY5xAomiHD<*{5tGf>}Gg-sl0IV+I3mB|WU|$CBGa}WnI@-%q#lItR zvs(w3J(?lEbYr+b)@`PiJ3ZUNC@4owE3rlT4Eugrn z1%l!~_jKT%Mbo|_?leUx4tb(Aw7b9^S>r(N^Z?UfX#h1W?1ZMS)BJ@}> z*m`!c$+oflN&YS55Y6Y3fjelPl#HJG)iC zOkkxS+R(=}(K8fsCk-VW71ntScz<5@oWgSmt$s#}#+EB)KnKx)d2uQ-W#@|TO2og& zbUYlG*uAE;2~S>{gc-=}vas(A2(4Qin&FMjWCj6=TCLv5biCr#8NTn-fHARMX!2aY z6sWvc5=F^FM}5G`w+r>2(M#hHg)&hZcb{T=qId!IknPcv@0DeC7DoL&7~ONyD4P5F z>HCw9=~oopYA5`|Iw`;6dudcflq*R`NZgOOYo|`{NDBM@ydGmAg>FDyj$-@S_Gi!Ft0XU$y2VYR6e?C z7g%k~xh$fA%(;rX{*N*_BQdjQ<%Vizj{PzDM}4?g(Yd~G(2rqWHrK#KH)1{YfaS>k z-B~4}HJ2*tQXhQ;TpBbMHRxrOwKTjT{FMmg22{v>|1az(4vKa}z#bI8_s5aO@N5B? zG`6`f$6n80y$#oPdmE575zI1rNZ&{<^QP+N z%#slLk}@0ttW*@UlhjDC|d1}6QzRjelZu>Jd&KTb#cU{WVi5Jdf8N>8cqu5 zz4Q4bu&Iz7#Hg@F$#U?N5CrZZpNpu??p-TM5`F|-?TCXU(rs=n-eE5RjXLtO4%Ms1?psbCKyY(wKCp}CxoJ741- zL;W)on$hJCz}sYoeDI6!fYD?e`YuUkye1?y&DB-C{-ieHkBj6_TJ?d2y%euutJ+nF z1|Uozo}t^e{Z;ciXgUg8k9T3Bb%4fyOLtx?d(1b02J7c>2d zu8lDj+#rlO^6$&`jI4r=GZo9_x`&QvA>j>-B;E;~i8Q7PF2S}%{8xZ%b6VFN#bhp_ z;SIis+chZx&%Iu{-N_7_gIVSmuk)+r)jJ2Vp*F;bO~m}ldWh!x3vQAW+x$a;Qt0E# zmgqku~n**ir%2`^>7 zxKK)NVAK1{y69<%j`Pw);4SoGx$o&kTJC9CYDS~=Oo99|N!;O$2CpUgrys^MM%#`E zowEHW)b2xoiJb$?4AZe&N=NOM#L#_p@TXBfDZv>x_dcehk?a)RwkTRHy7la8@T+!w zDruZ;V7hF@e*CFF`nla$UkZdN-;XmU`6UE(-G)Dvlv>hN7i+lX{gfHFDH66OC9-ekYY-h#U z?U1_ckmw^|gHF4hn2Zg{;G7EPdc-e3V$)aSe-B1A-6J2E-sCA*kBuwMj};f0l~{R| z7Tw4qi-NM2j${nRd0(6df)Tlp)*uJMmU*Y=8RxG7FB|RN5LabPbgl5o-zD1&;*kN* zs_BBT9vH9Yf&s|gN4$n9@bQvI8~MkIkc-2(8qZh3>smbGv*4``eOuT2t-ANy>%HHa z@NG5i48R~AI)Cj)#NiNyod;`#2|?C}jF7X>i^B41}c zAMyx$#CssE^}AQ|#unw*J@+f0B<<92%F-A@k50TJNoi4*-J3MA{ilca;{W*8qS8B( ziY$4^Beq|vLQLKv%*3pg7XCVn1F2w^=-v&y0n?LbMTs0%14M(|k^{sq$VMQybF(Q? z+>HE41x%tV39(-$<|pBy0P#@#BrFXWdU+^9xQGxVhrSTwrhQiT{+{xzZ0O3xxFS0y zumE6--``rn?`_F4CvXLwT!GMbGoGRL=KjzZ(1n*T5CT@v(_ zx8%6}3&N!T8MmK+xT_U%+}$DzBkul7-2T>r*{oMhcvQ5~ikHF4%;ZdStm4@;cG;UP ztH5Jg!DH6tzEBv|mcs*6?8q{ep|zgIJimG*CW@C3@gECawjcEDv+-AA{$qjXq?rG$ za?F2-yBRzHkn7Ee`6sQ1N6dd%RifD9*1)GvdN-l1D&**MRbwLTyDH>ne$Y?nzS|x1 z|J=M(b}MAhXkRc$qqu_iiu2v37PgYI%~6y$He_4{n#3D-BC<1AMryM*BcEqY zbj5iNN^g}XWA%8}liYy4olEIYwk5bu1!>k_$9;+UPJ8g6_%FmSCAjtn^WZNF?N+9o zAB{Eju-T%p}LwiT!dBj!~!@=*d+F&8^MvNJIl&52^Hdkf}J4+i2axSt7Ufp#`V zn2jr#oJEc*$e(4fiT5wP12U8DcourL+0JfavhO@$z+6Tak1}Oxf7s_Tuoh0W({+;_ zTguqRU(48yoA{Mt1uS?O2DUD_CBBv9nd9s~kt^W1i-AfTslgGmGApI+)H$X@r%}W( z={N$WGbU&Ei5&C1(t3V>(tOL>)`3onRf(U3OU{CF9{f1csRQMytV_!sHBt zRb*Cf|Bths^LeI`@}LC!X`CdG_Z^_|TTy>8yCvu{pABby|7_1*ayvXCb*+E^h45)7&2+v0aA3`qm1!gGK z>J~2|8<=4SkLV$AhgsFuBhY1la)cgV3bxg;;tWKTH1TEFk&_mb=z7wtX(+&m`v!Z- z1lKzO^kl|ZGvg$@+z}zlmkQl0WP@)L63!W9>o2osLu1G{>xTVc)G8JCG=If{@Q9Te z2K{m6L9{LTW-nLxoRn=b#Ye2)28?D~+LzMSTq7YU7t?A2CQcshnWwCpZ`QTA!68eU z6bq?l;D#c8jp9j+VDo0Oc=TAM2`u}Na4Cxur5h3Zgf zxWPLSt%AJmT;0A22yj&?thxwV-27#Usww@XLypp$&KA zib2xdu*uQd(cgPF$`So4pg`X;-3zS^&sB@r<-gl`>^^#)wJk;-Yy;KsL?Ta$c2jN( z*>~SVo_aUzHB+7R`K6puVw9;zy6f8LS&v~Y20xd}fXL5hy@Sh`5xEY-HhtQl?OEI~ z%YBwMp)#0L8k1(?Qp>Ngz#domFpfPFOr88d>GER670n(I2787;CYdbS^2r#{r!dZr z2r)9w%36p_r>=ZfZ6gbx#+oX=<}*OYW4u&9lXobd>jgjYfjbcmUI`r`r&W74wEDc; z_Q=^sdi|k?g+DGm+HL2J#`x(2T`gouQ|_~hdp}lm`v{;j?cv7$IUiCV{C{=q%=)gi zSXcGCGyd)PcVF&{#hw`G6KT&twV9}?U(RSwo#!`wfR6CWnZ%Qe)@B~=Ru^WPx zLN?&F%`v^c4=p^B^GR#6oy0mzobxP@#IPaR+5}`BbFvv)%&?Fp{IGEEC7mp%eD7FT zl2i5;WD(zn`i|E+YkIYfEcDKYLAGv7;UA73R@y51U&>SvK+yD*0D|b$}JyP>%KQx#qa5e6`dv zbuFsV#J@i+$YKxmgZOuN*QsR=`QL-hdRG}35oESBva@Tuwf@6`{Wt2JpWn8y;!aHp zd4KyN?t4S4Agm5F7pgejo_wy4y}q}-6b)G^kmJ+Vime{4^9OM)o`G_(uNBjLS~F{4 zu%ZOy`Z1ZR_rSDdRxgExm@#5!OpJf|7%Q*-Mq@?giqtOQp6wnn1}<}1re&e!UCSBE zf_ZPxJ2Q{!Rlc+Dv_x1ihXSLQ$FW1x+py10pM8$GAHGHAr9$1FiRTdgnswPxGwI1z zli@q?|B)wXPf!Om!cg<97Tx4r4%yiRokxX;W6GP7Aa;I2h+x9+-1Po@HV7;-a^S({ z_H?uAJ=7I;?@3Z*iitCVJ^t-7JS$}m)Pl<%hB+pd-4c8i|FnqaF4^~#l10lmFA9`bq<*4-RCFuA$$9R*=Y#Elwe zbU2{bDRKrm20BS&XB)^@pv1G22J#+Qte3YeDbqP`l~fUw1w5peuH+1@O=Yhab~&gF z7BcBW#L7?Zw&X_JBb+)gr}XisVV&a^(_2;0Xhs}8A)=%$@;cU?qkOH* zxe==K2DzN>T0hQ=7(#Vk+P9-Xo6%j{EQjGg)OHU1N>tmh?%Ljr+MeR4LMMmKNUm?E zgBeV~gf)sXGEr^dT|S8Dv3pBet0!+{##dQoPTgrBLnyUxvM=e3))82x=X zPcgER*HdQl5#8-P75L@vI@{XQFbi*;s^+|6j^`D*Mb^pX+oj?PYLiNtlU8G=Iu!J_ zJP@#G`OZMTT*?P>DHBo3{jjLa$epX1v*)msQ5k+P(m7Y|6PoGdf2K9s;`q31)5K2X z#ARZ_ddp4cUgPtSo0G|!;fTDJMWnPKZ1wGeq*z@>dl$BmBJBzt!>2QuPZi%Ljjo)2 z;Y;0Q%)HOrHFfIRACp%VUhhakj`YLAr|nEuzGG4`A#K^l6}aypXRJ8a!)En8o?7x~ zI%4)=Sf#Lf02UX^cJ*oQ~YW>0H?)6s@(bp>TJ zT7D|K!V$E-YdG>)f7dy%{dDOqu%Se%)8IFA32VKKae>8XdE0W@LUH*6^h1g+@x*qevD<`IJ+c^cBU)W^hSvpU-w~n-5t{tSBU}l(`E3<*p+n= z<}GEaye;!|utcgTzp+&bTco<_w2%$`nC?{I)pV~}&o?Jbi-b=yWVsK6<(|+zH7$zQ z*~S<-gL|9s4!Ap&$a zs>OZ2_Y5ylG)Bq4&GSYz6w1GS1>04*0k4{?3302@i-v4j#$V~%`nmiG=W z({?lbDdeNfX~=BM5!d=Maejp-2k%dKa(gx9!$QS{JQ^P_|NMr9{kBZae%7RBZ$vwM zh-$-;n?&xvEH1(I zHR8$>TyFy>la$-9mNii3CfZ{j7Lt$wuw(bU*U^_d|9f0X5@u4pYzH_m6#Y*-Ks>m4 zd+Y!~q4h6zfbVi=v-bntV**D0X~gZM1N~q1K-OqtzZi*mU;)2)7KgY^j|w@mxBC-B z0sDPD{Ga_wjK-c=sz{q&tf$@n<@%+>@E2mqNDynW+b;&w9Ckb6QtbA%RSDupZeq>o ziMv~e-9CBQ65wmq;SNvu>D*>_EKnS`D>dvpH>a{=@OcdLKC(9+NGbEi6oWUWzC1yE z7T%<)@;2c4Fv1pHixF(<_1l+S)4jboRT4l8Zw&*ruXwQgiCl*U2ZZxhD($lI6CDv@QQzWltf z+z)^M1kxj3M;&@}?+v2j({lK*!Fe`=P=TggcJx~Qx8wuT(AW@j-q%S(Aa%pfAE4h1 zcl7%LpQFvt>i%LsO%PMuG*;)yqq3&=IYVRhJ^V(``DdGJf~b_QnJi!P;9st(?!HFW z!MU)H4@gO<3>PacD~tAf^;t2n6w$ZL>*HOj6xpcVF+*xav^H_xZ~e$)5o z`9bk*2|D|F*b>qe8v^2bKRE7XuB!iQT#u4D63+{Veg8RLD#S|}4}R7w<9ga(I1=9) zF`NBLLF1ZuDHDLYqETxGL*l@z7!vj3!~l)jT6xrlcqtRa8wkB7^CKpRePn*b1o0m5 zApJWpWdh>JH5j$&uv8@=E+)iFDNIjgcQP6lZWj27{?{D-w)4~9DK_l9VEI3ub&K!H zvmTcI5(7AVHhUIx7`DnHvbL;iW^!i0X1>b={!#ty$u|tq9wDZvOfW^MkxM`wnBd%m zou(bRbB(}P>|^?+9}?`p4}yoOcImCsxv@$c*kc}1U4C&n*vTrBWSkFicE*E89&IyI z*$@tt(^_B*BdX&?@Gx%EHD&d(L_Hm(h_ND$!Ty?%Kv_UGtp@@iUi>1sROS+)41?bV zqPq8|#0%99Ua085%+HyMEH1oXhlo#_KGoJQ!kD)$b>v~{)Au*+B z>=ZGmPXn`7Y@1+~LaZp~z?*XAR|(uHK7E@ov-?-Vz$o`^5HEau1p)Ju(AB!!M1Fz@ z?n|C6Ei9$n!~L=A!#$Zlb6mFx6GHQOPeE_n5Qkc2*Jiv^+g!cJ$NDUvo!@&d@nckW zy&#`UJJj{kgN6t`uH_i4)Eelvgd<_G_D{izK;;py=7XpkBm0GEg}fi0;4Smny3_L& z#x3UQe~egm+8ilI`+RX;W$gKeSSzD?$`^^;CTf0O@& z8)`Sv-;om!oq6c)5Anes{4CCM2?VfTTj zY`JXdy90I3MvdPLkS!DjZ4-JiE-$Ft~(@Le`!YR0jZK9 zPvV0nLrciF#dIwHnELs^)Koc63vmsGP+rDwI}iM(mFM&$;NIH}E60lBG2DO3%@`0m zd*k8BTW}y}Hah}y;p({8saO^Pb-EG1*?syqd zc1n22e;v@N^h;-uw8Gu)=n~QiDY|4NdOoUQ2=cs=PS^}TdQX0vL&C1#5@=?xJXvjF z|7BLQUwYN-F1$!SS+S2&0Rt6v6$&aAQEd;xzP$*0y&1Xv*o6m>Ph0Hp7nPCqBwB2T zU7(=s7Ljoi@|Sv!#@-b11t5WE_WrLd#s1l9l<`e0EUr_;bzrX@EEWecOH{5Zr5Z>S z#Ge4?qij-DhG92ml=CS3k`~rDQvAUm204Dco6YDyZ4lQt6hT+HOO8H?bM)z1SEu4Csww^QN|yY9rpH&{bvseLw}PQ%vO_K zVG7#jEc%*xb3W_v$ZZ2osx(-#^oTX1eL*GqE6N%#TV!aS1;y1EwRa%vE?F>{v?+-G zOoeR|vk>3M_-RiWC->YN{3+oTpSF>;O`x4HYUq^IbsFF&RPax+4I@$3bKux+6AnmG z-58of!tskeJXFK0ENoUuD!U)^L1l^;=eq4J>Gv5I*A^zhI$6N@g|CAL&L=NSgEx>d z^4y0>liHP9qnrhrtj_Nv_pz2$9AylOX8Z1*{v!R@j+yq$$24A7f!9cPofR6dE-%tq z0ABctv~N4Pi>LYIl%LIa@Jd&O;!QJr1lW5?ay_D;L!TGEmj+H{1~KVWj}^thrsWN~ z*9dL!Z}*b#_MLlwy?4-pzb$xY!LJJjL2CGg^TAleh!JZiX0Ms%(HG#GNiZ50P7%+0 z30YAIFK-q2*}eeslIb`kMN$3*cyLC-(?_jd1L-F1u2?gWc`-}2xlCBwOcCx;*af6< zBn`9iZHjonOTB{~7xf6I!uTu0I+f4Tw|{!Uh=6lG_om&4nyabZ>hII#6NBtZ>~_Oi zh}YD3AAFh%$PxpcNvr|atO7MJ(9x4Aa5N~+3#Khb%NvoWbYZB~58$^@dtW+Q0DgeK z2aNaE6rO8i9k^;C*h>-Ds_2eu)!EGWK3F{93+2qX+6MgCVDMY=HDx5fuU;1_yPlW# zLT3C<@-cksL>{Q$Jf$2-A1_+uNcu6bgJnVbJcu20h^yFW&fk3}uF1eFB%etCuI!pG zm)4_~>hj=yG*2*7M%Z{UH?(H&Nx(JbxEEOEEoNAO`#>K)<2AwxjJ!YP=^W2P7loWF zN0#=jko0tJG-Z`di5Fw!D1TyAi5KI0@)XE^RpQc*;L@hWa`oLrQTfD0VQX}4V*-iM><3g)jT^H_*m)M*)T@%=^-|v^rwi!nL_`XtNhpK9= zg)WEs^$g3s787?!$Y`frYJ_RXf|u&BkO{n6ylaP>ygDJ9^C4kKyFuQoe^-fI8mPAp zV@;<>OM!&~ltpdA>%?TPfn^6CD-kv{6Ut$ODUgFhF+V=MU@T?F8j+8HY>~=R)i&7{ zp_wQ}j@QFx9RzPFJalhlVP9}3@QaED#VbMaTjZ^#Be(e2x*dh>4vo_YTL{oc@N(@A zDiK4XQx|j|zjaILjzU)(*(p~qV)Itd|0+j$1lR^>^7~|L1?2a1#%0jL;#mK3^GdKI zhb&>yvehQadRchPyQ^@F!#M4fR9Qhb*}aptaG$iMm1ws{R6Pm{66@-#h^#sSeoQtk z2{D$?$<`;ro3|RX=CH61nez~Z+ zXqJTmHCUNPa<^b6N7aTbN38vju>3-dY!9FquxDOI9KfsdS(3TiE+hBqeidx};0iHD zaX{~mZxb#c@=tHl!D4${_*}A;)*~B%$`mJF04~A6Z84t)Kh*Pu6501*`%C3?4n5Zo zbMZKAkIm+CbBB4LQ(I?k)zsy*DqMOtAN~o+GXuzNk{(|No6TBo3;#N_lzMZRGj#OR zU^zAoUBIXS9qkOEO!6ihBm0`96p>a7d~O))48`;SQ9y?<49bQcP8{XLq_3(=L|ptY!eL2Sc|wY; zfb0Z|2J#npc<`iCG$nBG*6ZYKKFU#@22I7dWjPOAz%1z#@iw3+G|ZsKO5rVk)KlgYZvF#{{(31N{(-%2H}cSa&t zT*kUKWca4q*d}Tm*I{J`%CQnL6dNAsebSpfrk3mY{qX(WV@JkT5oVy|9o&b*PhGc+=uVIptjBdiflHEKQqclp$Sjd?PSRasY(NCPYYFN8pfd`(@FW3iyv)d%&>iYXBCY6w9(;T}D-*%eL0lnEs z-kN|n4Sf{^roTodSjVmb^bQ`c>BvmGW0pv0w^$a@12y&N& zVeW#76nl{;KJ000sg^dInp)|<`{AMQQv%)w+tWDqXmL81E8cmu#1c#-jUXNi$*! zB~?l+bQRdjgbmUFdH2I0kLrxE!1E#QG7Ig~gX235oZ0`jWh5BB>6|0mGR`3f_y5js z9{{gYNKXi55xEg{Jp*01W2eSg%s<<_dI94apd~+>5wRQ!TS_T0BqJ)wsJ3dlqm6>V zc#`Z_G#TLMAQbB<;U4UZC=%m$E!9=kTUO*%WxZDRpUT?sZ)J_?E^7|k+XwYSGMM4I`ZZ9|a*VF$y#Xz!&1u5k5&3jT#=CM^^- zYqpRNX{CdVPF z5D}L&Q^1vQk0xZRsp!oRMOyovQ0(KxSAYSW!JHEA$3A!zEH#hfa{xXc@?@5hrWYp; zgbX2GggekLvi*e_QbH>g@eMrRym#?2Au?Fcha0yn*j#$`laH65-1i$j`EcNW}Eq&nzaCnH|)GLT}u&z^-*}QZ%!cQE|a0;$UA`bs*;yqQ?fS)D=L;A@_Ed4Dsf#@=u)q~OZ|I=;)Lj}aV+B{Cbc?$KgI zRtIn$Q|~e;kG+3)jKVuc8tC}ZX+;8B*@&8EAo_^c**Ece7O%I*s$?C1OiNMerb3lNS^D$h8pz96f>9+-@IM?ArUkZ?vUyu9iX6r9 zF!VyWQ``MZ0dPL(5%e4KK$&H}(mm(e)$BpM6uElHE43q{WUpMxkU+FkvFIOVwS_u| zRzAkMtP0p00>J$_)hIV~{a#%A5nlPoCPw&ziRP!xUz$UC2O(LQV}c5nlu`I(5G{4) zUK(9~VQAp(1vKK$33cv_ztJe_*m>9C zT|*W(Vwy`xKqSavA;PV|yUrb+=3M+l@z27;?r5N@XuWRqCLqTAU2m%M?BZlwG_IZP zPKIaKC5WD6TyqKY)`^k+ivR3lgDnBSPjnmP-_Ihh=CE*5axSKxoaVl%hHZ#$OlTSd zi~*B%*rD&P-DBYUJ1l%7MdSS|iJq}s3NzkTOYNEm9x+O@jF}Wai=(>pf5qFP@I=R@c=@^~J@L5WAt?&)4@g?{e7{=85ZYrM z6qa91miJgoR$JJQQLkUlQ{6so9tO(cu{4CIxIS_Z+}BZ_At`ip70IE9x@HzMg`JkTf|Mi zf!#-%g8k$psi;%v98W+mANj%;*?nYgKr0`~^OJpp%K6n_Gyp53Lnp6_P4_W5pE^Rn ze1x^Pe0NaXv4<=_G-G49m4$?OQrb&OuPZ$y5N}0+H0q9L3YGSyr6Y0VL!YLONi%S# z?`83{gaIxbfYsAMb6dN~DYPK&UxE%p>);E`@i%VbPDqn066LWFO}VOp4i3XC6Wuw` zDwLQvv=gE12tn}^*pHQH)$zfwtNN_Cy=U$Eq9TOPyi%@OE;k0Ft*6{?-6$14k}+46 zTiIQ1?4Qa_>MeIM%DrOyKP6m7{jav!4C*r*ds)VnpbqgKE1H!1l;BloYnVE{93MMD zZ<+J$996p+S%qteMg321$0E zzu@Zi$A|XU462@13$@AGCN5uB84kV`=xqDjrgcou`ZwnN_@OM!sd{& zD)Pm4uewGn|MF6x(xBb;O=snKruqP`Ddf^p_MeYyilBT|O&U(yaU14>X5%{XAw+>6 z5`OgmdOvo18F_qo)m^2UIt}t|1jR?NS4M{Js<^GiQpWf+=-6b%FLR- zyEc9{d+tzA9LQd1-!FF!lXpTQVrtg#tJ6Qjh*(q_)_-{Eb9z7u$fmbK;bqEq6uKSM zhqI6?gw4f!Ictq~8d9>kqe2iCch(9tdItOYr-hMrlYI1#Kz>Ue&yHfPU1!->KPfzi z>?PPm0Yh{V@ybVqH*k0Iua)oY!zG~?F*jt3{t!NPgXZh?g(>!akP8EmZ9A@nq6HBF zhn`5oUN==N@#yPfY6dwb4Z1bIR z-ti*V#j8(A{7Nh44kTVN#$H9FjCqT-J|lL)lcKaeBOdcB>!9n}m~`a^we@E4-N16% z0U%qSow#+C%my`(;J{^d)VUSas@F)%jujXAuV~ro*QjT%7catU{&LrHx3c^HU*!MG zf%`aTN?Fbfn`O_RHu^8#lu_MGKYfB%yeWyWAd@%cknntni?EV1&rRkiVvxyPFUQ6x zfFn63{02#{GH9x`R=UT2Agu4(l#*GDUc4ZGIt~d z;%uYLusPjzOxWVn)%0+V5HngGY`$7&I5aX^$-`m&2(QjFLwEKm@av0cbDF~@d4GRU zn0)SvALrK<7WSjH^I7p{HEY1QCpr0tAV^Gqu$cj?t7|zbyz*)JB$6XFTz?>hV>o8e zisD3gE?|Eg8|Ny9{2GIO7SCL7eg;f6XBHyz5}t~+@Jp{T9~HI-G@EE@_N>yA%|41#m#APt{Ry04w7w1$AMh{~ z!@6hlPa&*W4Yy=kQ}Ytk?TO;&5L4KP`+W}TU>FM?lx%Udrv%4d5+4Uc#8KE>F)Ql{ zv&D40TQL(HXorMU_|n%fOj;CpYz8^m>tGviVupB*4_=R0m-4K-!JA$vOpvpzex3Yw z$LGPmD5ofZNCcS_);dQbQhE-O&wd#3-n$UlPOM)qlKRiybf7leO6G>MK=sh#`ke z{K==To5888hX5m9IX)ZM2GWcUVP3+r<#Vt7*{t|!FJq4#!eB;Ov8P1uyaL&+Z8(T5(pp=XQ;`+nAnp1i z9A$B|5gzhG!WhgS!pQgdP7eShK**oZAGWZ|cFs;t#7z24e^(J=UAUk5_9X44%IkJr zTKJg#H_c;+CP}W-vtz%yH25*!rL&Lqy;K=qQy6vRXW=biWewaIG0v@Vj+A|i?D#R_ zXHwEN%rLQ?S8HG#*5vr;i(Eb~s#Z2#b z@|LiwXlr;?L=`d{RsAe1^<2w8#4|27d=4xIr;!J}pm8QQhbxpWPWv4Hp9xU5R%Eqm z8jP`B6U+ny>rr8`Z~9cqe$^k5j!eY_#J}bTnHu63NyKQ0ao4mYHpJKt3dzt9Vj9@d zL9rN|c#wdDnJnENHX{+O_PTp$Yuj1+w#ofQ3w+`u9QFy|_&h4a`O<9tVH4H{(;6mo z2L&;ZhO?e=_qUC7GQ)1NKfoh%S@N(c$Mm-sO>ztePv>~Zv!jCGjcFWa8{BYI2>6G| zR~`)v!V-+NXqAn0^wzb?a=%Ga8J+nb)~*kgdJMpc!G;IhmoS?cbbbYho}y zY6EQMdCbpiew#o#C*~*hnF{0LyX6*k%n3C+AFrqIdIB%%%WaqApJ=~{$xv7mWjlkq zGS{YApT|d6tw$d=d(V{o3g!|+)nmnJRq0jQjmq_^4J&_o+NSQ1q-!>fu6^2ebF#W) zknc5V09gHwmrS?i%Fmk#Sw9^$ni-gGoBY$-?T1QCc#?wxgB?H9F?8k7mi;AJ^0VFL zp7qn4Owzfc-J?lb!$n2TxyEw^XG#* zAP5<&;@)>g$yaOBDRT1;j3l4u4x0)ktn;mcU2}+iU%N&*wfGiEHS`uqH?Fp@zr7YU zysx{4R&ULeg|_?TF>$+paowWYK9GccP}{z!?L6FJA^N*ey3ckG#$mZ#v57IhU|#GD z+jNIqv)g4RI@}}T+v5J`BN=O9oMX+DG;SHnr*UTTFRyz9Es)fZgfjb~%zTu&%$Dy= z#w3k!U2_mNj?pFs`&KPY@I|F4|sP2gvOJMoj&5zdm5BH3Sy{`X9pQerET>(=Bef&4!x zg!@ZS;-+8`-Zuu5oN1fV!Dytl>$qIhq12mJmz0-g)dE3pfd45M`1y#Yqe8#n(>69k z)$wdl<$M}D6;;QoV1_eys$P~z{rD8*N>pi>@ zITdTd=QVgWA5*iR<8>IXYf#qBGiBX<`rn(MoUZ1coEm9(syLdvO;XA+CZnxicQ#&# zNrye0D>N(1+4NQBgV;;0DP$c7goO4lp#|$&Uh4YLi*E%fc$RASlBpn&cU@GW3_>Nz z68j!sN+a2b5ZCLSz^w-R>``I1dk)tZa}oPJUj>dF6uu3RAGxpn?x`s@FZ8Yy#HCbl zJb0mFZ7H&3k>CZ3g=EQq9&-@u2kRs*#uR+tCSS{RtgfJ1-0Yq{Rf#fsR*Y2KUn$?e zMZUig=Op6(M*05N;{HaI@q%1Nv|SDTHwBXYdZ~iTYP}wIYhwM^B71Vr-5!?DywRRN z6}Y89x!WBf-~V}U1n%4~pq%W)n98_tt-MO?#eV;9 zpNI4~6?8WpUL%jH*+_i;d<41*bh=u6K8IHaIH9kZ&SVohCS)0i@39P+haG#rjPirk z7T$#XV6}x)?F)uz9RWEGk`TAw2h?1lv#TsDN8=b&!eF;RZF*NA66+-CZK)#oVQ`c* zozY$vHT?qipX6x)_}UQjbNS7uaE(Uo=qIlwPN5*s-`Q72oI%zhd(|*;yI%`-65`i+ z-xGztJ}AU`qfkygbisqdYbY%sZU{0?CNmzfK4ayGhXX?Wd1BsS_E0OgTx4fviiz6Xxhn=&5i6KbC`qJ{{st#PY*tm75n_;IzA2gh7~>a`38FJOI@4f z`Y=pbFaDbHFP}iRvCtjHi$0upP#7jZ4YOxX@AbdR*FV~QJ?(J`G1v!a6zn|S_*D>m zk;n{7c(FoBHDT>oHu;)(xTUXrgn)6e}m zFUe=9NjB#bO58o3e8_FZF5!+Wx=Rivi{gZKfB``>xdQw2Z$G)o=0tS-*Xq zKmPvb`t9znpS#!d9jc!TeoxW^HQaz{&%sh;#eO8qxdZ-2rs5P|fH|^XimV?d{sY-m z4bh=7uBk4P67E}fPOqa}WGgYUgW#IWho^B0r)shz_L0VVo0l08cESKw$zh16G4R90 z&2A>kahw^Pk5Nx6*&>Evmcc&IZy+*f0s9kvEDLAVx=m)DI+G)PA4K*0& z<*;rW`=1gSa(Vy?Z^wM-g>SQUDrr<-fBy9Rp{tl+G5Jr~#V zEm-%NO4?V~a1kwdu8PzAJv`w(RC4?xdz=|@joo0_*E#a{F<7Bg9lrvlIu|wh2e2wX z@v4sR1FVenD1tRuRe7}U*YHYzEhQLG=2cmY^Bi5&E{% z{M}}}%7MJX>twmsc}%>jPW8#XMdd=|6+`coW|aX!5$PDoW)+h zh~mn&H4lWQ5#7Cl?`}#?5B90#*5@e0(7ot5U-ew2!p-+1#^-aIvCGvVA5;x?Hopqs-lS3 zjaB3FeP4DB$)BLoX4Ui5V0t-ss8Z zG~3v87J09N;zI$&Cg3!|KcN7|>UNBxpy-EHDkyq<>}y}b!a81@>`!!RwiCu|5#}(H zN$06HagypT@EueKkyV=Xx1SMh6a+iYaE^f$lg9T@Sad@EgNLWm+@qcPw#yMuJa`ir zi`U0+nhk^#NCum@y3$=7$v?M2Yds}>vN^*!3lYUYKRuu>Rdvks-`~L$?L$tL80*A- z(bY|b@ke9eX&wm-zC%)i#e01EOzhyO_oLkNY$d>y#`r9@DDlOht#}3hY9V~dXysYI z5sUFqu_#D$TWJqNW^uh(=(%OeH{2~#i?KISZn$~MEhR@J-Hgwm*CCThv(Bo*Zt@!d7ZZF1$`}H9|_ji;c`}HH8{3 zx-$M~H1<}?+GugPTw~p)SJNqnL$vq-Jh7@xZNi7JFh+@a!EOEC>fa{m&CKwO6CV^t zSH*199}R=- z$9@A6+SXEeuAb33XG^L@!-1_+b<77AcwN`q{@viPNaxM`D)>!VtmqcM8A#KRZx1=@ z`57&n`71Hh>$+a_v(9~;k6$GDMwv@P`I42^_?9F*$y_&E6DE5anOFPs3VWfxaZZA) z6@lNWwtkYb``J!-DVr(r<0?v_S1~>OxOd3>xckAHgfWX%>zU?gtV2xZIN&Xn)|;hF z6LHuo8>e4*TBm|EZug&%^z|z_vOcTrGw@uZcLttoj6V-7ltq%x5E^g9k21qM%&Dxa zYq9Wef;ls?a(y8()7vA=^LbU?6}CvkCR-Iv$XftBF&{1jEsO6Z9A(+>X0~1Lr%(Y+-BL<~quzw~1YdjL` zC@~U!Ew9HK2O*tuu|n4YHG>rzSq`sWqeJ?Hikn!v4((|L4sk5MBlD-`jx!o%`4w%%(9^SQ3;AOE3zZO2i$hO>Il4b^*_ zd@eEDJk9Uri61)#S<#H8JVujk5?HH{d+)E9fJ{WZ($m%mv;M>Z6!QJ+ciV70Brihu zSRvmdbmW*^!w2Le?Wq*B=O zLUR&dFXL-t#4I3@=}Kjt(V|DR$56K3rBsAs|J1N7Q`}!pYrRXOygKSHoM((O($yAW zPKU=&H9jCJai0Nl9&8??>r#+;oiV=66VungmhG}GyW|2P&`6h6chtaox~?nA`;M8l z`4QvBgPHW_;N!dhy<|F0C3m3itNEva*542QbzoOn9vKx=5s|SA42w)UVv9C#h|2kW?IbrMEIff(EjOr!;%nxXBBY2%TO-0*-E+1&itv(D1Z0q?ludP+iaN! zIy7o`oBVXM&}QTZS82hA~ih5I}``?m7ktNxh9 z_KgeWx=cV+WnWx59& zCk%1LCUEsq^!FyLw~^xAL1F}-YfOY){jp-q3R|RD7(9pwUL~;idN7?6qE(N~Y(TVD z>&1EQh!TxW1=|Il`UXFITq+y+4KQ)ob1uW~9(`e< zmiq-v5sIx$I`qQso(zh!P?8_qmo&0IlXbzZXe&s#trK~=<{MlC&0<3q7wY>ECy8Hd zlCQ7@i0|&o9iI6QcX$qdV88gReEu5w4lDk2hsFQp4ol=K7U2&6KH3A~Tk>fCzp&u@ zI&YR^_%Z)|{~HVL70P>e?1bH3+c}G!<{|t`dC@b?o8TX)!Ox-n3L-q^Ji)Yr ze2V>MF7zv)YpXJlN5p{mox6Rc1(&ZT&tc5I%4XG8%1sc%kViweeGT4U!;AbGRe0&Q zs?OuxsWTlHCiryVuTRL+S;4{Ph^R|WiP%68+2A(O=Mk7;ROeAztd=r*#}hK zwk2}eKnyEmz9n8W@b01KJ_{PlUTFEX^bD`MMol_cguZ2Y+DT!HcW0rv-%w@&Q`U3L zNudsMl5lvW`w+%&I`06hklGf%sfO5Egbt6oZYEYpW{_r^)~2!Q>(m>S)r>W^jT1)BZx{Mp0aD3STW z@8EMeKEJ@{gZSKw&vKmCjPrPWZuJ^cVqCvtgyipT>*!g($fvumi|k^ww$mSaqDYZ_ zO8TyHJ^EuU=Prg_SdQwAfp=JC%MdkQ;uI{%RpY%FjO#!`|bVU=Ji;l__-kACEoIlSz>=#))ajF&Jh$AVhh0O&V>c`~2vk zGLf-yp}v7KjAn5kCND&ct>t|9!gw+0kEun?OyD6{Nf@^ug}|jy1}SEbobU22>mhm` zig~lmLGF$P^VuK2Bs?^%a%p5!d_IWWVQ9-XArtukXvIK;n2*g;$*V=k3Yx#0@?f3; ziG>N0ChkV$Z@oW+oYjJ_h+^|JY1CKu218k{j=_@5q!n~t8p#6ZNWI14nYPHdflw{C z0yRK#a^r0l_O_&u&!d*R;ijEvZJq4>Bw2q#k}C7S)EeV@#IN4CxAmPRKuS!@(gN& zAAJ%Dy&xMq%n*v~N5T0UWlR!gTi8I6itS%4_X{M_Daltckkh{w!jQ$jK^EJrQmu7S z>1ymA8ADR}qS71-J0!Ag2$&as%Y$DgEU)5L=SZxs7xMCu^(e_n2U8yX`ex>6s2@!peA8DLNX!lTkBAt4P{wCXAN1WCt6e!*T2JL;9&f9v6WdlT*9`drQW@cId_Kk!=Btc1kZU=0be zYA11uW{Q`lSX{++mHb;O_ZrS1E6urJ5=Pn&7h&ax-m=sk1?wEL!YFb$>{N3$c9&s* zg*Thav4q$4U!L=jM>y~AiQkd=0{0vMw{?7%j0c_cJo;oga!lyMD2L3T`zb2t!TQNS z85t@lFViVLl#6MG7=X1nLaBidRoS$Oc3f59P@NGJ8zK2;BJ27tu(FW;@=s~mfJi$F z-1JDqzQ;%;0S2`$xStvJF9-3m^+c#JdzOaeBXYlw0*XEw^E4z2!mMQ<+fggBxN&yE zI{|^BYg~vdA{&CD*T-y9Lncp_GM-=%iG0defR^d-k%se|kNcS9#D-wF^PsfLU|aH~ z^oikMG7Dzz_P$}IYoYD-bu#ydWDO9jm`THt&4sLw$ArOHAwtrIbb*z~#;L^YUo3^e z-%f1JdV3UDe;-6-WDr@74@#ey4oV*wtcA8clemjV|9SRD;ogfqx#pk0#lp77tH3=P z!G8|Pwm*qU{|Bs&;pPcEcnYlR5y=^0E`sHt$gF{HT8SJ$WH&g8ymjhkrZ-a809}>l z?N^;Ywoib)P}%W}mo?@+5Lw4=99_=V%w2O}=-Xq=@(X4d3_tpXcA_IZ1Pdz4zI}+Iz3{ zu6Nl2hOgT0b}Pn?gFY}r`puUQnKmA={1nyI(87=D)u&idjc5Z5^l&j%f?`CosP{!k zFLxy8Cr>H7{`4~VZ|z@^r}7-t2G{9}I}!?jjosX1?^EB@Cw$PUy0LbdwuadP9V}+d zG--#|0cMo1y_#!Fqax9XWK<$9V_QF}MWM>JM&!SO-3mt9`? zx*|r#>eAC#F|ZkWrwX&jaCm_{f!3guKI^(mw!nUenTJ-j!C5pQ#domwCiwr)bty86 zoMWeG%`5WCc-o>zTJ6#HQuur^(Q4;e zZ;bJ*H_p;zSecP|c7SZJ{Z4$YGrO&QxMnwvz-Z{5G{^_mm7yjV?%jbo47kVGEhKe& zZDEHuVVy7?Y>>UGn#7~sv1O$g=L#3Go;`->BqL;P`BlVe0sp_a+s_UQcYt32@AUwp zd`{*g_iI~U1@6e{{P_~a9uCfcZ?(k9YgDFT{`4ZYcdU{$-ub9J$tqG zHhxZs?V4(p=AZ@OczMUog)yFAOSvUXhQ%2H%$y>fY5%2kd4A#b+NBCalwO_}0lw#_ z@{{r3x8ld%KZpMNz&nmlw(o{l=9BR3QK1d?V`VxV`$9|SqR^SQy+zQlnT2Bp9rjyE z_WN8IF^B?~-TEH2;Kq87B09VE0RI0NVvYcO8$0)_mV!ADP{DWrR*% z4W0JuP{Yaa6MV#_7&`Q9gmlnLWqzsjUX=Nxr3HL0N}9JXLVBsYP)25bD}q}?F4@J7 zyF(?Li8JH)-BMNe>WM);djk~3M^G~gmR#8 z6CpJl4cgY7K1I61!KUk-4RvGW_?6#@Pj`%#qkn%VmUKkRWsjH3{#SoI%Kk}rG(JD- z9^rZpT9m!p*IgaYY3c-It!Ay~aSk-=F6F>Fqzs*zD=RW#ia@<0TwrI4W>d z;@FO32adOJ*m3Ng?veap`yL3MncC@v*Gmz#>0_M#r-k-Buma-uVf;R5F-vE<6AKb1 z6K}Q_XODu3Z0)jO#IP5N-}1)H_*Sez43fb!NK(If*#w^@zjQYuWA0eS7{NdGBx6Dp zlNoEhqj8MEF&0NAj&U<674lDDlBY#I{?mQzn2WU5Yz24lHrOU&t5x=Bc-Zvb#`I4S z&LgIqs+ugxz(8Z>P-CyD+M?LZV*mO3e)Ei|fJep|F@XK%8N}qq>WkWE4N}Dl0Z1~t zYGYrdScaAAOI@036&OTycBVge()$pN@DKagEJ&b(0bRAuuES3D45AWJ%8fD)=_#Zf zoTY>1CG>pH4*5L%y}@d;Ipw$IGQWAV%p|wl zCq2&}0h`6Aws@YOf6CAh!;aOsbz$$jr$i^8{g+#a=g{r3H z$t8J>;)u(Q;+V^|{Fpk0{auDMl+EJby`?;I3M*`xh2w>=U|#p<{a~Az=Mt2|DWB)P zJ^F(S;!3d18B3p-^Rtz`D?^xTEg8AXirl%2MfZCL09%3IKvVd@Vcf5s11?#~e`bqB zM3g2&&ipssyEqm;zpRN#4L~QXu$P#Bu?5R9$6IXeZ(CfKQ8Kc4fw0VK7iwi~Y?M^w za|`X(4BN<}i#D({6$SMpZ-T$wTol9xtO4R#WsA#tEvJ`bQC)aRMsb0#z`8-Ohf>J) zwF_?RNbDQTwm9&d6dxkK?SNFfn&SwQXA1B&BIY5Is)^1o>h6|fzn>Eu{Zr%!?&mPSCdhfG$ax>f zu0I8N_v%W(XLOg%g)zHYPS42>EZzlR9jH zZQ0%gA8q0($>Qa@kZ1h321wFWzcdrtk_`;S%^Lw!HgphjjOEdY+jY2XqFinT%Ke7G zxC(jnbr2MDpj*Rf5ywjHNP{HYa7UB)5cJRrpi46OCO!EJHGwZFSb`D!F|0ix z!z{|O9g8{Pyuj_*0WWvXo{VU{g!3{3=hef^;{+<8pSJ0^Kn0CUJiKXByTgX`hNr5kRjpR{qQ7We1hWk7 z9Oj}=jcX}BmGUR+qS-zkk>!5rES|#I<6-0dR~#qJ30PdHe{L&P10O@`9dBcq9Salphgu8FW!;nHGYa=~j+{>`pf+xkBS$_!kkQIy~nACSp1H&ry ze1(I{7~)KFDY0AgOErGn6$5TQ+%pVZ+*uBleEu~*wZp^E&ammp4Y zDwAJ&nVw^C4si)zD7NRA95&k^TO&qGvMXF#j8%dD{6MTo?!_u<09GXFSdrv*^p{s8 z-(Yo~4yM<^vEk6A53q+zWx!*?Ll^vZ=o{j`j%fRBuH^hdK=m)rOO_t;8S+i|@0>Ut zy0;{`hE15^3sJu&)a+&;{F}s0U;t;*3Zan*G9Wv}%4;*^*(7yR5u5UXicQ5~!eI;@ z{qX&oM#)}%2eI7WSFxS%!48gZ3uN4&sjt;)p(`39WWZOHTk&q)0C{D0PK@gA7iw)C zO4HNc;86^<_B81G`?_*UCJ2W5H6`KoM@qPN*OVMCNz7-;z`1}P?deL8*GK2X%V;-R zA+?N%$NOAD3)2c|2;RR*9Mq8%(yl}}bS{o(Y~Ufwptu#->-v@aZyDJw3laN^yH~q;K3Imd#4Z+V0`%)hvD4<*S+3!BQe?|O3kKRZ+fvG zSW~td{;)i|l@Lo$!(L0)AqViA-N3W5!vvmlc1uUQ?&KeF!Q#+GybkS4zJY&Nqv4?Y z&FIrjYG_gYK)W%6r#NAwXnh#_72Y*4RBuat148w-2zsdB>uq6&S{^0ufFUOX`}F9& z!JRsgDClPobtlQ_S>S+u?|WmOe6CJ?y#fxOyA)kJV|YzrLumK{zHTgZl>3 zk(8D}Zh(KP12Q0}+aP-~n?BU>062{ggK0ATLbJCRydKb;luhS#o1sV6(B9(pkOrkt znth7~rRt^z#Si~5>~(i%!xl#xl<&lT-Y1ifJF&ZTF*jpV*M%^LWwja8Vh&LB5n_-a z7Ln-kGvdo$7TUvNXb&@Ivzrlx#EX~&;w*3=oDm=ND&$f8A#~wFsc8u~-%+YJgm8I8 zo0jN^4FO{tyUyLZJ=wA?QD<*N)Lsss*I-NRjk)1q%#OuaXU2S;pb^6OanPi&=@eI{ z7VFq=#lg^clMionD8h$Rbh%^X`g}Bp;-CaAP-nz(-v6{fZH6Y|jHvPo_*8iBlu>>c zYL`G;c>+7`QT9az-+K>kBMz`>NB4hr|y1*Le`o@d-&$B@Z7DThw(wHEC!OEqgG>(o^vBGL_{#i8)Sxj<^&D+1!Xn z_$2JE*yU(9eV5OZmUSc~VIBOjm6gO7yB_{T;lTE+x%7?qa5mGgqMlM>2Q5SHao>Fd zS-#7oVqWW$3kF+;V~4!dkU}vdRg`|Mhbes0!?5A!7*{_q_A};paAuh&0PQNnafqI- zFvBY7VpDtPMmc)RI$lDUhf7cTWAh{M-!~%P5sv(i_?XHx{g)^~JP<$uT<5ku9MV2J z#a~)xhvwlAhAP>m6N=ci!<4K6|BuBH138)>>T^AIdHPK~kADCEMMvL?Z_sC*1IFLT zH;QUV;h01EZ+q-9gl~AU{a)G51p7Hh(j0a**x6LD(jmf1^^dkAh8?!*m{J3qrKn=u zM`D=jCc|Mpp^JX!hR^oevk+|vo}ZH$u9bx?NDCEhhR>Mtt@sb*tZL1I^oGr+;q#mR z;>1n)VtafrZ|nyGV0Vh*H}S+0VJTI$ruxzl8%+U!6UAo2aE^qXUaNtv#xq&Xlz%I( zge_Hx)lv-hjdQKvip%^nuv%hTU-MzlHzN#s5e|N@3Nv1` z)XPlgu*>>ZydM}>N-JVE_K=ou!JU&Yr=8kr#u}L0GIr73qjb2)@1TOw6I+C(SRnVze)cY5xCj80|>#G_C|jAc%o3Iei~+ zq|al8_TOQ&zigX+<&PNXAV#}G{Oe5{eGmiv0c`Yymqn{<9oRc7fukf1GxW#)3A_U6 z1E%#Dp(qf2%xL_wE$zxczLZzAe(TMKe&hsDM~c?NUW8lcXIq)kBTC?R*w0YRR?jZR z?!HoQc|&@tgQ;e>oe{J}pCwE|R4zMwtKXWg2+dgRwoJ0J&%Ppl0@>ItjqnmvSD8wH z@9Jpma|u05`;!-I!-Z@yP{Q=5b*XZTruF znoHl+4+)BaN%HDlF=$qa#)(~q0{y@^OF$1WDqIxHY*Q(%?%6?+PD4qrIz=j7XYjeh zsI(`74e^Tjq<4j@%Ek<0THh+&h~77uG1$0P7kr(TIjUgsqP`x$uW`-=F1EUF30FO` zp2L3UG!UjfAjhmOMI~fN7`si;I>@W2ZbsT%P2b{KRs|5%><)!oPd|FOYQ;8aY<8Rx zK1*)7H_~A{SxS;`~U>3C;f0;F{0joeKM&)Giirs_O)7EmW4tSw)twVhb{6%*>@ks)5WbJ4br4KB)31HmRB1+BsSic0WPdbnx%omi~v3sdjZ&PjBEey79 z4`TI3F=-2|HCFW|4fNfcyrlJh6>Tgtx4cTZFc~`>k6jAtxSy9J5^Y4k(+2d@p2^ej zCf5={X;*K_5)_+dJX)JSTU=x0?Z8B|6w1Th&=kfN9g{M;Mnb!#6S?uuW<#Wbph@s zzMre9oYWUHx|AClg;qpRMww_7W_I_CLbac%WYU*lje+%!X|8}CrNyB;iI|gxEqf!h zu1CS5(FAsPJ?6)JH>YEV7frnG{8aclA&k$NxD5K_*v7uDd%XQi$zS2Jr~>lF4l7M? z?PwM-X3E$x@DA=@$6JL|U@_kZ7V{TiF~`OEo*4B$9%vP2#O5NS%v*FxEL~IG-`k2 zpRse>Zs9VN;GG-@EqOpn@6Hg;Jw&qM+zgUJ>^4{rfa0Y4Q0k1{&fe(v!5MIa_wDq#M2uu%e6=%81ZA^w0YdS5nP3UD~TT9@vKg#hSMxvHsTgT$p5XXJ;FKASK zwKqy1Q#4Y49|^=4WWa9Nnz}W-x1P@Js*7>4+rR*8jxJ%#FN<0J$8eXbhVBym)_N6o z66e6NCeK?K@o#o(sD?C*i{i)mppEY3V#mzKj?0PG+KCbQmjm#X9iS-Zs<}_VrZCs$Q+qpnzm??cOqa4BT3T(Bu?uGWB(8H)4 zuq6r?4PWbv^yhLFd?b&hpp--|_vGdDif3ch!CCp3xo=9!Cv-Zee!eG{yZNX*+- zF!jL~W*#DU{an;;GwPM;0QbdF8R+wT=LIa zbFG{;$iqTt?U!n!k17u=I&etHe-Dws_iy z{R3&WoyTaySomX`KAA&S@+^A6dQpr9}YRU<>kw1jLwtg%dRtG#1QUyAf7q^$)i;v{c%wM1J6qO`-*Hnn?htoe9rIu4#`{1w?hxO)>JaT$Z`F-A ziu&&VO*h^MW+c*$|2|5G!gt||wmw(?s3kA`4=p)<%UW{X`Tto*z7jg}(vXh4QFOo~ zU{HzKW+?t$6OMQVAx(HI{8i)mjp$*}LPSLzpngDjL+##I@Ja1SJ%oB&v5a-!)eT*O zYfuSLd)4fn)Hk*xcA|Jb7JY(dWY)7v1-SZ4>^Q|L2*-`Z76bUu%0QDS_Qu>>BQd%7J)lB)5@Un#WSvhfu6Ms#LTsvFv zUXggSb+y4cqF9zhi+q~jCDC0$Ni+{L7x*r^nPF}Jmr7Y1DkaS`G*3+C<+mHstj1l8J0NQ3G! zZXeZJPt@TeekuA7$>B4Z^hMW}WW@E+#q&Ocv&$y!h zMP=*F&+jAFXmiv{&Xogc4E-`VuY7!nX>6%*e(+q zvF`xq&nAPQ+%!v2ZK}emRK00FuPG-E=l8({h*-5&UG-dRSoJPzcs1fU)y9zi53)(C zOh8ZDz#pikwo2VcZxy!BT&;%2TfJ9Po>r|b?^msZZu%~;xF5_J)u4cemvASqb>nEeuUon|(la^gwgZtKdxRFc0;>6*HwHrx za0VnTB0ZII51_U)$hGn$Z$*o!@Ft9pQt7j|XS7ibQoE7HIUxNR{bCrk0oM8zc&BL0 z=Fo5eLr(X7<&IF2l%XD~aZ%*l1Vja4$CJGNyo(up<2=|We#Dq3*DcD!jECtQW$vo5kVrf9yA?F{3r?;-hjf38k-cgCTBSZHEq$S;hzh=S7?kCyNlWtF0=pJgRk?5_|`oL1|fRAW^uIKEhl=*#B2D*oy zUGIv4$Kn*VJ#7g6(9C>gm_LTnbxxP7>|{Kh`LcT6)w-nVfp0XS#eJJwtUtYdPu(jGPMf z#|T&Sv1C~uYTyCRmYZO$1%?|4@@0OLJf=6pUrZ_Qb?dzAa@O;)jY`x9_}5T>QQ+|S z-Lr)BOEk7xeX-cp$8aazDpdqVV|G;Z*OWVzn54!aS!%o(AVw9EV(|SANioPT6^(2v znZ`x33wq>g_70L?k9RObZrn2W2j!Rw`xzRuD5WO`eb*S3w4LgcYCA%ftkh}?`JNsl z;O$~iKhJcNWTUf$Uo%wE9P|LzdQ>KoI2E-i{7ZaNwVL0;D-T?Nr3?F5`7MedZK&sI zk;)z2!PfXsdDF8W`d!}e(2V~sZ#rZx9#_5zvQi5cGwrjHH%eDhFQLfSAG^g#OJ9|bm-Pt2yNWM@6O`0*&(H}_8d7!(T z!E;sVdv=ASNiA|b90hBd=E1xkc`{1gVNlN0%1S$}c`$k^2>Y54p!1n~Y2;8&!8;K5 zrOM1Nmt{#>=T~l>Ci2FHPDj`XB{I`0cBvM6%0#s=NPhb){&9?fg`L#H=xXroX-$sRgSEa%vhR*pPVE%q-Dt+_sPb5TLrunk&%k_}Znw!0&YT^B} zqtP34__#Yff+PjKfv#FvrYaAsR+ooY2lJ+Uvt`*jmr7k0)LWczSa{j*=v6|Ol|ctr zUeC^d*2a!|*{im^0MvZ%;x&l-u%^fiEWQ?VtD41X6g>YNtlN91kR__ssa_gM4%x>DrI35iyU zXfg|FtqA0%08e0KjoL$cUVCWAjTObwNRNXyePl-rqQxy~)#CG$Gks(`Cwb{Rzz%8T z9Y89Oc8=D@r^Q2^j2Y3tiY^wJ=LF9g5sA)P1l@%%)kfEP7vFmIH26EopFYO4V~%T% z0}O<_<};~a&nk{N6kRa(J#c*Ts3TJaqs4_p1hc&4tPv!4TU|Pf5v}nsom3djf2M9M<{K zjfRppJ;sRh9!8mmRjY1LTth0K2fI_RI?|0@y+rI&q_2X1SHLU~GFag-lH^af+sI^c`}c#_jg z1s;7ZO3Y-;a1NC5OkrsADqn)@kzrZRzn1hJ7D^xf*s#ZQ?s{57Z4Df)9|3*lICu@z zqOPcBf@SL6I5zl9Dx10r&*Y$f4fWMYY{oZddb>uJq-LN*C>!gda+z0*tk1B`w>27q z-s`a8<1D%TG9dz7)*mY2>09`Sm65p|^kFWFB>RBZ!NFtY02I>k$8heoA${ zI)}7#O676FTgUf`ot3*Kr_Wi!2Z1?l5q1R7XqNI? z7meoO(klVWXsySh)p-Kr2zl5JP2>n^0c@$3)B#pS7x&kHSZBF%gvKOF>7AUkhIjab zysj}tejd2Z(DPwf&l4+0`}u(_SC(7M^8~I-_g9TeBag0~(DggS*Zr2U2XbyWM}Wc4 zqSJLL9{R$q(-pQ1OvJq%8W*kTiL1vl+A_AMJlC-%*#Ykm#`1Jhzt(8g?8Gx(rR57Z zr;R8mY)RL1U0QGO$>HD%peMDSKqmP;Tt9CXEUAhv^_V9xhJrZQ5P$B3_kj_*TB_Qs z!3YR?w_)^vv4`?uwE7{Yq5tGNGx%-w`qnAp2;Wa6CF!^*7>vKR#3z+Q=v7bK$pQ-+E`%t_c^}h%FM%YDZ#rqy&*}&!r zbmj(stery|51>_JYaC(;_-P!X2087iPmoj3_oafRaiHBL_30QWr+?i)4ENmV9*EDj z?gV_2cdJ9Z+C4gi>NzD|zcPmAHrN0^??b%gIl#&^8N#O|#on76KBd{P6Z*U`$fM8O zwqJQMXK=$A{Y-sX4tJ(9C$k}j!6ns=1tyZX7pK^}b~EEauYkb&z8 z>vZ1i;VJ(A?BRo2T2@%hxa+U*Rw7*{`uf_-hZ*$txx1{;l)f73C%HA~C#|JqjZ)SG z`w8`s0bm*=oNPea)186d@URo?0BFCb;BBl|t803pA6)SD0^g(QfJ5BasmIt0NCUw> zACSHTYk&jXfLSi=qjfQ+6W;7H^54rVbBKTLh=Ip{KCqLtB0ue$jP_Jw)lAIDZ}~G; zG}ZrLGtUpQr6$!3mukB&+AJe477<%2PG%R)cw18)@)CvzCv81td(2(yq>Ht5iG@nFt3)fDA|EC6Z(@hr&y^;)0Ug;ulNS6n|ZE1jz4PYxoLosT0=V!#Ln6X`Wz( z4K589iQ-&1=^rWPmg369HANQLR<+hP9t=t0(pbb9kmGa1GMY}3&dgc4C)dDwLl&*I zLh!D%TknE(?fLf6GJhhX$RRGVl3mjJw1Rkn3&quc?xoLlvmCHkIe&o{wWbmF(7S-M z;s!Tpjlg)h6vmM&6tF+WH7F5%{IH((Dc;;Z*qd#DCl^{HPz$fOqu}@9RI|^gmdq_- zFsGKLGO6@THlFF7`=)%(h;zMjf0X}^k^i3~C|aWxy>p*O-!ZRfhEF#=Q;KJT3}#$o zpIpW)z7y?wAEhErGgTwq;qU)Uf5iWF(f@(|tNLrrij3#ItX1PQzo0Zej|fvqy`J|f zEQpC^)MkV`O}05U9U`AkDAt8dXi*gP3S+ZGXPD8v!dy2wZvwAOJt_Y58`-kGYX}pd zG{xK<-;tHHq=6%GlA$A$Y3a3oSaG67yN! zM2~a4z`0U{dD*#M<->C)b~qn0yr8GjXFe_OTiGxEAW|Jdr=YCx#pl2gOv9dU?cy00L#kp3DBI@5}S}zxaJCGRW zeh8qJE7^(+Fqdp-KM(86->~9@H$KK2##-uXJoTyd@D;TgXz^uikusH=g9ty&NwL>& zH`jbNdiE38lwoHEU)KXtnasd>E9=61SV=at??w8V=*vV80*Yhk3!Y<4%fnlD_R(!F`r3Y(-O`-+Y+V#vq40>^XVjZNOt=k zJf$!K^$}i)KB)C5Rk)^$${3+TAU+==(_^*ZMYr_P@jwz!yD-ej6 zFNH5`xwt&s=Deb2fwI~2p_>U?;AX=kj7QokuW8V~zz4bY{W_K1WW(yruL8@FsytKZ zQ@1{cb)FP`D1DaP^WN~^X;oEHKdSN<0_7M}Hk5y7;!3whF}~pe{xMjTp2te-fffyS zyCcT<4tlt74H0(v0n*GsJh%$OrCFWe@2foq4nOj<(K*7wUl%St)M>1vQ8SaLn0`ul zl8xZ&z*P1cY~Lrv*RPpvNh`AIno;*uyDwihD&ZC0eNiaLyJ)4en-X*3e?o0zve9qM z9)Efu`>|}4M4@v+Uxmo;F$`leJh?|I^x?igDXZbBmZq%GRHzC6?pIgCl2HX8zNx*j zAN-4-xDuE8xk?#z^(xsnN#j-tztTwTk+qdghI6@C_nb|@TIfjIZPyevl~@hw^=I_7 z5<(xe5a;kYu?VpOfpHLSNAKXhgov`>zX|ZaR6q;hK>UoI0=$bc9`DD#gsmQ6?a~wT z71=|XhP8({#Is0&4HtM3dDIEJxkM?S`IU z(+K{$nAv%|i~REg($2tWSARr7e?Xpxf@w8c@U6PQ8WJ zC^x!o!fruT4gNde70Hi%0sPn(SZURej#YyOs|F=F*1ttGLwMHJLu=8ka0R5Z-6|LP zW;Pjqgv3A6lq$G{82z(AjT8wEaUysFiTR1e+=(brgcev(JgGNgwdoa;ZHfG7>C=za zpj4U*tS!g3!LTL=dn+Sr#2Nqx?XVfo-Pm_m03S07-(~nt#`jCW<~hjAjnwh;LK>r zXUmj4jgRGdoP86YP@W)_LmIKz0VGJre6^myU90(6r)vM4L=&&uV&TKKG>WWuI6ocl zw*Y$1Q(|YJFMOE>L8GG3hVS2zXF@+z-jTzDzjBLHbO(a>-rs%9tP_i7%K`9@isP9F@ClX|OdS&5>g}>kT=FR&i{^7n2 zwb6HzwLQ3=ViECDg~*H)ai$9uN!p6kSd@&?LbCZ)vShR|DTQX`ok!R7AhFT2sZs+C-7U6y>5g z2_8(R#1?;a$jAPq*wzvY&B|b;UEG`AdqZsu*a=vS(qKuWkOP(R(XQ|*h&*4jBClCI zEtl~t{~+4}TRQx*HC4;z_N@B;)k0(aU(rRZ<~ql&0#CvMA&#FQkf+Yq`dHgNHs#3Y z4G-zP;@OTZ5?ycd$25zm;A6Kv?(-Cas}3M~j-o7lDL(4$}U zVJG51|0=BJv!}gLy9sqdJ~ZUlGhRDVNI{uXJ8sWc*_YUs=MAwni><(dgFT`n9xNd7 z9Z{P{O;v&SCwyzf)~E9#x1JJDbP>KWsr+ScvE`IF(_fR!Y+*NMxFTM^-E_e_s?@@N ziQalr{QPQdUG~H{2O>*uQI^FxEG46)Nw60Xo>J#}2s~t5rE*&WEI2|vJNB`OH=M*l z22S5S%_8Egq8G7Mr$nYJu{zvt0F$QPnNib^!@Q%b${9bQ91~EaS_|=FHJ46^H zXg1|6+?W&TKrB$@2=qYGF3f>GkgYi--Xpi=58axopzqX4vE_;^tsAsa)E|2DQFm{E z-dL}SlKCpAH>Dy)nr*TXQ8XQ6$|9%HfHZn~!O>6}A4byJzqPQ6|HstRwf`u%4Kjc$ z`_Q9^-hdcZz!H?-yGeEa&HQY%?e~(hQ|a0f`rnUe?3e>uqgQV)7zkU(_uk@n+%vo2 zG1QExPy=hs_BiQ%L}@rBuIV0z79H$ON3^g=`>>iw^!2Fn8=^B%RxsLLmhYaq98XD*>?KIe zxYir~ps+#uOA8W0PaNwURXwsQu_nQui2O$HHbAOv@Gs9lu`!e8!c+&Ov1;nMB_s)m;qj^7+~=!W?F(2*PU5Et)S;uB+59~q1!VK^FEtO ztLv#qXHMXr>KRo@_LQ0=ylZlKcJ*CVDe_zQ!COcAry}*kzAXD+lTV2s`<5lY;ylV< z6jJ%{dZnv35036ZUCuDqT!D2Nu;x1}ypYrBa0=VNZrdB^qr8c$t_uf-=8uMNQZv~3 zZ{IeqimSZGfOU%R_Udule=;yhc{zD*MmZY!yyP2(&*yz+e6A<|;WXtoBY&^#x1@K( zV@00M5v~}17nkPF?`uz;Z>s5wvKr-5o8(fbqSWtn{~hD!&zJ9)$It%9g0VG@F-rD( zUd8GWSK|wOC*ynfDizxkbA#e+P|S_r0vv0^cN&g8zsd6);xuWV{(M?IuPE2>M+% zbhlpz$#hCw+d)#ix9=VKsWV{Sti}9`=q&)b=J~;NqLI#Sq@%9+(H0#_XT3ig zKB#Dac%6=S?Fv2f!OgtMBee|AXpnb&=$VE7csXw#a`F@;{npS^+dDSPc|Yi@2$kmE zn|YIu?n0!aMczrFbS5M3B;=h658hK^UDwC+zx56-HQCqauP;Omc=el_!~y`O3SlYNTH0VspZJHWoqHHBYYxgw9A{d?Ep`g?BvdZTMY z{hw}0Woy^u`p0ki{i>Ymn$jV7%Z_ep&6x8e<@6aJ#S5D#J?kA;GX!Pd3kL90Vpi8k zdxGmO`HtVZCfe`99Zz~E?k<4by&}%{7s&T+@fP6Tez=Z0>beV`eY=L#r1PTqV)v4o zQho;3=^uB^klUivI|J9FyN1|PT@T9lESK+@i+gr=W%G0Kj*Go>?J-#KrE9TPG!eGt z$xfSGhHbcG@wP=((8vUANXOmzAU-d5F0qf22EeYc>UzNe`k(FQwympTjl@6K*OBZ> zyQK~yQ3tE8-*@1VOS9!P*L2OUdC)#lQh8@1t z)fDt0Up^8XThIMP$^QKpCHu?YRP3y~;m4n=V!I1e?0ozljsK5am_&K@C9GxS(Zs%g1fxIi8Yrh8(r9NxRfp8147bf-YyZ~*1k^lTksu{acMsrIn8)a6L_*|E=fcS>VdlP%h zhV$F+W9P*6_?}+Idg;0Lc-cFHax1Ab7Fmm?*&=N&KJ#NIw=E&G za;1K9_-fDo@Bt;bET6)Bdb931Ykz4i_LtxjzkNFF3dB81yy4HaKPI0=^m6mmwbU^CfJt-!w2BAwq$4u5Q!IFH>-sl+c5)Ya~QJqpSAsXRSSdw zS_m2;EkDgx2#pZ9X9F36#;w-s4SUeL5QQh{lcd_5iUzASXi02cP4B_kj_T(MJHZk5 zS=%R9O<*VYz8883bmIhJy^zU2WjLl64evphG!*0bgh-_!Z=Lgj{aCf{ zODYn~wu6a-_+$DLVic|oBn>@e$MJ?>WQN>Za@ugU2sugb^@S%C_^|mUtx8p*^#N~Y z)+}q#2dI+t%NhNl{baT|t>dto?=9m#)^x*my)6lEuY$e+tbYM^2>jB32>B8mI7%0; zRwdc0Fc#+%egbxO2KsZdgEJXU@EiEyAw^ap_z3`E0j)P#e$pdwCx?3$)GIxiOhB3% z$gVfTN0?at73Ltfj~(qvzDP=*yjDJI%LB`x5gca4os4OGs!=#0{@tycV#_fKEAqyh zHJ%@3FBPpv#Moy{yQN3uXvHkh1<&nO!si(FC?z}#WVCUQzkte<3=U?(Qc*3Ol7>Np zbX|-GeuR*0)L!JHrS%*Sr8xq694hZGh$K$d9rDh?_{Y^CGJ*xFB9fmj-Ro-+76`qB zO#+*4TSUPsu|L=7zw+u?O~Lj z;(}xK5m=TYx8cy9HoO-t_pp#uht+Bd`jt9$z8R^W1L~YO++hzZ)Bu}Z23^l*ZF5>C zU_OGB4_EU2p@;2L&|j8;h*XmW6f_X$@N0&qIn6b3VoKvo>j~=r2dk;5sAy-=4@IUqMRRt}`C*P}ZnCsOmhRLK0NL-ZVWFcCV^O}&?Mwuw*)UX+LY zSla4>t*CM+EyU^bA-u4>hv>gt__xjyG<<5^K7%pk$wWjm3@i^}oZx5Nkd3WIzyDF|y*!(^Y}?IIAWK$w1BYS~?jXB|+&W=ArJ{C#>%o$Q>#K$D76jWbcn8gB zD%=yza~X;9UGL(qFd=#2iaG~+V+?;rdJIw`Q#d0PL4OLrTF8VQlL#%cTIe16k6M=4 zBr@x+O10h{;2;Uc*w7xTL`*^S4!QKyR&m*BedY!Q^=Rl;Y z@kw~kpdW9Z3d|rVHM{W!c$aGHtqT=p6bnlyMRo652ut2R4qBrA9rt^+k!%fD4dxO^ z`fng(zYz<3d^bMt%Y*xV>^v_ zU&KR3$~r_>RC*lv_M-kE{SkdI=<|)dRg@oNB8*r%aycmHNB`A(>3tRlD34667HqH_ zwgP*n#QK~#s+D_)rCPCn4L;Z7&>KH(+wdE4QGYLHAo?NkPv6Q%P4{IA=|$Q)owP`f zbvTe;P;^7w=?$)%=UOQ`1JmH!cpp1FGH9FOR=rgF@VoF_{%aWG2gAn>n3Ue&4l^z5 zeKWR(TB_(qj84x{me^A?o7LstAhLmakJ2u$5r9{D3zA)1qud=PT>>ldH{##A6n33- zAP_-TrG`}p`mpybRIwYm;Ced}GkId&YFIOmi(BOAgH&6@Ohd@To-q=%s52fr=J=m5 z^BMV_!ov%x@ATY}2@l0J@K8h_1*$`#)H#yt*A^{l-KbPzpAB{Z)cIGaa}#D6s^2d@ z`QPjJ%&)=vUD@?N*YBY&;!&acy)JqJf2`lVW%scc!h^9-Vz6FH;6H8K`zysh`CcsS z(jxW=?P7+5#dM@K3v7(nMMr>>cQ$jaUewp)c>XVlpF#6V&+{*Zo*(vKK41HX=SSiB zTs;53^`$wXcUAo_?>gz0cU}1(@7nt6ee6iQYwLS;wGU5I^3MuO-~&&3{*l74a^gCv zE`0!VSV{>qglXMe+UPB{=occUB=kV9lm^F$qKtm8a9}>VG3qZYX1kq&+V1o!m+FW2 zLp<6Y!f|PpUtN<0du^osvNWwjZ9j>4U%SA%uCzytjNE-0%x6mUxD@bUGwFp6)oaX< zyB#U^JEc)wO4tmza-9_IXX;dyDK(KEje^_bl2(Dckx~u=yDhDiQ#7MXFR`+Ci&Ad|pA8ZbK zpsJdrxhp4G+kpNACS~f2tNlzrD$_$4BRa|Gr+0bItJr=wkWy@x*_u&r(n|GFr6pG4}i78{D{x>?aTcX^OJhqnnjWPH~RJS4lm4- zTD|LYVwwgZj`iKqe(5(aW5SGs8fXewZAOe)^3$T3!h3T}QVP%6o~u_Qt|C2i8eGl6 z-AaAvnL!xG!Dm`wdooWuRQo(^LeyhY?fT&(g{*R&C)IC9%iPf&Q=+`ccj{No}*n^Kw27QUCD9r&TDs2t=_P*^^Yl8%V;HRE3ee{z1ujI z?08QD0UcRBR4^1&P8x&VQX2MCYFHqccN3?v_Qd>W@+i*zC%)mZ-kg$}!31|w)O5t< zYoIefExv>E8k|4s)!=-WH@aXT_VO$91|f~+&Is8$7#Xt792YyUM#*xMVt+h--O3(i z=dz1b4D-ShN;dGQl6_hX1m@%1t+OBDVYRCX4}Mz+4@)@5(d9IQFLV$lAT}Vla$(P( zht)&{0(OaJ9gdL3bx@zfJU!+|v zE%#4!#q#|mo4*;U^pjv~O&@=rc6rmi6?gTqjgguWjl{vkU=HfrG5Osv>98043(#Gq zXS z^4w6P7C!3+w#ZY#jFBF~TURjag?^F)=M>l-W53juj+xz?Jx03oBgl2qAx@~Q9gnE3 zSZ!HX<=rJ@2?^!Q(7POZW29%4_S3dXH)D!P)gcZ=Hh*07xyd(=d`4(j%=CZDs`BjR z`WHW8?O*hh^|bdbV~ucmp?)~CDV0}LfESb^57@zrQ>xga-^-P&x15*O`MK(Bp4*b= zosLKZZs}*V=6UR+IQx0&uV8UGFa6nXa>eewvXHzo9Nzu&_6r(&T)t{|#28gYFm_3` zugRp@ZQ;|U6fioU7GDn7h1<5pS8>8U23kQvZzXOFu;zrSb>90d!HD3P+1+}%HJFB| zHY@vY^kZV*i3QSN3K)iakOtw{pGG>qT8Nk?7~`kKlrBPQj{wWjhd|q%5a(eBLAKBy z>*sNCzFXD@c&u#J<3X;?Pin_b)j-o6OtY51qkN0JMji+G8E#KT6t;hLPk_cGeD{t? z@PE*T+aK%P;Klgw_y{p`dB;kOid@G>_{?_p%U7g&7cS59gG-R`$)lVHA&Isj7W^>B zL0|?EClttq6IZn60W3KpYWVL6*?EtPV#}R!4Sw8eW#1n#osC8O zL|Uttp_UnAZoO-vUwYSP1kVp}?AU7p?=4IGNdBbshJOr3mywxQ#PnO4*YB?swS*X2 z{-*fn$RDldBC;IrDoR6~2h5?KJm$LiN>?W4yO}L&)ct(_FONTtU(@AZh0qi)#16av zytUr@roTP!=Xw2}nD@lnPyGDE|HP=CB<;d;d*Mw39!qew9merrbF7~b&vZ6}d7f6% zDaC8OpHE-w{bKsR#d`209nYq9^}oe;@qcqRAv&0b^bMqwZAbLwGsfE>@hY*t@_|o| zG+V0zh1YK@{rj&NPU)uifRP@1v_ zgKJa^xB?G*o2LiY*NRZheP-o~7fO?P-82`!+xhdt;2eEI z{26CXh(F5b|ABn+5Iz0`;zb(~ZL6+BE3X=%4=+;7bBK22Me9k4xFCSIZn(PsKDKck zxZ*KZf^Vq|y(M#y`VqyDqP50Kc`r;g`hXz;nlJ@nH27-6>p6)xy-w1lU0vgN^6}0= zdF(zT^rn#Uc(X)kclkWhvgYPJ0jykaSFTWPcsEDcq(#l26k|Jeu9JE#=8%(OICf;? zfZ97DKIgN_s5oN^$0ZjRSLH;3NoyfuoS&4=bg*e`rBSYH#1?`D8nW$>-pIc3Y1`$? zgHQsJ-9L5q$nKS1YMXVC-E9~RLD@aWtK`pLVzBn3_@m|0ll8&>!+HAkuX^HGP2rXB zPl|zG{1imeF2*>V0#9+aYG6sPRu&GL3demh%7-q_WZZKQsr1f6zo!7aWJAyF9n{IL zDZ;J@t;*hb|H<3<$(BZC>$jgOaA=BON}y)VU{_HHnp5Ysw=xCofA$K^T>*ZsZ< zOM)CWue!I6-YJjyR!qX~R4dKzChTMJA?oSG(LVUYC9T^Sj3KPoUxh_O$&Z7)Be}^e zTAr7I6;3x0ry9FyQMdF|cmG9LEzYCp!`+A?V?j@Oq9fvssG4vfQqA*PlO}ivN0JwX zx;$N~=;Y8YNAwC_S(eGG%TI_~Fe4J%`F28I^Qy8ahx+wO15@^tVSSFO3BJ@|$-7rd z=~7^IdoQ?+Lw7UJ!uH0ZuiOA*;daJqW6isYEOo4)tWs5t8yR zmHIk0>}}t|60X5~G1V7&Q+_^hIa*#PuXS754^yYhb{r+_lGeHdwWUH3%||%CA?36i zsVtp~8Gvc6D1F<;49RXSD_!OK9xU>4G8(6*)0-ER{^`@B_MNyAVNM77a)$s(WjQWA zkJdWMYPKl%6RwSerVmyY*gQ{*k94UK-Hc`cEmkyRIx_jVnn4uraEoJ-1=z<+U0SSZ z42TJGLj0|(!uthcSx=CnxU#;s zV}t-7enPw*E9}X9@2V5xg-*n6(#7rWRi-Ys+IB782~W3OPjHBx%#=MgKLbp|O!`~S zW0#0)?Q;wAvbgJiSd_Y$Vk40x;`Trmb-*@;xEYAA3hyQscYXnB{5jq+p@S^UPaXLF zQk-4u8RY-&(vX`7!>`31zsal{vfs@sEmn3Il)sF*6nT{4>2Rz+v!OL&nBExgpDt3! zc{0e8MV>!+HTlSOks@{16JUGyJi_^@r!!8&&$dRxqEIeB=SN(PcQdls;`j~gnezwKr>4dOlGGT&&|AoS-89m8G5 zMYN9VmY(h^<&Eg^8#*)J)$BJdqW&&ocX=DIX&iatB5tToP{QYbjJMe|nOE%|AXNrb zn8CGOlO_@?b0wp4YuT1W^4)nD(l;Qz2#v@IQQZ}J)7t#C81-8e&F9ZKE?e1e&?kE& zK+Jn#xu9eWjN>fcx0_dos)EB#}<<#p{RWqXAe&)uq%Uf2Ga zeE#77>-_uj`7)f>Vn=mN>iXz+PGru?+?ZM1C=S3XK+F6p8GTk+Q=2p&82z4gfNU4H zq)cb0AdTQ0|8KnUx^{{r8x!1v6uwcr8Wtd>ec-kPtep_Yuv1xGczsqellCnt6zK)E73|+=6gm_4)|I`8cV~ zKcOH}M()J{PaL^B$sS%aR8siH0}ps*W}Nh+e>kFi#7Y15$KqNvu3hgMBjW($q-H()jv@H0COx0PO<0>4Wo zBvuvn$ch>T%5rB1S552_Od40A26~`T9NnR;h8||O#;yc@AO^AQ7{s0pNM64jSqGj> z;NFAwyHWIlqoNUWuL_@Shzigs{^q4}U&Ra+imNDNVP1q>seoT)+O&}OE#jq;#z9wZ zDi|dMZB_>-?c}f5b9?)kG{CECD~`jL(J)ynVqOjuAx|DV47k!Mo1%p zDyRLV&3katm!Zh5lldA%^sAf{QJ{lPjBqm)Z<=x=l*`xRoU1Yy@EX#W@Nj6@-#UkV z*c$d%MaW+X@S& z-G`yqq+RlZ;Chhf(KM)xXjG+ z{+t2B+TZhgo`0U#qp!o9^F815J>T=aey;CN*AeVgpLf*)!`CF%fSqQN*+(^eXk3dD3u9{{G z9H|)5l)b2|1JRT%nyK$y;}b{R*^5WCsiUTIg2P%)8*Rzk$EQ zP{(r626Hr1par_@X2#uU^x9Yu3Iw4E=(1BliLXHJOQ^-4ObxqkGA`3pTo) zBp6j(r?lxXA9RK-@BfMYc`3Z z*)tQH1dJlZ`*K7CxM7xCzl_}3qGYzK&Y_iMdxUl#BC(!}6alYN6z7MCIid!Nw-|Wu z?SVq+f4Wz?T)5tR?^@JI2s5mJu|r6IhJGY%9<=9MgzqY#RC=-822iKOkjgNn#90#R zOFqU1Axo0Cg#^+#lFI41RouC*$u|a&d8n;Oml)1y@>ZDsj8Uffg}uUxthckSWJNkg zU|f^Me%{frheGGQk~$6?OgzVq(_Tc(6zy+XnANZ*VE%}nOlx7(Ow8TJvh-K$4A^mt zuM?O4kw*ck^ElJuTE(16+)JsQT|3+oc!3j7r*OPlN3(|3zOAh*+3CRHhrG+Sv4-@O z(n`MyOG^ObZ}no&D6Br^ZIMdrLDl(4Hc?tmt(_JuuQ-Sv{);rkF12dSz{ngHWRjOl zg(&I@L{V1=QPeFWIpRj49}_)}MmICQ1yWzqs{y4rePa#rlc5JCobnL+{%d&SaJ-SE zmJvX`A#@*~YA+7DnhO^qyzN9DvVuSi9$Hs~QmB7+*C-%+nCAc%HZ&E$Dtv#xDd5mm z%;2mQ`&V2Al1tV~vOS7)ydYppsiwlqC}03TXo!HkIe<4rJw;eJvPyre6j9fA3-7GL zJHybo;NUCg==?eF>IKRKtCvDpz5WfIuA0!4Sz*KyKP0SVL{EW7%q|1QiX=e|D=t+n ztz%_E|A~c62UzPw_m~;Sv9Q0=vRt=8>l&(kVvOZNUd>{0z{i4%PpAO28A2Esu7yu3A`_F}k{9D} zt4C_pnSdgYFS3&?NSzPOg0N!@ZUaT5ii^M(Cc_)Y+X~TWh0^<4;c)MQ+8KiUe1d0i zJNO{B5Un~o&wpx(8}QcsKW&M^-v7InciX$H12&1rzGtc zY*PbDK|dLQHD9T$(xO$bxGO+IGjR_=SE<2n^nGuo(a=cVs3RToflRHcRFwpk3@HgN z2`LFJ8Cnun5?&Hf66vVzl~qL|Phzi1z{nWxj;xBo_0(Q3Zf__ey~i97ReBs#v3CQ> z4Sw`pKtv05tc5);EJ=GKasHx9g&a3}WjN1s`JgSR=C65R-L0oH3%=n4$KoE<6vB>q z)40Dez#3nxtn}UE0YAvvv1-~`^>i9@HklLkUb7JVoLnKMgtze#b>d56E6OUd${<+YbC9P5{XG)KY)+FaLD6> z@bMQ8!pCP@H?S;n(uzjd!WJ&@Y$bML#rw3U(75s9H`2QAMV%dmR#0;fIhJ_{3o!Ca z+5>>k0(`w+VhImm$(cDXny|;A#g6b05X>U&bPrg;0fZB*J|rN~3HXhKOGn6YUhC9+ zZY4Ad9>-&N&f~b#NADUbAj5g>177h^UN7YlBdmd>Ne+foJ%Cdl6qPQ5uTd#H>&^pH zON9NAklAFFY&B6I!l<{x_S_@~Qm?|gABeqIO{5P-Tg)dfzcV!(IKTH)mGY8U?!4ni zR|wYZ^N!oDkOOkiFe=QJZN1?_+I3gB)ekZlhTmY;~M%B$hs@Z zDw2?#iNZPC^=TXBdjQBBq;=eiLtgfVlV6aybM}s;9fqC99Gsgaw41JQMCjmleuVGS`hB*QlJC&!6y#DeKiOW|26)aOsGk-~3n!N9>JUZcGQ_OF3%e#pa6zBBICf8_(pN_}o(HaOYGl z0Www}kg?{uB=!+l7c`(CEZx|x6o?*TE=xNIbRzPpoYBKs7uC+;Qm}4BgTna2sVYe+ zgTm&zlLA~}T)zPgrvNII>Z7Yx1;g#F?K4*o~N6%=2`Jg~?qg6iF zCa#k1spwXy)!fLH%-E+^9JE+}B6e z@9RN*D=&R&X0zEz<;L|Uc7^m3#in3^mB-+q-^?7MRK%vt9A(azk+2UnEmVDGGMdCI zQdTHy2~pU~1FMcI1bzruJc1<2tIOSZ`**INc_QY@O7I}&gAs+$Q0rU89w_1?dca-7GVClO1gc?4r!x)k(xXkjXwO@S zEWL%l=~A2LcQrgbzw6e*;Q8~r+%JO1hHaSI{CpH_74BN5d9ObPR+-woiPyO*AwBRD zA~U~~8fEJ2y6qI()tub%U9SY|2BDfVHlm^3o*x z0Q90W(Tq5;a}noHc2M=c*lgk0;>&pZitNbuM3upa{w;#VNvPu{ye~B1S5v$5v&S8h z;LbXi1iNIYAx|>1>_5S`*7^guCN}yW;-4Wy0N}*1)n#;Vx-Ketvd~aQCIwxUzl1-N^f%eOb7h z)5_kHTo^d7?wK%@K4}&CR3J|Ao-`>|Fa`8oBj6P{+w!vh`i#(1x+uLx!=F z#XytPaA&)=w@w>2F8kex2`hZy)pr)Q0MJ&5s5MeJG4M^i2u5hv^k^;}z7}FcHO3qE z{S#lFoF@Jz5a7xtu7Ume%MpkGxet*? z!Hw|gu-~-Bz9eRSaF9k*!f8PZi#5!sP{(;E>^Kp{BgkIKu~UPc3YAjkdqEFdYO+>^ zjtMdx*u?J+#!6A^$;#FO>2Ig8E_*RfQib{hW z|AqxxaqZ7io^xF}h@H)76M!PA*ds4L*Oh|3`CON~XN+C>UaB+3-;CKIcYfmxQGEjm zW-hl7*8TH&9i(yD_>Fh&tEFEJ^pUVZ;r%G0W87&Qq;cTC&USr%L&Isq6HsDUAFKAc zC$Tx(_4N&}R1Cgf4JJYNRbBJk+_48Oh(|3L#ojJC29)HRM8LBFdBPr^_ z$o1Sj{(H~Zss-4QlAW)=GLP@_$gJWW$Bi2}aq|M)J?;66-Tyt6mT2;`UGLuTsbWiL z?_l4gog?Ty`b+2mZ#Yx)N{mBx2k!{k5xSekhqSt(tEHFG`FAYy5taIPyr7uK&9(!% zs7g_~6p?1;@zubpXX0Qr)`V+6Mb$jMN=S)m@`)MUOq%@X5FsP4_-xnQ8?oHjaN3U^ zMua`WavAQPgSMEDnfHZrqvZ={k>zaHOd%Jv4_&j}KG++KT)N{hd@j#*&4NsqjfX$5 z6_ly{t+eBpXFyM&;2%K*fJC%5>hah~6qr$f>bYK4Ah z4DC2W_M|&{dc};3wdYrHWF}CghWn#q~F!qirI9Y=T*4PDg3RuecnBf&H z{IYf#e&Ox2JrWX(RTwb=Sj!%7G_jB17{)M+>Zqt({HADZc+-+v@k{$VvY8YiZYANL zF^VNpCAR9hlr&MZ%8`qBafGBD1Z^EW?Gzzst#h4OE_h8+ z>ujbu8OANjw$=>EwqPVvJS38*7G%#_ft6Vku#*`X!v*gAs;kKr04pdh7iEd#^0Q&9 z1FzaS4FTnCA#-zKs!3UU;6N0f!{naR=JP{$;fMBuVT4H#{mGFJpv zZvO_;FV^+rh+b;zJkY`*4)cFry$^KL%3t1s2+Z{58_1T-lOBfHmRmW$H>GH|ksdkX zPcvG{A*NRheSIzMwW+LAQ*^Ng1?gkG+LU-XbBg*_sJ<_1&zAgud*%e06F zysT{93UALawkV8S6%PI=d3`R;o{UxgHOO`b`sjDr@hc=%%oyM@z49DCxmRpGZai&E z;N(p!psCj8FuN8;E>w{om7*%4r_-Y#)mZwR_PI?p@_|xJS96mv# z&<~!H)kX`K&{U9(IK_l?5G-1Bd2RW9Ico&5Cz+yfQ^uxJ#;kcX8nf?bG0JsDp- zu15|Fyyy5IgtFw#S$Hpf<8a}Pa{Cw{&Z)V>;gdLj$CDm*)KJ(+oa-D4`(Q!lv6*b^ zi)+R`G=47GR;-0(MPRAUd|9r%5TgFL^W9rAj&(G;M#E+&nq(%XQJ}-rW)}8@F~?z< z*LAUvVlTO4r}>)3{|hM4Vj zuCBjfhY7N~V0Egh0$!ujkeJN{2=+l2&9Cx{dzrF^4wgv(np0rEt;CtG6Sq|0F<@JD z7JBJ_uVlC4u;4hAC}pGZD^QeXvWN6)GX%;EGBl#-1W&9)Ek6f)pV~aU_BGINXSyoy zS@siMIjUb1AT#@VEofzdjfmh4-;pJ?qlP~NuR4$8qDKlnW-K&3THKif8qX`&Eb-D{ zDH3k{ygl6bIXi2}TDTaJ(5Q-db1<+XzVyh=d+Wwz_*WWXTd^iJ#Nl!cu?9iQ0gV`T zX2M2X4g1w|U5UNp?X%3WSZjv;wk(~_BnK0?r8tk_w(ysnnYd%*n4KE_YtZ_k{j|PB zp!KC43RVGXKV%TK5A+^T`zpuFplP=7`<$d%@y0+u(>3%~s4!cKa_*a&RaAyBceR z8mHe^GF?`PEBf8i&zRI<)gJm77=6E->I_kf?yOC&1(zjh6t!Bk(m8KNsls7%<_WLUaUU43 zo)@WU9uU7ZxV%yShvoSR<$2pHh}x^aZTw?GY~d6mno$ey`S*FCsDWD>co)qtV~#kd z-00UpS^;C{Sh31c3~i;ca~w;%vC84bZv5+famcs!zI->3FYjJ?;~Rik3{NqVRqTTQ zYn#(ghY)n97EMh^Z9C3YSr2G-(WaDZiuDyoUQ-`W=oLyXG>>MxKf0tQ^IE4XYXMWqk$hg)3+4jTi*w<~7 zIS#bT z2;mKFk9B%$xcH@DdytdO4B;(-qQ>0XLY==|!mpDl=ROfdl=9VOkMxLdw}xLne05m~ zA~1>bbhU**bY(GK^MFt<^daU8Ms#&D5bDI(aYfnTpyVkw+rU~IfLI`lN1HPxM-DscAF$g!rFx@9&-CT&OQ$^#gd6_xN8hLs9}EMX6ad@HB7O^SxFa3K z?!9fH1IF6x&{`$_)Wb9`fJzLzfVJ>o_U2yS zpPNDMjQet1h1_R^+=`3fXRK8C;Q$9m3B)EOzbh+CuU~cF%-Yn5+JMX}O9C=QcJJ@^OJ>0$J)mjAa7M@M)^o4&wJu7LHYqao+yv8= zC9fjRGI{c+hOA(pf^CQy$8$LHaJ+zn?CZ$3`yKOD6Qj<`W{XRWx)uJ7v3AfGGhmqv zYazBOho6oWH}axayP(O=0=7zf6Xrg6;ei~Zkwf;)Rr6!;VX~XphB8RnP+ol2iWS*} z#nN(_RT~aR)u&`Hg^X&0`LXaqv?}P*}$JV#QfH=wij?+6fY;paf}fOy9k9Re*1+)mlj#q5VCP3$oom!Tges>L65 z^K}J*-T=xUOZ79Lep~ozXZ0$`iL`#Gov51XM^rH+{^MWePxcWmgE~vxL>$+vd>}?7 zta@$FJieHXMA>xAK>38>yG*^6|EmW&#ai-AKZV*PVE)Uv4XfUUe(rQ+KL<9l7HE+J z7!BEtdW?GbtHOsZt5H%6s+|8Xw~qRAvaDl@99FcDeQk9~s{-)*h_j;m0o8b2KqV7P zZE?&Nw1*kV>ex~(5cUGZ%#JPmr#dm(v3+0`ddrJ* zhGm3-(%ixicZJ~%*e%@jbg4V6vWSoGV>I3}itm*XQx|N9tV6JF39##Pfjh@Zs$b>H z`vUMpWS{D!lJz*YuK|^*aVPR0c$}&79o?zY;wyGPeBUR%epN9TOYeKu zWP}Q>_iA57_Y`$S_Y%EdB{TMzEwG$crf@4Wn%M;#oLy{bD6B+JfLag5^P78-YaGKL zvn2AnJrg-u@q6}Yr0+zzdM+A$w!@QI7G3o!-vlo$17B|ODITfLtk}xG1S@$}ZFE%; z|1f-9S*=gC2J6N5y%pVS7l86AtuR(NU%{x*RFJfqDA*-7ZJGEhueOXN@~`qAd1`8z zkrv%p@PDvl;2x`{cQ0|V+Q*<5^sRowc{TYB{@*~b5H)(eE72L?L`kg`NQrzu6FADR@{rZ-StB6Tu?=Usrd=-}`u$JOe{5o3{(Uq%8OM`2 z24gaGJ#xQo=T`oZuuuJfbm^e|%m8$fSNWNsJ5=>_kLWnqSYut-%I_4OU>NZn#nG2i z*Yi(drs0@=d~aLAWza3Yh&$oIb-~};nRED_Rz1p`j_>j~ zHh6-p_|obPZ47;}_2HWlzGu4fZq&4AI@8wS$UXs*dzFKtD`NM2` zdvpA@!eGN!|9yd{Qvxg#mM!rB+u;Io zMb#^i<3}6Aux~eBXV|>-FE#P&)_ya@;O(EG{r&S~kC&z&iPj7**xMGel)lK@_Q66= zAw5^#o`${%UOJ{-x>PFk%MjswRJ$D4)T^ojq9!-C4MndGrC!CG8OyjM#^mdn%Z{|Y zy)}vYci&f64Bb!tBk%Wl(+xq}J1u*k+%!A(Upr(MzTG!_M#aK+xbI4m#$RukKfX=5 ztr#+@=IcYM{qP-s0T&X;o$31H_2ir3z9cC<)3qMwk-i4V554CR{pT-Ur@RZe$B_Oa z@85g9eM`fi^ca`QZSbkX}zSW#^zZbA2Tpc~Yvw1MTVO_O@jg z_z7co67HJ|FglO>wWs^;ZF{yrk6({tlzT^;U%{;Qbc|&h&jz$;h_82SsjlyBTP}>Z z3)cf!v^GYs3~9@R(MxG#+GW-=U41Qk+aAkJXwN`T(j4cO?q~}sm@4#6NdI@f`ZjtFbGE;%eW;W7IvKOmTYfR}PZ8!E zjr9I^-k|TA-mcg-Q5e}9+lHWIOADp`JUfrwxNv=l?hA~3;uV3N=O&L7iyr;Kh-;`1 z^}m>p-~ay2eecW|YIx(LhR=_z{vyfDsw&bhFHc&#vM}Lt<_}4m-yU6+e{xsSmcBn% z*A(X@HLUu2i}`miCw*H~u9il8lyq44$fEDcew%dmlOs3&wRv;WV*kFk{_wz1!;gW1 zy4E@Kl1d7fXFqO#Ch7dfPm)~U-b&g%e3tA<*WZ%7>-k0W{19L2eeXz6yB@|$0^Bmx zz1>E6mh+!GePM}v5^L+p>q;DcI0A5}a16l_f@3I-NF3oh^3}2ERrM#XGdhpsTgW)Z zx2Z5*Q*K7bRdkz7{@mWS`Mrd=qTz;NZ={(uTUbHA@2kK%0Qsy4hd2fN;hg>FQ3|ch z%ml3Dmq)eBj_++t&Q;iI+UKLja?Baug3TCzw6ZSeUvpA#BqANS1Z_-#$MF`p_L}ww zu`rRS&Zh}?1L|rqlLpsfsb|wQDhuDRZ8<+#$dxdtmYE*!n6LcFX=Cz#+Hbm*3Ae}F+>) z%p@RFf#+8V9IGNj0{%-e2{CErzzb{p0LQ~dtGAj=-@Tr8v;edFDX#1XQLdh&j_vT(vNPZB$2bi4(FPTBxjDS~ufLX6=kCzSccRNhtIe?1c<`d||+QA&1az zN;PNT$8_uQcVzc0AR!V>&hFTg>#YO5TS(dEP4OuJVViB>mv+-i za-{u?FbiWZLY@NIW{IN;T0c79>Pq6xuJPgE6&+KMUePT^y0lc|7>_$kT~h0?@Cu_p z`pXKt-z0vaD*?2V1~IUb__@GEG4NL{6u~4O`emx={cqFbsmD<2^LQJbFTzuk@HW^g zI9z=tj%V;T=m7DyuD&FG_7x&SszR+g+F7MgayYz-s{M&}FI#?;B<)i2s*nk5+hZ+AgzSY3n z@GMbE2L8kTQqqN$@=@HSHlEa=alDBykP7XnaqL13Pxg7gtQhIt&JFl7jbkg)kM(Ux zeIjiJp40%#BZ;r+ixIwREzS@0nIRL_I9|m0pZlD3^h_Sk-|9PEtF~(#IVkJAlUh&X zcnarVAkuM&P|_2~wGHT#bmvi=zecerX*ez&)%meM~#`YojIZObpf-j#c# z{cLUx_!Zg*ncLS2nNi2C_*;Q}xo0wTl+f-Yj_Xifi@Ivyi9Z6hAsM#DQGs&K!H?tt z^%j0LY+FpV3hRg}W+!C4rB7rop$KDUQE4XX_pOlswccWIoib|~=6mRRtb4FbA^9YI zbtJx;JfVHoQ*BS6cGFP1z2Jwy4Qf)-f?I!Mj!$&r>=9V<}M%ZOn@U$PYC z%;;rd?Z*_0N&~8;d&H&G$1EglMd_z&E7}4IjN=!J4J+mFVvU3EDTak-VVVy{ zbF(uFDc5>1|9cD57{10r)DOubp1*RBAFMg~-R;%MS@;CM< zs}%3xby`RQ;z8*@~RG4cfb4-B>b*0Jb| zpT|{KH}%9HdZ-oO1V+O&$L;K;)W+R>irICXc6oy84I=e&+UB-c2?f@J}b1h^5Q^Ceq)bEJQZd%wd&XQp^$zh z@sFS`#gIeFis|an9(nNuXm8p6G5bybOtrw`is~QML$mY&VN?a7HZS8jO7}%=X5iUC zJS*$pOXUZ|yJ#=<&UKAPjr8gj*aFV@RngH&S ze6Wrt7&;n7mCpghlI|^7qxhAM#s@l@vD{|R1ry_3Pm-FNhI0 ztxH67!lm!nja}978ue{*X+G*y-EwIrB&hRX>DXy%5l>o?mtub~)1|2}1~=7rKGFgV zvq^8~QO=%rmqvMaX`_)VfTQxywlfphOKgH`+9bVrnmX^9JkgZ7_E@1V>dW<=D&!0lazZjT5tb>J zxM;G4y@1?2E zFw*+Z`?z20zey{fw>N56gdY0Y2+u6&H1`|-efe}N%K)tlSox&;7jul7sCD3(2=DvO zxzB?B9R}Qj6GrqMfC1oMyO+^F;)OT=u4d_%Cez20AqR&g8qTkFva6A~AN5qNa z#JO>GOZeXd<#;jHdUcjMm-LdVK|BnTJD?fbM+h)k16LGZZ5gxw=}oX=B+cw5*m0}5 zS$ws?O)|Cy!vN275$Rj_Sb-BFdk&gwqzn1fTw;u|&F}K$jr%fX4cX5lro3339q$Zc zm^&}Q`hCg#5sj)lmeu}^?4%N71lli14{LeYa4egzu!&nOy1+(XI}_{I%+C1v-V#`I zFs&POqB-H=go5SmLp|^Xhh~sv0;5}#8iWXKoB3AHSa?NIt#1NfY!m-acOX_MwPrvA zxQYKkKxNv*UqE!Q5VbCg0qyZA=xY`1aCh;gJ%4%HYp(#?%y21tA!#v7_}%^}@v1xc z9)|W5U}$gR5BHaK2xaNAVsgWwEhA5MbrxwI^;n(qfW1NevV|`e-oaMw;#UaoSX;jp zWs@$^g0;Ai{1XLT;%T%k;g-{U*u)pQ*Vg*OBitYMo203HIdzEnqt4T}Sa9Nq(7+pj zzC?PHZ_R`g!D!+He4`pzJLT2C^j8y02aR)TCCjQ%tQl6c7E`*5p9M>NH8=l`XARl5 zv%nL8e8;2C1ro1dFRjk4A{1(}y3d6U5O|kzZnAw%Gz;yT%=0Xt>WKwb(FwWks~Pa1 z@HqP1&+;>cv`^#_UtMr6vA~y0#ZD4mAg{!2(90RP9JH{gX94^aC2CkA>rg678R^4a~7y@2_MB&bguR8NgTwwtb?zvgfZpE1$g4`IP>9 z(@DtkHaee%JTHtt^x&V5N3K9Y;+Z{1f>0# zFi9%o&ElQRPETnZw}f{)CGa|Y5~Jb+kEHTZemx=^ zR2%h84F8pf*+G2Wla&nL=+SYkW;GV!Co4t#jcyH6MX(3Z!UlH>&RGo$TUA)oaTfls z?$AuqUlgR4LPvE3+705QB#o*EKfBIsc{w!%)({q6?WT98cs%_P*8ka++Uk#*!jl^7 z{yqB_M#aRu4Gg1DDf@ui#75&F{gr4NmGQjWFOyLV@7ZSI9WK&~;e7&M&Ng}+uX;!_ z#hB}Fibz`|{8KR(T)?Hk0lO>GsQ^5Fpu7j&0fWl>FO=tVUwMyse|Y8=t;l`?OUoir_5HZ2d)0Jtu&$W^v}|Phgx`oPW?4nm&8hg0cLm z=>$fa1!Gx=1!{f@R!byNl)TBBnH|zM*&SzciqfIKItqIz^LgYYbaUX5-*?5{cO@Eh zC5t5_S@L97H7H_r4boV#c}C-T)DbvmW^ML)XOW(4lFQPsW-IOV2JfBo&e!|XDel(i zuy1Fz8;lna$IJ-S))4!K94lIf(0NJHH|#m`8Z1lSpL5*!o?ufzd1rCy$a}7qg=EuN zKaf{6bs+a*=P3QJ^ZWMahprC&Pc}_w9~0~yk`YtH%uXf?uJg`~d93aj-c7!K-Yepm zj-{VyRe<_{Ij7KGh(b9@LibI>WvZkqv$;Z^@NsfYTeItBTDn+G|DzR1s>z4OiOX?n~ z^5EQnmF#ZcLx}q5y|dRPvSP=PGI0x=B!?zthz?9$ye5^bbRY3dKX9OBt6^tHr)f`PQV0c5dan;3X%rGGn9%-*ATH9XEzF zy;Um)D(ej75bxf~>-)szBgXnP#d2#wcZeZ7y0zHjcmfumL@|1%>bawWtr0T{HfxY% zZQ*bCy#YKOie5!HI{)nYxWyl>hf#>N@Vz%p?4MOq_F){4;FyXd54QY69%`!b!+!3? zT3uTDC}f93C$Lo{v!Z71U`PmJL0;eXrrWPkcU zg!D&+bXMonpZcMYI=6u$LyqOb`5YJ5f9IfZCrQX3#%ot58LS z{LpS#ItRcy7k1eJjG{gmlu}GnX0$9$^bHHkORc>D>q3Jt|0S17jFFf37$wbN_B}?n zxx^THxdgU_4bDD>ft9pK&8qX#_XsHxmQuv98_!FpRQjcZ$`5Knnfg6Ok?>?*I+gCd z0&;gcWHoBC@}%4<(8~F>O3WtZeN^(a8$^$j@1Lrk#xSiw#5+8WvA+<<(Ab2dA>8b%vAZY5ylN~jkj3g_k3W$A?1YH|Obd3lMjXQV^{>u}`y zgLh@CHrFs?yxxWZ+zDr2-VFHYF?uNwz~tH!Xw?es7tR+FXg}w%AK$@F%}iR8c>?RJ zZ{?}3OYP$73axLIK1aNJ32d{L0$1%({$(w>Mg3?@RAq`W+k3YSNvO8PdD2KQ9H+HM}fx>6m-l9XqeUP-L<#sb!vJFr53 z)4dz-{kogvtBF;^K>Ng-cSF8PE4H}uHGVmCta?sdwG=ZUA%oG8z3G}%KXA*7VPiTa z57y&)Sk6y`E#qFYWt3SHHH>x>zo3WicvEDYwU%tpiKmxV%dNwT3~@^AoZ`wiT8bDJ zI$^(Rw<8=@my;S`oo$zuSAg$*qs50oH0_Oj4Qq7&lHtI<-a-Lwvb3T-q}UBsUP*A0C8 zhS&Hn+&f^~ZO{QJ0oJxk*i~KuZ9&$yV_|Iz&%2$QU{4&8;iHX1&DNxXZv+~m8n}G$ zG)GNK-NVZ~jzhf^30%baRT3Y%nSTLmvR{?Uam7jBUFZ(Qcl5be_eUi_1U@3*fTfoFtM8zQug_C0=<)7$OW6SVh?!=lVr+|-+l zP6OnZP5g5nWffcLa#T5$xR=p?Zw42Pdrx|Tg?m?=Z>AZ8eL^G*El z9zrU65T4cr{5z1IyvE14L5rSwjrpO9Q6y$p!bqr2t}Mj3gN#0NqG5>uPSw;{#}rPD4J3z@)5J_fWc`G_#KLb;S} znz)!9r(evH40iNfM!k-&^e}3&*76?>p*;8FVwSILyK?fR{If>u6HM;!j zHT&~(*JS0luDP1O)7b)vLW_Q2zb1N`_&=KECvgrsU4Ie>XmsSeqX&JCYbSpD@Y{!9 zW)kq4CV?i$uLQprk$zE6d(+P`zQpLE6V97@543XvyoBz4 zs3uq*g7@}n{d{mW1XrA(=a~Z=Bd&mj^$=G8d6)Lnd`nwGfha!$tM`Wdl>C$7Y3uN5Muh!Jx#jI#o_(QBcy zbQN)FRK{YbPX7V?O$b%|q)kmxE1H1ebcx2bH|9h=B1ED+IQ`Km?jLA_*G-J}^JgWK z!s75A!`;SD^VjDa^F{f3p|)Png$V9cgn!jJDfX5>5jl6U{Mq@Zf^b8_!*nbQM-x=Swy3%+I2m>X?u4c?R2G+T-A`J5- zUS63w9X5ny;kAq}g6=8I*VX>d+@bBoGnX7@V%`Jyrcf{F*>L;fVUm4B8P*+T?rwbE zH}hOL^i4C5wf|JW+})bb+}-p$ri8g$lqanc6|*H&-cb08$YB}9*k1Vb5_~9VmH;Q+ zgXf?-`$>2wVV4ls$!bpmTYRH4SAEiX62C91O)F1CZU|@MAhUo(S@$$?kN$|W!K)

tJa~q=duc(0{%kA59PfOgRng(mZ{ZB#a?P0zxzF*=5TT?!X*wW) zSK88}{!qszl0<^~8@n#2Xk}PXq4=&EAfUzAf4;Y`Lnu7^i4Y#-LRR#KOXWY8SDss&70wmLUu=6EX8dJ+lcmOMoSKe&C_8| zBt5`DODZlI(36q|o>kAzI3F$-dh?o9%jvj;b{{MBW`Vx8i_d=d?0V-@430c@T82Ur z&rS}Tz&Gw~(^qflx5Hh=KiUUW3D~vNx1ZiN4pez~yK3fR;jHfMrx8;DtJF(aXFTB2 z$6^+}z3RMkA7nnUIQKXvd5+Xh&;v-14LmQq- zJ7#-|g9pf{aomUr7i>E?5&UUc#RA@!;zl^M9v|+k1?%FlN`V#Xam~f7-M}!;jdwzq_4Qq-oq#C8b2};S8G<=rhrxE26o_%5N16on9IQWxX{2jtRhyKfBdPQiXb;9n_ z+@=t;=hS*6F=Vz&faWeeKr4}GyHB}T(Bp@Z&5l)4b|Rcs5t73?>NLy+f^9eIm>eGO1mfOsD!*e)hF(a8O~N0*7XNT`oE zwSVrw-ad-#?YG6&k#7z_-g#~@G^11!boeyt| zl-t$t`V5bwsLvipj%R%2z)A^wqHP;7mnFynd^|{iny!g3l0{_o+CPqIjU{=ve})Qn zuH=jIlUp7mvYB#defm4uP+zyGczcP<519e z(hgSP0n#>E-H@FtxGKmkQC^K#b}5222FX4dZF0XfQ!J#2%NIor><;S%`*6hS>jP?t zcp$Z=)mKh?#2lM^I@+?Yu0tG1YoWNIu0t9)y>X2FpB-{vYZ_#@hk zLSeU*fqr27^oT-Jj5nRO*|P(h4p_}o?3w|QNSw0JF1SQrwojqZE}nrvNwOXm)(QfGN`MbjSX#NV$z#w zyqxHeGiAo)%arRwv<>Xotn^j%P4qo&;qhplfnI0#6dL0$({rE{MC_h&=m_Gt*5MCE z%QbATD1K4uapN%X3yc@^CM;zRK1LOILUWRIP?@g=1eL6%w{bkD*J7bx* zFz@A4<)hgISugV&Wvf*1a1aR=HH>XzQZ#gnQLs`GH_>k5cHI1!Rvw~O4&L3e>O1Gg zw`JUlx#CK1WQ;A4s$PPO;R|Q#lt=iB-NdgCaJ09=L0QKNT+}1c)XoEUvT2L2VJ3v1ZpY(?&DY%>$5FsU`5U2|oUI`Ux zppCSLw#dPGEoor1Nf}R6GTVdEmyht`-Y2ROxJUWReSZg^`$vJ-CQgfL64Cwl>L;oM zUKKUj4y!V<-~RP`#|ZBoX&;+mMC5ciz??I?nnRG!!$7Pae*NWHMulVbxNA zcs7do08VTY>Eu*4xSI6*6W}pf-RAs%=7UOsEb(TZPhFhJ#}2IKZoCcUCc_4w$~}g1 z@y)P{AA+(&A51vJL5NXLXaI;Ti5>WR z59RkqeyN^fqZ1uY+#RKgnpix!AI}7vf%GAG3k>B%O+k2fldyA(n?zHg>tnEM0_UOJ zNb%E)fP7WXDc^dip%j`zjMo{k-0>m$EVZ8-g{6q#6Y+qZ)lnOY>=3^L#S5cXd2= zKk{iOyxmWLgg{Z7;R)>7he#{OIwWGUFeIz)3)sbg$|XKtN9Bez5iS%_gvpS-NLqb- zzsnvdiJsr*S&}Adq@1$m0b5Gy8RwrCq(?C}egc(C_fAbmm46i8EgO zt_7Ni;gcsPCnt}_A^ZzYRx&!X4EvrHmK`z;&6&9VHIY)pLW;++!l{FN+nY-&q=jSd zNMV}*{A%Y+JSE3Uz7V#&O6&o=dUkCw_?izpFWqEfmE1+!SzJ*sC!!pp?Wt_yl7*UM zHcUbsw$NB_EcYU;WlJuyy6>D9i^VGUO1<{Pn0VGX8331R8TXV_2p)7qP5UoZxQ2&ya0vK%l5|1eR z+n^a}oW)?}(qhft0dMe0n4{#mPl$Bv1BF~_+O10iW8(qrAs1|O!Dk3${$ zG$Cq6Gw_%8H}aTS@3re636IW-W@o}a%Fo=sXd$n_uVHx~0c-QqR}2=o)T1<_L|cQa9o8czs&EoS7R~<^dn5@K&nJ=Y2_$kq!8+mr0tn1N<54x|94C z3A+b0m&><5=imDbY0?I788n6;a(THoVYdbUW|V!J?B(M&_W$k>ehq)f6n@F?knS_U z@c|~XAiMC+BgHS;`D$SVYW8#=^*wXDsW5Z`)A{eh?^=fPLz#SL8S^iuh#AU6v&rns z>`-PZ{tp%Yf5m>q<}=AS&LW*8HH0O#R9NZg+`5WZjTQ%>Q9M6j(2(XK1r*1O~SfTX1s9o9~g4N-Yz>0Fco&rHHIA75v7lJ4c0ZA%0! zbrr`m*j`14xV<>?So>A-pxH*e@bW8E7ZKXgin?%7>TICUhkw}l)^&PT3CZ8q2$9C^ z5V->EA4CzYhj*$!40k)a1uF*H6=;OeicP!Oz}37fD+RvTo_!bywR3DFb(3qzW{1^( z*qL{o=y-4KNHQlEl^b>DBeqXE6tYh`SlL*VMD@7Z`~HFX-by-Z*|D zvaU1o7R~Bu;p{Zj1i9#|e6~?;db7OUr+Q|4rr`a&lyC3;?`q+De9_HeSO*^I4YU6& zZ=`8V^WD-ujd^F)hv7742e)>`aaxJ)rEK=fq1M+xN;Zn!NxTGUb!*@sLva+6`@H^y zbUq8`v@cB9HU2{PD#*!@Um`#_>m_M>;aMYt>~EW|0y`=Y z`F_rI)g&LBD||nEML?Ush@A_TvfjUgZCMid=LIcPLg;`!3fanTf=`v#mW6a0uR*H4 zk^fyEw6=of`S<3dsE7E=gHFE%tS->b=#Jhk8sYn8^^k+o{dYBskgk_!9`uh(AuJ^k zcrP{l;*^ZIdLuu=EfsW+Oq1ZZJl|Rq!fiLpN;hy?&ojIsd zxy!dS3$au;5D%&IDV>q|7eqvpmL_D%OIN_lDV7V^2`uL>&&$*Xmz`7cq~#0JUbl(B zc@=VP;fiXeG=q~{19ujrUUupk^6(OsDyxsBS9B+NiiJ)UeBp?1k&(m4(HULkzKA3nq((fdI4=2n|uNF8iSC^HW zo0UbjFi#>65b#?Ifz7qZseyEyvAsJ3b`FF56kLu!3&=TT$V+1s(L{uC&?ZHK#0 zWKeBhp7cp4#aSkewHxsT2IK>7$6CB`ZGB{aJ=~6!-Gl9>`5}v02KKBJF^nPsDK8_& zk*2QGebZkYaj*0bA$+$x zDLfjxhUA5JBl4o1f-ivB9EzO_@@#NXu(-wU>5cgN8FqidK{t?e7+!=w6@(&Mn4$CN zLKZ7hm~RN*>}KCW`9YfzSEH`;$jzV(;*07!58X6$9$EC3(UO{;I?<%CAy25Z0lvt{ zTi4mu=FdfI5XG#s{ARR94g9UT&YNutD?2Gdi0eGJ$Kx5WgZ6Y>bURLU#Ro9P&(&`CNGL zQOt#s2q21GG?0ZeSv2p1<*`?fI8cZ71d^X2hHCb{bdsAr9En{Aw8OPrKlJD@Gpxo1 zoScu_nWgZ9%B5X`_K0K9Tc_ocrlDWYsmx2C`=SYcX;k+>E@Jw5=&Zmg_tSMccqbyo z#B4v`Uvu(sFA}ssHR-XDbBu;omT}k9^Nf0{F%Y9nefgb^2oXvkinoB|iA1Mf7*s}4 zI;=cVPEGopeksOzX9M0kSeNU*ho$)ZI>asT>gRIT33E}rT@ATX^gQwoA^amk2HK7< zX0?R(GoZmeL#>ZC`KbWA$G!R&r4Ju3OP!E9wE6ky5R6Z^Bg+Zo-YT~v!y^W_7ue*b zti=b2#;Jr(l2RqmdW690$L*NwT!+5c2A$c;-;=M22ijH1`-V9bO96IWi7%zj|QeOq?xYgTEmY# zzW-~{mV?LKy}RD=N^~@R>uJ5$LSARifJ^}qi=}3aU@5cFxllx-^fcOHNB6?XQfT(5 zwI~j%(2Jym892o8>4&ntx z4F}kwlwev}T4xliQR;-+g*0_Q>vZyTLNP_O7& zGxE;4u)mbBs!L-`uv$2V^MtLiS2%`eY!%m=pYP5x8}A{%Rqx}}LwO~>grstQgas}5 znLGJH;3)((>oXa5P-e;9S9wx4VJ37Nane$ZbC%-2cc@jHBm6VsV&I$q_udSCX~g$d z6FhvcEQZ|3b9qiIT3Y`g`N~!(Hgv^Z~f!ee=Y3`Of2fS(`;O^71k5} z(<0*K(h9Pqlfv@6AfTAs*q1ELKI@vFG(Ijo14KV{lh+f`7hlL3MWk)TuN7hK z8mokBlXY+e>XKlah4X|@y4ry#`?xTHtlg|Z|HBqV^FJtr>AX?+xtBH4v&Ho**i#5! zAiRs9OU16WNY0anLKW7{$ZyaO(j2J-W}xY3nZ(^Q;IBpsyS;HcNwSFg zjrkF@A4q{--wu4!??bmI3;qshTBl;{Z0O_G(W-?Lu1>}cy)YRs|Lq7v=Aiz3hL20q2nGZFNy6ROMTfqRzsvdPI#tTt%dxzfZ!e^1hw8(e2-+y$;OUgAV%_TIlWrism3k~?Un_q`2z+pt(AD=mh(%5yI19^^UuJ@EtDkS6HhVb-10=gI9Iw$7`~l{HG@2LAMi)6^3>1b4!VoJFN>6i?Ds~OJuWPP<$&LQ?|X2~NSFQyw}a3f z15qAnR=h)a?7czzxWM@#slYripAqiLmd1_3cRi+nIV}NCp*ijCo^hDd#tqGBn_=fR z3K|fjH-uvri$G{d%$+3xl9z^*5-i}8b`ycX$AMpD<`0-QtZ9sSm;i{eH!yB(>r+Ec- znu~?h-a$Lfrha+-V&N_9kjPH6&%=5L?KJy5eLYw0G<}{Mfi`?seZNQ78^;gYX+nmH zH<*kS?_~G?+fEbfVmH}oZtJ@;V5j+USJ^K?S009K(zSM)_Is`D!d5xE7ud^xMi{iK z+$g-zebr8LqhP`t{QqL7IT>ZdAY5yw3EQylt9F_j1+VzOv(x`0GFY|@#$h`( z6kmxr?WQ82`*rBz?|)6O>3HRC;-8r9s@?4N6xd?UK8$%clIC4lY1#-cJ9f2y^@%bEi@nU9}UV^KQyN8zL@V(IEAoK{^tr_Op@hyxxBomkV|wu~s@Yw28C zuN+*rKEf>YxDX=AaOk8phIc^^1s-uQUju)`#H9OivI%?GZ>K{2p>A3zv~*M5DE2jC zD>F_?H7gS0H5#vM`o7M1-DgtWfECpludcDEoOI@q!!OPA*H4h@cLL|zwwH?9zhD*$ zOWQ`21cWVA8!qO22~1w z>(_S1Yro0wa;ZDjYMhL*Xmv#~v~a8$VNE1anc!L|Kz@J~e_00A-H5uEOV?IhuY?`W zT<8C;ch^aGugsuxU(_`gD(V-Gw8tn@L7 zH}Q@9KY**6g0tS08B4GWsEq)&N*URVoWXwf>GN9|+U14!)i)RAeId%hAuY>z+ro8x z#*t;SwyhQ?fwQDC$eyGH(zq8fifF$VKNU60sL6M=+?0nYf%u&M4u&zAES>*lWeIp{v)>(Up)c7CV?#YO@(Q7iDuH`70}%JMJJPjRxd2(5c3U z-~_0j{3!NYg#UUK&|)Ordd5_CFoKuw#dp6j%GKi1z0(yxzcB1r{M>D|(A z3!9<;SG ztC{#5{uSV=|`^H6e%uw=kqeu!Jr>saao2+OJglz&yvvVw@*KQ~ z>3MZ^lufgP&OSe{U}AC7kQw?old#CjCWcm|yZwA-M1NAU+)>o?$L@OG=pwxn%u0%P z9pBpu`R6Sv$(92eCCC--sONtf$RShvbJXN(kYf&bx+{H2$(-vy=N^L&1v{0UvJN@ozfF8VxA^x+xWC*5_OGs#w%%k2o} zOamUGqTt16rK!fU+(q~+jPSXgBs=sB10-jR@S*(|w_y+F$k-rQ6lxi5ZKd!Juc7&N z@TlRi_RBKrYMImxdC0#<2K^DXDyW{>UMalqH6u?r&bmhHnlM+&-Bh<$Anc9N9k!57 z`Kz5X8Recli+p!p2O|fW4R7LkpaU!=c@{SpXBsnH)VI^<3GqSu z>D#k?u|8LL+`Ls0fX~SnN_)xA@!c*zr zMceYfV;228zWcw6D`S(~RENpDdN=Ig_rTwAg3hYgJwnLukz+(f^wGE)-S-V}dQ^K9 zUM}G^%m(9einSN~R{YG8sM-i<2uS?k<#Po%n~UrVs;?AOJv#SO7!@1O1>r17jdQ6i z%*?;?204=z_`2V)XfCD2QI8B-NYiFj)(84Gy|m??@mRkk-P{o$roLBrzX1YD1W&V z$4{LMJEud>PJqWvEk6fV6WV4L5=mKRBoNK;G@UuQ$LW{mZzBu{sSHE2(#@f4DxXR1 zc14!?ZF6<|Waz6WdSv^ISW%1M5xG(*=?)u0Soo;x^sggfExPLtEBnB|VCp zfj$m>MTDbEa|Q>EnIxny@+L_oOu;?%Bn#GzmS*5?Pr5h4Jr9VnJ|K%$qD~7Do9TV8 zGYP)D{Z~`G#KG4LaC4`@h3?M(Z%bh5@#q^CbL@UGej4$YG8tCF;*n(Yrc|zCCLD5n0!vlPD#*Iyp0$kr_I8#0 zD;gtNBAXoIDnY4gPUBL#OCBZffO6cGxQa0)!q1_Zq)4V!(M&Zo1*)+UPGU`!!fv1) zpLZ$wU(Zp^zj=@TZ+(xrr)Yj$p#ruHqowbUv$7^`E#&xV6I-`;%O!N}Lk^dymtw(f zMePMx+unp%O&h$glh+RmPE@majpz1Wjaz0c7G6Xe>CKv~!8n`e>?Xd^Hk~~63f^uT zr0{-yUAwpjGZ%IuTXu+xAj1%HWBB;OZH@5Bih67Z@8_=x$@8YQ-ehAYM77!Qas0JfjQjlByauUOnLtZX z!%t2s>h*RvFv%Et5@`}s&2s#sV2c)Y3xh8>CLVsHZt|ZwM#D!QNt>7iNSf|c03+!> z$bbAm@;D{3l~J ziib_K@VZD`GvioWvI6txnExSx4+AQCrme-lW4`?ELkh2K%4=8NePleWWsUr+SKfV) z_RA$vK*xwUiSbVR`A&(uoq_#)rd3`Dge6#UM_R?hi}8&42r>lPDZY7y+js{1W+i_| z5o7d1mw{?kPjPeJ4LEOqOt?j4CguoLc6mJ;|G4mScTqv{yh)IGJ(`Do zws!&i$IBZY&8viT;6dmjlI?-KzUcD1<+$!q@M_!oBKhw`m{{&^96 zNUE>ATmClqA@$^2oI#xibrMPRH908pww`b|^z0ilF)t9e^Mvqkc)R6xC)LyGVi>h?%nvpu%v+B$n@95|^P{XY z;ENVWVZwiXtxbzX`ApRLVI}a4|AMln@UK}kPW1Fc`=eSSl5vvc@7qh~UV}wA6Tek> z3N{C9yd0MDr>$?j<=x3UJVs5dr&J`=z*3aea zd4wMkl(_C%zJjfWZbsm_!B)sLXa>?>8JvGecVeqhBvBdI6Eg8S^tHNmvT>_mLEnZq zF|o4w@I!_9%WxP7udpEz28<+Mciu zYR@ml$fY=kH#onaaB}GCPH-~W(hlLHuGtrUN1n1N?#pVA!*`6<~yLvH|eUy6GB z{mfznblfS`JMm^K`_b=KNbAYX!UvGU`t44eajFNIA1{NaUXwKkl5VVk{pKdFKwd~s zC$7h2jXr!M?#)AxfhVGwlyq)>ytrrx-!K(vgR)D_r@-bZD4VvJ|hUD zm^4rn`#B&}%lEUWai8aCKeq?#G)FdVOe)#5ohFPqcE#PFIYN2Gp5yR~${4@D_q*j= zVY5Dnka+bRtP1D6t3cn0-__=`Ryn-A#X$Rojf-6#w?YNYtiW;I=lMlC`8tMrU)2fP zBG4HJc~AADC-!tFfh)xD zZO|#tFMWYJJ~!fdewlhQun!;Jm~a0M zS%eb+Kk^|P+vmAY!anSS)x}krdanomG10>tgcKlY;1}}_>9P>s;Ra!UA4$;H`UWNF zA9ek+eNcivzSzq0pUBx2Z(7;K2>$lGJghyBbq?;sN0)7ZebnGSd0!5r_ef zS3xJ*zkmeoM?F*@eiF37argSN6)ack*9gPOW>F2FTdIVlTz?ek9BJ%!j4e@p)ZE4- zz{6nUcl%3a^vUdC(? z?sx?{ZpS+~{nq?&oQm_^}|KCH)ss9<_;4|Q-ftg&-By1F30zwcp zkHJ&u-O$F^_u~DTsA&RppZyjg#9_ zW437iR1?tZ-XX~)o9##Ft@b1Iu2Y?`Ji5b=&?}Rznk0q+qm^^|Z4X}}j9s!l#OZu< zqZ(2;CUy+YO-J>=Qp%(ywE@}A^S&?qfDXKr*?Z?a84z(Q;r~wt)FIKc8kq8wqro?W z*X`qgeY8~KY-qj^;fXjK8ro&p)l>*#50!AGXF=fu0;f46PKI9uF^{c&(yhY|<#BC= zzz@nLE72{8*H^z(>~=LPHPjzcZZdZg9|$r4VKk$s2SH z6YCTARSG}!Ox#Dc-`qbD|Eqfv@xQ7k!cFzWN`-lcdOaIfSrzzNO{GloB2mjIS~wfk ztrodBH^rs`iPy|)v9pQu0mqAHr-+`2t~|b~;%h_IoBv7Ia)`VRMMv z-)Do!GISciB+yeXwiru`1Y;jolM>R_48(~c#113s{F0xKaK!&II1gU{eTy(onw>Fn za1I}Yd>uWBr4Kicz_W_lpHMFn6NixJOr`A9Tv1&Hw1UKGd`amGmJ2PbOG`?D@6={2 zRW}t0XL@a=cBV+E=ru}uqo&dg&7<6DrAc^uiFkW0Sd-@>M(s#6XE(7^(Sk&ONjOh( z=bim5bLRN3V>tckwt+FxqqUnv2XRly8kKcMd2 z!{wRO8ze(~rNr;;n$FylfA-I#GmTq>7l%&V|AW3js>xDnfNWpomX|`qJ%`QwVf9O} z0*(b90iCxPa;6GJ*lh{9+Zt=2Suo;7vg6AJAE9Y2uvtr}?Ht-pJCtl|KD-++X_i)u zq_i8HOp?ycPX9bg**qOz)hW?jRRy%~d14a7PFr63j74bq3)VGkusRqe&2W%8Bq{|~ z*$>`?NvIHR>Bf#{0@udY)7Q9f;47n);ib{g(c;%F|0fWkD!{9fUE2)C=GWsC+i~1An-U$^e27A$8x;c33q%o4#&EXCudXcU-NcA4PpGz7Z3$4 z`b--;Iak!!Rc<{{N%ckg1sn4==hcD3OM@Kr#}>bSQ;|^ZB|a<7${J~>$~bsDdo)5g z!bk)y0$BhXZ2eu$T!e^~EpA))HGJFlHmIX7HegZdt+BBM{%p+3Fk5h^O+Hw8!$8ODo~a z_V{92nL~OQBT2$Gz&`~uAxF5aQjQV2z-w$eBQ{R{ehKk^Ocl}cBwF17jg@HdV~TuL z12maLGfOo40F9Gqi4v`BfF`d}qr7OexS$DNot0a|!l%v|aj}%1W>p&%&u+nE1&_sbNT+ zHY_#O+ccCq5~<0S&~Dho$!QyfBnH2B}``|E|8lUwWP! zN)1Qqg<+{@dbSUxMj*9qSgNzW4jB2U6w6D5N^N!<+09g|kLWm zlD?!zhShd;&vGf1MshrAYa5ojv}fr+>PTY(Qg26UF?RGL<35Cz0Q^S_^LrKzLzqSGFv3H ziy8Aq7=fh>&ZaD9x?p`T8SBE=yRGap%yWC;Z>A36RfKwkHxL>T-bFZs@BzY6gkuPw zAsk0=BAh}vjnInVM)(2YJi-M80pT)&h|r6`yaV|Of*L`OU_cm&5RMRyU_^*VNJbcs zU`CjXkcDue7%~}zQwVoL4+|?gbl{^QQP?6pD=H-|yfDEmCR&-qd#r!4Ca$|@9U)+* zz-q z2*bNbvnt)h_cTj5&o5Yhz-kRH<`4Bnv_8mrg>6DpGMxwjk6?>XEUFhU37hg1ZYqIx zE|>$vOq@=3wODOMIAq?W7k>MEdi!nRkxmj?0``n zB#DDx-q76Z-{S>iT|U2nz0?tqkcBtPOrJrr^_Y8ScMy2v2c5Hvn1tC2 zc6RFxoAZpeO?e|QhF-IdhW%75)vb;&IEwjNlIkRLyas#rGKa!ZdcR!qCHwG$d1`nlQss6! zol$ox)P~yK`K>MNw1&=L?eBV?!cL40sc``RZt7k6M=-+w)U?ucHsS%HgelMEymDq` z#9uG+?Q&q}XmNTjXC`GC+udaYdezXUR-uPC+~d84e!@oxUNz%~~b!VTsBN)9of?1ERXG z$-D8od5=nYcV3fs5dU9>S$0sS_Yv|8%2QVL%ZAmjQdl6B{%Sy;zrS;J3~YUb8@jhS zfc|bkyd)scD*^QU0D2YZfpR-w<4X0v5zie?_xIPk*R;zk?IW+>U(9#I`}V)r&Fk;4 z%fInF{WZ_~__}5I-%r^!dEb=s`rqy+XjP@)w^JP6F1ys;k=NY&Ou)SlNcTP=Q7Ua5 z|KzGl>;~94>@m%EtSg&4Z`G5_*hzcv1&asO{5JS(V3I=Cjp7Tfgkkfe?+`FMjMj`6 zdvbc4Uzep7w3i(wTTVNnN>|L@m>zq&t}}-_k~a1mbCxD~%xQnV&wO>A6+q$Mm=-)h zae!jxG-=AyCR>y|w_TZN&NX74XOoiFVJ8i253)lXs6|51y3qr*c*R$5F4t%Pn+Nnl*aYB%B(tuBb>t_s40x+opD||O8Ea4i zwKTEi>0}dHN*dJn4lDI9oiA~Brg5k1k|Bv!1iSy7PQM!GGwFKp7nHvU=M?^4sY^cX zNT4?1dE(XQB?hk>eBN|lqXoM*YZO{l*ZGpn-?G`MH4e0k+kkdaiHXRCrzl@_yW9Lq(3yOJ5Fzq1LbTsFMF=2y;R5T zc#oGqH;X6F4^NAu%F>|mGSbLS(_+nuam#9bX;I&d>)F!FPFV_FBhpdQyGFRDi(!m4 zU+ZK~+!4*VZ;x3N&UKtzx76^IrL&E5Gimh>vXo=fV};N?3m8My3%hGLY4&|cAe;eW^w~*CKJ*u*;C;TgoG?&ZVDise@VgwVkxml4Fr1)} zrx)UE=&a<6H|4AgVQ_9e9uWUHApTxJyeS}F9}s^rAigUg{&YZmYe0Mh;@7LweW0%k z$oKnz_}u~VWdZR;0rB|(@p%F9oPhWZh+ps7X3(bvUExfpY(it z%kX<+ult-^rMy2}(tCrKhJRan!c$Hc)p)!cHzfIQbl(|bPv-LOn=>t3~uuV7ok20rTr_B4LG7Wf7!~4(A%N2Yxyv$MmqfGsE z%Ctyjet>(gSLWnv%IuK1@9Te4;n%e3tLx_V^M{MC=~Ksb^EOE1qU@S-_epvEy|-H$ zQ*{z$c>TYY_`At?&TzWFuk_c9lg-zCzJE;FujzwT*Ujs1*YVTC-@&5m=JmI$@tSgH zT{rJesSjHJJ-pnc>*n1gk`E!+MzX21;j`rxFn|2 zz%9gi&rZu}(tQA4{naaO?A7>|=&SMEfcQeuXs))%+6+LSSDf@;g+tSk&~m6Y+$t^4 zW^&74vH^|R$0W;IN>;I%CCd$mb8Tz~7aJ>Vo-@bl^ZewHVOLRL!>;06jg9sabUH%i z(2jyEuW;(%{@ylr*_}Sx6r zrd8zc8s4a3>HA*^Sp)WRLt4~o_=ZrGCIz5sh=*4g!4o^iJ>IeKP|R01NZj$!wK?3t zz7?{HHN<1>k>0@*&?DojbsLzS>`rctjhF3E?3C~Hd0zD?q2n)`&lRrE+W>B_-O)HI zhAoRH{%w%vb{q|lVV4b~eeLKCj$xk&3(R-iQJxsXt{q1E$gve?QOgqo^Br=OK{r_$ z8c2J~ku@@gEieYsUUk%j#IQD;$zH9?9>-^F3?T9YX;qGzxEMBO80`ti1=MA=Ixyd3 zj+v=3?2NQP+FHj4vKY2i9!Rq}>bV&9t)xKOU5>n%7b;U{O=FL+A-B}IVy&A4x^2CTt{`YUqwsa1um*i>~}WO;w8 z%C)52m#oKbf^;p1!jL}ih=KfEY7p}KQnk?Rrn~l(&uBhfPF~8c-nkMbkOiZP-?qvn zj;!K3fvVJQ;*uS?yh-5Hbl$qKje{g|o`lW?d$5ukO9A{DvRWoF=b~@J6dwA6IDwo5 z9a(>#nE6$fx+_a^cS^glrTI0E9PFVXbHu4UJ6S%J&p!uG($HXWUTM}5H-E&Qovr^|ENW!5{&Yw0%!J7=_cFpv0>Kab&HO?hki(sD+g(=N9faw*rfGOm8l zJJP!TC#)OSTmL5i2K}*N>r4fF8D4LW_pghFYx1^9dHwS?@mkOiktoBT@8_WxUvsbH zy3g4q&GPDN^6m?G&g0T^>LkiwKi&8h2RrmXuex!SEM4DbD*rW2<0>hCKTYX+t^Bo4 z2Y06>zk^ed)&&z620MWycil3BU=N9NGJ;!mbfO-=g33Kni(ioulGRRFk)(~rd5hf5 z8fDO{X55^So%9YgO74S0V_*bn*H<$0Xjy z`t|U2bL>DL4)();rmh(F?nl7hp5A7`HTSUt_xZI)^f*5uR1my-*xrXX5iT_&tnp?; z%OwSNAtQv>x;fa0`0YbTbK~N``VD)=Vfb99K_{EDVq*ntiUu{^+VRHV$!}n9pN%?t zJgts0cm%{=*Z4#uw5+T;pp^n)u2`}`14`pRp>ZzTdC2i!N%P9WaNFh2+J!t(iPI{o zbufHVF!p#OVQ^Il&w0tSRtCQrewK3}GfIW#D(X4sA>q;?s*fEKy+1-CPkJo2rt`M5 zwqhZ?JEv(iu=WhL2-`zKL$}{%gfPr-7=e3oZ7%{xbtKLO9uhu=uPY{bsw-w5>0a1{ zjP6~iIr(e@HZHueUxdC0d2=HzF+#fYcnV;D$klHaW{M9t-EY&^ht8w>Ms+9K^!pwX zYEhmZsT0I|n|1R>NoA_=rbg}CEa-bjA;lrGZ5>Albg1dfL&1mHewNT`$#U?9ia9n-lh0EH++~vc zo$%SLq=~~^np8m=MH#Du8%Vc2%U&sb=6!ZvF!^)E{xaBCJrq~_whzT+zGvozG*B)% zPUKz_gKIYq7y3!QSnM?HnOd*jy;*n*Pbfg{qdxg= z#hx1wd(C%4L&3hO(1A_tzX5lg>@UE7C-C+cBJ~ZFeg}T*eGB*9(LlMv`tLyc(f)<_ ze^~PMmyNMRzW%2Aef`C;@K#9H*;BdAuyZ4CfX{cg4xqlCmA<6uwSEiksrxqzG5u3f zQVs0!E&!pLq7{)cwoFKPRo08hFNVJpH8grdE2wjDg~ zT_)&GAyB*wJbf5+i^x}CMC;L^uO=C?=Pf?BwQh)#0iCfZAq2fOi6@*ZKbBy{5$IwC ze2a`J7w3i_V<&L}-6kLi;m$t5wFYf-KwT`72IKfl%6dwRP^HcGhF2iGp2Qo%Ot= z55}MuBs?AF`tAH!YUlZX`PT~r+HnvT0e%#nACY!-z0jLU$Lm^8+V5VJ|C-g5JT`Xh z<3fXPP$!pW??B!o6gI!qpLKYSpGzUzj0&M*V1G>SaWq;VDm>P&llDg@D`R@aPPQ?c z)?09%uk^gs%_S>b#<3|pd~4#qG9apE!Ykowl=-BEO68n#vpnMocqOH01wJ3XD5Q28 z2imDeJ8|+n&`$rl$kayIm=w0v5F24N@Z`}#j>IsY1Fcvcc zoiDUNgAk(yxd-pd8+Kpb!erpBv$0XY6TDgiY2Xc(K&7%NmO%sD%BBpvs7=oroKZ-th9~|=&w?pRN#*S?eYE3 z^Lf5Nt+Ea;!813bf26+KTh%1r$0TAL+|O(mJshwf4_MT#b-=Q3FT z$##t}M{D4zk?QN$S&eE{^K(5F-E6YVDNE*@InB=k!AoqLulj}ZCT5rD`B1V3(@1q-cEw5cxNEg)pcapz4nEXD8&HR6 zsSY>%KkJ|lsDljNBtMjDA?asSFpO>Qcq|BxQacq zntTP6LiZ=wNxms52l=P$_S_}SXoRh#X#2hOEh}*uq**~Z7Q)iD30&A9EeHEY@-JZk z-x`V8@O=q;%CGerEbMQFf5!MQ=)KTfJ*qXRkdW(ArvsDz@+HzT(uAU9#5r3*Du?udZgl#}kT3l}Ai^RO6e zNQaFUm8xj-dubiC%<{iGj%Ur`4tb^;NJ&1=Yh;TZ&GF$5ZY)W?h*k?4;u${AF2@2v zKg9pfN|kIH=P*}(xp(&1xI*R%*8D5&_ig}}Hbt^K&CiFO`z*gTpWn{?$~pO!v-ila zoUo~Zs^Z5;x_+()AC_O)SXLzT_sG#}@L+wV^pQ=%qdimj>*c3;V-0pzw5Qqn#o&BG zvPZk{fVATpcaZidgfHW_>42uY#N!8b27`O~n@HF)krEo7l79*-^+@cal&$e(RR!Gv zxp|Wi-~U>tTy_g~pfUxW?)uMplMXPD@jW0gmQBLrUN$)zr{_$p#}f>lT`Sgzy5fx{L#J2PIjs_ zd{sEDPMd_bzNqxeE+&!iQ`BCi2j0T2oLsKDa`s*+PX^WX%RYC+PZ67hzxQ$J7hH-f z8`t=I^PL{Wl_SgLSB_XU85*cCu5W z(k}+|0`G6Z*o6zF4j?Ycd>N zPo6JprXE3WtVCZha;ZNaJ3q*iK=-(+$F#8b%wu*85GzCMy?!%dI}tnBpAjp+VuH_{#{Nl&jYn*MeP#fUxEKMk?l5!=z9h1d$jp6;KHSSeyp_M7mGLwLrP z{xs0+pl#}(09q?(kM_R`+78ej?2nztV%G}(znk4Bzw#>HXCv&rHwni?wD8Jbk!MAJ zK4PCCc4xokqM4On`4;ip`cpx@fY{BT#vtC0_>KKVU40m9YQ*{e98g0Mn}Z&@f6`zN z-8aeKL-$Rh9=d;$7V>E~WU91}i~+}gddevN%_|ujnIy71u#3wcvWwjh0fWtURIGVe zvHk5GsW$C%?^!g}%%v|XU81or6*9qv;09lY=KS7KX^?t6ny1FT?GWry-?zxBG;K^e zJla$~AZ+Gm1d;0!rnhe z*dfI~>a+9lMo2Fpr3i1zgkGb>`NU=c$LpCMmWSVTVF5INM>WVLx&OcWh%!!Or5u}( zBL>&AkRzsHgp}jcKB5GRGAYOX$dQEW@yLSpgTc2lkA5ot0jcdxbW%0EBU7nYNw|S)N z&@cE7HCYmR1u#0QX}25XA|F(`{j!=0;Ui!BJe?#*Aglte3Ua>cbMw-G{4T3`G;bnC zN0aXdT;GJ!n)pPlXpCA0>R)_k3Q2~r0ej4FyF6P39|o%33q^U6YCAK2BEIF|>RXy) z`QZIrjkcjuxJQxzu)L}*_}N%~39p4*qEc82omY|ujA?xU`!=P>n#|x?9%z6+tKJ9D zqOrb1om!y&$af#=3=IL=QLKDByeOHJ)r9AE2pXZsTuUI~UI6RNS*X?9-PAsri$lxy zbt`wLG{=pFm*iL$ee_1Jyf(90-kB^T-;hLkrT6MSxE%V$`s$7F$u5rz*{9!M49&7n zd-eN6>KF3m4SB-5J$lsB&>FI@0;8nKS26I_AMB|>JwNZKd7*sYCLmK_W?aF>Y9?Vm zED7BKA2K!i%n{WU!s;FdG9e|dD_}_hRI5Z8A6maac(z-yTOJp*KWvwJb=baDlUjGYoo;Qw7>w5^V1zE>ZxiL?a(KO0xfpuCM=ON( zK6a}7%E^`T$t=GYb#Ck53)#>n;k)j=s8<(Ob?E*cJq!G}@pyI(>NW-PsseC@kD@+eI1)w}Qil-I86*OZZW<`|UkC2|?gUS2VB~G9)a9{xMcI4)gq% zf0DC*LD+^+iI8|x5qtJ2IV&JcK)8hS#S3Lt_6U9-LKyc)IcqE=o(TL%IlP8|A0fn} ztNh4D;SYWJ`NWTGe293Gjl$+WvhiCWJdN>8JPEK$`-msmD6GXV@gy6C`w=?}$}0R4 zPqI;1iC8-*R&b0Y=b;(tU2yfZ;xmrKqlM*O%j2gV^8?3<;luk9sz^}gs;}N48B;(g#0~2CY1F{JvtbF>q*P#Y<4!p2hl)=&L2uTo-+EqdctE&IrgRrwKDyR`I~B|WmmO|D`gETIMS8GZ-pmEg@%DAD|nN1AIl%_ z_yf>U_QDQ850Bhgj_fjaT2cPRlL_treP|I+<=q=`0Q#hip1*kSYMj7mDjj2ijggL1 zp>UC1+9r-~d?OD?QcHDS#V48xdmXc|pJ4Q3zF{V4T8i3l(QCc>-lFzpH)_1mx6CTj zxmQlPmik7gRzC~RebMsO$-h}9p2!K;Cg5qS?D+`}Ld4ST#*?z)vHRmJM@gP0Z7*s$ z@QgHi#v;9D;28>UbY?a^BlB7+J%ifzH_J&E`6O34KXa%=_Dil6cKO()gt)V!Fan>+ zD%Zewd{m@1jdRLGb|!YCSV0hre#bI~|MleY4o=3V#yB2m*Xv92P(rp_x{tn`V4HI9 z3sI`)ne;KOOs7V<3-+?qyj?nw3WWT$>|e zu63eq?q%lQiPj_=JCSXJjBwiYzY@(E?&?fjCwW3bhOj;Lk!lRl{ieTi@ zAc@Oe3p6CDGzNarF#_~#CT4c$7?IsZXTKijG2jhcJ~w&+oBi)_!Us9IZ0e&2I&KY7 zoMgWN&L8al6`8DC*F;*{gd1|qkt1rdXYlgY!O|5}i*a~5>eB5Be7^tttsG$m29X}8 zhH>kG#ZfC;yTZm+TdeX-RTvHa2a9Ym`tH65`TsDzrs5 zX>A|jB(XMp1?I(%-~}oZJ!~(DZZ*0YQ-ZKrVOq<^l~{j%C(c^3_Dh>8EmZPFDmUOy zrBnqqYux$JH6fdTgtc^UTuG+2>~Ox2qv(RqdwR#Y>*Y3!O}Rd^nH?{8jTXv)Xco=i z>SR*!#ub`x7h2NzFyN{&$@5+8^s&6?0*~YxMepClx|yUf{^f8cR+~DLFKXYS*SDp+ zt8g;MPKhgEGs$AunwPUgp22w4dB8*9g_bUjHZ|21J)g}s0wYnf!8IJX82uAUoLOTD zaTyBtLc51C!G@a4Z4RFQ1b%l)6zQzJNn1EZU_-PwhNG68d!>c2%b2`@**3k))qRd} z^i@xJgyt5GVeB#l!C+;b2=ik&zA{|RE8LoLc1B7w3+Wk~wZ{_5cbzDk8!EJg(0kN5 zLj`+YxFc4u&r!JYtgLa_+HkAU7{1nkIo*(hT@2<;!pwk|`txe`jA-7Ok=C8}nS<-} zWh-0Hi1G6BJcGzJ>Ttaih-E-^NRxd#!G!N6+q6Cm?>E7DyHfv^Z=PA=QhP7-&l92_ z&Ese%Uv%K&^Y6DPWnZn6@{7pB?%<{pH+%j9yNAYoj?hw3vOcQWgz>@%UsaqEnY#Bn zGeSOt9=dOey!8TP*lLiu z9@kEAyXRq6*mk?f8W!dSFImHEvlzbV#Q%5)=*K_o;JA6}Z5G8zd@uJcjg(IX^}axg zEP%2!61k$;44P+9i!5fsX#StyG6}C+viXls0Pm{o(X-kPHCr(D4ZLgCM0Gpm00s%p z*eE{H$#(j(LOXqa4_$-?7{}t|oQ)lEfYR09e%8q_T_n3P&kW6rr$W5>6wCux;g_Yu%m z72n>QKZE9&nXqEJVNU_x+WWVQ3{xy7*a?3PwpQO1wSR`+ILA@+3i?uwJb%hjZ?VKm z6r6VciR3lcqsoS;ijz^1$f<|t8TvnqopBT=wobmn!nI_;avw)xZp~z~F)KDb4mr}8 z36pr`x360m;c5F|?bgjliVnP#@n$jMXi@u(vT92hYIhvJ@eZU#10jgJSzV2qQ4G&J zuJ4rVk#hW6s%(g=I9W?I8_!NczVYm=56@w>qB$U~$MsJ5P44tKvvF;imN%ElroPK# z?w+Kl)YKl=nn=_*G0VtI(8Ax&>y~Ll{a7#`C6xYFO_8P_UQ=K-N;O4FKu!HrnSPK; zH3bbd1qC(z=p2oXdCnpspObaU*f6ZCY22bRj>e06f@x7%Vj=3C2*0=qw~L&a>r7_G z@uSO%VGmfs)Z_<$^F98@J4Tg#j4`xSU6U_AIkKGM^2sC10+KhU|LIMv&ov)$XiC9~fFJq@?q()%o83}*e<3V|K zSw^ZpFQhf~rj2={M42=Lebk}TMRl?&m5XzuuTta)yDi-(Cb~0{V;8`eQm1eFmz|96 zv||*I+BW5#c4$Ch5_acBx_8iAKK)iP>FAC5$vvuzdatZ^)BtuuQXO$YdmVS@C6sBs z(NEqirWLa@6<+m~-4-o>_5|9UuooCOc;4;ZC#c@=j)VV){bUrA{5X0_-bOrUF_2}xIoA=nB$|+oqR}=j!Vl2(JBE;~^|w>b>z`+g z$yVcf1J;AvT~_?EA-A}U%?UPkg4$uV7CBRH!py|LCiy71$5KL>NQ6Iw`)x|RpL==s zStenG+aN0H*jm&|t@EnIqV^>P9DYB_SGgjanTc#GR=8>Gl$-L~TbSA@2eg}*NkBA= zgEw@{yU<1AmNpIYB;W+~#7Ty=-JM_WxSP*Nm$hoKlDu#y?J0a7v#-RqG@=B&-qI+O zRbM+6C%n``#__TSM;QwLxj1LLJ@TfQj1;al6!+e_jGc8)L}83(Dp7(!S-OnP{ydUR z(KvO5cSn${&bA&XREBph*8RL{Ewy)Qm?FvS?=H!>Q-q%tT^Kpc%Lj`{V;9nvlFzUBkes|h> z@_?o51QUOk`+aG}T*`B;nbLZxGw0^LXj#y@KKg1(`cTRqOD^zBX^mZiJ5u~~c%D53 zoS7_MW}cU<{H9QF<8+rvPH{pKjnOZE!&pduNakbD7iD920wb$2%C^)ZtIkD#ZtZ5^ z*%N0Zll8F8HHL4sn0W3)WH~#TNfn*Z<&1~_rr$&`ALFOMb zccM1nt}}oK8Vpp;OUoA6=0L8uCX(4s{%U&r^Ku(InIbjtSJ`-l)Elw^6he5_!}0cC5u3CAos0Ke`1~F48JYMhOkwR`ubb$C zw+t4#d$AIxQ6jhwC6k^b{MFv6;l-?q5g7AH63(+lBSy=scSq^euQc@mdl5?|PmT zv6h2(SKrP+HX#^TG1AjG}kFww<`-AxtDVm%{ev4{b!zg>&W>K zCgjr>AcK1XA(6io`$h87Nd6dTugvXG>|vih-XW7Ic1*%(EEP|Sj4`f>@(@z?Cy=7; zQRbmcW>Fe?FeAVB1+b$HM1#${I$YK?~(fBMK4-sdm-u`>tKr%&|akd zk}wAdb?ZlBwaaord-LcAkZotST5L?J*)?u~HZy-c?ck@4V-uwrTgOg?eDfKg(#GAB z-_Z)68nUN;&-#AS&=x8%m*&tf<2Zi&xc;b&up5~;J?bAOY0OIXE!xI^H;+kru5lE0 zX&T#U^jkAL;l2l%llnQu_EFVKp?w<8j|9*0Qm0wj^^PWeFL)`)6kc6W#UhrTM49kLh}8KolR0d z$D}aA{S{1Vjj-aMHMc{rT7*_i2Uau7 zW;AQv^MxEOomQ&r&bpUG&le0@igV=$I)Be%9*tcfVY_4I1O{M^5K@tgl;u*&oM9=l ziY>o!&lNidPo)Ozm(6LwbH^_CO?xi-8Y?;VwaWL7W+Hc*`dZ0fI>)5s2(9)sTVcMk zHDwcBeP!RB&s;iTXJU7vX6o(J_(g6eWuX%ef;#V3s;f}T#QYSjg0YY@z^8DI@PYlV z@(JlOmn@Uzwa3U#%4`#a6LU(Zo5{K+n_(L-iu%~zj%(s4!{-y}ahuaK+BfGvA1uW2F< zoH41Z8TU562E2?p4PKgf9b|3P=JXWKX-<*5h%-U_OWZxF(WQMvMY@c_?G+*W`+E&|00&+64HecN~8YgwMR#|YTdOvXe`bIaI`T4?2 zz3SZ&n1jem;%uK{H?*J!P5};gMV|M2F6f6mr=jn6?6L>t>_Z5}2=fvC;~gvM;6*ug z>$$aswp_^gIBVhh+_l8d7}_$@m`<%+)~du>b8^|2;o1yMrnCo2!#*Jmd!Uns!{7Cc zm1J;1>*Y101OranWHyUnw;;%5K#E)6GHU|oRUJb;! zDht<2a<)Uh6t{ML+}cPR?N7!)=e=^-%i)>~8D>X%FVfSOLMpP9b}9Z`A<`};&KhBR z%A##s7`YwT6pX0^vQLtWQmKo2OzVxXcrkFas+!g!RpO0TqwaYK0`UAo*8iaq_6Bc_ z5zH#+B<_&!V0K|v!QEB9PtB5!n1LtNqexH8+s4x zu}Y|e0J0ekQv2ogY;$_G>Lg|Ron1v-&y20qb%Tg zA8{1&AM!PX)x>~mm8IugvQ}tf)#j#)KmMYLRq#rngEw7t|Dxj4!|R#kWI4VH)@!I5 zQ3XT?WAr}6wjUaxU+K|Rg%UkU_gv!Jq0eaK!Le4DfWq)JY|{d$d)0 ztCGK>~D>M`vP^YKC6FmM6Igh6Gagp z^z3cmeB#}01=D$;-j^mUffdRu9qrsNu;yDt`M=m1@M!j!-W&V~(jN=q;iU>#ADEMZ zAt4WDQYF8=!NG_h!EWd~_~$&`I+vGcQ@KpynCj5lc=xCOzm_h~4t`;Dbx`dK5hHg| z?=i98pO>*CUpQb9PyRz(**GFL^u;fEo-cQY)&%XD89AcnRfDYKm>gcfeqv0Jy>!g7 z{ns08`r*9HG^V!3a_O7VHSF~4NSfg!tC;~j+1p$}&tv7?HJ-oGedWCD-ao(Of@h3I zOY@w6{1kleoD+X~1wPPlhCZEdy7|V}mu$L`31#f91 z!t13-Nj4X3LV(?DkX%3#L?U1b8!{w- za@d2zY5;2&3pE7g2)1rGDvErYWC>(9M5t05KrxHOCL$&(wOH!68v%tJU)Q68;4uM` znayr?|L@Q2a_G1H{{DHrHuKEPbIE2cT`0$1RA4VEj5trPurh7e`*9;nX|*E8kaPx{+GX5`S55<;S;Qr}(z%_N%!-h3 ze30(4x%&a59v{>_A2~IC=hyEW?kU9iQSCQIpFQa}?OVkC#vSoO|K`Bp*H1-h;)wr} zhyV22>%JJ~@9wFxRe#@3@&Shaa8H-Bv&-32uY|+IgBvz5k~QLYzJDb9cl@Y4MV%N4 zC<^-CjC~hFu#=$cV?(##=KloDoDzDfz;%naAud)7*Cgf@4dYyxmpdJbTu61QCRU|i zmb33`BX-7{IzKFa=UPWX!sRmwMf_z)PE~%@3|NLG@OiQ&UN-k$uPRs5N#6^Qub7}8 z`F6AU6uEhTig|HX3A$RnT`Kn6c2(M0H?F5uBhF^omH4JaXD!1QU;MyC@QjF}RzNzj z;nUE}QQ&hr2%&QdEfsTG35<~WkThVxjn zEMue;)2<+j1t>GZ!qOmPPVjv`IurCl_fa;d0i33g&=DruMAjY|g;5$oh4%pDTKC(E zugK&Wq2%vJ-=@gDqw@f`)4)0vGp`sF5(Se1%wDkywpxsNEw~06FZEF3NT3&FcU5Gg z)1bjNwQ^JWl=4lLHg8pBQJ2FywelXHGIy$1?mXX?Q&mtU$Lz^)syl7aBm*AGnrS34 zKD)irp5v*py&N5x!bkSykx?G#li!T6rO8c#%n1?-g~Ee2Gtai?1D~0V9V|agcu+{V z;wLLp`61%&j6zyT>u(Ed-VT}6m)AzJXYu>tI)cvpB`re{k;B60p<8RI74}upwKT65 zr|#Jd(sJ|OxgAooKf(*JOVlu(i<-pNmI+OI`((Se)+(LAunjdhF3WXkI5T%#*6DPh zF0#C7_=;-8^&!oti5ycO7PbWnK3k%SJJ)f|VYEWSjci_l4@*>4_t8R03hR)&Kiz>C zL3+#_s7?#(VLTHd{4(5!&ulO$OQog>iaxK85Wx3-@|E!3w)-fMPM z4hxcw@j0y4%K1Kee{Wa1ohZ(U_ET46tjl(?{atu`%CUpXFFQ%JHz;X~JtQmw#a%qp zTz;nym`2A3qPb%kY>^5&BN)f{PVipYoX$vZ0iSB9$1~7l>aD`R!rpd8t{r~vMq9vZ zZ?vV&vA_R=w$jno9JB@cUZSyI^r6NMf_QHuVilA10JYk398xLf+RKg>`___kIIGMk;?-V%l4xVptL6SN?Gb?_+$w~E@9!cWz1stf!JNrPf_@2wn5 zu;Lg|+aBT1G)izIB>ci}E+6@+RHH%Nh1DQ0vlU6Q_)}aphrVKz4D%NB;LJ>nsiVNK`{)7<_Pk!rNP;9KDv(s$Y#SYiKU#4o`a zQ8$>|tW~r^Xnp8mu}0j9kgzV?<;w#{e+Trdp8#H6WU3KaNxo50ny~2f6_%l~vp(R3 zoYZP3I8#V3v;nH6QyZ|i6rd;-cy=J zTFf1DVg$yrPb@j+nkYL;M9*ozhvxe>tRbD;w1{y?9>O7U96;ly8BbMRSL` zhW3`V600B&rz^9foc0RAWlox3^eYdiuOuV?KcHy{3BML|FyA)#WCJHvcr&!3>Ws8Ehe!ET#A#vEX?_7K(#e*2 zp(op3r&6E2YF9x@y8@$?OCwgh;yoI!jQ0%niWwcCUfewxD{-se92o!A80lpGY4NQy z_sDl6*#!I!d^?i855Fn+@!yPO-@%WpMD)N&J;R`4e?Tw&5BxhL9de? zV(U^R82Za0*-biT7%Z~LZiM6p>Qpi7)!LT-It+z`>@tN~CfAH__#566fdXJwLO{eMZDDc_6Ij{?y0JD4RV8 z=NT*CV~d<;OwPK_zr%At8xXN>;xwfoA=?KwN*>o;1NAX)0u)k zz}5_30KPNDUzXqJTWfz85{!wUsO9=ICHM7^erJB~Nev166EchXr6m?zM@qe9zW5YMj!67M{DV>8v+f;)flf4lSL@V!6Zj&T%o`Gd;T)g*a0DYW ziDP_opz9;=4hcNstz`HnaOxv*|J;c^088GEonlHy+P zRW;7?+>WsDYFO?zG$t0yowxe(E$HG%oRQ(2lKU@Mdpy$;_fPgn+Z7{YLz&zf zP6=C|m%^&XOm6u~!aEX+S1i-s;DgS47h{Mc+>nJnqEq8i)qEmuRcq}e14yX4w@Ge~ zsU2A}!#TBTGjK(sr}edvq)7Diln5>cs7^5(;i(_cbYHmk^F*A@ao+n?^0O*;0zY5Q zLK~~pr*9zrpcR!xc$;2c=Cd79xj1p_J@Lp<#P4;iD98IsRbzU&-fdE)R~GfT9GV9B z$dt5{R@~&_?)0sxVzP2N^X+U_rbMTY>8z@Hv~3FH06IGN<=|vjZUr^IqLNmDMqcYv zA)W`DZmmRHaVyG6Ln+5D^U@00;?ui}c^P!PZ0MJ@vf%ToDkeLtlWMy|s?FM|Y5?7Q zE~bC$hAPCbBaYM7d)C@NN(~9BupV5ZN6KxSrBdT6_Nf{i;Nh<*x14YDeQHOlnBr!NDSIhfXPL@E@PWxMC26 z6x=$T%Po^2@iZ;npmXXPC*)`^m;e#~d(c=@dh?w4^JkDA95&X(I$58wA+~0sJ;nv! zLb|DT=<-Z)175gsp5@0;ZFbZKy`KFlx2{j7`|xODUA$_ML=$RsKfq4WHojp}_i0&efh0%Qg8!#|7CHiw z^eGFH{Pf}y|A%?@{7iKX_2i2?A<=w5?Nqx#SAg5|nrXo(&BQe4S`(YSv{Ns#rM}xUh^t5NsfcTB2XxXe;0RA)_3vKM$(LXc4#DrQ zvhl)9CjB&YUy_{KMqpohj4f-h6Lju=i8tZfXm7Ap+TQ_9no_6!kmiRm8=TaSB;xs4 zC}&cwu90x6#0KbiO^aYcEZopPk~f-0 zIPXs#=N~&8=-rZWz5`Gx)m3 z4UG9|o1(M0MDKUoM8rlLUdKx^4 z;=Re$a<$?c;LXkvjicPG^PMX?HrdTk)MRspsmLa)F(In#7e|ML>4Tn&x(2z#QD$;Y z(h1e*$*s_1w&EI%9;J^`;5tp%g|C41dC!g#TaV7o7U=50VF2C1KcJCx^*uLS< z)7VtL+wU2zu5nJ=b7+yi^zH9R_ad=@u~=#u&^6Sjr4k2;dUPs!>N5QQI9RL2+2xCI z>%kLp+L&trN2Hew?{%P*xv&bd8`&m1cy_>aq|r#2j=rYKQ;9fc%PRFQCn&@f<;%-0 zhu{NDZZ5Z0ni0?UZC_FYG>^?|?A0^hMeTIjEH!EC7J%1Ygjh7K?Ww>Qo(qwu^C6)% z(2Mu^nVY#&@JW%jU*7Ww@G#m{Re)G3m)rK|_FC``-d7d%RXeb^e6kG-G#{!-6IO8!Qioh+0rpBRJ5lA@VdKv*6I4A~H+?bE8)0(p^2RhamLwxS zGaI)87PKQa&==6=K(oV_O7oC6U(A8#s}q_$IEf$$`0CEtfxC(;*g0_tT_z z(~z$5XCmzoGo^GE(k!A`u@;AzB|XWO-ex1+AsVFrM*Me(N%)WG1d#36U{Ni%Q_MDs zjE2$nU#i#yuPe|^mEEx4Crf;$AmUq(=|740^>{DdwC|_)V*ZWyAL0ErybpfweemY{ zqj>)W-e3RT`|Efg@u6TUh~X%5Lt;66`rv;OKh-ba&T?zp&WfglTJc^>0v{h2(P(!f zJ{#NLyrxrJ6rah-(-Cbg%vi5D3Qu_Y4?Trb<@%vDiTpjsZ@()$UUYR*qRZ9{o%lrl zr{B9)QN|eaws`%FM7(6AfCRO~a@aaUQ;GJZl*28A$ zIwO56k^1(x5cN${0PS;Wd?!!`jc+-|r@{C%GBawVnw0#7R_Z;){3P4uYr^|*Y^Bi z%Wbvo8QgGNZ8d{Mx7GH{;4S|YlaD$53g|+$w)eowpQ&eeT@!vX_#-JAG4)jDoU>70 z*R39YRs+gMey~qiJS2n7TwL$+jWueGyOg3tvzgqYcFRhpPV0tFx4R0q{E|*g9#J^8 zRuw(*#u8}GrPjYJ)M0ooZ%&dWGg-mw#w z7I{bU@ETJ|SG|f)e~We_)lIxo)S9E}g@&c&ns7dFQoK`UJYlwWh<9RFGK{C+F@5wg z`G>EF1|w^Y^D$OW|Mt=P4|gOyqkOU7azCEuY3Do>qc4U&bnvtU3y)E_9z{n48 z;>Y>PCZ1_$dcxtvV~Jc{bk@#BN3w~ZG?;dR;&N-{3UKx0h?`yvkCfz<@D)8J>o&sYH1iK_|MH2gC0%fc@k&vNn0 zL%BO~EyQmceh=ek$8QyW75F`l--d#S*B3xJ{#2;L!;DMrMTE`*CMOnmutF~DpjAMdm?NLJy(o-Hic(L(E($r;8?@5Oq74s2`tKf#q_ zCQL^3I$*z=D)<&+o6iA?k)}#mxEN|J8R$HR9?El4B;7itOrJ#D253LRI+ukd>rlvm zNHhwgnM-J-weqR`{nV?l1Y@y7bU`Z1<|xjSm!`WVyJ)t#3Na5O-ibum-FU@2mnU@U?jntXYr@*W78~37O$vVzaW5tKX5iopa-G3P@a!65)T+5{ zusU7j`HSs2sg^HN>ZA2sLBu(Vy!Y?Q%|f{cpnLg$my1|}#K1}ezCXsI-AxaJdvZ70 z9XsgY7L_~)nnb1rwyNF6rw_KYmB171K3k@jsM>2n@*qmAB|O)`HK2F5@)`z>ZNnj# zVRX0p`n)Z+i=->p1i!ziMAJ#LF>mI5h)Q>^>&!)}g=!58zk!|Wv$#{ko{^#mwvdk0 z9Xd##tGN&&8B(67!MBR_-ClP>wC>ZW+t4|0rf24T+^zZEXLEM5jeKeZVv*)=1z@xh zYi1Z`_Za-?(QJo>>EZq0fRX&9;sldx=#G4YKlod0+Rm29cQmswr>Qs*$rJgHomuRV zeB3Y@n3455=m3%jD-$?4S=iIFk^URbM0nnlzW+6RH)9twF1DNUT@%*$TWz}_FP2%W zxi3uH_|?#^{mk2g6(PkAl;T6|XsPAYT$6vkITrAGBqz1BNnZDy)Ydg&o*yk&*3cS( zP0F}T2bVVU7hXlrn9Lu0b21<8T;e+b{U3NUkT=*?bl&HiH~8!|f~wRPRac}RwO01DD)5!ef&B7n~W?G%>ysPTf2oF$nMQeJq;ND+&zKRo35Csg9-` zl`<*SQ;_W;Xh|`Slvn|jwn;OMXmI$FUeWA{%>5Ez2D?SY{@ceAi#az$=ln0?qLRp* zkCo=?Lg$i;GIw*Tw0of!{!aHplAdM^cCq4}Bu@8yS|4L*@|(4Q|kNoQJudt`?hLo>}&k8X3A~`+4CuP9r zVFQ0vcr0Xk4fmB<@bIYaKd^oipDG#-7IIhN5re!wZsZHX%!H)&ES$mAmeu|!cH9H8bPX)$5Yd;g$jFnAq$l6q z_T;4W6~H0XJ3f@4v;u+bl&EWi8D%;OzW0M;38cfh&^M+ZD%IoH}xF zrq7D2($C@aA#a%#e4@D82fW*I4(FX4@ud`)WhMG`Rp5s<04u%DQt8tUypJdC#lJbO z3ZD-}>U zIQKa*H(@(u&P?VCFO#+0tKf6sp@PZ$Iry)Tcf-pk!PlRKe`lMAIWnLP1KKD<+K99f z>0-d>r1W}!64Li{?!rl5FJ`7YZIe55JiGi^c$0-Uc{oK)3ABy^f*aAP?XT?uUQjQl zA!mB$QqNgn74WW)oFh#w#0}^#+i8U5=X}os&!F(s5KDX= zivp_&+TE~5V!8K^mL3IcmS7@LA+Pj5@taS?lUtGi8x0w1PMirTmBS3p8N?v_G17T4 z{f=d-y4r7;9gsTynYrT{_}e1`;95A2e3}pVaaHiZhs!P4IW`ksOJ)}FP1TXNFOVll z$L%?2M^m2GcFdb&9M;R@)ha+*hA*wof$tPY^&_7i$W%t5Z4tkrdhVx6H^tj-ZNC6K z^m$uKS1C@ytMEp1ATzO32~H%dyY=2(V!-i!nb{Fw>4`j+amB5h`VX;QE_fN5_ z6?JlFB0phJ;g&bD+c!ft%n>9Y2dm^6M@N6QUb%rLQmurGLX|576R|nQWX53!~=*SE2KzBbA zuvpV^3+qu^CQEtETtz;QRsO$oXe`p1n*f})ziSOI?E5!)w3Z~P7PjB9MmmKPdh)5o zXZ}rIoyEraW<@kV@AA7aYNd1OZRRoAT>@x*Os zCIfnnrE>^<(cuRxR0%K8sQHMkunztv^Km|Zgn05h0FNpCI#y=H8%F}aG(i45N8psU zgEku8`?QCA11`jO-fvvWZJ!nK6u1m(G!DFOp z`9~fV&U#ukSB3S1DsB#DGNkTjRrJD5A@`M}W|Jd~57Y2mOoIyop_ zHnmVu6c)1EB}@Eyja+RD@T39-x1FowQk$CmtIC`F6&3L8hgRtv&h<|A4D)!!V66r| zV6WFIeRRjvvA7d!iJv~gtH$~sf!YbHL_El^n8R}NKv=H;#8wX#acb;>`-XsT6{(wv z!=T%{k^gG&8qRZS;ST8(85l?iEyWDMUr}>1Zx5XX{i!~vgwE7iP@ZQ&ftu`(@r8j2 zo>-4+B(SZ%xhm=l)0e3N*3ws@qF%f;7~`YdrzIJHd)uztrphXD5&;F!a^>6yBjo^9keV)v-8Xk?K+ zi!n)*fv!<)Ib-t8qCPx1c%zO3sN=pL)NufH{Otc($C79rJ^3MFoK(ZGXfJy5H}aGJ zLwViJK1_+0uR!^j@0G7W`QiVeyyj;4)SF}I!Wh1W_g)8gqXz_WHuC+Lx5zx~wcnZr zEo#^=&4Qo&l}o&<>sa~m60e(dBHEzWeR8(}r@kh>f%DIVHcAcF_d+!&I?_y0_U&S{ zIM*gSuL^I&f0MCB3BPk!p_9p2;*rip`WVs)NKZogRiqP<{t?m#kxoK-7Sb;wos9H+ zq??c)hV){j_aHqS>E%e*B5gwYS4i&|{1~h8194gnle0%mJNmbFWq)d=vj6obzy*}Y zI8$m0xqr0B)F~!u>Ve?|l{m=8wPbmW8Yv_xLl@mmZC+ftL$@VKtL;q+RX&)UK{2{U4S0V_;f1v$c@*O^Jn;@EWpa=|>q5dOLt4l&-|a?i`*S5NEUB*j(yVqx zJaMbtP4@f2ho-Tsdg&Q!naxF>5&lA_=qa3{!9jYr5N~ds#d1sYEZog6f|mx04It+q z#oQ=eOqQ~X%J$>~7Nsle_V}|4oE~~Y=PjMH=cL-Qe{i-dEIz7le`+($zl4eIm-8vX z)Mlki&hH+=Dk<3G&svz;%t-d3%(xr!OC|@W(il0sw^qZO2q-aENGKm7S@ppZp_>_# z=u2&u^KS*W;j7S`WpQ->k6__pd34S&&PgGG8=~iKTn_#UHim=nK5X=e^WxDDesJYx2-{p%0MH8 zr+DzvX>1eit?kM>#?oXrK(~)@K*JH1OuEA>IB+fGFTyWBt*)1(-YK!NsTQJ8 zKDWyvYc+bOl)h6DJa-g=zP=vN)EIqg*E1z=w&N=mYn<9{n!T3-n@dde#Kyq3Rs&6Y zX3T?JBR35;#E*9p9D2#W&GuL~;n>Ng8*(t-ZS&r@3;Bg`w?7& zSp;h>kiZsl5qL`)W&~-&LVdsjtr++>1hftbr-N~>$!=(Yfwz(F9UblQdjWz2PhAfm z34cjFc@_V@lS z;f=*AZkyzTm&qw3JT1Y=wy`PJF3-0f~S;B!5COnxPeL|RnF)+oKXE7ow#!h&m zy{9V|{P6(+zREHuca4|Q)kx=ejgiuukk08cbL2U7KzJN?8C_QC&99Lj)iqU0+mSYP zl}PF3NGEjVNa+WVHlXx4&{oj2%~T;xbk={+i}>x1RLK@Z z9j^6J|7N45wb(u@aya{Q0Jf7Ke4liTW93~y0C}HisW*L@;x@R z##aiPMoMo%d<4RnZQKv@o|W=09)i4srBVMVr0J7s$7ZTI1x87_X1^Gm0k=DQ5J$AUAlg}b|RG3F;E%pZjJA?;$$>dTps=#}-1nUDq#2ID3qNIZ^x;O5AE zv?eR^4bqiXo;sQ$s*&FH2r8`orV8~HQhh0ipoYtoedw}HPLB>t4#`6W?435Mp@{O<&7n9|A3nMjYMbR}a^1B2`nUWARz zX3phN!>=!6>4R3NswUQFwHTWF1#>vLIoAT;OS*m`HC&Xg0yR?v52w^JNwR(>k@dmznUvYpAB^c+0GNsTFYD; zw^`yBI^N{v|ys=r_$HXa$C=?Ncfosby1#YL^)E_v%d{duc#-P;+B&C z?xxwA^IBxxWlGrScfzqD%3Xp!oC18wE?D8Y_1=MX`A6w}4&Jv8(HB=nTY>iod@=BO z3tT1r-L!V-Y@!yJoD#y!jnX=opzq>TZR7i<$J%!J;VQ=eTt0b+0jUuSC2giEB7ie)| zU(srlI0G#=c)t2R8LYR4buyMxu3zX2j?FZ7vQqj=a9pNNdcO0LOtXZOp`U%iHni~& zwUG~PwNA8<-*_CeTfIwcu~1w0AC+bp^dG@@X-4yR*eu9tN?3T5$;STQ$oBQfYyCbZ zI^Xyvo#G`1vYT4ArW9@5?=NlJd5L8SYLtSOvEf;n-~8HL(Um+GD|vU&gs(CctK(oW z5xkE}5>%nNqPctyQ1*Y%<&!~nvTVXr*I#{QEFiIIkl=ChAi?GY2~Niig3~48Kae$G zHBA@(`HJ^nX6}@*E4Za3Jn-C+-+xIyM`R}${13lLS|B0eI=&FW)wo{FLp)ZQg-(8~ zviQh~+GTmx)Mz@1JQNki46QG(m=XD35YY&OenWx_wsO#JNWc#|2*`KyT?XEr#XB?J znei?nV|b;1EaVH#+eqrFh)Ne^F2rtYCQdMuuG^-o{-YElV@`RlrDfj+{yqPA%NUIH z9sd~1cwFD|6DBknsW!jWQiSU<|5QsEt{#7hWg)Jw_;V~vaXsiCXL%UcKl)eWoY(+e zf)B)14rbhPtOL_R#zH)eK4A&C4LWce;w$=uA46k04Vrn!z~?e0(CPJ7U<~eGk?si+ zy&f2k`#(ze6}UeVn2h@->7Gt$?EgR!p6rsI&{^0ND8v18(mkz!`oKcmZ;h5Xg%ZyN zmg32#=o5k=TLKT`Nu~6p2W2(|R^$HBXbw94Dg*FxXw9?4J9V|tzTE?_0`kVADb6Op z0xKLE>WxOE9|w$ixjn%-8r=H^#N0}#rTau@rkiBvt?h|*l=m7U>ltd3YGa)YfAr0D zq~D?6z=y=AFn0lQd$WwM53)Fy!xO{lNlois{Xn$0ba9%x22SsM2D+yYv?!dWI%OSr z5iO8bodZ-aQ^!hpiC8U%+=b>pIl1el}s!f%a+T^W%S9U%p2m{)Gn1fV($%1G&`cRJHn%dHoX@5>%?PFx=u?v*NK_dJYkNc;zL>YXyYXY~V@+_UVJu$- zOWRsuGf>2*RV!TyjmnyDOs3it#NWx{65V5v<9u+xlmn3__dO3EVOiYNa+zDh7mJ^M zu7(bHqDu#R#)g@zO<7~)W(mYs9DFDhMg zqIWyyoV|!r`LS;L)<0?d#w4$=w6+wwN5eWL7IPQZ1rJ8}j_qPIbU5Ho8RM>xYDt8Teqs9hBI42Q(!usgvu8w` z%B6MhFue$hGU|&!^4(1MsKjA_HEG0qGyL61-{-g0?7lqi!8vl*)bb}U-dYh{uoWIc zAdi;jbb8Ps-9_fFFj(r*(UbvAIc|R6pX!O0`odb+pueKgmIh`0y4gb=d#0ugRY&eaSLu{^w%; z&jeba`!1c*?KarcCGg?6T8_SG+MKIjB7Z)xKYd(1)jk*B@e=BI(@gU+UaBJ>b$9}W z$6<4lL#5*8eEel(+-m_l3yBw~?-y44Q3`OOwLQP_VM|QyH>T4*rk!P32L3u2*cdU1 z49hUMD)4*ojfdDKzfWpqvee2HwDQ}4w=D*i9MnqvoCDETieTqVusPDs-Dt-rwKD~M zop-%zZH#j_dfY0FdbLzn1?pN9;M)|y05x4ScaNq;=FW|8xM~Z#@3(WF__AVeZVIhB z9x+~My(#K%=;aKr`Io8u^Ctf;sm_O`I)8~e#|P|fk&zFGA zKa0Dy_LBn@(GtC4j#T0TN>oTC9z_4geQp6~c}Q3rKo8dLjqdc(zOj%u|L~g++Y(tR zFNu+F9xHuwj~J<8A=R+vxo8dJQkc)>^)zGfrQGz?tEBTKMVitMt3Qo+f#JAVNzb0O z*5jnTVI}g^^+m798)tLLd*9|Jwo&^;cgUT6c6n_aVmsV;5{D;owdzKdOJ5AFFVN?a zy%(ux6KIO?bc2`hpCot~Vy&>2(E)<*CvG=uRXeq=d4R4FI4lR3D-l*4&bD0GU5BT~ zdSTU-72$DvL2(r0eE@Kq_I^W2YLBT==}JWZBkjf`6|sf<6`%r>rFKP1-l|*QCWB=V zyH7sn$$v5JN~}E~i6y8k78*$BqHg=!dI<=fyY4>Shn{g6YCTX`v&Zn)=^U!;?LVG?H zl$aLtBUf(~v(r^>HK;P0Nlp8Ca3~`4u@$uR{h-F;!JU{LPyzm%xlR*elFZwmsqu{D zoaAN6YM*zMnXq&V5c_c)!9V`1^3W}vk+8XAsP z`$^GQc}8r=quMV>oDpc0TF!`HVS(N?J8gn@do!%1SQ)RB=ya23`#~8W7#!iNFmL1!LqpLhJxPMDa&G0*x6S&E z??&I2$>h9|Scx{!?YS};zdNWv8+iq}m_N)@I>~w&>-Je0z6{j+lvFQ$=S3pE+nTYc zHwo}igLOymACunG*Dl3-rg9$WmmtgTyU`|n`4}JJNFNVA)x4fB3$DX|E@*Hk)x#Gu zD0+JLzVvRY^sX@Yw$I>7a;VQozjZCwc3oH zAz`s!CygpevKUy;rv0f$`G19}-Ia@lp0BJ#0B>dw*zzcV07-5MCQuE zjESr@GZ$HD^p!D((#oL}*+N8C7FPK}GwgBf3jtN7^@;T(Juxn1u^u8TgeXT^8&nUz zJKo>=9yCglo?nmWg%1bkLvxOi5sk-lD^ ziQs}Uu<)2#p5Pk-r(vvxa$Oe&hQ?X03)evFT#x@&_!!YKj1~FZdj7%iYJ8_k;Mwc> z$AEvY=T`wQU(c@uw!WT!1UUS9aK9(xe>pJz_59C42dw9p1k&*TXMqu}KT0|mW4#%4 zmf)0VA9w_w%vKyfko(m208)QDp6q6=?*K3O?2BZV%=&YVaD<*OwBQ-4=@gv7;H9r(Kp#QN;P-jQ6L(a)O_cdT1uC=UWFG@a5he zQcJoLVm`i8Jkh^9FO@R*O8G+q3rn6=%j247!W$au2QX=%`SR`b1s zDvTy?u+dEtcJhaS6>ur0f26bmnD*ey53$KdMzRY0K6+&&8^Uj8hJtN<^&$4p__^_e z%>eAK$jYh4pH`3v9gqxJ;R)Dq6-@Prf@z4NW*YgoLz$*R*ya=#8TsRHfdf2?Jjm4i z;RWdVCq+FcXYV6FWESV?l_TK$H!sfYg}nx13zO`GFa)+=v!=EELulxID@+WM49>>w zyG_c)SXvQll4Jt~IE{kB`S50+0C!PZ9@^?GK^9;J((7{?E6<1?c|F1_u9qxgi6&A@y?0ZS_GrQmSuCh{ggg zS4}1?qAJ3}p&_4HkO@n&dd&41#3wHfGr;O)z0~XLuxf(z%bAHX3ea^whPFCAKOMHX zZ}?}{dR4x#kQs(wNxbney0L`CSOWVhv>ap`VQ1~q__OH)~L+zarBqwQueYE_|7n_mRR>_%;oR>hQ63m3T5*;sunr>HD_$#g^o` zE-t%C%~4F4oabw>8mx8;pq3op;gf)(*#=KqEPo}K4S!OKgN(Bfo|?jf6{j7Iz-5f_DV%+Kx_nacZ6#^P| zBQ|}hhecesZ-vQ&$}+Qk(NZ}gr-!2194s9+bk zj;{)sl!&SYQ34`Nq;(K*IG$&+a(IIYE~H}b0n z8F=BO2*~`bms;G2-!;A|7JCO0h-)VuO!m(pXRat10e#A}H53z=PG*V;bW*I4QLb4% z&~Hmmik^jW;Ph^gT_0G1{hG)RgeixL%j-#pEi#j1?a|}(jDvNk{$NNLJ4EMAHY|{e zpfh)}lK9I^9r^DHLemKxTbW)u9|d83NZ-5;D_suG@<$uMUETq?7nSwD$(|{&A`I3n3Mt{_3UvJ|FF`t>-SOzms}o z=dEEG2#RSq*?cZ|?sR_SP}cGfo59 z_i)Kq{;!|^h4Z@bfym}f!q_(yya)`~l%R)f@i%K`@pWM%dbtMjJCjEb3`P{j0sG%j zr*EFce*`Y^0Qpq~Mgso+ zr=cl0Pv{BV#RSMQE+kA2{=!XXZ)86o`1+CPd2s#3hgj7gMYH7Wx#~jM|%EGd@-8& zlYTP*Pf2D@e!(NQE7CWp zX4>Z-7)dri60T9S`IY_$egiyLdxPr_yU1EtN!G@Y=de810?Wv{;T&uvYrCEBIU`XF za!_st$VW{Dpfl^Xib?oo;+IwTV%sdfKLo53w#ys&y&`=n=zK$Js>7EuNfK9Rt^oFY zBE?AGw+SBKUBb>=5Nr zA=i(FfNeC&I5}o!z)x^vFf2bpJBj?Y9l&0@CcFUnA@4S0M!iF-C?$1cZVc$l0#G9l z7btVGLD`uSs-tUeQHa*uWKo5YR3FUd1mRi;Yi@Zp*4$obbuu}>qCL2LRPzi8FJ=Zu z9W(%U7lcCMzYzsE>2Of*+}OdQ;d=Cg{ADm>@l#FT?kuR8K*~I0q25g5pzK%h&On5rz6>#XA1CxPF9d6|R?XU5Bd? z*GfR;pb#@i)b7KTvO}pZ#E8XieiJY=nfyAn|LDF*4C-A{D>aA%9tS?d@b9%UFWSnS zXe+a#tpJOWTA41j(&eZ1y#cUA1*&8Q;LuOd?%l8|kF>cNZ6*=4s6Kx$wRvrZ0(eLa zT7<_rM;t#hobif?~PIueeh-U^Cl1zGA3J4k&9zs;lH0i8;2^#uz?jlMz`g?1Hk#%4RL{{HOTxm6? z;7Y4A8P}t@#-nr`XjsCqxVbmt*4N=%ZQv8pl2O9?)3_1#oh`9k4e+P@9>R=d&byE2 z`kuDK%Alsf3^^Yt#R}+@R4`193tkhneF|2K2*KLExpG#bf9?`t>4+VAGKAPPfEz`C zJktm1$v=TPF*(YfJiF}RD%e;snICq>(5l=5=wEz$+vB5cTaIVl*7gasy+~@CT4ic( zv`eRHZnV{BZfjK`wYuwjt(wv5xoE4~ZL~UpoAUbVIR3LCvPX=})`}2W7)ECB=SY8q zG|lSIkiLX8?ehhQ_&QiY_KE?a8tEX?BGQ|X4j~;x`U#{Nq?v>OtUS-b9;y^D_ST9Z zt{kj4d~!QkFdz+Fl`IqXm*?PQ+Y9~|QLY5}KpTUiB>p74=ZOvFLE)}I1SXRGAgv=h z0m*(4CtyK6JO$tsEGTb_zy&jS5GD^%yrMw-Nz-z_lt`2~Fk#^nsYHcTqCzV10ZKf6vjpLG39ttAbU-j*kI^Z43bhrUm{xi} zOP)pMT^|j2{o|kl@S5I!fLz3n(c~q182e0q!kZPd5CeD&JTd?i8_o@f2acKi-vdgn z#zTHkm)kA&-S7@oz`X%|@hRNv12u@w8y5a2%v!fzDrc;fIH37?d<4SL4eE1-}?5?v8Un=bT|W;!HN3ca~&F z5iV5qv_?{s)rcWw^(f)>a&&VJtX3BxtwDO6B^7bVcLSp!{S`$|jPJClnGe4?pHfd* z=rhhn8~OM~UxccmsbpGM27FK1A6i@Qhn@}O=HNr62ZRwrj3pDi9J2P6o+W6nu*zpe z#<`;a|DN>$7Mx6V< zw`==fU!$&rKV;}y7$AXj!S9H%hII6q9JPyVR_`>oam~;ZBws9m#`&%7+BzmjU;Ao% zJpAZ=XpgUh)ZLlrOmKcDX$pKNsQpIwJJ7yY!Y>ri4-G!s_m}<~em2;N-=yfAGx=UW^_5N6*Cy7z=#w-muGy+nF}GRV zu*Lx5Op_+U-PLp=ZIg5fCRS@*`uf$T=b)`NKYwXkf_rw`c+2Q!`hKtb;~Npf6Y}TZ z_~y}9s-t?e{ioLA{ISqix*+bg1cXx5w5Ai!{$OwuttvhL!=agVCF8pyr52!+1Emzv zQU;V77c6YU6L97w8{vHS%;As+Q5(n&JuVky+L1OcnFD}RMaUhIR$mY=<+*2$gOBMP zNI)5@w%!Fj-31usHQ|Kc=qgFoj#FU%A0N_YD!G*N#I@3PmS9beZl1}{@sDm+yJ&oz zKW`F^lxF#>qxcTmnfx@r!ChB!zFXTwrA+NVL3|lQW0NgBV0d*Nr*|c~J)pcyh*hX_ zZH7GcmS?~mkH$^@@Uha(Phupr@*_J_hV`BuUGJ-Kk}?zGx=oNm#(?VxswcJA4bh_3D#cz>8` zFXEnZllKR0?OOQf{H;r02O6aYkwN4!wc9Rf$VbP-!{rQb1k`yL=kj%nG6(Xg{J1@_ zyGc(T-&ZbkYC82UxikK-q8^_194e<8)|q-Y{CL2kHXfGU(z7}$vg^@4w~%0;upa-@#W4Dug1E!z(es|oeVSiH0Cj;|K*J| zm&eOXQEnwp)T3*dTAa6QSp5G8{uFW6LMM`XPugSZTCGd52R*Anf6==w!E(=&_LptB zy>9fWjEixP;S3Fl6%7AnApK^)XwAwxb&b!LD||Z4Qh4IM*Q#{+~%!6!>^#E+5cJZa@G#D04r;J`e2f#H~Jg`lSt{hGDA{29_Y1PL|H zp^yDMG<|P9c>@?-VS!EBJ5-x&D)~jC`hbN7WL#zWT>kzLVUVTp_x4O+2e@LH8q$$v zI?rdbdyU{-o>a_d$|r&U?`_myZwWxldQh z&?CfwG}3vx1=dVTehP9je3_IVe#_9FCLzm{24C(raqc~M1ImTrpMyW9&sRF7coV9w zdYly_K+CZf=v;`U;O{E=KMm6OhIz~2Hw7@+spN+R=bP8_`ygd8dkhD4hqQ+WguQ`C z?&HvlRr2b;7k2430i*x0CUw$H%8A2D#84&Y;& zZjBca?6B4+a{GXfLFWN>Eb2Z3ykBPmH+$zY;bz9b?YJ2@++!f4?aP%zGP@l9yyjWz+-gF?OJS5B2h5$9Q6k)+b-46)FQj`b-m z2KX7#K^q5F-xifmW>NV11}>3T6`u;cPx4Fm2jRcpcz0!LRlG;WKP6**%ke)IajhJf zi;7wAt~4Hdpeofqt&L($rdB0jbkIV9Hp;W9OMnhjF5`)JS1zeaXiJ69Xt_6%hxIP9 zSIk;uA7Sq>Q7ucVY|{H1b+Da_?2N~RJZRg#Aa$w9RF#+4arE~4Nb5_gmPjQvooQ0U zLRmY@$FYkm-(4B+9buQ*oruvD@B7fiPED%%aV3-U&PuU|ax6d&^r#@U9Ie~gDYtq{ z=TIXzX-*xtqa|q!d1Fv>UPR16ZYS_S$*2CNK8D>Xn$5$z=0kd>1ONE&Ro`Vw6EsU4 z1ASE4PI0vPFeD%Z26x)dPjlsOij}*a{BU0kM%d1Aw9U>tWyzmoU`r)f@NjVo? z*2*pc>to{3j$GOG@+jRweag6WxtNxFvM*Vd4}H7W2bO#_1z5DWQWSn0rj`$1y?mLq zYTZv`&j0q6iDg{`FEwqZ&iVR){hOQ(bJ|kMAyPL`&pVxfMd7M6hHMfKm>UxR|T_1%?=s!FBxr|u-VytKFBGYxRaT!ht1 z-Y637@HUr|+ym}bR&1~CUb+1sAQmDH+4Q|kpP9+xmOlzf!H^O9F%!!xPN28TD!`|t zxJMPo80#>uc-cEE72N5SF&Os<`-dhuzN@Y`Ea*d@t-P`l+GzFyaFE`I9@^h9uU77| zwEH&&B0WZ3j41UZ4jvkroRK~E!E5~U(bn^&*5^vC=ah>le9P`AXYP1pnQvt}ceh;> z=7(0S>{icgm(9s3$M})M2;HmgHk#!aF4dcs{`x@drInAac+>?CmkNxBq#7ARzGW*O zMPJIl0wj}(=KwzmhSp;SX%>mCOe6gF<@nbL?X#dv5p7tG2bJ!25knXG#^t ziU72wF9Mx7W-KC+s^dIb)!kj&TQYH*|^D+&*cf%IHL>ccgMU-~NE=nO994s#F2i1^*XUG|Y@ES{A<8&mjsG zXh|93WG%ZggH6my?)-culb(hM6`O5q!BLoZ`E2sb_+Co*bQst6Me)gN9Z5--J0EAg zMtI`9`=;#g*uYEQP9cm1x*!b3MV#-{dyiv15>F?`ez&tm8iOu-RL{H7G3=Da@Yevw zfVe6&hDFd?Q8$RfT=1YWFp9TBG?uqQN_aLDg&BB?m6CBcsKcD-N?G;oRN{xX-}N-< z4|rN;%~eX830C_AXN}(u-Qta%Vd0ITZ?Ws`9>Q1tik-Gw!q!%HG3k)%71NUyzKMWP zMe-!CFJz{k!{)r$R8;)ugml8Ea`qWY@saaF@0mynmYBKonl5F zMSD-kOz4HKKfcYV5dA+DNN7&5K-*?0r9tfyg$eM=5E6a@`%m%|D&h;KAvX9#oD(C; z5}Joc&xzTWo5b096Dx+}oEWuX{CK5T-7wzr`oNK|7>}wV?;vAUH_Q;S*byd1`9_fn*|bU>NWJ^FGJ*67FK!txdmtRph!@fnC#QLNGV3IUBH_Bh;3Z9u_1 z!FvMiojLG4+1E`TE;Gy3&{Uul{E-%q0_1jpW~l{a&gcQ<0$8+xuO2Kc2e&m0DG#%~ zEg5TrMJ&)#$TMFTSqt#NJ7px7Wr|WVCOyGd2N+*2sN}u2%iS_xA?lxq`a@e1aZ}u|{qu#$8YFPs6I2xnnXntK=HS##hrGC&|;x%rl$=nEE*A zU>{)ej?=C=E4Dy`@IXZvJdOe%?`pS0EgL zu$pboOTvl%2*R-lC$RbXM-jdc;n4_d+2;JD0uO8)$=b#toW|xC97UKzcq+m=wz(jw z&;uX4vNk=!S!{mcQG_QTOt!S=vCV}^MIOgkgzrUoA)8-x6yZ38A41r`HWwwW!q

c$K~F77@v9?ctR_e|Pb-#cF?)i)RQp*E9Fs&4@@J?k(gm15k~ zeUnCFu4cB^b{2ACgm#P9c>MxI0bhw;pPp|$}2<^|I?!rS~ez+lX>n_LvfQ#*-rxT z*WOCx9Wly*(Hv=I0;0sIm6IdLh9$J;Wed+QqER^mOuX0qeB2$L*Zs1%Irx{0+t5gv zb|Q2I;gkBw`SDWU&$f<{@^r+zfoBH{9UIo}~flCLXnP6-Qz$hCuI7 zx~gyW8I&xzY%tC6j*QSOt(`OjG>7MRmuMbqO_OMLcT-k^+v#$qb?|La3EkbJp#e{o zXr4h_Rp07@%e_tgz5P11(UjjyqW8Pjt`faoztF~Yunnn%UZD4OIJOhL6q8kW2r`HX zp4JqhI*OgX(vRK@@cB65Z4-?@H*j@V`l5IBuRmdpe(2z*;@ynHw+7!WA2|5G?a=WD z@m+&&dS5Ty9QDW-qJFEQ9c_(9{xz3Q(x8xrm%PB%_y@F1uD{y;+Xz`Bv4QW$_2ayJ zKa#0P%9vvn!N+a_mh%#x)uM{iXUo6YAKMQ}J$pJ;>K-iu2umu7)-c^hI z5yX}Es-tY;qu9VJ#0$AII=FQFo~?8rViurd9D?W1?2A~ z1NnOmzXy`|e3JAdeJV1__RN8=O)YZ5eUR{uSahd+j|iOZj^6a8-hju-_L(Yhiri72;IDmOIrY<{U!P7~OPa*s)T{&LE0 z3W?|pRq2k$_fYzr$3kEk43JpeJX@FES5tGvTK#5KpK3?|_TXNcaR#yyptg6v^+ za;7NP8e~4(2Wjb@j4k;0r<%5d)XJOIVhyD59pXcfqwNJ4y|sOir$BXc*c!@waJTPs zk+Kuq$;P#3Cs+dz-NzzoV}VI4Gnd~y5rD? ze+2HSi>sVk7Yjc8g8)|-w@+^GQ_ZK|haG9F`2K9Z|JeHRl4fs>|8-H70_?N?WD^?F zTzVN2UvUO->L&Z13_-6}pVmHqEg_;73iOA60<9+AO8UM+WgpD-h}QV8^+b1IJKgP_ z=oVepR7a>j(1|J+LN*!D{Re!e=lDjoaX^)R4PJG$k}Gn$dAeYXi^{nENe0Zpf+5Y> zmj?>@!f-_6H!%++$u#FE_@!M4{_EROY|rHw><6@~Wc+afqxgL%z7OL2?`9pp79Z>*la#&kXC4E`WtM!$G5^*)egvfs%6HQ)5N2aq)*;Iz=AUyndn}*?PZEI7`EItPwL5gTCFsp+|6jsM z(46jOD_W5k9Mt2Hi*FCB7VY&UMHwV1>V^mzYO{LsU}<+&dlX*e7Q}cv({Ex_zq>Sq zcIwC9haA;(av}d1j@VaO9)KPlStzGQH}*P)rw zR?_~CY;{(p@B5GrnJ&D@sPeTKy`MA=hnZKTv5eUtomvjv@Yty_e#DCbby|iDpS_U* zRnkw0(bGfVw+a1!aC6J`65)Bs1f;(&+C(EpI*oUrr$(e!0p;jB!UjRV;dPd=-($9t z{$n9@DfW2SW@eM79 zw`Vpm{BZqjjzLgJ{PC3pj-&VdH+(om)2&1txL&0Y$iI3iG%j+^D!j%%6f-feUIW(E zK?e_wR|tFD!^joz@5-NOFJE`7{8W^utj&pn{IZOY$RC%2zENHSu8gRC7LL7j=j?5FUSkQtjyoRlEONMYJo644iaS4TLyqW_ z+AvN;+;asYonb?~7d?0qEhvN)z7#FM81ZuO>v~zGL;jaAy8un2{zMLJF~~wVrBV-j z`;;?1p3jkgrbT4X;O0x$p2`{2a5m|lq|zMu*?sV-)RQh6AFkoGrRV>UzpHPQxj+j{ zPlb?cSJ`=&!kYqZ+!2=7!tdsvIg!H}4alGFtc&Vl^vU^>G{t8TyTkX*uQfz|4Q@X9 z7TFp|rg%(3_Ke+M20r0%ez=Akhi5aKH}{uGVYpQ6?I!&z@) zSMq&sYWiv=Xlk{s@^!J5yd|cQb}KdZ!hGxp@xjl;Bbw0dCObXkS&#o2Oc_q) zqkx%4+*|YKmZmEkQcR$Fgt(>I;S|%>OC<_H2#NdT7Dz!V0rdf zVT=6$GOzc=92m!5YdenJXt6zI=wh21JE{>r8bB#^5st>x@J84Hw$&PdL=6v7SV$vC z)M{6UU5@OecD%!Z(C4m8Us?ANa+*4X3ZSNKt5>N z7qusn*`6@t??8JbYu1HQ=;b(z26a7uG2Xv3Zg68Cp!9^;3Rr6F@z`Hh_o0($C4X}m zxSKh?d2Om{voMRD45}+t;9TCxSk1h!BZS!ftvqlXNN$^+p~b%GOs5Db-WXy#B_3d; zxcnlQ)(!a$C(DRSE#5@+z;u<4YVGU9pn5k@PR@QXT`!cxayDNjS!v^hP|DVHLXV>Aq(aI}+?x8RLIg1HVeG z-k2?Hfyd~F;&x=VDlHj>cvTblz8qLD>3Wv^JZ!tNQY+qOW?)A?@*^HupT}XA$oEjr zHqL zH0k5eM&-T^StZW2(#s7Q+{g{KoP*sUqswut5MV24)`GhwJK1VBHZatog_UeID{Rv} z%hjudq4p$jTiFQ@EGlDXfV-Mh{rV*0>$i$p_i9$%HqDy`eNza&H%dXE5kMwuoSYeN z+gH|wnHs!v5we%dENWPlrem%}H>eF7Ln-(c;=!jL|K(Y89vT(cDlJ3N`)oXQhsOvG zX0<=Db=Gk@rDLSACc6w}*tWtWgyyzURC>9=^7D}y&-J4WOSHl&a*{ptcI@eh3$tvz zQF?6uH^im**a<{?Y`kH5c@(0GXczhx*}ypS=Z$~I%1!;wD)D6BoLIm#kxAfj~i(tMebf!0BG4zkBW9ar$SVUwHVp{ozUhmG^Sx9NMy z8n@d21mtC?#y6eBx~<}tv8io`*%z=jAQBJwEd5$WJVhCtoar>;eCkVLt!*eI@*tZF zI*_wdxzvlxF@siDEhmXEp=?5rE@cVT^1l!tf)!B=bZPhj9V?cX^{*c219pgzR8RAI zdxi$1I$350hl`Z}R9V_R`nyLVkJj>wgQdMIu>};?(f*a_9(*KMpuKC3FBnL~dW#D1 zR?fE=(sB^E^3;a~o6bmkA=f-%6S6>oqoR>Xtd6|VS!_}(Wx{+XBmE-v#UhR9$I_G2 zHW}=Lt2tj%s5{!!p)p|W`!?`jm_gaT9wqX6LjFn&q^P%t9AG7bW@pMfrdY>IBcWj6KnMnDs*D zTyVWBcxi>eV+muHB)x^KI+DM!%VIa+fYC#~Msx-YxM0A3Tk1R`9&j;CEA$~WN zqxdQCwkr`I3yS0)uke@fK!7Pt!V~)pL!q@uDN(@#>(x}vuF*oe@9`F;a0t78w_`yT zfQCeWoce4;^jFNy0}sh>4qK@Q5=>s8VCpQxhP)}_jj@B9^P0xi+$rdfsPR5`L(Ul` z*pL-s-qf+MO?7wOCFE^y`1nuS}sDeHw_~VYI417b9k`3*sdFH=|YCd9<=_jaCtIX17yE*3xv}R8R+= zB2$Hw-r?=}m*9Ia91%brTg0`Ba>Dcv)?RCub{{@lAsX_c+ zW23$?!N+vtjhbV$JLbYueEf~S9;^EXyxrxQ5_i+%m4*D}6vUq6a}65Y7rf!{%1^^# z=ZU!fN-1ZV6LO2QKxY|^d^vKTN*kNdtw--Msr?5Ip}p#Eu|N7BWTs#$zC%pj(%VaU zg`MgBy!iJ{&X|nr$R!Yr>VRuZIqWdc2yglj2zi*`gHaugHY{(8MjI4Ct@}Z=VPjmhNAbDd zzg?N_8@6ewSC6dIV?DHAJzrwE7-<2`(+l?1@Rd?y3<9B-(T?Vo$J*PGhjv^D9hKS< zi+0?xX9!v`N{T1w3EsqFuUtx+5$K$2xN^Q!FJ)hetqDOs&lK{i^=MN+pzhJA#kx~2 zu4bIn-*-d%pzpihWp8^ulTlA~Xtz{P0_sWMV?{km@Q+35iSENgIhPd(E-Eeol=~po zYI1cVD2uI$puD3k!F?TjXQUqtwvdzg#CUVqGP93C!xlM)+E$8r>&d&58hbpkwYLUJJVM) zvv?17sgoJG$5*qRIKhh9oX`TaK(=y0dkbcv1(~7wQVV*Z1;cj_Lkr4Vht;G=W7Y#b zdqYGnmg*GL^HggJ>M^wSaBrqlf&4CKO$Y4)oMFYRf9Ot(UaaZPcG`15TN|1o(e4e} zBQRS=g8G8i5j6&hdT&sFN<_3}wE@)cZ#96rzqPmfF7ImK=u&&zg5%L%<;wBxH17dT zZ*Yu6GZi#P?al}jqz69>tM_L>Aw{1ooy>&15Ap}Y`y9=R~NE*4s??C*b*x;}3OJKVy%SFiyA&PaY* z&Uoar2&T1T&W&U$b(fb-?@ytO!p;5q_#raVz+R2w{6?+5m`-r-AtzzB~IQYu@>g>QLJs0BYc<6XF z)ns!bnUL=f9ngH*W6O}$mdY5z8c_S8CGM7WaU=^}BM&34;bF9o$KJW2A;D-3CBy{a8`(xfi)hBEm)q7Fp%t^e1H7WG;$eJVz;8FckJ?#aTP6g|aWWfFf-c9x}>~ zxY!xIl?l+TP*#Gc>@)`C(TA+i_T;*1SYk%9qHC~2+Q^^kE}sW0(%&o(_qUNJXXkRW zZj}qNSjfiy=IbFU$DpIys#ZY~r`#$OgUTIHdksL52qFWnL3oUv#XBV(>!a*JXqpb> z_!>W9sX2hy657b+FrrT}L zDDcb&0mJe%#7E2RDUPa1q%k26JcU16ZtMk|FBxYa&5SMbWlG_$I?g{!eMfL~a zR2*Bdc)_&=mIuj`<1Sw;-hthi%Yukq<+Dr$PAPWSjc5_%XYoX65!KPGB@oF3@)~Oi zQYMg0JoP0#WuWJvSvF*z>Lc}?KZ1TDF8NJp-m8}J=;xDcW~;*12RMV|$9O;=sC#T# z-{EGV4LOZv)fffDGpq2|A;__Xka55n>RVYb>;_sr-B-kr*V7Jor5@loV;J-7VQHMR z;bk+Z`5npgKg<%O`xFiIPN-^Gn$Q;+V%7yIIvP1A(VB4q8Yd-MP^IV6(mcOgrt*)W z_kqa636M#ny?VQ1s5?i~sPDB+vcx_VEVL`K3T-m)Q#n0^>y71zAFs$!BD4D#?qg61 z0~a0M*k}{^^Dbu}zvYztY`4{h*%Me>6uT#b)IC|k29P0kQ{|e4lL#3J;CH$#r14fQ zOBIqGZHVRJ_B}=tVkz&IRX>7!Wn3j+;mWzz2tSxQtSZd2Pel!o5u|nc68WT;a1+I7 zLI#(OhhPUGB4@JZ2Hdt}g`!C=Z zX*P5R{vvYv0(iDsDKZQv(Bp`!++e@2PI~~D&inK=&xl?FBBf*G<%->HY-w9IP&aB} z%XPDR!x4<;jHzpllz|12BL1z)$7<T%@1QWmm+(6`6R)6po4Q@la&L;rDTsddcQ7L0@ zcwgQzJ`^A4Z(i6wKAp=dq_W$8QufaFvYlhlR>2<+F>9;|^Iv}|`_?lQgXV7@+5U`D z%7sK6&D%hc*3bSUgcdi)EKm(Eia_J4@m47)_LA+^pWK5Wn;62f_E z-g3@(XF*v(qrJ?gOucvcJX?i*$xxK!v<}+2Pq3+PaA}A^L*&f@#Ojqa@~=j+?4BZdo#y+|S}W#z zWVTyeQKnp5wjeEiG7b7O^MvZg$%bE^$v%3zpl~!~DyG zBugpR@X#|0`PfA|UW<=>NzeN1#iw&m$2lkQ2Ir()$2`XtV4$3d^n23VOZP33nU$U@ zKQE7<-bKp2y;PQ3F`pvkI%X82!;MEs(Imt%FBbk}eTm1iPKD|kXLCwS9^RKYxvrqqxr+lW} z3{T#bEIHVb>-K@4`Tvgz&*LqUUv-QyGXIHMuD=2r^4RAz>4J^7ZMMBvc`lf8FclX%h4uUKkr~2JV1Fbjf70} z0MiG)Ua(h^Wo&ZHG$qbA^%nfi!5{ts#s?l;_~OD$$R-a%k}0v}vn6ebQ;FjT#!>c$ zJoO$GBtR7`7~5>%p5a+>0ld3%&no1@)6~e^UC3JjcE$x^8LV(Q=qIqRSyQV5GIlSV z{p1}y41I0Xa=+@go@B5zZ-Z|G>b?oZh$T45CO-euW7!A|pM%!hs8A+pwhGhDY}%>!)R zEuVY%qHH=DoX4L4O)kxfb?^i%)~D^db6Cg7th6s@;`y%94u_GOH6A-$DVrMbVox3e zYpMJKj~U4I8wy+`%w`Tg`NvB|^Q^J;9@I%Qu)pV3cDOC+%|mvahy9RsY8K7SFw{a>_rh@Y}e}M%9sB$fifJQW>o@+sznlE7nr8j6?hd zPM1X=;bgB|bjV*MD;%i$>;sGD{D&49@EZ4Rls87^O0?;aec$qV%M*Gi25K66z`its zb-SJv=yXT-0POGDP$vX>+s#gEoti%Z`a2I2{4 zPM7$p-{IFFk7>z^H|y4LmZXN|H|o~(^_nhtF#l&Kq~=`NhX+As*al5?+ovy#?Hn4N{DdX-0u5`~U_OXfKaIo`e^ z)5O#bUIc$Iw3IU!`#E{cd3rLTN8uG-&JSGa=Xk|=Zb(<*{f0lm|5$lNqn>$#>+)O< zzZYl7g+aH@klzL93`vvDkiSc3$R7iAhUAGhhuraIj_e#VnzD)FBXwucew$-<&%!HT zqh%V?3V7lbE*XfvJdr$t&Aw)XOkT=niR7ygK*E8+L6loi1C>?p?^sigf&Yg@nJL z5K`K8E;xrVA4$qyiF^uG%k^~%YZXpBTl=pGki(X6*{m6H26OOz9pBUNeI;O95-Dp9 z_FDqZ7jxk{w93BbS3@>OPXAH_FRQ;f&cL}KL-xFgI_JL?ei0# z`7SO?v-7F~xe1;LBuk!OnWpRl3fsJ5?uO>>T?;mzAgt=bF*Us1R&*KB0BG*+r zXu9%ftWY9p*3ecXH^5@A7P!4pe@rQk!D;*gQx$C1I@*@hD37!?m zyka(cbT8?RaX^mN?;gqC3&vIUacaHVeNh$q{c)8M{MvY|r&(8>^(!6OLIz>4f(DP= zdlt}m0W`jC1ZoE?=p)&zGSk|f%pn~-&Xi%@SYJY`>N!b4*%y=^uu@JQ0?rQ zsgQVMB@e_byAhhxiQ=}gZ-XQ1dA{?C%66<^AB*rM0bbEF?0Rq**8HpA$*WaDC1gL! zim;!Z2+7@g@3{OZ$P44)w@YOXeitQ`nbBV6P$&wcdsXC~87{r8jm!?&h_BwyriRwl zbI-)Nt=M_Sv+alpjDsvc0};G&cmm!%gNHP7&vbRCN%tSd{jRt_4)?p_{ySpKo7^)! z-6rYoQrzu{yLaGjPux8rzEoeeh}&Of-4FlCLyP#-bA^W%J#Ux$4|CYZ49^0mO6iT6 zF840Kacni`)lKIPOoQfVC1NYg_}#4aK^FPI6?A^RTFQk zfD|>@)!ko&94Wl1OVg*tF^%{uF57pwB*!t^!41szJy-IlrMni%@T;PP_PkPW7Bq4% zKxVjGB$?qz(Ul^4#^x|I<~n-TYfY197TO;1R@slUyjDY<*0lV_D{BjFtGv{U*BdY| z&PPdm=e-V+cs;N}A0=O1wOW|(o#0rXw3GdS^-a0dCZLC}H>icV=XH&Q?Mgiba_}89 z;Hj|u#z9cchXpRo4z|&mL+4FW!wUuD8w(u|I5zg=?nsrmbopKdxb%KgfP@1s-HF^H zw8N$%hGgcA87tP~iaxA#JK?!va}=Z25`n%~hDQq%lC!Z-zIuiB$(_g>A)QD#9gDIG zEm3EQgCb7qtAY+*iuck8aRWN!Q;kRIoiB~!_!~tpFUI~^ekCHUp2R$OcGp6_+XFhj z=(jq=&{7oopl~6O7L`JO*b+;uJ&$wd7Z)kdX-z6aAI>&YFE?53Eflr-Z7LTZOCD9Fs#I+1D@Mz#xGbg#J=rUz83qm|7r{LfQ9|<#$9YL zwBZ!{pWvmq?l7_p{oSa5o+nk<#fn=s5`~z6y#2XPpnII3qVp`aANOlzSO=+`1yS)P znU9xqmRG<_h!Kq+bjo4&LYOb*t;vYRmGAJ8WCBpeS;-)ds+o z7=K@6K znujPE@y?lo-Ho>@Zc!<3RW^O?BuT0ek`(Fb_6sjfuK`B|E>S}<0?zoJc0Km~ctikjF1=(CrF=?*S~eNAN3t=#(s4zTz{Qkqf?@u9<4R-EqhnwYSV;e1+d$wuh>v7_gI0Ypb9cggib_$OflsC zaAUot`JT)9@F3p_jOrhseHY&CS8U4)jur6U=a**+RqQK~xb{Q#Zf?>@gb6j)yxeoh z9&I4rybrMD!%3FrjLV4B1+7n7x`Mk|0mK55U(A=&fI_Uo^}em$zyYsdNg=QO8(U;9 z91*{=r#gD>-)A4e7G3t*jgFnbgN(Gax1$@R1kU)aJ(}t*{Vf}g%!wI7bj@T)<%cED z!12&QdhMfxAA0U&Nv+(FZyLS!bkr3M8k!?J#BR0@>47)x5W7QW=q@LTp_}}}%Njn` zZNV8CX2pSQVY4w7lEVvuSiIe?LFJpNUgG87ztjzws5_zGi1g`=;B^OjwJ6-f()`Ay zj-I{N66skD+S1Xpv7#B==4g>DlVR91$SWc;Kjr($e$~y58M+?tAGY-pI`W=weR?7PJ@%Au{PXxa`2I(Hpml=${cQH2*i*kcv zXg2uYT>J0r7vMV#tTB7PCb@!tj=!Rjsc`BTb1#UR(|0B{C0`K7)Xr=wF7DsND|wU| zl$)5Wx)LqBAnH%gY+6-hYEq~bxHmRe{@mTk=aOeOt-f1{YsMyJRDP2>svxf{Pxai) zruC!xHbq58H7RA&nq=sMa{tVx6)TF8`ZdX-Wld51v?iXvnp~8mMcGwFX-$e~MUzar zdO=J%?MS+qhgRH~+QdimO$z0-CZ&=z-_?2Zab2RVjY2D?;QHOkQ59&#>cdHBgI3uT zC7Xg8|B`$-DY}EUR)KcVRg5LIWA+nyXoptTq~NDW?Z}4~0`;Z$ZQ`|jlPqdVQ&d!S zUd%J7Ykg62YE#s$+WwKeAX$O3s~5D_rkK*CP~4lBh>=(|2lZ&t7g~?swE) zj{BW!kLpzWDyjDR+iH)I?swEb=V$fHI@LeyXZ5Q()t~sY`n8?vzfnfLzrFt0PW7L` z{m%WDcdGwY-0$3fb*K8valdo_b)D*8^|SgFo$8+>)&E&uzVrrY{OR4%$Y)D6|1ocC zlTtG!Z(9?u$-!0gCaTYyw+ZunV%~PFfd#ml_($~e?vr_&n|O6m-tz1VqV@E@lE=@a znY1wPF_c=Lv>i{3o>`Db>l1Tn!a|}P{RXb{(ZgoW$8|HVuUN5AqWwrR(H=5$0j?*V z23-x+urO~-@;0>Rf|z+aFK@tY^ojcVq=LNEnHNOGZS;xy8%gu?QgFTRZS;xyBgqT$ zy5V{vt`lw461^R58k1awEc)tvQ7YCF~RVsb&=KayoO59*R%DbD?!Z9!hH?Oj_u@ova5 zO|(fj?yem&6S!4nrIIwbBZ}*rWgp-gFjel7`?n2MxcW_1x(?x&3b7u=NpeIJ&It0u zj^@m4+8X~uBmYcslG?5GjaOXdQib90^EV&ql59&UL2fR&xOI@a=F8lqq;(m?nc|wc zdgP$;hD^gcgZhX*X@Yp*H;PnbWDUyQYRGJ+;K)Jp&$?Gr4ZVW;RG{DEsxmmBJ&t!c z`~0f8o$usL6BmX)e`DXg-z|i`SXLv0WhmM%fB&bJp*vw2lEE@$gk=a3J>2cKosp~? zw3GT%-pd_&2eJcQZ!VPd4stu<*i+{%a8A;LGvnabu$P^N)-9WR0(NxHNPfT5^zh2n zEByCxh@*ms$4vY^OJA_yH^>b|lLKgPUFavWjg*H zd|8}HKK%IT6hQtVoABw&iW&}?3L>??hj?esJhd?sQYmD8^K@jj-p{%r9{dU6PZKv> ziIQiZ;|HK6@I{&FG((>|3-O8;JH=tXb6N4kpSm078*Ehtr<3Q;pKtq9_bOYa@TCoy zMLVBb^fybirvy*(MvAegCs4XzegSWw`x?}v3b=u%yPy42+>E+-dCWP`1m3>Iejc14 zmExqbR)Ky;{soqBYKJX{18&(YVDv#s@EhQ7k}2$EzX^W=+fEherXow^UiKn1_-UR! z;!JDLH%T+gNqV;UbDuyP_8$I@_L9buevzD(kW6w~E~0)YJLiw()#s=bXP|Ns3??2p zOr)_<3QsM1yf#`O?Ppvg+MzI@)*h(!QO|DF%2^(2d;}8cUU&AAj*)ZW}WJdJr-7fQNS=Hts8Pc%A8#!(F@^ZSskj@tGy=xm0Kj8{Z#WHK)& zdEgV8rEd$>xET^W^KAH*;*1i7BMyzAdDfNlYC|%zGheRTjhUVc+Yr1n%Vc|!7ok4W zwn+(I`hLaF&4gxD>4yA|oSEn3$QY2r@y2HyCc!<4!-y&n14MLt3q(f)`kMVjZO5fq zoUH8Lc53mzKury5d>L;9DqPtGi5}77(xRXN=5A?#0eA1Xx5uUe_==^eesYKGhFC!u zjpaTrZ!hbHXyB?knm31>&nNTVxVof~RkSO$mW{v8Lc;t{h za#I0iKIL6iOFQJnRPn2&w9XYr<*whrtMzt?aU3fM_mOr44z{&3cpjQ(>^I0d0PP4_ zbgwt}Kly8Rr$ocRX0eIvBa>h`{B^Xc->`0N^4n0E62G3uUu===BGVBcXMeI*bu0#m zz=#i2e+1MBc$iF8A}$F2aF7S1fW$^t9VKMJKZFx1&BAO!wuds!-zS^~5`YyEXDuN| ziq?aE@Lek3#+;*`EI?1LH@^*eUCJ%LgKPLrI2>je^%%Tqcu)YZn=_BX3ZG#;U#CZZ zN}Fh{reUX(K`Ww>t8Bc>xjk0p$d$5ORBS&=)FYOPmdSJ(3Ru2kh z;|*%?1{D({@5+tHA$tC`g7-l4HAnZR0qV>Ken2L079+k7+iM5SR36<1DQzQ=H%Me1qEXj z6~J_pyGH=0Fdv!F$FX;zvyZB-U>~+b;c9G%sBdn|K0Yu%4!Wap$nz5?Jyq5chx?%* z)zmk?tAy9FK5vRp!rWq4sl=H;SCqIK?494!odY{(39E#sTu;#cbD*cYhc`LjC{f%V zFiPd^Ek>08Sfbb^e?U9M98lbd=LX=pn!o^*cqcfx!X)WshqDhZOP)N?b02vWc|(Sp z_=)&@Fcp5c_;~O+jgRiM7CP{<+HTW;C^bVZjiTKBXr2kObewA(?01ooxJw#|^5CcF zQw((5glDooF9R(YhZfMNEDF%5Y(dVkjuvc}Q1rNlqDPSLJj294(Li-o*G>e|OSg7y z`vAm9z5%-oH~}6!1du1Jh#2o3IONy@J2!byf~&CZW$(4p+Av_R!2Sk%6DtR`!#&+bugd)>D{Y~A@w^qE^n|1Y zcP{t<8Wp0omyK&Rx)VUf)!M(ZAE>CRHK3wFzPi2eG^DqAt?fr%?g!+C_nm5acp>k_ zhvqeAZxm#?l4{_^O>W0niI#Mc13=-9Ry{2D(I}1+Y$4?kz+Qu>!^pXv+c+6Bb9gIf z9_JbAm7%qxS}1E3^-k8_yGc^-Xa)b+y9wxBlGHn63!PvI^p+Ry#VUyOWw6v2L#MtB zkovN%ElN72B0P#ldJE^y{qfrY6%jNE-ZPwSMIY%@p>|by7wmmoMP((IY7}}n;fo0_HK%3WaRV%9s*3e_8^MW0@7GntxM%k`0H3X4 zhP39|>oL`8>>2mBbeGzBuno_Zyen2YY4?djJasX2`DSFc+Q)W7>vX;Ogc#%I`;B0i zTh*8k-$45r*$*$ac4?0%<~_sMrRx!^8`rStp@sa2$q{?oZbTWLDNzdR)x-zV8&H?-DHf;VEe3Hr%ij!HHU@k9pjKV5FkjA3lu^{&#)ApD_M)&p~MtAl@Q z67pW+`#F5mdgu+jEv~E@THKB(>3CSgtk02U?+fIB8{pc(>cgY3+a^lyr#YBhL3sm4 zuuUTEwIf?;Paf8q4ttyNSmZQ2CSo-UW$ckQTIqZ>vU#*yCHJy7gFR6`rM16=#zkk} zUa_xaKYf(#64gft31~0;i>;VB{r2?VGaSB*{VF5xf=i8ZPr$r+lszIU{10eBqp=mi+4AwGF>bP1Xq3DCNhP=GQs`Zf zZB1Tm#Txrv(6qiMyqnVS%q8$X$kTOx9)Ekh!ZrMTyUcm5d6-n==l`*s;TOw=enu}^ zD)$|(N45JEVsC-8sh4Nl_vOeunz|9qqgo=oAbE%CPn|^B?9(0NK$yeVnlDT8D*1B9 z3JT;wMK&5;I`*haAg~(h7XxYFW+VCi!Po3mHrxJ2=Ntkf7~f*(h4Vjfdp+J4=JK;p z7fHck_Kj4}38^0PO+nP00mzf8wC1O;MomrYwRAC!vqGR~j2d9FD1b_t4$SSu@Pa~# z^KK{wJ>tHfTFhBwpO0oM+mv3pd&*+2)PN}TS@5}}Ja^<{R9S1e&AT<(mAjZ9n&;67 z#s0V23K#Fo8QD12Ygxou#4`dh>euVK z;7%Cwe~i0Jbq)L9P(o#Vg%X+yT0OAnFaC0o62DZgN13$^a|BPV3v|K1s{=Cc7+C1J zzR4Bj$6SF7dkXJCc%4<`oND~&+hJ_Q)t=awpIl9O&M1yzG*h=7aV*AtxmA zZN%Gl4f_suD-P#C^MtPOjhgMSIH27y#DWt|_GDsDfA70!pf=LGP`AH}yFzNbi!{88 z8Hg4#2!BRqBt#HA5@zp*Nk7mAUtPuFxxfU80Z*L`zu-akC}{@C$t!gd_E|_4VOAHW zdGvkb!;%z4h}97t2{<9l*j(Ed*vBrkUsDL%*c5m_EBuL^X{D)P8_UIvFmT%-Lr_k# zZ7d7lnfM-w?>u}Dz4auAzj@y<*e)~ijrW1_yl)V`4frTcf`}PXp|#*AiDkm(1DBnNs@oAe4VbI+Zge#*Wf6Z^SAT`&(L)+j&OJfbV)rK3lOXBXb}oUxAYA z^MhWk6D@hvbcb$9?c#lHEzbIMoY7dR;AwbYYYSm} zW@3gs806isjV(`8zkk7D`uOvh-u}Pp`d|iS(bNjDY)gmQW;j>mbc|UsMl*{w`sX0 zU^a-}=P(0v{@>p@gG+Dkz3=Pib7an$XP)z{zvs7pf8e~WR+98`#8DN4+wW}E3(o*y z!2U>ay{LGijA3?o(x*Pc*RBWd0oAxuwy$ojFH+9FF)Tiinw$pjq4lf^*jpoj>{f|h zEUKTQco2tkEd(QCBodtdf6N#-%^zMLdXClRm1+=$kQ_;;x4XkHG%6Ngn32 zVyE?NHJ~Lo$y4#&W0+$nL8n8vW< z;5y=P-mYi=0M_RS?2PZ1+L!Ij8w;d~M;yiVqZB02F~|y-CiDfrvYtKA)feS%kmJ#c zFIuP-cA#G@E{pTcl5|Nao=EX)qWk#vSW8On8r1wNA~UDp?_)qs8G$Ga`?9Ku=bBQd z3{+aM7Bvr4TClrwAifWT`b|k!zIh1vQ}1B6jR%gY6EnE9!?`~l^4)si5jauupP_X8 z|9xmwSQ@6Yzolig!W)%g4hQ8%^6|Jj$4ByC;kvQj%)j)tna}+Ye{sJD*9KfS;mZ9Z z$y%H0?6<&k2>J%q+dHB{3qKX7S7zm%>5s@q&9`|JYy6`$38b^-iy_ddJ8eo$$?a?T~( z5{+04)w5m1`O>$7_MTDMdA|nS*d@!`{@Fzo=RHVDzukv#D*KR5CeXPnJF&a;!~>f_RYqy*x38R-w(bLjs7j=RLh@?*-OX z22MkGP53(k+3>RC{nMZw8Uf@3+Gjs?_42sbRA^U!2Exw>U?b7G{2Cg6Ri4gbKQ@z; z$Teo64gZ*?V2eBVO?q+SN}0H+3ecthPwRs&aG^4pBUJfz1dauF&saeW$D!B4IDe z<2_S^UI+4khu1gQ%X5n_$ul0~GX>9G?2}HZ!S2?i=Xq_1tko&-G#j{m5PSkD11@MX zG(+U?M&mZEi?_qqt!M-y;HKbR6T9;9e_mHM>eJe$`*jf-#8e&&Y3xb0_9D{Bo$f?D z4t(K8u-iKla8eWiDaaI|YKLx6+F+D#0Pj8(Wux$E1WSS(FoGp?QOh2KCaSiH-eghU z6x}rxPnYBAmZnj7s_&v*tm&E=w$WrUbMtLsnRow^68@`i&Ab!yHgas_b$szd;KN5z zoQ}{#G*%(^rLb8{1RqVYXcWPt7vhl7fzW&VWd0Y3G=xAPdo7NP&S zT-Br)?`cx5$x}%iFmhnuGHmI>at%`SHyL7bs{tO)w-yT z!{Iv0uGFFO^Sn|A$u%ZnHuBDlbrPlzNi`Z=YCBUDAKzSQEb^0V1%1il#$ojjTr>jy zET!y2a2mix0Iu~v7phN=hMzp#vBy25-nOtC;Z5`9h4xP*-j~*XV zOjG#CA6&E80cG`0g_JOYO$xX9^#7Z~ufwH|og;TPyQ_h+ws4JA54id7vm^Pg zI5WQupC!zV&Os>hDS`l=x{snCSEWUPT@1z-4k)7b6Yu+jO90JPvNRX{P-LH1jBL&1 z6H^KbGpLySUrHe-WQ(q1^6V)Eg?UueA%=BtF}N=DPs008eKChWhwI?7xYBD8u`{>-_ha^znG-DR}Mc90Ged z`1^4d6u(06X;9uXm;HJL`(DlQ&=2o<74In}&Uw-1IyF}Z@Q`q>%FHUK_y#Rn!UCPK zQ~qv`4dXSKJWGJa6kTZCt^-<+fUF&{P1^*Up?`VE;&TIQHz|?Z##bzF>yX#>G?Ba%Vznc!K@fd7~#1Jc=8cwMPJ9IKr0)i~6%2Jv@1M`eTspsylvKxCGg) z`T(P&Y(<~&3>h&)z}h$v58ql%Wsifa3b;!BHZIk$jnGRpn5XKHcE7RKA*_LRMT>c2 zpffVNzhgz11J7jU3lE~jbqh*({R?J(dXk-gb_8_pT9S=6)J38FyoWpzhls{)iP*z$ zg`#%4L>?`B4nF&^@dH^fUE!ZH*^j?aG|R>L)b|Z_&`b!k*uF0ErMKUr>TsVZ&{vRc zWiV>0?@F1P0-BRDWmN%iR9{52%vPs3i!BK`#T?KHIzR1QhzUV06Tz1l@T*zO)@69X zxLs%%fYb86B8x4H@yG+)zf=cqj_?3x!&YOgHh5+sW1PVQ%@pF#wbirO$Sw`;zQbA~ ziDP}Kn{UgCXjjirzTgyzx{Y8T15t&ZwS*{xyB2Nvuv5EJ4?oM%g06BF`w~%!I<)CL z{$?Rh$pLW%Fz(+A$MP;^Z%Ro@EN?c@xb&D~;NL=j@R}GkVr4-e(A7Smt9`r`yHV1?dQiLMW`xcJb)t zIz(P)!IwW%Oq>b~F2qpXecP%6jUBe+w7y?0VPa5|*5_>el;l*6T?>v>cW5bWGd&c^ zIGe=Osp~W^pe~l;!L@{3%OySo99zWZ$?j+ zfw#Skm|TG^RWJkmhkFZI(+<^TO;x?N2YOZ&P)3XNiqULg*9vjqe%|B6Z%K-}3)*+vY*PNc|+=g%sVZf{9XGEJCjJr1Ph z5iCkdzY-sl$>PJ~cYYrBXhtO8gzGr2UAV9Zrk5)^>^JJhPc?@3K@|F7^pFmFwBSUq zf9)(5k=w#!LywGT^;zUTre5Fb%|uJ%4snB47W6$hmX!th+UWf$o|WtHo*dw@ z%j(j=W3SuOXZxqEWMg?py*X9>{$L$a@iFJ%T>Pd{2eO9$9n`>`G%{!AceG@T7o7ejB<2I(yDv*Lf%2 zE66GMKVQB>k?_Z|3xQN&nx`+yeHxkuD$V(Kb>4y!8OVV``{?HIYWWJ~CPI@bv%iEU z0y&)XukRF4qCYZ&WU(YUf66HArm^h9K(RP#|3GDKM&X+nd2r1Tj7D#7&J?Fo;xJ0s zM9B1>s!2|i=n9SVz&fx$9cu{KFL-h(r1Rb6;qBupHsfp?h$pR~akVq>&RaTf!rhOE z0t&Ieb*6>a<>tT;#0Es;jQSRM=UG4|NmcYPW7%ru8za6s5u%myQ7Bo_-;fVE)(`N| zWq8oge7praHRtzr5CS3RKie^*p89yE!%&53)5q(2a+oVby{bK?2}>WNzhJCYVT z=WoLL3<39P$(2*`)|RCTuQcf15`I{`olhDT$yb9V}v-+b<(SAT`LPj*cyRG z5yY8an$~`z*$H3uMUcVZ6CRlFBK~$6WJeKR`H>-)D6?Ii^grRQz;~i?#_>6PgG4;v zfA9MruJnBi{FSJ;cPM=aZktSZMd=EeaIh5c&VqIPZ=7??}ncX@rMT*Rm!~+m``MrxlOXd&ki=lXYa)Pt*`3| zFA7mu64ulju|A`a<-s8=1P}K|;Kh1?uAE!XRYxS24c2`5OZ!~`l5vD)BW&BMej<}q zHWR8b?EUvp-n{j7y4R3h7~DB$v!ptNOt!Ik$GKQYL{Ww%!qfQlEH3hjBb~NY_@Rj8 zignVB@EsiL;Oq;E_7zdYEybl$y(AfN{xym$XNIp1Vp07g-{t&eZ*%@>4cUju{-uNO zOcbnOF?Px;Zz5W!trwvSI*F$&5??{b>H13VOj2kOx}?< zI#kX22WS)8uC(bq3qh;j-6o(Q_+60rNNY?Q9T_>hi0e9fE<5)Zw(PBP#G{=^oS|ek zE}cX?U_3lke0*y`4wT}n+F>1+#db+5qWQmoXg;I2`v5~+AY>;&2`=x|( z#3~%)Ypg&Im$R)SNrQ7*K{D61=39=Q3q403q{mu$GkKa!Z&{c~*%I*H2(N%PMfUNf zLmPM--bL>NR){w}sjy(SJJFrR+#N%b-cFiYFt@-u!aAzwCVE5ST6)8eXNR=3tTMDt z#T%sONG}sb=N9J{*Tc4$iWxgDi^x1|)%MF?xfKPf{x~OG%avRM`hOB2wq~+ z7Mz=V_V9<+qwYY#S3rJ6~8q*mh!%lY%}zinQV(3twgY>al#p_{MQ)e?5LYv!q<$(IdOQI|B(U}XMb*w z?-REIVc!H)`y1Lv{@RVOzb8+pAnc=LuH~pAlQw>cfD7s?%^}x1A#p-`qEVg2UcT-1 zgt(4%qai6WJxSXdVfq*=rfNpL`+oOGHa_^qCJ#{S`SI2f-0+{z&cHtMKXVnSzk6k8 zf)lv9vb(YRX=Qg~^`CG5E{xTGL;Fu*tp4^%8^LL%mFsYZOu>9@k?Y#HWtg#(R`e@_ zCH|Vh`XfU{ZoL4cGPH0>7RvB1JQM+WMw|%@azaCDfRCJBh;EuupCeK)#3D~ogL@TP z?+Y|;dVQ^Rgw8hwr;^MbgY9ZJXh?d)5Mc&T;Sl!+ox4>qwFGIl{#^02e5tKKw3INoY9d)oR%<_eK*@ewj>2X9Y%^4q?kF4~7(lZ0V{zG9&7 zF3Ec1KG2(wTaDVkwi==Y-2btypQb!7(hDBhG8>dY14^JfmI-c@q7pPUa|`r4&291+ z>rF|UDhsURYvDI_5c5tsUQVCYR_Uq}eA=4nEtC4{s)qIN8fOD2Sbnr%uBLTZjbA<=qS-cLwtFkHJ>WtH zOS?d`JxQJI$02uy_!n1Wwg+Rbt)i)QQXj3o09ERW{Wt1cMoq4Md$9kU@cO^~~@9V);KA7}o>--em8SO#7lCom+KC&aPCO@W0 z<)8;g_88!Q?L|E*MIc%bOV)r2U4_2FP+_bvRoH#xo5K5xaS zVyqXKjBIfSMLz!>Uci-k55hN2_x1Bqw!`4D*K_bNn1Hr6g-mT$(+aU_;+ZCrQ?)yF z)!K>-*BhdK=W>_6;!iGQ9@t43`ZC)MJPy*kQyjxdEpQam0A7$cvSxcg#?I7 z^CX2DlQt9hdhlDJ^BexMu2PrZ)!%1?yke+HZ_u<^fJi->aiJOYqm^<0K(2Ecg}ven z@DtqQitwpVkH~&J{Xu!^Lu9}cE*o^UuLbPjB=}5w(Qr^=jQRwf@H7xmdJF4?=^}46 z`;4d`vN`j1nd;vbIbTpbf);VZFE&vQxU%{K7&CKIrl5niB@f7LTp16~-aWFeCJti@ zJBFlv(TS|a$b!jU>k^SWP>=jWu&7n!37P2ACdh+!7jL&O=Y2Q0tjj@@X$;rU3g|DK zKz*C*HiaW_t0s_gt4NYS}IndH_teR~PQw>TF@9lEbj}cD-&H6qskmR%z;5SGb zBFZ*ys9Ek?Ke1QS87XRpQ_09XnoUA^ny+WinfM8iPHsgms|iZ^xw5Hdw({OIy!Rvd z?`Q|~pLow`cr-sL9IHos6RbxO%Ba}8%Id$AqCg2z6L8W8<0QM$2k%W9%L=;B69$BP zG2PFZvarvI7W8k*hK|MJ7!CVOnQ)|DTV0Ej(Bh=o>gaq#=}TM#{6e;AecGKIJlT;G z9ktP@dqZa5`x8x#IilWc4)>Ci&6o+Rpm-!dqxw=;)un?YqZ64pvWc*<_o;}49o523 zz*|1-G&LL$d0(qIP`D8u^xV+4rZ@BWO3Hm_;URUi!<{qUFdrg5_KXy70p5*0P52y` zUp($D)@LQFBW8OneDIoNJ(0f$M(Wkl>Xu7M8c55WO4sM2b zn!a`>o7Z_H4|-zIiM4E&Opz6Y3DXmZGraaVVkzQ%qEL_TrqXvM@TRPNsINzu)EZ#~ z9;Linn&p6pS_%ByH)tP-0Sb(M|H^_b?9q;7n|A*!VGFFeTI5;04TuGqK$DNWhFUCW zjixp~ci&7nz1q6-M#|H+2{po;mPjppWN<<{T+zE@Ueq?lUc5Q->t^nNU7ROYkqhTm0dW)9cWdNyoN`S8_2;1C4G}KEZFF+xuM) z4*zJEZ9(R(ZJ6QMuthz(g7|XIx-&1;8{L)-dm$K>piAM`=(CcKSLdLdxBZ0z_C?54I9hns1sqAVmOSp3wGDxFtrXsD zD}l+S+J*vel3l1q@plo!dEV1uyp-kQ9WU4(4D ztnIAS7qY*K?UKQ6Rjl;BTS)$VrLGVBXUt)pgdMe&1T8jE;P#ugMQj_#J`S1S-&iPAR+YH)TisPT94{$w_ZJ_owS^%`zk0NXt