From faa7a1e2de1ca1505b757b6a76316ba8c5aef9db Mon Sep 17 00:00:00 2001 From: jiyong_sd Date: Sat, 23 Jul 2022 11:49:04 +0800 Subject: [PATCH] Adapt to the new framework Signed-off-by: jiyong_sd Change-Id: I18dc8f20c2c9ed7d9c504fb4331a23659d4b2571 --- .../image/image_js_standard/image/BUILD.gn | 6 +- .../image/image_js_standard/image/Test.json | 106 +- .../image/src/main/config.json | 234 +- .../image/src/main/js/MainAbility/app.js | 30 + .../{default => MainAbility}/i18n/en-US.json | 10 +- .../{default => MainAbility}/i18n/zh-CN.json | 10 +- .../pages/index/index.css | 92 +- .../pages/index/index.hml | 10 +- .../pages/index/index.js | 68 +- .../main/js/{default => TestAbility}/app.js | 46 +- .../src/main/js/TestAbility/i18n/en-US.json | 8 + .../src/main/js/TestAbility/i18n/zh-CN.json | 8 + .../main/js/TestAbility/pages/index/index.css | 30 + .../main/js/TestAbility/pages/index/index.hml | 5 + .../main/js/TestAbility/pages/index/index.js | 26 + .../js/TestRunner/OpenHarmonyTestRunner.js | 59 + .../image/src/main/js/test/List.test.js | 35 +- .../image/src/main/js/test/image.test.js | 3379 +++++++++-------- .../image/src/main/js/test/testImg.js | 1218 +++--- .../main/resources/base/element/string.json | 38 +- 20 files changed, 2809 insertions(+), 2609 deletions(-) create mode 100644 multimedia/image/image_js_standard/image/src/main/js/MainAbility/app.js rename multimedia/image/image_js_standard/image/src/main/js/{default => MainAbility}/i18n/en-US.json (91%) rename multimedia/image/image_js_standard/image/src/main/js/{default => MainAbility}/i18n/zh-CN.json (91%) rename multimedia/image/image_js_standard/image/src/main/js/{default => MainAbility}/pages/index/index.css (94%) rename multimedia/image/image_js_standard/image/src/main/js/{default => MainAbility}/pages/index/index.hml (95%) rename multimedia/image/image_js_standard/image/src/main/js/{default => MainAbility}/pages/index/index.js (64%) rename multimedia/image/image_js_standard/image/src/main/js/{default => TestAbility}/app.js (91%) create mode 100644 multimedia/image/image_js_standard/image/src/main/js/TestAbility/i18n/en-US.json create mode 100644 multimedia/image/image_js_standard/image/src/main/js/TestAbility/i18n/zh-CN.json create mode 100644 multimedia/image/image_js_standard/image/src/main/js/TestAbility/pages/index/index.css create mode 100644 multimedia/image/image_js_standard/image/src/main/js/TestAbility/pages/index/index.hml create mode 100644 multimedia/image/image_js_standard/image/src/main/js/TestAbility/pages/index/index.js create mode 100644 multimedia/image/image_js_standard/image/src/main/js/TestRunner/OpenHarmonyTestRunner.js diff --git a/multimedia/image/image_js_standard/image/BUILD.gn b/multimedia/image/image_js_standard/image/BUILD.gn index 9f1b23433..591f4eb75 100644 --- a/multimedia/image/image_js_standard/image/BUILD.gn +++ b/multimedia/image/image_js_standard/image/BUILD.gn @@ -9,7 +9,7 @@ # 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. +# limitations under the License. import("//test/xts/tools/build/suite.gni") @@ -23,7 +23,9 @@ ohos_js_hap_suite("image_js_hap") { hap_name = "ActsImageJsTest" } ohos_js_assets("image_js_assets") { - source_dir = "./src/main/js/default" + js2abc = true + hap_profile = "./src/main/config.json" + source_dir = "./src/main/js" } ohos_resources("image_resources") { sources = [ "./src/main/resources" ] diff --git a/multimedia/image/image_js_standard/image/Test.json b/multimedia/image/image_js_standard/image/Test.json index abff28aab..c877379e3 100644 --- a/multimedia/image/image_js_standard/image/Test.json +++ b/multimedia/image/image_js_standard/image/Test.json @@ -1,55 +1,51 @@ -{ - "description": "Configuration for Image Tests", - "driver": { - "type": "JSUnitTest", - "test-timeout": "300000", - "package": "ohos.acts.multimedia.image", - "shell-timeout": "120000" - }, - "kits": [ - { - "test-file-name": [ - "ActsImageJsTest.hap" - ], - "type": "AppInstallKit", - "cleanup-apps": true - }, - { - "type": "ShellKit", - "run-command": [ - "mkdir /data/app/el2/100/base/ohos.acts.multimedia.image/files", - "chmod 777 /data/app/el2/100/base/ohos.acts.multimedia.image/files" - ] - }, - { - "type": "PushKit", - "pre-push": [ - ], - "push": [ - "./resource/image/test.bmp ->/data/app/el2/100/base/ohos.acts.multimedia.image/files", - "./resource/image/test.png ->/data/app/el2/100/base/ohos.acts.multimedia.image/files", - "./resource/image/test.123 ->/data/app/el2/100/base/ohos.acts.multimedia.image/files", - "./resource/image/test.gif ->/data/app/el2/100/base/ohos.acts.multimedia.image/files", - "./resource/image/test.jpg ->/data/app/el2/100/base/ohos.acts.multimedia.image/files", - "./resource/image/moving_test.gif ->/data/app/el2/100/base/ohos.acts.multimedia.image/files" - ] - }, - - { - "type": "ShellKit", - "run-command": [ - "chmod 777 /data/app/el2/100/base/ohos.acts.multimedia.image/files/test.bmp", - "chmod 777 /data/app/el2/100/base/ohos.acts.multimedia.image/files/test.png", - "chmod 777 /data/app/el2/100/base/ohos.acts.multimedia.image/files/test.123", - "chmod 777 /data/app/el2/100/base/ohos.acts.multimedia.image/files/test.gif", - "chmod 777 /data/app/el2/100/base/ohos.acts.multimedia.image/files/test.jpg", - "chmod 777 /data/app/el2/100/base/ohos.acts.multimedia.image/files/moving_test.gif" - - ], - "teardown-command":[ - - ] - } - ] - -} +{ + "description": "Configuration for Image Tests", + "driver": { + "type": "OHJSUnitTest", + "test-timeout": "300000", + "shell-timeout": "300000", + "bundle-name": "ohos.acts.multimedia.image", + "package-name": "ohos.acts.multimedia.image", + "testcase-timeout": 60000 + }, + "kits": [ + { + "test-file-name": [ + "ActsImageJsTest.hap" + ], + "type": "AppInstallKit", + "cleanup-apps": true + }, + { + "type": "ShellKit", + "run-command": [ + "mkdir /data/app/el2/100/base/ohos.acts.multimedia.image/files", + "chmod 777 /data/app/el2/100/base/ohos.acts.multimedia.image/files" + ] + }, + { + "type": "PushKit", + "pre-push": [], + "push": [ + "./resource/image/test.bmp ->/data/app/el2/100/base/ohos.acts.multimedia.image/files", + "./resource/image/test.png ->/data/app/el2/100/base/ohos.acts.multimedia.image/files", + "./resource/image/test.123 ->/data/app/el2/100/base/ohos.acts.multimedia.image/files", + "./resource/image/test.gif ->/data/app/el2/100/base/ohos.acts.multimedia.image/files", + "./resource/image/test.jpg ->/data/app/el2/100/base/ohos.acts.multimedia.image/files", + "./resource/image/moving_test.gif ->/data/app/el2/100/base/ohos.acts.multimedia.image/files" + ] + }, + { + "type": "ShellKit", + "run-command": [ + "chmod 777 /data/app/el2/100/base/ohos.acts.multimedia.image/files/test.bmp", + "chmod 777 /data/app/el2/100/base/ohos.acts.multimedia.image/files/test.png", + "chmod 777 /data/app/el2/100/base/ohos.acts.multimedia.image/files/test.123", + "chmod 777 /data/app/el2/100/base/ohos.acts.multimedia.image/files/test.gif", + "chmod 777 /data/app/el2/100/base/ohos.acts.multimedia.image/files/test.jpg", + "chmod 777 /data/app/el2/100/base/ohos.acts.multimedia.image/files/moving_test.gif" + ], + "teardown-command": [] + } + ] +} \ No newline at end of file diff --git a/multimedia/image/image_js_standard/image/src/main/config.json b/multimedia/image/image_js_standard/image/src/main/config.json index 941d88567..bccf64ec9 100644 --- a/multimedia/image/image_js_standard/image/src/main/config.json +++ b/multimedia/image/image_js_standard/image/src/main/config.json @@ -1,104 +1,132 @@ -{ - "app": { - "apiVersion": { - "compatible": 6, - "releaseType": "Beta1", - "target": 7 - }, - "vendor": "acts", - "bundleName": "ohos.acts.multimedia.image", - "version": { - "code": 1000000, - "name": "1.0.0" - } - }, - "deviceConfig": { - "default": { - "debug": true - } - }, - "module": { - "abilities": [ - { - "iconId": 16777218, - "skills": [ - { - "entities": [ - "entity.system.home" - ], - "actions": [ - "action.system.home" - ] - } - ], - "descriptionId": 16777217, - "visible": true, - "labelId": 16777216, - "icon": "$media:icon", - "name": "ohos.acts.multimedia.image.MainAbility", - "description": "$string:mainability_description", - "label": "$string:entry_MainAbility", - "type": "page", - "homeAbility": true, - "launchType": "standard" - } - ], - "deviceType": [ - "phone", - "tablet", - "tv", - "wearable" - ], - "mainAbility": "ohos.acts.multimedia.image.MainAbility", - "distro": { - "moduleType": "entry", - "installationFree": false, - "deliveryWithInstall": true, - "moduleName": "entry" - }, - "reqPermissions": [ - { - "name": "ohos.permission.GET_BUNDLE_INFO", - "reason": "use ohos.permission.GET_BUNDLE_INFO" - }, - { - "name": "ohos.permission.GET_BUNDLE_INFO_PRIVILEGED", - "reason":"use ohos.permission.GET_BUNDLE_INFO_PRIVILEGED" - }, - { - "name" : "ohos.permission.GRANT_SENSITIVE_PERMISSIONS", - "reason" : "use ohos.permission.GRANT_SENSITIVE_PERMISSIONS" - }, - { - "name" : "ohos.permission.REVOKE_SENSITIVE_PERMISSIONS", - "reason" : "use ohos.permission.REVOKE_SENSITIVE_PERMISSIONS" - }, - { - "name": "ohos.permission.MEDIA_LOCATION", - "reason":"use ohos.permission.MEDIA_LOCATION" - }, - { - "name": "ohos.permission.READ_MEDIA", - "reason":"use ohos.permission.READ_MEDIA" - }, - { - "name": "ohos.permission.WRITE_MEDIA", - "reason":"use ohos.permission.WRITE_MEDIA" - } - ], - "package": "ohos.acts.multimedia.image", - "name": ".MyApplication", - "js": [ - { - "pages": [ - "pages/index/index" - ], - "name": "default", - "window": { - "designWidth": 720, - "autoDesignWidth": true - } - } - ] - } +{ + "app": { + "apiVersion": { + "compatible": 6, + "releaseType": "Beta1", + "target": 7 + }, + "vendor": "acts", + "bundleName": "ohos.acts.multimedia.image", + "version": { + "code": 1000000, + "name": "1.0.0" + } + }, + "deviceConfig": { + "default": { + "debug": true + } + }, + "module": { + "abilities": [ + { + "skills": [ + { + "entities": [ + "entity.system.home" + ], + "actions": [ + "action.system.home" + ] + } + ], + "orientation": "unspecified", + "formsEnabled": false, + "name": ".MainAbility", + "srcLanguage": "js", + "srcPath": "MainAbility", + "icon": "$media:icon", + "description": "$string:MainAbility_desc", + "label": "$string:MainAbility_label", + "type": "page", + "visible": true, + "launchType": "standard" + }, + { + "orientation": "unspecified", + "formsEnabled": false, + "name": ".TestAbility", + "srcLanguage": "js", + "srcPath": "TestAbility", + "icon": "$media:icon", + "description": "$string:TestAbility_desc", + "label": "$string:TestAbility_label", + "type": "page", + "visible": true, + "launchType": "standard" + } + ], + "deviceType": [ + "phone", + "tablet", + "tv", + "wearable" + ], + "mainAbility": ".MainAbility", + "distro": { + "moduleType": "entry", + "installationFree": false, + "deliveryWithInstall": true, + "moduleName": "entry" + }, + "reqPermissions": [ + { + "name": "ohos.permission.GET_BUNDLE_INFO", + "reason": "use ohos.permission.GET_BUNDLE_INFO" + }, + { + "name": "ohos.permission.GET_BUNDLE_INFO_PRIVILEGED", + "reason": "use ohos.permission.GET_BUNDLE_INFO_PRIVILEGED" + }, + { + "name": "ohos.permission.GRANT_SENSITIVE_PERMISSIONS", + "reason": "use ohos.permission.GRANT_SENSITIVE_PERMISSIONS" + }, + { + "name": "ohos.permission.REVOKE_SENSITIVE_PERMISSIONS", + "reason": "use ohos.permission.REVOKE_SENSITIVE_PERMISSIONS" + }, + { + "name": "ohos.permission.MEDIA_LOCATION", + "reason": "use ohos.permission.MEDIA_LOCATION" + }, + { + "name": "ohos.permission.READ_MEDIA", + "reason": "use ohos.permission.READ_MEDIA" + }, + { + "name": "ohos.permission.WRITE_MEDIA", + "reason": "use ohos.permission.WRITE_MEDIA" + } + ], + "package": "ohos.acts.multimedia.image", + "name": ".entry", + "js": [ + { + "pages": [ + "pages/index/index" + ], + "name": "default", + "window": { + "designWidth": 720, + "autoDesignWidth": true + } + }, + { + "pages": [ + "pages/index/index" + ], + "name": ".TestAbility", + "window": { + "designWidth": 720, + "autoDesignWidth": false + } + } + ], + "testRunner": { + "name": "OpenHarmonyTestRunner", + "srcPath": "TestRunner" + }, + "srcPath": "" + } } \ No newline at end of file diff --git a/multimedia/image/image_js_standard/image/src/main/js/MainAbility/app.js b/multimedia/image/image_js_standard/image/src/main/js/MainAbility/app.js new file mode 100644 index 000000000..8f2e6b86d --- /dev/null +++ b/multimedia/image/image_js_standard/image/src/main/js/MainAbility/app.js @@ -0,0 +1,30 @@ +/* + * Copyright (C) 2021 Huawei Device Co., Ltd. + * 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. + */ +import AbilityDelegatorRegistry from '@ohos.application.abilityDelegatorRegistry' +import { Hypium } from '@ohos/hypium' +import testsuite from '../test/List.test' + +export default { + onCreate() { + console.info('TestApplication onCreate') + var abilityDelegator = AbilityDelegatorRegistry.getAbilityDelegator() + var abilityDelegatorArguments = AbilityDelegatorRegistry.getArguments() + console.info('start run testcase!!!') + Hypium.hypiumTest(abilityDelegator, abilityDelegatorArguments, testsuite) + }, + onDestroy() { + console.info("TestApplication onDestroy"); + } +}; diff --git a/multimedia/image/image_js_standard/image/src/main/js/default/i18n/en-US.json b/multimedia/image/image_js_standard/image/src/main/js/MainAbility/i18n/en-US.json similarity index 91% rename from multimedia/image/image_js_standard/image/src/main/js/default/i18n/en-US.json rename to multimedia/image/image_js_standard/image/src/main/js/MainAbility/i18n/en-US.json index e63c70d97..a4c13dcbd 100644 --- a/multimedia/image/image_js_standard/image/src/main/js/default/i18n/en-US.json +++ b/multimedia/image/image_js_standard/image/src/main/js/MainAbility/i18n/en-US.json @@ -1,6 +1,6 @@ -{ - "strings": { - "hello": "Hello", - "world": "World" - } +{ + "strings": { + "hello": "Hello", + "world": "World" + } } \ No newline at end of file diff --git a/multimedia/image/image_js_standard/image/src/main/js/default/i18n/zh-CN.json b/multimedia/image/image_js_standard/image/src/main/js/MainAbility/i18n/zh-CN.json similarity index 91% rename from multimedia/image/image_js_standard/image/src/main/js/default/i18n/zh-CN.json rename to multimedia/image/image_js_standard/image/src/main/js/MainAbility/i18n/zh-CN.json index de6ee5748..b1c02368f 100644 --- a/multimedia/image/image_js_standard/image/src/main/js/default/i18n/zh-CN.json +++ b/multimedia/image/image_js_standard/image/src/main/js/MainAbility/i18n/zh-CN.json @@ -1,6 +1,6 @@ -{ - "strings": { - "hello": "您好", - "world": "世界" - } +{ + "strings": { + "hello": "您好", + "world": "世界" + } } \ No newline at end of file diff --git a/multimedia/image/image_js_standard/image/src/main/js/default/pages/index/index.css b/multimedia/image/image_js_standard/image/src/main/js/MainAbility/pages/index/index.css similarity index 94% rename from multimedia/image/image_js_standard/image/src/main/js/default/pages/index/index.css rename to multimedia/image/image_js_standard/image/src/main/js/MainAbility/pages/index/index.css index 5bd756702..c537ef67c 100644 --- a/multimedia/image/image_js_standard/image/src/main/js/default/pages/index/index.css +++ b/multimedia/image/image_js_standard/image/src/main/js/MainAbility/pages/index/index.css @@ -1,46 +1,46 @@ -.container { - flex-direction: column; - justify-content: center; - align-items: center; - width: 100%; - height: 100%; -} - -.title { - font-size: 40px; - color: #000000; - opacity: 0.9; -} - -@media screen and (device-type: tablet) and (orientation: landscape) { - .title { - font-size: 100px; - } -} - -@media screen and (device-type: wearable) { - .title { - font-size: 28px; - color: #FFFFFF; - } -} - -@media screen and (device-type: tv) { - .container { - background-image: url("/common/images/Wallpaper.png"); - background-size: cover; - background-repeat: no-repeat; - background-position: center; - } - - .title { - font-size: 100px; - color: #FFFFFF; - } -} - -@media screen and (device-type: phone) and (orientation: landscape) { - .title { - font-size: 60px; - } -} +.container { + flex-direction: column; + justify-content: center; + align-items: center; + width: 100%; + height: 100%; +} + +.title { + font-size: 40px; + color: #000000; + opacity: 0.9; +} + +@media screen and (device-type: tablet) and (orientation: landscape) { + .title { + font-size: 100px; + } +} + +@media screen and (device-type: wearable) { + .title { + font-size: 28px; + color: #FFFFFF; + } +} + +@media screen and (device-type: tv) { + .container { + background-image: url("/common/images/Wallpaper.png"); + background-size: cover; + background-repeat: no-repeat; + background-position: center; + } + + .title { + font-size: 100px; + color: #FFFFFF; + } +} + +@media screen and (device-type: phone) and (orientation: landscape) { + .title { + font-size: 60px; + } +} diff --git a/multimedia/image/image_js_standard/image/src/main/js/default/pages/index/index.hml b/multimedia/image/image_js_standard/image/src/main/js/MainAbility/pages/index/index.hml similarity index 95% rename from multimedia/image/image_js_standard/image/src/main/js/default/pages/index/index.hml rename to multimedia/image/image_js_standard/image/src/main/js/MainAbility/pages/index/index.hml index f64b040a5..f629c71a9 100644 --- a/multimedia/image/image_js_standard/image/src/main/js/default/pages/index/index.hml +++ b/multimedia/image/image_js_standard/image/src/main/js/MainAbility/pages/index/index.hml @@ -1,5 +1,5 @@ -
- - {{ $t('strings.hello') }} {{ title }} - -
+
+ + {{ $t('strings.hello') }} {{ title }} + +
diff --git a/multimedia/image/image_js_standard/image/src/main/js/default/pages/index/index.js b/multimedia/image/image_js_standard/image/src/main/js/MainAbility/pages/index/index.js similarity index 64% rename from multimedia/image/image_js_standard/image/src/main/js/default/pages/index/index.js rename to multimedia/image/image_js_standard/image/src/main/js/MainAbility/pages/index/index.js index a0719cee5..6e13f0751 100644 --- a/multimedia/image/image_js_standard/image/src/main/js/default/pages/index/index.js +++ b/multimedia/image/image_js_standard/image/src/main/js/MainAbility/pages/index/index.js @@ -1,41 +1,29 @@ -/* - * Copyright (C) 2021 Huawei Device Co., Ltd. - * 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. - */ - -import {Core, ExpectExtend} from 'deccjsunit/index' - -export default { - data: { - title: "" - }, - onInit() { - this.title = this.$t('strings.world'); - }, - onShow() { - console.info('onShow finish') - const core = Core.getInstance() - const expectExtend = new ExpectExtend({ - 'id': 'extend' - }) - core.addService('expect', expectExtend) - core.init() - const configService = core.getDefaultService('config') - this.timeout = 60000 - configService.setConfig(this) - require('../../../test/List.test') - core.execute() - }, - onReady() { - }, +/* + * Copyright (C) 2021 Huawei Device Co., Ltd. + * 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. + */ + + +export default { + data: { + title: "" + }, + onInit() { + this.title = this.$t('strings.world'); + }, + onShow() { + console.info('onShow finish') + }, + onReady() { + }, } \ No newline at end of file diff --git a/multimedia/image/image_js_standard/image/src/main/js/default/app.js b/multimedia/image/image_js_standard/image/src/main/js/TestAbility/app.js similarity index 91% rename from multimedia/image/image_js_standard/image/src/main/js/default/app.js rename to multimedia/image/image_js_standard/image/src/main/js/TestAbility/app.js index e423f4bce..b84fbce8f 100644 --- a/multimedia/image/image_js_standard/image/src/main/js/default/app.js +++ b/multimedia/image/image_js_standard/image/src/main/js/TestAbility/app.js @@ -1,23 +1,23 @@ -/* - * Copyright (C) 2021 Huawei Device Co., Ltd. - * 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. - */ - -export default { - onCreate() { - console.info('AceApplication onCreate'); - }, - onDestroy() { - console.info('AceApplication onDestroy'); - } -}; +/* + * Copyright (c) 2022 Huawei Device Co., Ltd. + * 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. + */ + +export default { + onCreate() { + console.info('AceApplication onCreate'); + }, + onDestroy() { + console.info('AceApplication onDestroy'); + } +}; \ No newline at end of file diff --git a/multimedia/image/image_js_standard/image/src/main/js/TestAbility/i18n/en-US.json b/multimedia/image/image_js_standard/image/src/main/js/TestAbility/i18n/en-US.json new file mode 100644 index 000000000..3cb24b374 --- /dev/null +++ b/multimedia/image/image_js_standard/image/src/main/js/TestAbility/i18n/en-US.json @@ -0,0 +1,8 @@ +{ + "strings": { + "hello": "Hello", + "world": "World" + }, + "Files": { + } +} \ No newline at end of file diff --git a/multimedia/image/image_js_standard/image/src/main/js/TestAbility/i18n/zh-CN.json b/multimedia/image/image_js_standard/image/src/main/js/TestAbility/i18n/zh-CN.json new file mode 100644 index 000000000..c804e32c0 --- /dev/null +++ b/multimedia/image/image_js_standard/image/src/main/js/TestAbility/i18n/zh-CN.json @@ -0,0 +1,8 @@ +{ + "strings": { + "hello": "您好", + "world": "世界" + }, + "Files": { + } +} \ No newline at end of file diff --git a/multimedia/image/image_js_standard/image/src/main/js/TestAbility/pages/index/index.css b/multimedia/image/image_js_standard/image/src/main/js/TestAbility/pages/index/index.css new file mode 100644 index 000000000..b1bcd4338 --- /dev/null +++ b/multimedia/image/image_js_standard/image/src/main/js/TestAbility/pages/index/index.css @@ -0,0 +1,30 @@ +.container { + display: flex; + flex-direction: column; + justify-content: center; + align-items: center; + left: 0px; + top: 0px; + width: 100%; + height: 100%; +} + +.title { + font-size: 60px; + text-align: center; + width: 100%; + height: 40%; + margin: 10px; +} + +@media screen and (device-type: phone) and (orientation: landscape) { + .title { + font-size: 60px; + } +} + +@media screen and (device-type: tablet) and (orientation: landscape) { + .title { + font-size: 100px; + } +} \ No newline at end of file diff --git a/multimedia/image/image_js_standard/image/src/main/js/TestAbility/pages/index/index.hml b/multimedia/image/image_js_standard/image/src/main/js/TestAbility/pages/index/index.hml new file mode 100644 index 000000000..f629c71a9 --- /dev/null +++ b/multimedia/image/image_js_standard/image/src/main/js/TestAbility/pages/index/index.hml @@ -0,0 +1,5 @@ +
+ + {{ $t('strings.hello') }} {{ title }} + +
diff --git a/multimedia/image/image_js_standard/image/src/main/js/TestAbility/pages/index/index.js b/multimedia/image/image_js_standard/image/src/main/js/TestAbility/pages/index/index.js new file mode 100644 index 000000000..88b083a7f --- /dev/null +++ b/multimedia/image/image_js_standard/image/src/main/js/TestAbility/pages/index/index.js @@ -0,0 +1,26 @@ +/* + * Copyright (c) 2022 Huawei Device Co., Ltd. + * 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. + */ + +export default { + data: { + title: "" + }, + onInit() { + this.title = this.$t('strings.world'); + } +} + + + diff --git a/multimedia/image/image_js_standard/image/src/main/js/TestRunner/OpenHarmonyTestRunner.js b/multimedia/image/image_js_standard/image/src/main/js/TestRunner/OpenHarmonyTestRunner.js new file mode 100644 index 000000000..05ba57825 --- /dev/null +++ b/multimedia/image/image_js_standard/image/src/main/js/TestRunner/OpenHarmonyTestRunner.js @@ -0,0 +1,59 @@ +/* + * Copyright (c) 2022 Huawei Device Co., Ltd. + * 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. + */ + +import AbilityDelegatorRegistry from '@ohos.application.abilityDelegatorRegistry' + +function translateParamsToString(parameters) { + const keySet = new Set([ + '-s class', '-s notClass', '-s suite', '-s itName', + '-s level', '-s testType', '-s size', '-s timeout', + '-s package', '-s dryRun' + ]) + let targetParams = ''; + for (const key in parameters) { + if (keySet.has(key)) { + targetParams += ' ' + key + ' ' + parameters[key] + } + } + return targetParams.trim() +} + + export default { + onPrepare() { + console.info('OpenHarmonyTestRunner OnPrepare') + }, + onRun() { + console.log('OpenHarmonyTestRunner onRun run') + var abilityDelegatorArguments = AbilityDelegatorRegistry.getArguments() + var abilityDelegator = AbilityDelegatorRegistry.getAbilityDelegator() + + var testAbilityName = abilityDelegatorArguments.parameters['-p'] + '.MainAbility' + + var cmd = 'aa start -d 0 -a ' + testAbilityName + ' -b ' + abilityDelegatorArguments.bundleName + cmd += ' ' + translateParamsToString(abilityDelegatorArguments.parameters) + var debug = abilityDelegatorArguments.parameters["-D"] + console.info('debug value : '+debug) + if (debug == 'true') + { + cmd += ' -D' + } + console.info('cmd : '+cmd) + abilityDelegator.executeShellCommand(cmd, (err, data) => { + console.info('executeShellCommand : err : ' + JSON.stringify(err)); + console.info('executeShellCommand : data : ' + data.stdResult); + console.info('executeShellCommand : data : ' + data.exitCode); + }) + } +}; diff --git a/multimedia/image/image_js_standard/image/src/main/js/test/List.test.js b/multimedia/image/image_js_standard/image/src/main/js/test/List.test.js index 8a84d231e..7162b2d54 100644 --- a/multimedia/image/image_js_standard/image/src/main/js/test/List.test.js +++ b/multimedia/image/image_js_standard/image/src/main/js/test/List.test.js @@ -1,16 +1,19 @@ -/* - * Copyright (C) 2021 Huawei Device Co., Ltd. - * 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. - */ - -require('./image.test.js') \ No newline at end of file +/* + * Copyright (C) 2021 Huawei Device Co., Ltd. + * 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. + */ + +import Image_test from './image.test.js' +export default function testsuite() { + Image_test() +} diff --git a/multimedia/image/image_js_standard/image/src/main/js/test/image.test.js b/multimedia/image/image_js_standard/image/src/main/js/test/image.test.js index be745d577..46b738e54 100644 --- a/multimedia/image/image_js_standard/image/src/main/js/test/image.test.js +++ b/multimedia/image/image_js_standard/image/src/main/js/test/image.test.js @@ -1,1689 +1,1690 @@ -/* - * Copyright (C) 2021 Huawei Device Co., Ltd. - * 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. - */ - -import image from '@ohos.multimedia.image' -import fileio from '@ohos.fileio' -import { describe, beforeAll, beforeEach, afterEach, afterAll, it, expect } from 'deccjsunit/index' -import { testPng, testJpg } from './testImg' -import abilityAccessCtrl from '@ohos.abilityAccessCtrl' -import bundle from '@ohos.bundle' - -describe('Image', function () { - var pathJpg = '/data/storage/el2/base/files/test.jpg'; - var pathBmp = '/data/storage/el2/base/files/test.bmp'; - var pathGif = '/data/storage/el2/base/files/test.gif'; - var pathPng = '/data/storage/el2/base/files/test.png'; - var pathMovingGif = '/data/storage/el2/base/files/moving_test.gif'; - let globalpixelmap; - beforeAll(async function () { - await applyPermission(); - console.info('beforeAll case'); - }) - - beforeEach(function () { - console.info('beforeEach case'); - }) - - afterEach(async function () { - if (globalpixelmap != undefined) { - console.info('globalpixelmap release start'); - try { - await globalpixelmap.release(); - } catch (error) { - console.info('globalpixelmap release fail'); - } - } - console.info('afterEach case'); - }) - - afterAll(async function () { - console.info('afterAll case'); - }) - - async function applyPermission() { - let appInfo = await bundle.getApplicationInfo('ohos.acts.multimedia.image', 0, 100); - let atManager = abilityAccessCtrl.createAtManager(); - if (atManager != null) { - let tokenID = appInfo.accessTokenId; - console.info('[permission]case accessTokenId is' + tokenID); - let permissionName1 = 'ohos.permission.MEDIA_LOCATION'; - let permissionName2 = 'ohos.permission.READ_MEDIA'; - let permissionName3 = 'ohos.permission.WRITE_MEDIA'; - await atManager.grantUserGrantedPermission(tokenID, permissionName1).then((result) => { - console.info('[permission]case grantUserGrantedPermission success:' + result); - }).catch((err) => { - console.info('[permission]case grantUserGrantedPermission failed:' + err); - }); - await atManager.grantUserGrantedPermission(tokenID, permissionName2).then((result) => { - console.info('[permission]case grantUserGrantedPermission success:' + result); - }).catch((err) => { - console.info('[permission]case grantUserGrantedPermission failed:' + err); - }); - await atManager.grantUserGrantedPermission(tokenID, permissionName3).then((result) => { - console.info('[permission]case grantUserGrantedPermission success:' + result); - }).catch((err) => { - console.info('[permission]case grantUserGrantedPermission failed:' + err); - }); - } else { - console.info('[permission]case apply permission failed,createAtManager failed'); - } - } - - - - /** - * @tc.number : TC_041 - * @tc.name : createImageSource(uri)-jpg - * @tc.desc : 1.set uri - * 2.call createImageSource(uri) - * 3.return imagesource - * @tc.size : MEDIUM - * @tc.type : Functional - * @tc.level : Level 0 - */ - it('TC_041', 0, async function (done) { - try { - let fdNumber = fileio.openSync(pathJpg); - const imageSourceApi = image.createImageSource(fdNumber); - expect(imageSourceApi != undefined).assertTrue(); - console.info('TC_041 success'); - fileio.closeSync(fdNumber); - done(); - } catch (error) { - console.info('TC_041 error: ' + error); - expect(false).assertTrue(); - done(); - } - }) - - /** - * @tc.number : TC_041-1 - * @tc.name : createImageSource(uri)-bmp - * @tc.desc : 1.seturi - * 2.call createImageSource(uri) - * 3.return imagesource - * @tc.size : MEDIUM - * @tc.type : Functional - * @tc.level : Level 0 - */ - it('TC_041-1', 0, async function (done) { - try { - let fdNumber = fileio.openSync(pathBmp); - const imageSourceApi = image.createImageSource(fdNumber); - expect(imageSourceApi != undefined).assertTrue(); - console.info('TC_041-1 success'); - done(); - } catch (error) { - console.info('TC_041-1 error: ' + error); - expect(false).assertTrue(); - done(); - } - }) - - /** - * @tc.number : TC_041-2 - * @tc.name : createImageSource(uri)-gif - * @tc.desc : 1.seturi - * 2.call createImageSource(uri) - * 3.return imagesource - * @tc.size : MEDIUM - * @tc.type : Functional - * @tc.level : Level 0 - */ - it('TC_041-2', 0, async function (done) { - try { - let fdNumber = fileio.openSync(pathGif); - const imageSourceApi = image.createImageSource(fdNumber); - expect(imageSourceApi != undefined).assertTrue(); - console.info('TC_041-2 success'); - done(); - } catch (error) { - console.info('TC_041-2 error: ' + error); - expect(false).assertTrue(); - done(); - } - - }) - - /** - * @tc.number : TC_041-3 - * @tc.name : createImageSource(uri)-png - * @tc.desc : 1.seturi - * 2.call createImageSource(uri) - * 3.return imagesource - * @tc.size : MEDIUM - * @tc.type : Functional - * @tc.level : Level 0 - */ - it('TC_041-3', 0, async function (done) { - try { - let fdNumber = fileio.openSync(pathPng); - const imageSourceApi = image.createImageSource(fdNumber); - expect(imageSourceApi != undefined).assertTrue(); - console.info('TC_041-3 success'); - done(); - } catch (error) { - console.info('TC_041-3 error: ' + error); - expect(false).assertTrue(); - done(); - } - - }) - - /** - * @tc.number : TC_041-4 - * @tc.name : createImageSource(uri)-wrong suffix file - * @tc.desc : 1.call createImageSource(uri) - * 2.Incoming wrong suffix file - * 3.imagesource null - * @tc.size : MEDIUM - * @tc.type : Functional - * @tc.level : Level 0 - */ - it('TC_041-4', 0, async function (done) { - const imageSourceApi = image.createImageSource('file:///data/local/tmp/test.123'); - expect(imageSourceApi == undefined).assertTrue(); - console.info('TC_041-4 success'); - done(); - }) - - /** - * @tc.number : TC_041-5 - * @tc.name : createImageSource(uri)-wrong uri - * @tc.desc : 1.call createImageSource(uri) - * 2.set wrong uri - * 3.return null - * @tc.size : MEDIUM - * @tc.type : Functional - * @tc.level : Level 0 - */ - it('TC_041-5', 0, async function (done) { - try { - const imageSourceApi = image.createImageSource('file:///multimedia/test.jpg'); - expect(imageSourceApi == undefined).assertTrue(); - console.info('TC_041-5 success'); - done(); - } catch (error) { - console.info('TC_041-5 error: ' + error); - expect(false).assertTrue(); - done(); - } - }) - - /** - * @tc.number : TC_042 - * @tc.name : createImageSource(fd) - * @tc.desc : 1.call createImageSource - * 2.set fd - * 3.return imagesource - * @tc.size : MEDIUM - * @tc.type : Functional - * @tc.level : Level 0 - */ - it('TC_042', 0, async function (done) { - try { - let fdNumber = fileio.openSync(pathJpg); - const imageSourceApi = image.createImageSource(fdNumber); - if (imageSourceApi == undefined) { - console.info('TC_042 create image source failed'); - expect(false).assertTrue(); - done(); - } else { - imageSourceApi.getImageInfo((err, imageInfo) => { - if (err) { - expect(false).assertTrue(); - console.info('TC_042 err: ' + err); - done(); - return - } - if (imageInfo != undefined) { - expect(true).assertTrue(); - fileio.closeSync(fdNumber); - done(); - } else { - console.info('TC_042 failed'); - expect(false).assertTrue(); - done(); - } - - }) - } - } catch (error) { - console.info('TC_042 error: ' + error); - expect(false).assertTrue(); - done(); - } - }) - - /** - * @tc.number : TC_042-1 - * @tc.name : createImageSource(fd) fd<0 - * @tc.desc : 1.call createImageSource - * 2.set wrong fd - * 3.return undefined - * @tc.size : MEDIUM - * @tc.type : Functional - * @tc.level : Level 0 - */ - it('TC_042-1', 0, async function (done) { - const imageSourceApi = image.createImageSource(-2); - expect(imageSourceApi == undefined).assertTrue(); - console.info('TC_042-1 success'); - done(); - }) - - /** - * @tc.number : TC_043 - * @tc.name : createImageSource(data) - * @tc.desc : 1.setdata - * 2.createImageSource - * 3.return imagesource - * @tc.size : MEDIUM - * @tc.type : Functional - * @tc.level : Level 0 - */ - it('TC_043', 0, async function (done) { - const data = testJpg.buffer; - const imageSourceApi = image.createImageSource(data); - if (imageSourceApi == undefined) { - console.info('TC_043 create image source failed'); - expect(false).assertTrue(); - done(); - } else { - imageSourceApi.getImageInfo((err, imageInfo) => { - console.info('TC_043 imageInfo'); - expect(imageInfo != undefined).assertTrue(); - done(); - }) - } - }) - - /** - * @tc.number : TC_043-1 - * @tc.name : createImageSource(data) buffer:0 - * @tc.desc : 1.setdata - * 2.createImageSource - * 3.return imagesource - * @tc.size : MEDIUM - * @tc.type : Functional - * @tc.level : Level 0 - */ - it('TC_043-1', 0, async function (done) { - const data = new ArrayBuffer(0); - const imageSourceApi = image.createImageSource(data); - expect(imageSourceApi == undefined).assertTrue(); - console.info('TC_043-1 success'); - done(); - }) - - /** - * @tc.number : TC_044 - * @tc.name : release-imagesource-promise-jpg - * @tc.desc : 1.create ImageSource - * 2.call release() - * 3.return undefined - * @tc.size : MEDIUM - * @tc.type : Functional - * @tc.level : Level 1 - */ - it('TC_044', 0, async function (done) { - try { - let fdNumber = fileio.openSync(pathJpg); - const imageSourceApi = image.createImageSource(fdNumber); - if (imageSourceApi == undefined) { - console.info('TC_044 create image source failed'); - expect(false).assertTrue(); - done(); - } else { - imageSourceApi.release().then(() => { - console.info('TC_044 success'); - expect(true).assertTrue(); - done(); - }).catch(error => { - console.info('TC_044 error'); - expect(false).assertTrue(); - done(); - }) - } - } catch (error) { - console.info('TC_044 err:' + error); - expect(false).assertTrue(); - done(); - } - }) - - /** - * @tc.number : TC_044-1 - * @tc.name : release-imagesource-callback-jpg - * @tc.desc : 1.create ImageSource - * 2.call release() - * 3.callback return undefined - * @tc.size : MEDIUM - * @tc.type : Functional - * @tc.level : Level 1 - */ - it('TC_044-1', 0, async function (done) { - try { - let fdNumber = fileio.openSync(pathJpg); - const imageSourceApi = image.createImageSource(fdNumber); - if (imageSourceApi == undefined) { - console.info('TC_044-1 create image source failed'); - expect(false).assertTrue(); - done(); - } else { - imageSourceApi.release(() => { - console.info('TC_044-1 Success'); - expect(true).assertTrue(); - done(); - }) - } - } catch (error) { - console.info('TC_044-1 err:' + error); - expect(false).assertTrue(); - done(); - } - }) - - /** - * @tc.number : TC_045 - * @tc.name : getImageInfo(callback: AsyncCallback)-jpg - * @tc.desc : 1.create imageSource - * 2.imageSourcecall getImageInfo(ImageInfo) - * 3.callback return undefined - * @tc.size : MEDIUM - * @tc.type : Functional - * @tc.level : Level 1 - */ - - it('TC_045', 0, async function (done) { - try { - let fdNumber = fileio.openSync(pathJpg); - const imageSourceApi = image.createImageSource(fdNumber); - if (imageSourceApi == undefined) { - console.info('TC_045 create image source failed'); - expect(false).assertTrue(); - done(); - } else { - imageSourceApi.getImageInfo((err, imageInfo) => { - if (err) { - expect(false).assertTrue(); - console.info('TC_045 err:' + err); - done(); - return - } - if (imageInfo != undefined) { - console.info('TC_045 imageInfo.size.height:' + imageInfo.size.height); - console.info('TC_045 imageInfo.size.width:' + imageInfo.size.width); - expect(true).assertTrue(); - fileio.closeSync(fdNumber); - done(); - } else { - console.info('TC_045 failed'); - expect(false).assertTrue(); - done(); - } - }) - } - } catch (error) { - console.info('TC_045 error: ' + error); - expect(false).assertTrue(); - done(); - } - }) - - - /** - * @tc.number : TC_045-1 - * @tc.name : getImageInfo(callback: AsyncCallback)-bmp - * @tc.desc : 1.create imageSource - * 2.imageSourcecall getImageInfo(ImageInfo) - * 3.callback return undefined - * @tc.size : MEDIUM - * @tc.type : Functional - * @tc.level : Level 1 - */ - it('TC_045-1', 0, async function (done) { - try { - let fdNumber = fileio.openSync(pathBmp); - const imageSourceApi = image.createImageSource(fdNumber); - if (imageSourceApi == undefined) { - console.info('TC_045-1 create image source failed'); - expect(false).assertTrue(); - done(); - } else { - imageSourceApi.getImageInfo((err, imageInfo) => { - expect(imageInfo != undefined).assertTrue(); - console.info('TC_045-1 imageInfo.size.height:' + imageInfo.size.height); - console.info('TC_045-1 imageInfo.size.width:' + imageInfo.size.width); - done(); - }) - } - } catch (error) { - console.info('TC_045-1 error: ' + error); - expect(false).assertTrue(); - done(); - } - }) - - /** - * @tc.number : TC_045-2 - * @tc.name : getImageInfo(callback: AsyncCallback)-png - * @tc.desc : 1.create imageSource - * 2.imageSourcecall getImageInfo(ImageInfo) - * 3.callback return undefined - * @tc.size : MEDIUM - * @tc.type : Functional - * @tc.level : Level 1 - */ - it('TC_045-2', 0, async function (done) { - try { - let fdNumber = fileio.openSync(pathPng); - const imageSourceApi = image.createImageSource(fdNumber); - if (imageSourceApi == undefined) { - console.info('TC_045-2 create image source failed'); - expect(false).assertTrue(); - done(); - } else { - imageSourceApi.getImageInfo((err, imageInfo) => { - expect(imageInfo != undefined).assertTrue(); - console.info('TC_045-2 imageInfo.size.height:' + imageInfo.size.height); - console.info('TC_045-2 imageInfo.size.width:' + imageInfo.size.width); - done(); - }) - } - } catch (error) { - console.info('TC_045-2 error: ' + error); - expect(false).assertTrue(); - done(); - } - }) - - /** - * @tc.number : TC_045-3 - * @tc.name : getImageInfo(callback: AsyncCallback)-gif - * @tc.desc : 1.create ImageInfo - * 2.call getImageInfo(index, ImageInfo) - * 3.callback return undefined - * @tc.size : MEDIUM - * @tc.type : Functional - * @tc.level : Level 1 - */ - it('TC_045-3', 0, async function (done) { - try { - let fdNumber = fileio.openSync(pathGif); - const imageSourceApi = image.createImageSource(fdNumber); - if (imageSourceApi == undefined) { - console.info('TC_045-3 create image source failed'); - expect(false).assertTrue(); - done(); - } else { - imageSourceApi.getImageInfo((err, imageInfo) => { - if (err) { - expect(false).assertTrue(); - console.info('TC_045-3 error' + err); - done(); - return - } - if (imageInfo != undefined && imageInfo != null) { - expect(true).assertTrue(); - console.info('TC_045-3 imageInfo.size.height:' + imageInfo.size.height); - console.info('TC_045-3 imageInfo.size.width:' + imageInfo.size.width); - console.info('TC_045-3 success') - done(); - } else { - expect(false).assertTrue(); - console.info('TC_045-3 failed') - done(); - } - }) - } - } catch (error) { - console.info('TC_045-3 error: ' + error); - expect(false).assertTrue(); - done(); - } - }) - - /** - * @tc.number : TC_046 - * @tc.name : getImageInfo(index: number, callback: AsyncCallback)-jpg - * @tc.desc : 1.create ImageInfo - * 2.call getImageInfo(index, ImageInfo) - * 3.callback return undefined - * @tc.size : MEDIUM - * @tc.type : Functional - * @tc.level : Level 1 - */ - it('TC_046', 0, async function (done) { - try { - let fdNumber = fileio.openSync(pathJpg); - const imageSourceApi = image.createImageSource(fdNumber); - if (imageSourceApi == undefined) { - console.info('TC_046 create image source failed'); - expect(false).assertTrue(); - done(); - } else { - imageSourceApi.getImageInfo(0, (err, imageInfo) => { - expect(imageInfo != undefined).assertTrue(); - console.info('TC_046 imageInfo.size.height:' + imageInfo.size.height); - console.info('TC_046 imageInfo.size.width:' + imageInfo.size.width); - done(); - }) - } - } catch (error) { - console.info('TC_046 error: ' + error); - expect(false).assertTrue(); - done(); - } - }) - - /** - * @tc.number : TC_046-1 - * @tc.name : getImageInfo(index: number, callback: AsyncCallback)-bmp - * @tc.desc : 1.create ImageInfo - * 2.call getImageInfo(index, ImageInfo) - * 3.callback return undefined - * @tc.size : MEDIUM - * @tc.type : Functional - * @tc.level : Level 1 - */ - it('TC_046-1', 0, async function (done) { - try { - let fdNumber = fileio.openSync(pathBmp); - const imageSourceApi = image.createImageSource(fdNumber); - if (imageSourceApi == undefined) { - console.info('TC_046-1 create image source failed'); - expect(false).assertTrue(); - done(); - } else { - imageSourceApi.getImageInfo(0, (err, imageInfo) => { - expect(imageInfo != undefined).assertTrue(); - console.info('TC_046-1 imageInfo.size.height:' + imageInfo.size.height); - console.info('TC_046-1 imageInfo.size.width:' + imageInfo.size.width); - done(); - }) - } - } catch (error) { - console.info('TC_046-1 error: ' + error); - expect(false).assertTrue(); - done(); - } - }) - - /** - * @tc.number: TC_046-2 - * @tc.name : getImageInfo(index: number, callback: AsyncCallback)-png - * @tc.desc : 1.create ImageInfo - * 2.call getImageInfo(index, ImageInfo) - * 3.callback return undefined - * @tc.size : MEDIUM MEDIUM - * @tc.type : Functional - * @tc.level : Level 1 - */ - it('TC_046-2', 0, async function (done) { - try { - let fdNumber = fileio.openSync(pathPng); - const imageSourceApi = image.createImageSource(fdNumber); - if (imageSourceApi == undefined) { - console.info('TC_046-2 create image source failed'); - expect(false).assertTrue(); - done(); - } else { - imageSourceApi.getImageInfo(0, (err, imageInfo) => { - expect(imageInfo != undefined).assertTrue(); - console.info('TC_046-2 imageInfo.size.height:' + imageInfo.size.height); - console.info('TC_046-2 imageInfo.size.width:' + imageInfo.size.width); - done(); - }) - } - } catch { - console.info('TC_046-2 error: ' + error); - expect(false).assertTrue(); - done(); - } - - }) - - /** - * @tc.number: TC_046-3 - * @tc.name : getImageInfo(index: number, callback: AsyncCallback)-gif - * @tc.desc : 1.create ImageInfo - * 2.call getImageInfo(index, ImageInfo) - * 3.callback return undefined - * @tc.size : MEDIUM MEDIUM - * @tc.type : Functional - * @tc.level : Level 1 - */ - it('TC_046-3', 0, async function (done) { - try { - let fdNumber = fileio.openSync(pathGif); - const imageSourceApi = image.createImageSource(fdNumber); - if (imageSourceApi == undefined) { - console.info('TC_046-3 create image source failed'); - expect(false).assertTrue(); - done(); - } else { - imageSourceApi.getImageInfo(0, (err, imageInfo) => { - if (err) { - expect(false).assertTrue(); - console.info('TC_046-3 error' + err); - done(); - return - } - if (imageInfo != undefined && imageInfo != null) { - expect(true).assertTrue(); - console.info('TC_046-3 imageInfo.size.height:' + imageInfo.size.height); - console.info('TC_046-3 imageInfo.size.width:' + imageInfo.size.width); - console.info('TC_046-3 success') - done(); - } else { - expect(false).assertTrue(); - console.info('TC_046-3 failed') - done(); - } - }) - } - } catch (error) { - console.info('TC_046-3 error: ' + error); - expect(false).assertTrue(); - done(); - } - }) - - /** - * @tc.number: TC_046-4 - * @tc.name : getImageInfo(index: number, callback: AsyncCallback)-gif(frame:1)-index:1 - * @tc.desc : 1.create ImageInfo - * 2.call getImageInfo(index, ImageInfo) - * 3.callback return undefined - * @tc.size : MEDIUM - * @tc.type : Functional - * @tc.level : Level 1 - */ - it('TC_046-4', 0, async function (done) { - try { - let fdNumber = fileio.openSync(pathGif); - const imageSourceApi = image.createImageSource(fdNumber); - if (imageSourceApi == undefined) { - console.info('TC_046-4 create image source failed'); - expect(false).assertTrue(); - done(); - } else { - imageSourceApi.getImageInfo(1, (err, imageInfo) => { - if (imageInfo == undefined) { - expect(true).assertTrue(); - done(); - } else { - expect(false).assertTrue(); - done(); - } - }) - } - } catch (error) { - console.info('TC_046-4 error: ' + error); - expect(false).assertTrue(); - done(); - } - }) - - /** - * @tc.number: TC_046-5 - * @tc.name : getImageInfo(index: number, callback: AsyncCallback)-gif-index:-1 - * @tc.desc : 1.create ImageInfo - * 2.call getImageInfo(index, ImageInfo) - * 3.callback return undefined - * @tc.size : MEDIUM - * @tc.type : Functional - * @tc.level : Level 1 - */ - it('TC_046-5', 0, async function (done) { - try { - let fdNumber = fileio.openSync(pathGif); - const imageSourceApi = image.createImageSource(fdNumber); - if (imageSourceApi == undefined) { - console.info('TC_046-5 create image source failed'); - expect(false).assertTrue(); - done(); - } else { - imageSourceApi.getImageInfo(-1, (err, imageInfo) => { - expect(imageInfo == undefined).assertTrue(); - done(); - }) - } - } catch (error) { - console.info('TC_046-5 error: ' + error); - expect(false).assertTrue(); - done(); - } - }) - - /** - * @tc.number : TC_047 - * @tc.name : getImageInfo(index?: number): Promise-jpg - * @tc.desc : 1.create imagesource - * 2.call getImageInfo(index) - * 3.callbackcall ,return imageinfo - * @tc.size : MEDIUM - * @tc.type : Functional - * @tc.level : Level 1 - */ - it('TC_047', 0, async function (done) { - try { - let fdNumber = fileio.openSync(pathJpg); - const imageSourceApi = image.createImageSource(fdNumber); - if (imageSourceApi == undefined) { - console.info('TC_047 create image source failed'); - expect(false).assertTrue(); - done(); - } else { - imageSourceApi.getImageInfo(0) - .then(imageInfo => { - expect(imageInfo != undefined).assertTrue(); - console.info('TC_047 imageInfo'); - console.info('imageInfo.size.height:' + imageInfo.size.height); - console.info('imageInfo.size.width:' + imageInfo.size.width); - done(); - }).catch(error => { - console.log('TC_047 error: ' + error); - expect().assertFail(); - done(); - }) - } - } catch (error) { - console.info('TC_047 error: ' + error); - expect(false).assertTrue(); - done(); - } - }) - - /** - * @tc.number : TC_047-1 - * @tc.name : getImageInfo(index?: number): Promise-bmp - * @tc.desc : 1.create imagesource - * 2.call getImageInfo(index) - * 3.callbackcall ,return imageinfo - * @tc.size : MEDIUM - * @tc.type : Functional - * @tc.level : Level 1 - */ - it('TC_047-1', 0, async function (done) { - try { - let fdNumber = fileio.openSync(pathBmp); - const imageSourceApi = image.createImageSource(fdNumber); - if (imageSourceApi == undefined) { - console.info('TC_047-1 create image source failed'); - expect(false).assertTrue(); - done(); - } else { - imageSourceApi.getImageInfo(0) - .then(imageInfo => { - expect(imageInfo != undefined).assertTrue(); - console.info('TC_047-1 imageInfo'); - console.info('imageInfo.size.height:' + imageInfo.size.height); - console.info('imageInfo.size.width:' + imageInfo.size.width); - done(); - }).catch(error => { - console.log('TC_047-1 error: ' + error); - expect().assertFail(); - done(); - }) - } - } catch (error) { - console.info('TC_047-1 error: ' + error); - expect(false).assertTrue(); - done(); - } - }) - - /** - * @tc.number : TC_047-2 - * @tc.name : getImageInfo(index?: number): Promise-png - * @tc.desc : 1.create imagesource - * 2.call getImageInfo(index) - * 3.callbackcall ,return imageinfo - * @tc.size : MEDIUM - * @tc.type : Functional - * @tc.level : Level 1 - */ - it('TC_047-2', 0, async function (done) { - try { - let fdNumber = fileio.openSync(pathPng); - const imageSourceApi = image.createImageSource(fdNumber); - if (imageSourceApi == undefined) { - console.info('TC_047-2 create image source failed'); - expect(false).assertTrue(); - done(); - } else { - imageSourceApi.getImageInfo(0) - .then(imageInfo => { - expect(imageInfo != undefined).assertTrue(); - console.info('TC_047-2 imageInfo'); - console.info('imageInfo.size.height:' + imageInfo.size.height); - console.info('imageInfo.size.width:' + imageInfo.size.width); - done(); - }).catch(error => { - console.log('TC_047-2 error: ' + error); - expect().assertFail(); - done(); - }) - } - } catch (error) { - console.info('TC_047-2 error: ' + error); - expect(false).assertTrue(); - done(); - } - }) - - /** - * @tc.number : TC_047-3 - * @tc.name : getImageInfo(index?: number): Promise-gif - * @tc.desc : 1.create imagesource - * 2.call getImageInfo(index) - * 3.callbackcall ,return imageinfo - * @tc.size : MEDIUM - * @tc.type : Functional - * @tc.level : Level 1 - */ - it('TC_047-3', 0, async function (done) { - try { - let fdNumber = fileio.openSync(pathGif); - const imageSourceApi = image.createImageSource(fdNumber); - if (imageSourceApi == undefined) { - console.info('TC_047-3 create image source failed'); - expect(false).assertTrue(); - done(); - } else { - imageSourceApi.getImageInfo(0) - .then(imageInfo => { - if (imageInfo != undefined && imageInfo != null) { - expect(true).assertTrue(); - console.info('TC_047-3 imageInfo.size.height:' + imageInfo.size.height); - console.info('TC_047-3 imageInfo.size.width:' + imageInfo.size.width); - done(); - } else { - expect(false).assertTrue(); - console.info('TC_047-3 failed'); - done(); - } - }).catch(error => { - console.log('TC_047-3 error: ' + error); - expect().assertFail(); - done(); - }) - } - } catch (error) { - console.info('TC_047-3 error: ' + error); - expect(false).assertTrue(); - done(); - } - }) - - /** - * @tc.number: TC_047-4 - * @tc.name : getImageInfo(index?: number): Promise-gif(frame:1)-index:1 - * @tc.desc : 1.create imagesource - * 2.call getImageInfo(index=1) - * 3.callback return imageinfo undefined - * @tc.size : MEDIUM - * @tc.type : Functional - * @tc.level : Level 1 - */ - it('TC_047-4', 0, async function (done) { - try { - let fdNumber = fileio.openSync(pathGif); - const imageSourceApi = image.createImageSource(fdNumber); - if (imageSourceApi == undefined) { - console.info('TC_047-4 create image source failed'); - expect(false).assertTrue(); - done(); - } else { - imageSourceApi.getImageInfo(1) - .then(() => { - console.log('TC_047-4 failed'); - expect().assertFail(); - done(); - }).catch(error => { - console.log('TC_047-4 success'); - expect(true).assertTrue(); - done(); - }) - } - } catch (error) { - console.info('TC_047-4 error: ' + error); - expect(false).assertTrue(); - done(); - } - }) - - /** - * @tc.number : TC_047-5 - * @tc.name : getImageInfo(index?: number): Promise-gif-index:-1 - * @tc.desc : 1.create imagesource - * 2.call getImageInfo(index=-1) - * 3.callback return imageinfo undefined - * @tc.size : MEDIUM - * @tc.type : Functional - * @tc.level : Level 1 - */ - it('TC_047-5', 0, async function (done) { - try { - let fdNumber = fileio.openSync(pathGif); - const imageSourceApi = image.createImageSource(fdNumber); - if (imageSourceApi == undefined) { - console.info('TC_047-5 create image source failed'); - expect(false).assertTrue(); - done(); - } else { - imageSourceApi.getImageInfo(-1) - .then(() => { - console.log('TC_047-5 failed'); - expect().assertFail(); - done(); - }).catch(error => { - console.log('TC_047-5 success'); - expect(true).assertTrue(); - done(); - }) - } - } catch (error) { - console.info('TC_047-5 error: ' + error); - expect(false).assertTrue(); - done(); - } - }) - - /** - * @tc.number : TC_050-14 - * @tc.name : createPixelMap-promise-jpg - * @tc.desc : 1.create imagesource - * 2.set index and DecodeOptions - * 3.create PixelMap - * 4.callback return undefined - * @tc.size : MEDIUM - * @tc.type : Functional - * @tc.level : Level 1 - */ - it('TC_050-14', 0, async function (done) { - try { - let fdNumber = fileio.openSync(pathJpg); - const imageSourceApi = image.createImageSource(fdNumber); - if (imageSourceApi == undefined) { - console.info('TC_050-14 create image source failed'); - expect(false).assertTrue(); - done(); - } else { - imageSourceApi.createPixelMap().then(pixelmap => { - globalpixelmap = pixelmap; - console.info('TC_050-14 success '); - expect(pixelmap != undefined).assertTrue(); - done(); - }).catch(error => { - console.log('TC_050-14 error: ' + error); - expect().assertFail(); - done(); - }) - } - } catch (error) { - console.info('TC_050-14 error: ' + error); - expect(false).assertTrue(); - done(); - } - }) - - /** - * @tc.number : TC_050-15 - * @tc.name : createPixelMap-callback-jpg - * @tc.desc : 1.create imagesource - * 2.set index and DecodeOptions - * 3.create PixelMap - * 4.callback return null - * @tc.size : MEDIUM - * @tc.type : Functional - * @tc.level : Level 1 - */ - it('TC_050-15', 0, async function (done) { - try { - let fdNumber = fileio.openSync(pathJpg); - const imageSourceApi = image.createImageSource(fdNumber); - if (imageSourceApi == undefined) { - console.info('TC_050-15 create image source failed'); - expect(false).assertTrue(); - done(); - } else { - imageSourceApi.createPixelMap((err, pixelmap) => { - globalpixelmap = pixelmap; - console.info('TC_050-15 success '); - expect(pixelmap != undefined).assertTrue(); - done(); - }) - } - } catch (error) { - console.info('TC_050-15 error: ' + error); - expect(false).assertTrue(); - done(); - } - }) - - /** - * @tc.number : TC_053 - * @tc.name : createIncrementalSource-updateData-png - * @tc.desc : 1.create imagesource - * 2.update data - * 3.create pixelmap - * @tc.size : MEDIUM - * @tc.type : Functional - * @tc.level : Level 1 - */ - it('TC_053', 0, async function (done) { - try { - let testimagebuffer = testPng; - console.info('TC_053 0003 ' + testimagebuffer.length); - let bufferSize = testimagebuffer.length; - let offset = 0; - const incSouce = image.createIncrementalSource(new ArrayBuffer(1)); - let ret; - let isFinished = false; - while (offset < testimagebuffer.length) { - console.info('TC_053 0006 ' + testimagebuffer.length); - var oneStep = testimagebuffer.slice(offset, offset + bufferSize); - console.info('TC_053 0007 ' + oneStep.length); - if (oneStep.length < bufferSize) { - isFinished = true; - } - ret = await incSouce.updateData(oneStep, isFinished, 0, oneStep.length); - if (!ret) { - console.info('TC_053 updateData failed'); - expect(ret).assertTrue(); - break; - } - offset = offset + oneStep.length; - console.info('TC_053 0011 ' + offset); - } - if (ret) { - console.info('TC_053 updateData success '); - let decodingOptions = { - sampleSize: 1 - }; - incSouce.createPixelMap(decodingOptions, (err, pixelmap) => { - console.info('TC_053 0014' + pixelmap); - expect(pixelmap != undefined).assertTrue(); - done(); - }) - } else { - done(); - } - } catch (error) { - console.info('TC_053 updateData failed ' + error); - } - }) - - /** - * @tc.number : TC_053-1 - * @tc.name : createIncrementalSource-updateData-jpg - * @tc.desc : 1.create imagesource - * 2.update data - * 3.create pixelmap - * @tc.size : MEDIUM - * @tc.type : Functional - * @tc.level : Level 1 - */ - it('TC_053-1', 0, async function (done) { - try { - let testimagebuffer = testJpg; - console.info('TC_053-1 0003 ' + testimagebuffer.length); - let bufferSize = testimagebuffer.length; - let offset = 0; - const incSouce = image.createIncrementalSource(new ArrayBuffer(1)); - let isFinished = false; - let ret; - while (offset < testimagebuffer.length) { - console.info('TC_053-1 0006 ' + testimagebuffer.length); - var oneStep = testimagebuffer.slice(offset, offset + bufferSize); - console.info('TC_053-1 0007 ' + oneStep.length); - if (oneStep.length < bufferSize) { - isFinished = true; - } - ret = await incSouce.updateData(oneStep, isFinished, 0, oneStep.length); - if (!ret) { - console.info('TC_053-1 updateData failed'); - expect(ret).assertTrue(); - break; - } - offset = offset + oneStep.length; - console.info('TC_053-1 0011 ' + offset); - } - if (ret) { - console.info('TC_053-1 updateData success '); - let decodingOptions = { - sampleSize: 1 - }; - incSouce.createPixelMap(decodingOptions, (err, pixelmap) => { - expect(pixelmap != undefined).assertTrue(); - done(); - }) - } else { - done(); - } - } catch (error) { - console.info('TC_053-1 updateData failed ' + error); - } - }) - - /** - * @tc.number : TC_064 - * @tc.name : release ImageSource - promise - png - * @tc.desc : 1.create ImageSource - * 2.call release() - * 3.return undefined - * @tc.size : MEDIUM - * @tc.type : Functional - * @tc.level : Level 1 - */ - it('TC_064', 0, async function (done) { - try { - let fdNumber = fileio.openSync(pathPng); - const imageSourceApi = image.createImageSource(fdNumber); - if (imageSourceApi == undefined) { - console.info('TC_064 create image source failed'); - expect(false).assertTrue(); - done(); - } else { - imageSourceApi.release().then(() => { - console.info('TC_064 success'); - expect(true).assertTrue(); - done(); - }).catch(error => { - console.log('TC_064 error: ' + error); - expect().assertFail(); - done(); - }) - } - } catch (error) { - console.info('TC_064 error: ' + error); - expect(false).assertTrue(); - done(); - } - }) - - /** - * @tc.number : TC_064-1 - * @tc.name : release ImageSource - callback - png - * @tc.desc : 1.create ImageSource - * 2.call release() - * 3.return undefined - * @tc.size : MEDIUM - * @tc.type : Functional - * @tc.level : Level 1 - */ - it('TC_064-1', 0, async function (done) { - try { - let fdNumber = fileio.openSync(pathPng); - const imageSourceApi = image.createImageSource(fdNumber); - if (imageSourceApi == undefined) { - console.info('TC_064-1 create image source failed'); - expect(false).assertTrue(); - done(); - } else { - imageSourceApi.release(async (err) => { - if (err) { - console.info('TC_064-1 err:' + err); - expect(false).assertTrue(); - done(); - return - } - console.info('TC_064-1 Success'); - expect(true).assertTrue(); - expect(true).assertTrue(); - done(); - }) - } - } catch (error) { - console.info('TC_064-1 error: ' + error); - expect(false).assertTrue(); - done(); - } - }) - - /** - * @tc.number : TC_065 - * @tc.name : release ImageSource - promise - bmp - * @tc.desc : 1.create ImageSource - * 2.call release() - * 3.return undefined - * @tc.size : MEDIUM - * @tc.type : Functional - * @tc.level : Level 1 - */ - it('TC_065', 0, async function (done) { - try { - let fdNumber = fileio.openSync(pathBmp); - const imageSourceApi = image.createImageSource(fdNumber); - if (imageSourceApi == undefined) { - console.info('TC_065 create image source failed'); - expect(false).assertTrue(); - done(); - } else { - imageSourceApi.release().then(() => { - console.info('TC_065 success'); - expect(true).assertTrue(); - done(); - }).catch(error => { - console.log('TC_065 error: ' + error); - expect().assertFail(); - done(); - }) - } - } catch (error) { - console.info('TC_065 error: ' + error); - expect(false).assertTrue(); - done(); - } - }) - - /** - * @tc.number : TC_065-1 - * @tc.name : release ImageSource - callback - bmp - * @tc.desc : 1.create ImageSource - * 2.create SourceStream - * 3.return undefined - * @tc.size : MEDIUM - * @tc.type : Functional - * @tc.level : Level 1 - */ - it('TC_065-1', 0, async function (done) { - try { - let fdNumber = fileio.openSync(pathBmp); - const imageSourceApi = image.createImageSource(fdNumber); - if (imageSourceApi == undefined) { - console.info('TC_065-1 create image source failed'); - expect(false).assertTrue(); - done(); - } else { - imageSourceApi.release(async () => { - console.info('TC_065-1 Success'); - expect(true).assertTrue(); - done(); - }) - } - } catch (error) { - console.info('TC_065-1 error: ' + error); - expect(false).assertTrue(); - done(); - } - }) - - /** - * @tc.number : TC_066 - * @tc.name : release ImageSource - promise - gif - * @tc.desc : 1.create ImageSource - * 2.call release() - * 3.return undefined - * @tc.size : MEDIUM - * @tc.type : Functional - * @tc.level : Level 1 - */ - it('TC_066', 0, async function (done) { - try { - let fdNumber = fileio.openSync(pathGif); - const imageSourceApi = image.createImageSource(fdNumber); - if (imageSourceApi == undefined) { - console.info('TC_066 create image source failed'); - expect(false).assertTrue(); - done(); - } else { - imageSourceApi.release().then(() => { - console.info('TC_066 success'); - expect(true).assertTrue(); - done(); - }).catch(error => { - console.log('TC_066 error: ' + error); - expect().assertFail(); - done(); - }) - } - } catch (error) { - console.info('TC_066 error: ' + error); - expect(false).assertTrue(); - done(); - } - }) - - /** - * @tc.number : TC_066-1 - * @tc.name : release ImageSource - callback - gif - * @tc.desc : 1.create ImageSource - * 2.call release() - * 3.return undefined - * @tc.size : MEDIUM - * @tc.type : Functional - * @tc.level : Level 1 - */ - it('TC_066-1', 0, async function (done) { - try { - let fdNumber = fileio.openSync(pathGif); - const imageSourceApi = image.createImageSource(fdNumber); - if (imageSourceApi == undefined) { - console.info('TC_066-1 create image source failed'); - expect(false).assertTrue(); - done(); - } else { - imageSourceApi.release(() => { - console.info('TC_066-1 Success'); - expect(true).assertTrue(); - done(); - }) - } - } catch (error) { - console.info('TC_066-1 error: ' + error); - expect(false).assertTrue(); - done(); - } - }) - - /** - * @tc.number : TC_067-14 - * @tc.name : createPixelMap-promise-gif - * @tc.desc : 1.create imagesource - * 2.set index and DecodeOptions - * 3.create PixelMap - * 4.callback return undefined - * @tc.size : MEDIUM - * @tc.type : Functional - * @tc.level : Level 1 - */ - it('TC_067-14', 0, async function (done) { - try { - let fdNumber = fileio.openSync(pathMovingGif); - const imageSourceApi = image.createImageSource(fdNumber); - if (imageSourceApi == undefined) { - console.info('TC_067-14 create image source failed'); - expect(false).assertTrue(); - done(); - } else { - imageSourceApi.createPixelMap().then(pixelmap => { - globalpixelmap = pixelmap; - console.info('TC_067-14 success '); - expect(pixelmap !== undefined).assertTrue(); - done(); - }).catch(error => { - console.log('TC_067-14 error: ' + error); - expect().assertFail(); - done(); - }) - } - } catch (error) { - console.info('TC_067-14 error: ' + error); - expect(false).assertTrue(); - done(); - } - }) - - /** - * @tc.number : TC_067-15 - * @tc.name : createPixelMap-pcallback-gif - * @tc.desc : 1.create imagesource - * 2.set index and DecodeOptions - * 3.create PixelMap - * 4.callback return null - * @tc.size : MEDIUM - * @tc.type : Functional - * @tc.level : Level 1 - */ - it('TC_067-15', 0, async function (done) { - try { - let fdNumber = fileio.openSync(pathMovingGif); - const imageSourceApi = image.createImageSource(fdNumber); - if (imageSourceApi == undefined) { - console.info('TC_067-15 create image source failed'); - expect(false).assertTrue(); - done(); - } else { - imageSourceApi.createPixelMap((err, pixelmap) => { - globalpixelmap = pixelmap; - console.info('TC_067-15 success '); - expect(pixelmap !== undefined).assertTrue(); - done(); - }) - } - } catch (error) { - console.info('TC_067-15 error: ' + error); - expect(false).assertTrue(); - done(); - } - }) - - /** - * @tc.number : TC_068-14 - * @tc.name : createPixelMap-promise-bmp - * @tc.desc : 1.create imagesource - * 2.set index and DecodeOptions - * 3.create PixelMap - * 4.callback return undefined - * @tc.size : MEDIUM - * @tc.type : Functional - * @tc.level : Level 1 - */ - it('TC_068-14', 0, async function (done) { - try { - let fdNumber = fileio.openSync(pathBmp); - const imageSourceApi = image.createImageSource(fdNumber); - if (imageSourceApi == undefined) { - console.info('TC_068-14 create image source failed'); - expect(false).assertTrue(); - done(); - } else { - imageSourceApi.createPixelMap().then(pixelmap => { - globalpixelmap = pixelmap; - console.info('TC_068-14 success '); - expect(pixelmap != undefined).assertTrue(); - done(); - }).catch(error => { - console.log('TC_068-14 error: ' + error); - expect().assertFail(); - done(); - }) - } - } catch (error) { - console.info('TC_068-14 error: ' + error); - expect(false).assertTrue(); - done(); - } - }) - - /** - * @tc.number : TC_068-15 - * @tc.name : createPixelMap-callback-bmp - * @tc.desc : 1.create imagesource - * 2.set index and DecodeOptions - * 3.create PixelMap - * 4.callback return undefined - * @tc.size : MEDIUM - * @tc.type : Functional - * @tc.level : Level 1 - */ - it('TC_068-15', 0, async function (done) { - try { - let fdNumber = fileio.openSync(pathBmp); - const imageSourceApi = image.createImageSource(fdNumber); - if (imageSourceApi == undefined) { - console.info('TC_068-15 create image source failed'); - expect(false).assertTrue(); - done(); - } else { - imageSourceApi.createPixelMap((err, pixelmap) => { - globalpixelmap = pixelmap; - console.info('TC_068-15 success '); - expect(pixelmap != undefined).assertTrue(); - done(); - }) - } - } catch (error) { - console.info('TC_068-15 error: ' + error); - expect(false).assertTrue(); - done(); - } - }) - - /** - * @tc.number : TC_163-14 - * @tc.name : createPixelMap-promise-png - * @tc.desc : 1.create imagesource - * 2.set index and DecodeOptions - * 3.create PixelMap - * 4.callback return undefined - * @tc.size : MEDIUM - * @tc.type : Functional - * @tc.level : Level 1 - */ - it('TC_163-14', 0, async function (done) { - try { - let fdNumber = fileio.openSync(pathPng); - const imageSourceApi = image.createImageSource(fdNumber); - if (imageSourceApi == undefined) { - console.info('TC_163-14 create image source failed'); - expect(false).assertTrue(); - done(); - } else { - imageSourceApi.createPixelMap().then(pixelmap => { - globalpixelmap = pixelmap; - console.info('TC_163-14 success'); - expect(pixelmap != undefined).assertTrue(); - done(); - }).catch(error => { - console.log('TC_163-14 error: ' + error); - expect().assertFail(); - done(); - }) - } - } catch (error) { - console.info('TC_163-14 error: ' + error); - expect(false).assertTrue(); - done(); - } - }) - - /** - * @tc.number : TC_163-15 - * @tc.name : createPixelMap-callback-png - * @tc.desc : 1.create imagesource - * 2.set index and DecodeOptions - * 3.create PixelMap - * 4.callback return null - * @tc.size : MEDIUM - * @tc.type : Functional - * @tc.level : Level 1 - */ - it('TC_163-15', 0, async function (done) { - try { - let fdNumber = fileio.openSync(pathPng); - const imageSourceApi = image.createImageSource(fdNumber); - if (imageSourceApi == undefined) { - console.info('TC_163-15 create image source failed'); - expect(false).assertTrue(); - done(); - } else { - imageSourceApi.createPixelMap((err, pixelmap) => { - globalpixelmap = pixelmap; - console.info('TC_163-15 success'); - expect(pixelmap != undefined).assertTrue(); - done(); - }) - } - } catch (error) { - console.info('TC_163-15 error: ' + error); - expect(false).assertTrue(); - done(); - } - }) - - /** - * @tc.number : TC_164 - * @tc.name : imagesource supportedFormats - * @tc.desc : 1.create imagesource - * 2.call supportedFormats - * @tc.size : MEDIUM - * @tc.type : Functional - * @tc.level : Level 0 - */ - it('TC_164', 0, async function (done) { - try { - let fdNumber = fileio.openSync(pathJpg); - const imageSourceApi = image.createImageSource(fdNumber); - if (imageSourceApi == undefined) { - console.info('TC_164 create image source failed'); - expect(false).assertTrue(); - done(); - } else { - expect(imageSourceApi.supportedFormats != undefined).assertTrue(); - console.info(imageSourceApi.supportedFormats); - console.info('TC_164 success '); - done(); - } - } catch (error) { - console.info('TC_164 error: ' + error); - expect(false).assertTrue(); - done(); - } - }) - - /** - * @tc.number : TC_166 - * @tc.name : imagepacker supportedFormats - * @tc.desc : 1.create imagepacker - * 2.call supportedFormats - * @tc.size : MEDIUM - * @tc.type : Functional - * @tc.level : Level 0 - */ - it('TC_166', 0, async function (done) { - const imagePackerApi = image.createImagePacker(); - if (imagePackerApi == undefined) { - console.info('TC_166 create image packer failed'); - expect(false).assertTrue(); - done(); - } else { - expect(imagePackerApi.supportedFormats != undefined).assertTrue(); - console.info(imagePackerApi.supportedFormats); - console.info('TC_166 success '); - done(); - } - }) - - /** - * @tc.number : TC_168 - * @tc.name : isEditable - * @tc.desc : 1.create pixelmap - * 2.call isEditable - * 3.return true - * @tc.size : MEDIUM - * @tc.type : Functional - * @tc.level : Level 1 - */ - it('TC_168', 0, async function (done) { - const Color = new ArrayBuffer(96); - let opts = { editable: true, pixelFormat: 3, size: { height: 4, width: 6 } } - image.createPixelMap(Color, opts, (error, pixelmap) => { - if (pixelmap == undefined) { - console.info('TC_168 create pixelmap failed'); - expect(false).assertTrue(); - done(); - } else { - expect(pixelmap.isEditable == true).assertTrue(); - console.info('TC_168 success '); - done(); - } - }) - }) -}) \ No newline at end of file +/* + * Copyright (C) 2021 Huawei Device Co., Ltd. + * 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. + */ + +import image from '@ohos.multimedia.image' +import fileio from '@ohos.fileio' +import { describe, beforeAll, beforeEach, afterEach, afterAll, it, expect } from '@ohos/hypium' +import { testPng, testJpg } from './testImg' +import abilityAccessCtrl from '@ohos.abilityAccessCtrl' +import bundle from '@ohos.bundle' + +export default function Image_test() { +describe('Image_test', function () { + var pathJpg = '/data/storage/el2/base/files/test.jpg'; + var pathBmp = '/data/storage/el2/base/files/test.bmp'; + var pathGif = '/data/storage/el2/base/files/test.gif'; + var pathPng = '/data/storage/el2/base/files/test.png'; + var pathMovingGif = '/data/storage/el2/base/files/moving_test.gif'; + let globalpixelmap; + beforeAll(async function () { + await applyPermission(); + console.info('beforeAll case'); + }) + + beforeEach(function () { + console.info('beforeEach case'); + }) + + afterEach(async function () { + if (globalpixelmap != undefined) { + console.info('globalpixelmap release start'); + try { + await globalpixelmap.release(); + } catch (error) { + console.info('globalpixelmap release fail'); + } + } + console.info('afterEach case'); + }) + + afterAll(async function () { + console.info('afterAll case'); + }) + + async function applyPermission() { + let appInfo = await bundle.getApplicationInfo('ohos.acts.multimedia.image', 0, 100); + let atManager = abilityAccessCtrl.createAtManager(); + if (atManager != null) { + let tokenID = appInfo.accessTokenId; + console.info('[permission]case accessTokenId is' + tokenID); + let permissionName1 = 'ohos.permission.MEDIA_LOCATION'; + let permissionName2 = 'ohos.permission.READ_MEDIA'; + let permissionName3 = 'ohos.permission.WRITE_MEDIA'; + await atManager.grantUserGrantedPermission(tokenID, permissionName1).then((result) => { + console.info('[permission]case grantUserGrantedPermission success:' + result); + }).catch((err) => { + console.info('[permission]case grantUserGrantedPermission failed:' + err); + }); + await atManager.grantUserGrantedPermission(tokenID, permissionName2).then((result) => { + console.info('[permission]case grantUserGrantedPermission success:' + result); + }).catch((err) => { + console.info('[permission]case grantUserGrantedPermission failed:' + err); + }); + await atManager.grantUserGrantedPermission(tokenID, permissionName3).then((result) => { + console.info('[permission]case grantUserGrantedPermission success:' + result); + }).catch((err) => { + console.info('[permission]case grantUserGrantedPermission failed:' + err); + }); + } else { + console.info('[permission]case apply permission failed,createAtManager failed'); + } + } + + + + /** + * @tc.number : TC_041 + * @tc.name : createImageSource(uri)-jpg + * @tc.desc : 1.set uri + * 2.call createImageSource(uri) + * 3.return imagesource + * @tc.size : MEDIUM + * @tc.type : Functional + * @tc.level : Level 0 + */ + it('TC_041', 0, async function (done) { + try { + let fdNumber = fileio.openSync(pathJpg); + const imageSourceApi = image.createImageSource(fdNumber); + expect(imageSourceApi != undefined).assertTrue(); + console.info('TC_041 success'); + fileio.closeSync(fdNumber); + done(); + } catch (error) { + console.info('TC_041 error: ' + error); + expect(false).assertTrue(); + done(); + } + }) + + /** + * @tc.number : TC_041-1 + * @tc.name : createImageSource(uri)-bmp + * @tc.desc : 1.seturi + * 2.call createImageSource(uri) + * 3.return imagesource + * @tc.size : MEDIUM + * @tc.type : Functional + * @tc.level : Level 0 + */ + it('TC_041-1', 0, async function (done) { + try { + let fdNumber = fileio.openSync(pathBmp); + const imageSourceApi = image.createImageSource(fdNumber); + expect(imageSourceApi != undefined).assertTrue(); + console.info('TC_041-1 success'); + done(); + } catch (error) { + console.info('TC_041-1 error: ' + error); + expect(false).assertTrue(); + done(); + } + }) + + /** + * @tc.number : TC_041-2 + * @tc.name : createImageSource(uri)-gif + * @tc.desc : 1.seturi + * 2.call createImageSource(uri) + * 3.return imagesource + * @tc.size : MEDIUM + * @tc.type : Functional + * @tc.level : Level 0 + */ + it('TC_041-2', 0, async function (done) { + try { + let fdNumber = fileio.openSync(pathGif); + const imageSourceApi = image.createImageSource(fdNumber); + expect(imageSourceApi != undefined).assertTrue(); + console.info('TC_041-2 success'); + done(); + } catch (error) { + console.info('TC_041-2 error: ' + error); + expect(false).assertTrue(); + done(); + } + + }) + + /** + * @tc.number : TC_041-3 + * @tc.name : createImageSource(uri)-png + * @tc.desc : 1.seturi + * 2.call createImageSource(uri) + * 3.return imagesource + * @tc.size : MEDIUM + * @tc.type : Functional + * @tc.level : Level 0 + */ + it('TC_041-3', 0, async function (done) { + try { + let fdNumber = fileio.openSync(pathPng); + const imageSourceApi = image.createImageSource(fdNumber); + expect(imageSourceApi != undefined).assertTrue(); + console.info('TC_041-3 success'); + done(); + } catch (error) { + console.info('TC_041-3 error: ' + error); + expect(false).assertTrue(); + done(); + } + + }) + + /** + * @tc.number : TC_041-4 + * @tc.name : createImageSource(uri)-wrong suffix file + * @tc.desc : 1.call createImageSource(uri) + * 2.Incoming wrong suffix file + * 3.imagesource null + * @tc.size : MEDIUM + * @tc.type : Functional + * @tc.level : Level 0 + */ + it('TC_041-4', 0, async function (done) { + const imageSourceApi = image.createImageSource('file:///data/local/tmp/test.123'); + expect(imageSourceApi == undefined).assertTrue(); + console.info('TC_041-4 success'); + done(); + }) + + /** + * @tc.number : TC_041-5 + * @tc.name : createImageSource(uri)-wrong uri + * @tc.desc : 1.call createImageSource(uri) + * 2.set wrong uri + * 3.return null + * @tc.size : MEDIUM + * @tc.type : Functional + * @tc.level : Level 0 + */ + it('TC_041-5', 0, async function (done) { + try { + const imageSourceApi = image.createImageSource('file:///multimedia/test.jpg'); + expect(imageSourceApi == undefined).assertTrue(); + console.info('TC_041-5 success'); + done(); + } catch (error) { + console.info('TC_041-5 error: ' + error); + expect(false).assertTrue(); + done(); + } + }) + + /** + * @tc.number : TC_042 + * @tc.name : createImageSource(fd) + * @tc.desc : 1.call createImageSource + * 2.set fd + * 3.return imagesource + * @tc.size : MEDIUM + * @tc.type : Functional + * @tc.level : Level 0 + */ + it('TC_042', 0, async function (done) { + try { + let fdNumber = fileio.openSync(pathJpg); + const imageSourceApi = image.createImageSource(fdNumber); + if (imageSourceApi == undefined) { + console.info('TC_042 create image source failed'); + expect(false).assertTrue(); + done(); + } else { + imageSourceApi.getImageInfo((err, imageInfo) => { + if (err) { + expect(false).assertTrue(); + console.info('TC_042 err: ' + err); + done(); + return + } + if (imageInfo != undefined) { + expect(true).assertTrue(); + fileio.closeSync(fdNumber); + done(); + } else { + console.info('TC_042 failed'); + expect(false).assertTrue(); + done(); + } + + }) + } + } catch (error) { + console.info('TC_042 error: ' + error); + expect(false).assertTrue(); + done(); + } + }) + + /** + * @tc.number : TC_042-1 + * @tc.name : createImageSource(fd) fd<0 + * @tc.desc : 1.call createImageSource + * 2.set wrong fd + * 3.return undefined + * @tc.size : MEDIUM + * @tc.type : Functional + * @tc.level : Level 0 + */ + it('TC_042-1', 0, async function (done) { + const imageSourceApi = image.createImageSource(-2); + expect(imageSourceApi == undefined).assertTrue(); + console.info('TC_042-1 success'); + done(); + }) + + /** + * @tc.number : TC_043 + * @tc.name : createImageSource(data) + * @tc.desc : 1.setdata + * 2.createImageSource + * 3.return imagesource + * @tc.size : MEDIUM + * @tc.type : Functional + * @tc.level : Level 0 + */ + it('TC_043', 0, async function (done) { + const data = testJpg.buffer; + const imageSourceApi = image.createImageSource(data); + if (imageSourceApi == undefined) { + console.info('TC_043 create image source failed'); + expect(false).assertTrue(); + done(); + } else { + imageSourceApi.getImageInfo((err, imageInfo) => { + console.info('TC_043 imageInfo'); + expect(imageInfo != undefined).assertTrue(); + done(); + }) + } + }) + + /** + * @tc.number : TC_043-1 + * @tc.name : createImageSource(data) buffer:0 + * @tc.desc : 1.setdata + * 2.createImageSource + * 3.return imagesource + * @tc.size : MEDIUM + * @tc.type : Functional + * @tc.level : Level 0 + */ + it('TC_043-1', 0, async function (done) { + const data = new ArrayBuffer(0); + const imageSourceApi = image.createImageSource(data); + expect(imageSourceApi == undefined).assertTrue(); + console.info('TC_043-1 success'); + done(); + }) + + /** + * @tc.number : TC_044 + * @tc.name : release-imagesource-promise-jpg + * @tc.desc : 1.create ImageSource + * 2.call release() + * 3.return undefined + * @tc.size : MEDIUM + * @tc.type : Functional + * @tc.level : Level 1 + */ + it('TC_044', 0, async function (done) { + try { + let fdNumber = fileio.openSync(pathJpg); + const imageSourceApi = image.createImageSource(fdNumber); + if (imageSourceApi == undefined) { + console.info('TC_044 create image source failed'); + expect(false).assertTrue(); + done(); + } else { + imageSourceApi.release().then(() => { + console.info('TC_044 success'); + expect(true).assertTrue(); + done(); + }).catch(error => { + console.info('TC_044 error'); + expect(false).assertTrue(); + done(); + }) + } + } catch (error) { + console.info('TC_044 err:' + error); + expect(false).assertTrue(); + done(); + } + }) + + /** + * @tc.number : TC_044-1 + * @tc.name : release-imagesource-callback-jpg + * @tc.desc : 1.create ImageSource + * 2.call release() + * 3.callback return undefined + * @tc.size : MEDIUM + * @tc.type : Functional + * @tc.level : Level 1 + */ + it('TC_044-1', 0, async function (done) { + try { + let fdNumber = fileio.openSync(pathJpg); + const imageSourceApi = image.createImageSource(fdNumber); + if (imageSourceApi == undefined) { + console.info('TC_044-1 create image source failed'); + expect(false).assertTrue(); + done(); + } else { + imageSourceApi.release(() => { + console.info('TC_044-1 Success'); + expect(true).assertTrue(); + done(); + }) + } + } catch (error) { + console.info('TC_044-1 err:' + error); + expect(false).assertTrue(); + done(); + } + }) + + /** + * @tc.number : TC_045 + * @tc.name : getImageInfo(callback: AsyncCallback)-jpg + * @tc.desc : 1.create imageSource + * 2.imageSourcecall getImageInfo(ImageInfo) + * 3.callback return undefined + * @tc.size : MEDIUM + * @tc.type : Functional + * @tc.level : Level 1 + */ + + it('TC_045', 0, async function (done) { + try { + let fdNumber = fileio.openSync(pathJpg); + const imageSourceApi = image.createImageSource(fdNumber); + if (imageSourceApi == undefined) { + console.info('TC_045 create image source failed'); + expect(false).assertTrue(); + done(); + } else { + imageSourceApi.getImageInfo((err, imageInfo) => { + if (err) { + expect(false).assertTrue(); + console.info('TC_045 err:' + err); + done(); + return + } + if (imageInfo != undefined) { + console.info('TC_045 imageInfo.size.height:' + imageInfo.size.height); + console.info('TC_045 imageInfo.size.width:' + imageInfo.size.width); + expect(true).assertTrue(); + fileio.closeSync(fdNumber); + done(); + } else { + console.info('TC_045 failed'); + expect(false).assertTrue(); + done(); + } + }) + } + } catch (error) { + console.info('TC_045 error: ' + error); + expect(false).assertTrue(); + done(); + } + }) + + + /** + * @tc.number : TC_045-1 + * @tc.name : getImageInfo(callback: AsyncCallback)-bmp + * @tc.desc : 1.create imageSource + * 2.imageSourcecall getImageInfo(ImageInfo) + * 3.callback return undefined + * @tc.size : MEDIUM + * @tc.type : Functional + * @tc.level : Level 1 + */ + it('TC_045-1', 0, async function (done) { + try { + let fdNumber = fileio.openSync(pathBmp); + const imageSourceApi = image.createImageSource(fdNumber); + if (imageSourceApi == undefined) { + console.info('TC_045-1 create image source failed'); + expect(false).assertTrue(); + done(); + } else { + imageSourceApi.getImageInfo((err, imageInfo) => { + expect(imageInfo != undefined).assertTrue(); + console.info('TC_045-1 imageInfo.size.height:' + imageInfo.size.height); + console.info('TC_045-1 imageInfo.size.width:' + imageInfo.size.width); + done(); + }) + } + } catch (error) { + console.info('TC_045-1 error: ' + error); + expect(false).assertTrue(); + done(); + } + }) + + /** + * @tc.number : TC_045-2 + * @tc.name : getImageInfo(callback: AsyncCallback)-png + * @tc.desc : 1.create imageSource + * 2.imageSourcecall getImageInfo(ImageInfo) + * 3.callback return undefined + * @tc.size : MEDIUM + * @tc.type : Functional + * @tc.level : Level 1 + */ + it('TC_045-2', 0, async function (done) { + try { + let fdNumber = fileio.openSync(pathPng); + const imageSourceApi = image.createImageSource(fdNumber); + if (imageSourceApi == undefined) { + console.info('TC_045-2 create image source failed'); + expect(false).assertTrue(); + done(); + } else { + imageSourceApi.getImageInfo((err, imageInfo) => { + expect(imageInfo != undefined).assertTrue(); + console.info('TC_045-2 imageInfo.size.height:' + imageInfo.size.height); + console.info('TC_045-2 imageInfo.size.width:' + imageInfo.size.width); + done(); + }) + } + } catch (error) { + console.info('TC_045-2 error: ' + error); + expect(false).assertTrue(); + done(); + } + }) + + /** + * @tc.number : TC_045-3 + * @tc.name : getImageInfo(callback: AsyncCallback)-gif + * @tc.desc : 1.create ImageInfo + * 2.call getImageInfo(index, ImageInfo) + * 3.callback return undefined + * @tc.size : MEDIUM + * @tc.type : Functional + * @tc.level : Level 1 + */ + it('TC_045-3', 0, async function (done) { + try { + let fdNumber = fileio.openSync(pathGif); + const imageSourceApi = image.createImageSource(fdNumber); + if (imageSourceApi == undefined) { + console.info('TC_045-3 create image source failed'); + expect(false).assertTrue(); + done(); + } else { + imageSourceApi.getImageInfo((err, imageInfo) => { + if (err) { + expect(false).assertTrue(); + console.info('TC_045-3 error' + err); + done(); + return + } + if (imageInfo != undefined && imageInfo != null) { + expect(true).assertTrue(); + console.info('TC_045-3 imageInfo.size.height:' + imageInfo.size.height); + console.info('TC_045-3 imageInfo.size.width:' + imageInfo.size.width); + console.info('TC_045-3 success') + done(); + } else { + expect(false).assertTrue(); + console.info('TC_045-3 failed') + done(); + } + }) + } + } catch (error) { + console.info('TC_045-3 error: ' + error); + expect(false).assertTrue(); + done(); + } + }) + + /** + * @tc.number : TC_046 + * @tc.name : getImageInfo(index: number, callback: AsyncCallback)-jpg + * @tc.desc : 1.create ImageInfo + * 2.call getImageInfo(index, ImageInfo) + * 3.callback return undefined + * @tc.size : MEDIUM + * @tc.type : Functional + * @tc.level : Level 1 + */ + it('TC_046', 0, async function (done) { + try { + let fdNumber = fileio.openSync(pathJpg); + const imageSourceApi = image.createImageSource(fdNumber); + if (imageSourceApi == undefined) { + console.info('TC_046 create image source failed'); + expect(false).assertTrue(); + done(); + } else { + imageSourceApi.getImageInfo(0, (err, imageInfo) => { + expect(imageInfo != undefined).assertTrue(); + console.info('TC_046 imageInfo.size.height:' + imageInfo.size.height); + console.info('TC_046 imageInfo.size.width:' + imageInfo.size.width); + done(); + }) + } + } catch (error) { + console.info('TC_046 error: ' + error); + expect(false).assertTrue(); + done(); + } + }) + + /** + * @tc.number : TC_046-1 + * @tc.name : getImageInfo(index: number, callback: AsyncCallback)-bmp + * @tc.desc : 1.create ImageInfo + * 2.call getImageInfo(index, ImageInfo) + * 3.callback return undefined + * @tc.size : MEDIUM + * @tc.type : Functional + * @tc.level : Level 1 + */ + it('TC_046-1', 0, async function (done) { + try { + let fdNumber = fileio.openSync(pathBmp); + const imageSourceApi = image.createImageSource(fdNumber); + if (imageSourceApi == undefined) { + console.info('TC_046-1 create image source failed'); + expect(false).assertTrue(); + done(); + } else { + imageSourceApi.getImageInfo(0, (err, imageInfo) => { + expect(imageInfo != undefined).assertTrue(); + console.info('TC_046-1 imageInfo.size.height:' + imageInfo.size.height); + console.info('TC_046-1 imageInfo.size.width:' + imageInfo.size.width); + done(); + }) + } + } catch (error) { + console.info('TC_046-1 error: ' + error); + expect(false).assertTrue(); + done(); + } + }) + + /** + * @tc.number: TC_046-2 + * @tc.name : getImageInfo(index: number, callback: AsyncCallback)-png + * @tc.desc : 1.create ImageInfo + * 2.call getImageInfo(index, ImageInfo) + * 3.callback return undefined + * @tc.size : MEDIUM MEDIUM + * @tc.type : Functional + * @tc.level : Level 1 + */ + it('TC_046-2', 0, async function (done) { + try { + let fdNumber = fileio.openSync(pathPng); + const imageSourceApi = image.createImageSource(fdNumber); + if (imageSourceApi == undefined) { + console.info('TC_046-2 create image source failed'); + expect(false).assertTrue(); + done(); + } else { + imageSourceApi.getImageInfo(0, (err, imageInfo) => { + expect(imageInfo != undefined).assertTrue(); + console.info('TC_046-2 imageInfo.size.height:' + imageInfo.size.height); + console.info('TC_046-2 imageInfo.size.width:' + imageInfo.size.width); + done(); + }) + } + } catch { + console.info('TC_046-2 error: ' + error); + expect(false).assertTrue(); + done(); + } + + }) + + /** + * @tc.number: TC_046-3 + * @tc.name : getImageInfo(index: number, callback: AsyncCallback)-gif + * @tc.desc : 1.create ImageInfo + * 2.call getImageInfo(index, ImageInfo) + * 3.callback return undefined + * @tc.size : MEDIUM MEDIUM + * @tc.type : Functional + * @tc.level : Level 1 + */ + it('TC_046-3', 0, async function (done) { + try { + let fdNumber = fileio.openSync(pathGif); + const imageSourceApi = image.createImageSource(fdNumber); + if (imageSourceApi == undefined) { + console.info('TC_046-3 create image source failed'); + expect(false).assertTrue(); + done(); + } else { + imageSourceApi.getImageInfo(0, (err, imageInfo) => { + if (err) { + expect(false).assertTrue(); + console.info('TC_046-3 error' + err); + done(); + return + } + if (imageInfo != undefined && imageInfo != null) { + expect(true).assertTrue(); + console.info('TC_046-3 imageInfo.size.height:' + imageInfo.size.height); + console.info('TC_046-3 imageInfo.size.width:' + imageInfo.size.width); + console.info('TC_046-3 success') + done(); + } else { + expect(false).assertTrue(); + console.info('TC_046-3 failed') + done(); + } + }) + } + } catch (error) { + console.info('TC_046-3 error: ' + error); + expect(false).assertTrue(); + done(); + } + }) + + /** + * @tc.number: TC_046-4 + * @tc.name : getImageInfo(index: number, callback: AsyncCallback)-gif(frame:1)-index:1 + * @tc.desc : 1.create ImageInfo + * 2.call getImageInfo(index, ImageInfo) + * 3.callback return undefined + * @tc.size : MEDIUM + * @tc.type : Functional + * @tc.level : Level 1 + */ + it('TC_046-4', 0, async function (done) { + try { + let fdNumber = fileio.openSync(pathGif); + const imageSourceApi = image.createImageSource(fdNumber); + if (imageSourceApi == undefined) { + console.info('TC_046-4 create image source failed'); + expect(false).assertTrue(); + done(); + } else { + imageSourceApi.getImageInfo(1, (err, imageInfo) => { + if (imageInfo == undefined) { + expect(true).assertTrue(); + done(); + } else { + expect(false).assertTrue(); + done(); + } + }) + } + } catch (error) { + console.info('TC_046-4 error: ' + error); + expect(false).assertTrue(); + done(); + } + }) + + /** + * @tc.number: TC_046-5 + * @tc.name : getImageInfo(index: number, callback: AsyncCallback)-gif-index:-1 + * @tc.desc : 1.create ImageInfo + * 2.call getImageInfo(index, ImageInfo) + * 3.callback return undefined + * @tc.size : MEDIUM + * @tc.type : Functional + * @tc.level : Level 1 + */ + it('TC_046-5', 0, async function (done) { + try { + let fdNumber = fileio.openSync(pathGif); + const imageSourceApi = image.createImageSource(fdNumber); + if (imageSourceApi == undefined) { + console.info('TC_046-5 create image source failed'); + expect(false).assertTrue(); + done(); + } else { + imageSourceApi.getImageInfo(-1, (err, imageInfo) => { + expect(imageInfo == undefined).assertTrue(); + done(); + }) + } + } catch (error) { + console.info('TC_046-5 error: ' + error); + expect(false).assertTrue(); + done(); + } + }) + + /** + * @tc.number : TC_047 + * @tc.name : getImageInfo(index?: number): Promise-jpg + * @tc.desc : 1.create imagesource + * 2.call getImageInfo(index) + * 3.callbackcall ,return imageinfo + * @tc.size : MEDIUM + * @tc.type : Functional + * @tc.level : Level 1 + */ + it('TC_047', 0, async function (done) { + try { + let fdNumber = fileio.openSync(pathJpg); + const imageSourceApi = image.createImageSource(fdNumber); + if (imageSourceApi == undefined) { + console.info('TC_047 create image source failed'); + expect(false).assertTrue(); + done(); + } else { + imageSourceApi.getImageInfo(0) + .then(imageInfo => { + expect(imageInfo != undefined).assertTrue(); + console.info('TC_047 imageInfo'); + console.info('imageInfo.size.height:' + imageInfo.size.height); + console.info('imageInfo.size.width:' + imageInfo.size.width); + done(); + }).catch(error => { + console.log('TC_047 error: ' + error); + expect().assertFail(); + done(); + }) + } + } catch (error) { + console.info('TC_047 error: ' + error); + expect(false).assertTrue(); + done(); + } + }) + + /** + * @tc.number : TC_047-1 + * @tc.name : getImageInfo(index?: number): Promise-bmp + * @tc.desc : 1.create imagesource + * 2.call getImageInfo(index) + * 3.callbackcall ,return imageinfo + * @tc.size : MEDIUM + * @tc.type : Functional + * @tc.level : Level 1 + */ + it('TC_047-1', 0, async function (done) { + try { + let fdNumber = fileio.openSync(pathBmp); + const imageSourceApi = image.createImageSource(fdNumber); + if (imageSourceApi == undefined) { + console.info('TC_047-1 create image source failed'); + expect(false).assertTrue(); + done(); + } else { + imageSourceApi.getImageInfo(0) + .then(imageInfo => { + expect(imageInfo != undefined).assertTrue(); + console.info('TC_047-1 imageInfo'); + console.info('imageInfo.size.height:' + imageInfo.size.height); + console.info('imageInfo.size.width:' + imageInfo.size.width); + done(); + }).catch(error => { + console.log('TC_047-1 error: ' + error); + expect().assertFail(); + done(); + }) + } + } catch (error) { + console.info('TC_047-1 error: ' + error); + expect(false).assertTrue(); + done(); + } + }) + + /** + * @tc.number : TC_047-2 + * @tc.name : getImageInfo(index?: number): Promise-png + * @tc.desc : 1.create imagesource + * 2.call getImageInfo(index) + * 3.callbackcall ,return imageinfo + * @tc.size : MEDIUM + * @tc.type : Functional + * @tc.level : Level 1 + */ + it('TC_047-2', 0, async function (done) { + try { + let fdNumber = fileio.openSync(pathPng); + const imageSourceApi = image.createImageSource(fdNumber); + if (imageSourceApi == undefined) { + console.info('TC_047-2 create image source failed'); + expect(false).assertTrue(); + done(); + } else { + imageSourceApi.getImageInfo(0) + .then(imageInfo => { + expect(imageInfo != undefined).assertTrue(); + console.info('TC_047-2 imageInfo'); + console.info('imageInfo.size.height:' + imageInfo.size.height); + console.info('imageInfo.size.width:' + imageInfo.size.width); + done(); + }).catch(error => { + console.log('TC_047-2 error: ' + error); + expect().assertFail(); + done(); + }) + } + } catch (error) { + console.info('TC_047-2 error: ' + error); + expect(false).assertTrue(); + done(); + } + }) + + /** + * @tc.number : TC_047-3 + * @tc.name : getImageInfo(index?: number): Promise-gif + * @tc.desc : 1.create imagesource + * 2.call getImageInfo(index) + * 3.callbackcall ,return imageinfo + * @tc.size : MEDIUM + * @tc.type : Functional + * @tc.level : Level 1 + */ + it('TC_047-3', 0, async function (done) { + try { + let fdNumber = fileio.openSync(pathGif); + const imageSourceApi = image.createImageSource(fdNumber); + if (imageSourceApi == undefined) { + console.info('TC_047-3 create image source failed'); + expect(false).assertTrue(); + done(); + } else { + imageSourceApi.getImageInfo(0) + .then(imageInfo => { + if (imageInfo != undefined && imageInfo != null) { + expect(true).assertTrue(); + console.info('TC_047-3 imageInfo.size.height:' + imageInfo.size.height); + console.info('TC_047-3 imageInfo.size.width:' + imageInfo.size.width); + done(); + } else { + expect(false).assertTrue(); + console.info('TC_047-3 failed'); + done(); + } + }).catch(error => { + console.log('TC_047-3 error: ' + error); + expect().assertFail(); + done(); + }) + } + } catch (error) { + console.info('TC_047-3 error: ' + error); + expect(false).assertTrue(); + done(); + } + }) + + /** + * @tc.number: TC_047-4 + * @tc.name : getImageInfo(index?: number): Promise-gif(frame:1)-index:1 + * @tc.desc : 1.create imagesource + * 2.call getImageInfo(index=1) + * 3.callback return imageinfo undefined + * @tc.size : MEDIUM + * @tc.type : Functional + * @tc.level : Level 1 + */ + it('TC_047-4', 0, async function (done) { + try { + let fdNumber = fileio.openSync(pathGif); + const imageSourceApi = image.createImageSource(fdNumber); + if (imageSourceApi == undefined) { + console.info('TC_047-4 create image source failed'); + expect(false).assertTrue(); + done(); + } else { + imageSourceApi.getImageInfo(1) + .then(() => { + console.log('TC_047-4 failed'); + expect().assertFail(); + done(); + }).catch(error => { + console.log('TC_047-4 success'); + expect(true).assertTrue(); + done(); + }) + } + } catch (error) { + console.info('TC_047-4 error: ' + error); + expect(false).assertTrue(); + done(); + } + }) + + /** + * @tc.number : TC_047-5 + * @tc.name : getImageInfo(index?: number): Promise-gif-index:-1 + * @tc.desc : 1.create imagesource + * 2.call getImageInfo(index=-1) + * 3.callback return imageinfo undefined + * @tc.size : MEDIUM + * @tc.type : Functional + * @tc.level : Level 1 + */ + it('TC_047-5', 0, async function (done) { + try { + let fdNumber = fileio.openSync(pathGif); + const imageSourceApi = image.createImageSource(fdNumber); + if (imageSourceApi == undefined) { + console.info('TC_047-5 create image source failed'); + expect(false).assertTrue(); + done(); + } else { + imageSourceApi.getImageInfo(-1) + .then(() => { + console.log('TC_047-5 failed'); + expect().assertFail(); + done(); + }).catch(error => { + console.log('TC_047-5 success'); + expect(true).assertTrue(); + done(); + }) + } + } catch (error) { + console.info('TC_047-5 error: ' + error); + expect(false).assertTrue(); + done(); + } + }) + + /** + * @tc.number : TC_050-14 + * @tc.name : createPixelMap-promise-jpg + * @tc.desc : 1.create imagesource + * 2.set index and DecodeOptions + * 3.create PixelMap + * 4.callback return undefined + * @tc.size : MEDIUM + * @tc.type : Functional + * @tc.level : Level 1 + */ + it('TC_050-14', 0, async function (done) { + try { + let fdNumber = fileio.openSync(pathJpg); + const imageSourceApi = image.createImageSource(fdNumber); + if (imageSourceApi == undefined) { + console.info('TC_050-14 create image source failed'); + expect(false).assertTrue(); + done(); + } else { + imageSourceApi.createPixelMap().then(pixelmap => { + globalpixelmap = pixelmap; + console.info('TC_050-14 success '); + expect(pixelmap != undefined).assertTrue(); + done(); + }).catch(error => { + console.log('TC_050-14 error: ' + error); + expect().assertFail(); + done(); + }) + } + } catch (error) { + console.info('TC_050-14 error: ' + error); + expect(false).assertTrue(); + done(); + } + }) + + /** + * @tc.number : TC_050-15 + * @tc.name : createPixelMap-callback-jpg + * @tc.desc : 1.create imagesource + * 2.set index and DecodeOptions + * 3.create PixelMap + * 4.callback return null + * @tc.size : MEDIUM + * @tc.type : Functional + * @tc.level : Level 1 + */ + it('TC_050-15', 0, async function (done) { + try { + let fdNumber = fileio.openSync(pathJpg); + const imageSourceApi = image.createImageSource(fdNumber); + if (imageSourceApi == undefined) { + console.info('TC_050-15 create image source failed'); + expect(false).assertTrue(); + done(); + } else { + imageSourceApi.createPixelMap((err, pixelmap) => { + globalpixelmap = pixelmap; + console.info('TC_050-15 success '); + expect(pixelmap != undefined).assertTrue(); + done(); + }) + } + } catch (error) { + console.info('TC_050-15 error: ' + error); + expect(false).assertTrue(); + done(); + } + }) + + /** + * @tc.number : TC_053 + * @tc.name : createIncrementalSource-updateData-png + * @tc.desc : 1.create imagesource + * 2.update data + * 3.create pixelmap + * @tc.size : MEDIUM + * @tc.type : Functional + * @tc.level : Level 1 + */ + it('TC_053', 0, async function (done) { + try { + let testimagebuffer = testPng; + console.info('TC_053 0003 ' + testimagebuffer.length); + let bufferSize = testimagebuffer.length; + let offset = 0; + const incSouce = image.createIncrementalSource(new ArrayBuffer(1)); + let ret; + let isFinished = false; + while (offset < testimagebuffer.length) { + console.info('TC_053 0006 ' + testimagebuffer.length); + var oneStep = testimagebuffer.slice(offset, offset + bufferSize); + console.info('TC_053 0007 ' + oneStep.length); + if (oneStep.length < bufferSize) { + isFinished = true; + } + ret = await incSouce.updateData(oneStep, isFinished, 0, oneStep.length); + if (!ret) { + console.info('TC_053 updateData failed'); + expect(ret).assertTrue(); + break; + } + offset = offset + oneStep.length; + console.info('TC_053 0011 ' + offset); + } + if (ret) { + console.info('TC_053 updateData success '); + let decodingOptions = { + sampleSize: 1 + }; + incSouce.createPixelMap(decodingOptions, (err, pixelmap) => { + console.info('TC_053 0014' + pixelmap); + expect(pixelmap != undefined).assertTrue(); + done(); + }) + } else { + done(); + } + } catch (error) { + console.info('TC_053 updateData failed ' + error); + } + }) + + /** + * @tc.number : TC_053-1 + * @tc.name : createIncrementalSource-updateData-jpg + * @tc.desc : 1.create imagesource + * 2.update data + * 3.create pixelmap + * @tc.size : MEDIUM + * @tc.type : Functional + * @tc.level : Level 1 + */ + it('TC_053-1', 0, async function (done) { + try { + let testimagebuffer = testJpg; + console.info('TC_053-1 0003 ' + testimagebuffer.length); + let bufferSize = testimagebuffer.length; + let offset = 0; + const incSouce = image.createIncrementalSource(new ArrayBuffer(1)); + let isFinished = false; + let ret; + while (offset < testimagebuffer.length) { + console.info('TC_053-1 0006 ' + testimagebuffer.length); + var oneStep = testimagebuffer.slice(offset, offset + bufferSize); + console.info('TC_053-1 0007 ' + oneStep.length); + if (oneStep.length < bufferSize) { + isFinished = true; + } + ret = await incSouce.updateData(oneStep, isFinished, 0, oneStep.length); + if (!ret) { + console.info('TC_053-1 updateData failed'); + expect(ret).assertTrue(); + break; + } + offset = offset + oneStep.length; + console.info('TC_053-1 0011 ' + offset); + } + if (ret) { + console.info('TC_053-1 updateData success '); + let decodingOptions = { + sampleSize: 1 + }; + incSouce.createPixelMap(decodingOptions, (err, pixelmap) => { + expect(pixelmap != undefined).assertTrue(); + done(); + }) + } else { + done(); + } + } catch (error) { + console.info('TC_053-1 updateData failed ' + error); + } + }) + + /** + * @tc.number : TC_064 + * @tc.name : release ImageSource - promise - png + * @tc.desc : 1.create ImageSource + * 2.call release() + * 3.return undefined + * @tc.size : MEDIUM + * @tc.type : Functional + * @tc.level : Level 1 + */ + it('TC_064', 0, async function (done) { + try { + let fdNumber = fileio.openSync(pathPng); + const imageSourceApi = image.createImageSource(fdNumber); + if (imageSourceApi == undefined) { + console.info('TC_064 create image source failed'); + expect(false).assertTrue(); + done(); + } else { + imageSourceApi.release().then(() => { + console.info('TC_064 success'); + expect(true).assertTrue(); + done(); + }).catch(error => { + console.log('TC_064 error: ' + error); + expect().assertFail(); + done(); + }) + } + } catch (error) { + console.info('TC_064 error: ' + error); + expect(false).assertTrue(); + done(); + } + }) + + /** + * @tc.number : TC_064-1 + * @tc.name : release ImageSource - callback - png + * @tc.desc : 1.create ImageSource + * 2.call release() + * 3.return undefined + * @tc.size : MEDIUM + * @tc.type : Functional + * @tc.level : Level 1 + */ + it('TC_064-1', 0, async function (done) { + try { + let fdNumber = fileio.openSync(pathPng); + const imageSourceApi = image.createImageSource(fdNumber); + if (imageSourceApi == undefined) { + console.info('TC_064-1 create image source failed'); + expect(false).assertTrue(); + done(); + } else { + imageSourceApi.release(async (err) => { + if (err) { + console.info('TC_064-1 err:' + err); + expect(false).assertTrue(); + done(); + return + } + console.info('TC_064-1 Success'); + expect(true).assertTrue(); + expect(true).assertTrue(); + done(); + }) + } + } catch (error) { + console.info('TC_064-1 error: ' + error); + expect(false).assertTrue(); + done(); + } + }) + + /** + * @tc.number : TC_065 + * @tc.name : release ImageSource - promise - bmp + * @tc.desc : 1.create ImageSource + * 2.call release() + * 3.return undefined + * @tc.size : MEDIUM + * @tc.type : Functional + * @tc.level : Level 1 + */ + it('TC_065', 0, async function (done) { + try { + let fdNumber = fileio.openSync(pathBmp); + const imageSourceApi = image.createImageSource(fdNumber); + if (imageSourceApi == undefined) { + console.info('TC_065 create image source failed'); + expect(false).assertTrue(); + done(); + } else { + imageSourceApi.release().then(() => { + console.info('TC_065 success'); + expect(true).assertTrue(); + done(); + }).catch(error => { + console.log('TC_065 error: ' + error); + expect().assertFail(); + done(); + }) + } + } catch (error) { + console.info('TC_065 error: ' + error); + expect(false).assertTrue(); + done(); + } + }) + + /** + * @tc.number : TC_065-1 + * @tc.name : release ImageSource - callback - bmp + * @tc.desc : 1.create ImageSource + * 2.create SourceStream + * 3.return undefined + * @tc.size : MEDIUM + * @tc.type : Functional + * @tc.level : Level 1 + */ + it('TC_065-1', 0, async function (done) { + try { + let fdNumber = fileio.openSync(pathBmp); + const imageSourceApi = image.createImageSource(fdNumber); + if (imageSourceApi == undefined) { + console.info('TC_065-1 create image source failed'); + expect(false).assertTrue(); + done(); + } else { + imageSourceApi.release(async () => { + console.info('TC_065-1 Success'); + expect(true).assertTrue(); + done(); + }) + } + } catch (error) { + console.info('TC_065-1 error: ' + error); + expect(false).assertTrue(); + done(); + } + }) + + /** + * @tc.number : TC_066 + * @tc.name : release ImageSource - promise - gif + * @tc.desc : 1.create ImageSource + * 2.call release() + * 3.return undefined + * @tc.size : MEDIUM + * @tc.type : Functional + * @tc.level : Level 1 + */ + it('TC_066', 0, async function (done) { + try { + let fdNumber = fileio.openSync(pathGif); + const imageSourceApi = image.createImageSource(fdNumber); + if (imageSourceApi == undefined) { + console.info('TC_066 create image source failed'); + expect(false).assertTrue(); + done(); + } else { + imageSourceApi.release().then(() => { + console.info('TC_066 success'); + expect(true).assertTrue(); + done(); + }).catch(error => { + console.log('TC_066 error: ' + error); + expect().assertFail(); + done(); + }) + } + } catch (error) { + console.info('TC_066 error: ' + error); + expect(false).assertTrue(); + done(); + } + }) + + /** + * @tc.number : TC_066-1 + * @tc.name : release ImageSource - callback - gif + * @tc.desc : 1.create ImageSource + * 2.call release() + * 3.return undefined + * @tc.size : MEDIUM + * @tc.type : Functional + * @tc.level : Level 1 + */ + it('TC_066-1', 0, async function (done) { + try { + let fdNumber = fileio.openSync(pathGif); + const imageSourceApi = image.createImageSource(fdNumber); + if (imageSourceApi == undefined) { + console.info('TC_066-1 create image source failed'); + expect(false).assertTrue(); + done(); + } else { + imageSourceApi.release(() => { + console.info('TC_066-1 Success'); + expect(true).assertTrue(); + done(); + }) + } + } catch (error) { + console.info('TC_066-1 error: ' + error); + expect(false).assertTrue(); + done(); + } + }) + + /** + * @tc.number : TC_067-14 + * @tc.name : createPixelMap-promise-gif + * @tc.desc : 1.create imagesource + * 2.set index and DecodeOptions + * 3.create PixelMap + * 4.callback return undefined + * @tc.size : MEDIUM + * @tc.type : Functional + * @tc.level : Level 1 + */ + it('TC_067-14', 0, async function (done) { + try { + let fdNumber = fileio.openSync(pathMovingGif); + const imageSourceApi = image.createImageSource(fdNumber); + if (imageSourceApi == undefined) { + console.info('TC_067-14 create image source failed'); + expect(false).assertTrue(); + done(); + } else { + imageSourceApi.createPixelMap().then(pixelmap => { + globalpixelmap = pixelmap; + console.info('TC_067-14 success '); + expect(pixelmap !== undefined).assertTrue(); + done(); + }).catch(error => { + console.log('TC_067-14 error: ' + error); + expect().assertFail(); + done(); + }) + } + } catch (error) { + console.info('TC_067-14 error: ' + error); + expect(false).assertTrue(); + done(); + } + }) + + /** + * @tc.number : TC_067-15 + * @tc.name : createPixelMap-pcallback-gif + * @tc.desc : 1.create imagesource + * 2.set index and DecodeOptions + * 3.create PixelMap + * 4.callback return null + * @tc.size : MEDIUM + * @tc.type : Functional + * @tc.level : Level 1 + */ + it('TC_067-15', 0, async function (done) { + try { + let fdNumber = fileio.openSync(pathMovingGif); + const imageSourceApi = image.createImageSource(fdNumber); + if (imageSourceApi == undefined) { + console.info('TC_067-15 create image source failed'); + expect(false).assertTrue(); + done(); + } else { + imageSourceApi.createPixelMap((err, pixelmap) => { + globalpixelmap = pixelmap; + console.info('TC_067-15 success '); + expect(pixelmap !== undefined).assertTrue(); + done(); + }) + } + } catch (error) { + console.info('TC_067-15 error: ' + error); + expect(false).assertTrue(); + done(); + } + }) + + /** + * @tc.number : TC_068-14 + * @tc.name : createPixelMap-promise-bmp + * @tc.desc : 1.create imagesource + * 2.set index and DecodeOptions + * 3.create PixelMap + * 4.callback return undefined + * @tc.size : MEDIUM + * @tc.type : Functional + * @tc.level : Level 1 + */ + it('TC_068-14', 0, async function (done) { + try { + let fdNumber = fileio.openSync(pathBmp); + const imageSourceApi = image.createImageSource(fdNumber); + if (imageSourceApi == undefined) { + console.info('TC_068-14 create image source failed'); + expect(false).assertTrue(); + done(); + } else { + imageSourceApi.createPixelMap().then(pixelmap => { + globalpixelmap = pixelmap; + console.info('TC_068-14 success '); + expect(pixelmap != undefined).assertTrue(); + done(); + }).catch(error => { + console.log('TC_068-14 error: ' + error); + expect().assertFail(); + done(); + }) + } + } catch (error) { + console.info('TC_068-14 error: ' + error); + expect(false).assertTrue(); + done(); + } + }) + + /** + * @tc.number : TC_068-15 + * @tc.name : createPixelMap-callback-bmp + * @tc.desc : 1.create imagesource + * 2.set index and DecodeOptions + * 3.create PixelMap + * 4.callback return undefined + * @tc.size : MEDIUM + * @tc.type : Functional + * @tc.level : Level 1 + */ + it('TC_068-15', 0, async function (done) { + try { + let fdNumber = fileio.openSync(pathBmp); + const imageSourceApi = image.createImageSource(fdNumber); + if (imageSourceApi == undefined) { + console.info('TC_068-15 create image source failed'); + expect(false).assertTrue(); + done(); + } else { + imageSourceApi.createPixelMap((err, pixelmap) => { + globalpixelmap = pixelmap; + console.info('TC_068-15 success '); + expect(pixelmap != undefined).assertTrue(); + done(); + }) + } + } catch (error) { + console.info('TC_068-15 error: ' + error); + expect(false).assertTrue(); + done(); + } + }) + + /** + * @tc.number : TC_163-14 + * @tc.name : createPixelMap-promise-png + * @tc.desc : 1.create imagesource + * 2.set index and DecodeOptions + * 3.create PixelMap + * 4.callback return undefined + * @tc.size : MEDIUM + * @tc.type : Functional + * @tc.level : Level 1 + */ + it('TC_163-14', 0, async function (done) { + try { + let fdNumber = fileio.openSync(pathPng); + const imageSourceApi = image.createImageSource(fdNumber); + if (imageSourceApi == undefined) { + console.info('TC_163-14 create image source failed'); + expect(false).assertTrue(); + done(); + } else { + imageSourceApi.createPixelMap().then(pixelmap => { + globalpixelmap = pixelmap; + console.info('TC_163-14 success'); + expect(pixelmap != undefined).assertTrue(); + done(); + }).catch(error => { + console.log('TC_163-14 error: ' + error); + expect().assertFail(); + done(); + }) + } + } catch (error) { + console.info('TC_163-14 error: ' + error); + expect(false).assertTrue(); + done(); + } + }) + + /** + * @tc.number : TC_163-15 + * @tc.name : createPixelMap-callback-png + * @tc.desc : 1.create imagesource + * 2.set index and DecodeOptions + * 3.create PixelMap + * 4.callback return null + * @tc.size : MEDIUM + * @tc.type : Functional + * @tc.level : Level 1 + */ + it('TC_163-15', 0, async function (done) { + try { + let fdNumber = fileio.openSync(pathPng); + const imageSourceApi = image.createImageSource(fdNumber); + if (imageSourceApi == undefined) { + console.info('TC_163-15 create image source failed'); + expect(false).assertTrue(); + done(); + } else { + imageSourceApi.createPixelMap((err, pixelmap) => { + globalpixelmap = pixelmap; + console.info('TC_163-15 success'); + expect(pixelmap != undefined).assertTrue(); + done(); + }) + } + } catch (error) { + console.info('TC_163-15 error: ' + error); + expect(false).assertTrue(); + done(); + } + }) + + /** + * @tc.number : TC_164 + * @tc.name : imagesource supportedFormats + * @tc.desc : 1.create imagesource + * 2.call supportedFormats + * @tc.size : MEDIUM + * @tc.type : Functional + * @tc.level : Level 0 + */ + it('TC_164', 0, async function (done) { + try { + let fdNumber = fileio.openSync(pathJpg); + const imageSourceApi = image.createImageSource(fdNumber); + if (imageSourceApi == undefined) { + console.info('TC_164 create image source failed'); + expect(false).assertTrue(); + done(); + } else { + expect(imageSourceApi.supportedFormats != undefined).assertTrue(); + console.info(imageSourceApi.supportedFormats); + console.info('TC_164 success '); + done(); + } + } catch (error) { + console.info('TC_164 error: ' + error); + expect(false).assertTrue(); + done(); + } + }) + + /** + * @tc.number : TC_166 + * @tc.name : imagepacker supportedFormats + * @tc.desc : 1.create imagepacker + * 2.call supportedFormats + * @tc.size : MEDIUM + * @tc.type : Functional + * @tc.level : Level 0 + */ + it('TC_166', 0, async function (done) { + const imagePackerApi = image.createImagePacker(); + if (imagePackerApi == undefined) { + console.info('TC_166 create image packer failed'); + expect(false).assertTrue(); + done(); + } else { + expect(imagePackerApi.supportedFormats != undefined).assertTrue(); + console.info(imagePackerApi.supportedFormats); + console.info('TC_166 success '); + done(); + } + }) + + /** + * @tc.number : TC_168 + * @tc.name : isEditable + * @tc.desc : 1.create pixelmap + * 2.call isEditable + * 3.return true + * @tc.size : MEDIUM + * @tc.type : Functional + * @tc.level : Level 1 + */ + it('TC_168', 0, async function (done) { + const Color = new ArrayBuffer(96); + let opts = { editable: true, pixelFormat: 3, size: { height: 4, width: 6 } } + image.createPixelMap(Color, opts, (error, pixelmap) => { + if (pixelmap == undefined) { + console.info('TC_168 create pixelmap failed'); + expect(false).assertTrue(); + done(); + } else { + expect(pixelmap.isEditable == true).assertTrue(); + console.info('TC_168 success '); + done(); + } + }) + }) +})} diff --git a/multimedia/image/image_js_standard/image/src/main/js/test/testImg.js b/multimedia/image/image_js_standard/image/src/main/js/test/testImg.js index c79296bb7..c281fa1f2 100644 --- a/multimedia/image/image_js_standard/image/src/main/js/test/testImg.js +++ b/multimedia/image/image_js_standard/image/src/main/js/test/testImg.js @@ -1,610 +1,610 @@ -/* - * Copyright (C) 2022 Huawei Device Co., Ltd. - * 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. - */ - -let testPng = new Uint8Array([137, 80, 78, 71, 13, 10, 26, 10, 0, 0, 0, 13, 73, 72, 68, 82, 0, 0, 0, 100, 0, 0, 0, 100, 8, 6, 0, 0, 0, 112, 226, 149, - 84, 0, 0, 32, 0, 73, 68, 65, 84, 120, 1, 212, 193, 123, 176, 231, 247, 93, 223, 247, 231, 251, 253, 249, 254, 126, 231, 156, 61, 123, 191, 105, - 37, 173, 180, 186, 95, 173, 187, 228, 43, 166, 182, 133, 109, 44, 108, 160, 6, 154, 105, 157, 116, 104, 50, 64, 72, 155, 41, 195, 64, 167, 13, 80, - 218, 73, 166, 76, 254, 104, 254, 104, 167, 51, 253, 39, 51, 45, 52, 77, 161, 36, 29, 19, 2, 24, 98, 140, 28, 91, 24, 91, 150, 44, 164, 213, - 93, 187, 146, 86, 123, 95, 237, 253, 156, 243, 251, 253, 190, 223, 247, 235, 213, 253, 237, 34, 220, 106, 86, 182, 105, 160, 99, 30, 143, 224, 175, 177, - 31, 251, 145, 31, 102, 101, 109, 133, 133, 241, 194, 174, 42, 253, 224, 108, 54, 123, 100, 24, 250, 235, 135, 161, 178, 239, 251, 67, 17, 241, 149, 42, - 253, 238, 100, 50, 121, 178, 117, 76, 207, 31, 221, 194, 243, 7, 30, 229, 187, 89, 240, 215, 212, 15, 253, 208, 167, 24, 47, 108, 98, 186, 118, 242, - 253, 165, 250, 135, 150, 62, 176, 178, 178, 186, 208, 247, 61, 146, 232, 103, 61, 173, 235, 4, 62, 106, 243, 175, 165, 250, 159, 108, 61, 149, 153, 126, - 252, 235, 79, 241, 221, 42, 248, 107, 232, 83, 159, 252, 126, 90, 27, 1, 250, 158, 217, 172, 255, 167, 171, 107, 43, 183, 204, 102, 61, 179, 233, 140, - 201, 100, 66, 149, 176, 4, 1, 173, 53, 70, 163, 17, 173, 181, 87, 128, 255, 102, 54, 27, 254, 143, 214, 114, 248, 198, 83, 79, 243, 221, 168, 241, - 215, 208, 237, 183, 221, 66, 102, 94, 93, 195, 240, 63, 207, 102, 211, 251, 214, 86, 39, 172, 156, 91, 101, 101, 117, 194, 249, 149, 53, 250, 97, 96, - 50, 157, 113, 254, 252, 10, 67, 153, 201, 116, 74, 149, 182, 70, 196, 71, 50, 242, 108, 102, 62, 177, 107, 231, 14, 31, 57, 122, 140, 239, 54, 141, - 191, 160, 237, 91, 55, 51, 30, 141, 216, 182, 109, 235, 120, 211, 198, 13, 235, 150, 214, 45, 141, 186, 46, 180, 113, 227, 6, 175, 174, 174, 241, 87, - 237, 83, 159, 122, 132, 79, 127, 252, 251, 121, 97, 223, 190, 191, 63, 235, 251, 31, 95, 91, 155, 196, 233, 211, 167, 89, 93, 153, 176, 54, 153, 48, - 212, 192, 80, 66, 18, 85, 98, 54, 155, 49, 157, 78, 137, 8, 76, 44, 142, 70, 221, 123, 35, 120, 153, 244, 179, 87, 238, 216, 195, 145, 99, 135, - 248, 110, 210, 241, 29, 186, 239, 190, 123, 233, 103, 253, 226, 120, 220, 30, 176, 253, 48, 196, 93, 147, 201, 100, 199, 80, 53, 93, 92, 92, 124, 117, - 109, 109, 237, 209, 141, 27, 55, 254, 193, 245, 215, 95, 127, 124, 239, 222, 189, 12, 195, 192, 95, 133, 8, 248, 151, 127, 240, 185, 235, 134, 161, 255, - 143, 38, 147, 181, 56, 123, 246, 12, 179, 217, 140, 201, 108, 74, 169, 232, 135, 129, 140, 4, 155, 204, 100, 174, 170, 88, 93, 93, 69, 18, 227, 81, - 183, 117, 97, 60, 254, 197, 136, 120, 146, 54, 125, 133, 239, 50, 29, 223, 198, 189, 247, 220, 197, 179, 207, 189, 196, 226, 194, 232, 254, 229, 117, 139, - 63, 11, 60, 50, 244, 195, 150, 217, 48, 208, 186, 14, 19, 100, 22, 227, 241, 194, 143, 75, 254, 234, 139, 47, 190, 248, 143, 134, 97, 248, 131, 204, - 212, 5, 252, 101, 75, 155, 176, 63, 58, 153, 206, 110, 155, 76, 166, 172, 172, 174, 49, 153, 206, 24, 134, 1, 99, 144, 113, 136, 204, 196, 54, 153, - 201, 92, 85, 49, 157, 78, 89, 89, 93, 163, 181, 188, 167, 139, 246, 31, 63, 249, 141, 39, 126, 249, 129, 251, 31, 224, 137, 39, 159, 230, 187, 69, - 242, 45, 188, 255, 125, 239, 37, 91, 151, 239, 125, 207, 253, 63, 178, 180, 180, 244, 235, 227, 209, 232, 51, 150, 183, 204, 102, 51, 214, 214, 86, 89, - 91, 155, 176, 178, 178, 198, 116, 58, 163, 239, 135, 113, 149, 190, 39, 34, 254, 151, 174, 235, 62, 35, 41, 248, 75, 246, 233, 79, 125, 146, 197, 241, - 186, 5, 75, 223, 95, 67, 181, 233, 116, 202, 116, 50, 101, 24, 6, 108, 97, 153, 214, 26, 17, 193, 91, 108, 51, 215, 90, 35, 34, 152, 205, 102, - 72, 34, 51, 31, 121, 224, 254, 7, 183, 65, 240, 221, 164, 227, 29, 124, 240, 131, 239, 103, 113, 221, 152, 209, 180, 251, 248, 226, 120, 252, 63, 88, - 190, 106, 101, 117, 149, 181, 181, 53, 86, 86, 87, 153, 245, 51, 250, 190, 152, 78, 103, 72, 98, 24, 6, 134, 97, 32, 34, 118, 117, 93, 247, 43, - 85, 117, 40, 51, 63, 95, 85, 252, 165, 137, 160, 52, 236, 138, 200, 123, 38, 211, 9, 125, 223, 51, 87, 85, 64, 144, 25, 204, 69, 4, 146, 200, - 76, 230, 36, 49, 55, 12, 3, 17, 48, 12, 3, 195, 208, 174, 109, 173, 93, 11, 188, 201, 119, 145, 142, 119, 176, 184, 48, 198, 131, 239, 88, 183, - 184, 244, 143, 9, 174, 90, 89, 91, 97, 50, 153, 178, 58, 153, 50, 157, 245, 204, 102, 61, 85, 98, 78, 18, 195, 48, 48, 23, 17, 116, 93, 119, - 181, 164, 95, 152, 205, 102, 79, 3, 199, 184, 140, 255, 226, 231, 126, 158, 151, 95, 126, 153, 135, 191, 239, 225, 118, 195, 13, 215, 143, 55, 109, 222, - 180, 28, 17, 203, 4, 75, 24, 108, 97, 27, 75, 171, 42, 77, 215, 38, 107, 43, 215, 93, 119, 195, 228, 23, 254, 193, 127, 185, 222, 25, 155, 185, - 96, 54, 155, 209, 15, 3, 85, 34, 51, 177, 185, 40, 34, 152, 179, 205, 219, 169, 68, 63, 155, 49, 30, 143, 151, 34, 189, 17, 155, 239, 38, 29, - 151, 241, 177, 143, 62, 76, 223, 15, 227, 117, 235, 22, 255, 243, 209, 168, 187, 107, 229, 252, 10, 125, 223, 51, 157, 245, 12, 67, 49, 157, 245, 244, - 179, 30, 219, 204, 101, 38, 173, 53, 102, 179, 25, 17, 65, 215, 117, 116, 93, 247, 189, 125, 223, 255, 141, 241, 120, 252, 63, 78, 167, 83, 126, 255, - 115, 191, 203, 71, 63, 246, 253, 60, 250, 232, 23, 214, 173, 91, 183, 124, 205, 194, 120, 124, 71, 55, 234, 238, 24, 141, 186, 155, 33, 174, 109, 45, - 183, 69, 198, 186, 140, 88, 144, 205, 156, 36, 106, 24, 214, 84, 53, 147, 106, 165, 239, 215, 142, 255, 237, 191, 243, 183, 103, 191, 246, 107, 255, 219, - 50, 113, 2, 8, 44, 19, 209, 184, 28, 219, 188, 197, 54, 195, 48, 48, 26, 141, 48, 38, 34, 107, 227, 198, 205, 62, 124, 248, 48, 255, 221, 63, - 250, 21, 254, 193, 47, 254, 87, 124, 55, 232, 120, 155, 77, 159, 249, 40, 221, 73, 104, 109, 116, 111, 215, 181, 31, 150, 204, 116, 54, 99, 58, 157, - 49, 155, 205, 152, 205, 102, 212, 48, 80, 85, 100, 38, 85, 69, 85, 49, 215, 90, 35, 51, 145, 68, 187, 228, 111, 76, 167, 211, 127, 246, 244, 51, - 79, 158, 95, 89, 89, 187, 243, 217, 103, 159, 126, 248, 154, 107, 118, 127, 100, 52, 30, 223, 213, 117, 221, 14, 240, 66, 107, 13, 73, 16, 96, 155, - 0, 100, 19, 128, 36, 172, 17, 86, 97, 25, 89, 220, 112, 195, 117, 220, 121, 231, 237, 28, 56, 112, 128, 204, 36, 91, 226, 161, 199, 134, 136, 96, - 46, 34, 136, 8, 36, 17, 17, 100, 38, 146, 200, 76, 50, 131, 42, 113, 197, 21, 59, 151, 127, 241, 151, 126, 241, 31, 110, 221, 182, 245, 137, 243, - 231, 206, 125, 227, 87, 255, 215, 127, 122, 240, 153, 167, 159, 62, 182, 119, 239, 222, 67, 207, 61, 255, 210, 217, 67, 135, 143, 206, 214, 173, 91, 226, - 228, 201, 147, 252, 255, 169, 227, 109, 62, 112, 2, 214, 111, 88, 100, 50, 233, 63, 156, 25, 59, 167, 211, 158, 97, 24, 24, 134, 1, 169, 24, 106, - 192, 54, 17, 129, 109, 170, 10, 73, 216, 166, 181, 70, 102, 98, 67, 102, 50, 26, 141, 238, 254, 91, 127, 235, 51, 127, 127, 58, 153, 221, 186, 121, - 243, 166, 143, 108, 216, 176, 113, 231, 120, 52, 138, 11, 32, 192, 54, 24, 162, 5, 146, 136, 72, 230, 194, 5, 1, 68, 16, 145, 68, 66, 89, 96, - 179, 176, 176, 192, 35, 143, 124, 130, 190, 239, 249, 220, 231, 254, 128, 51, 103, 206, 48, 244, 61, 217, 26, 93, 215, 17, 17, 216, 102, 46, 34, 152, - 155, 205, 102, 84, 21, 17, 1, 4, 216, 220, 127, 255, 125, 163, 235, 174, 223, 243, 189, 182, 190, 119, 221, 226, 130, 55, 172, 95, 158, 94, 123, 237, - 53, 167, 239, 190, 231, 174, 35, 251, 247, 237, 123, 229, 200, 161, 67, 207, 156, 59, 119, 246, 107, 131, 227, 233, 126, 82, 135, 178, 197, 240, 235, 191, - 249, 47, 249, 171, 214, 120, 155, 219, 111, 185, 153, 67, 175, 29, 203, 205, 91, 55, 252, 116, 73, 119, 77, 38, 83, 38, 147, 9, 147, 201, 132, 201, - 108, 74, 85, 81, 37, 170, 138, 97, 24, 136, 8, 50, 147, 185, 136, 192, 54, 182, 129, 196, 214, 194, 35, 143, 124, 226, 131, 119, 222, 121, 199, 221, - 235, 214, 173, 91, 191, 110, 105, 41, 50, 27, 115, 153, 73, 70, 227, 146, 32, 35, 9, 130, 224, 146, 8, 200, 76, 8, 192, 129, 205, 69, 182, 88, - 183, 110, 29, 119, 220, 113, 7, 119, 221, 117, 23, 235, 215, 47, 115, 228, 240, 97, 222, 60, 121, 18, 201, 64, 48, 103, 27, 73, 84, 21, 146, 176, - 77, 102, 178, 48, 30, 179, 107, 215, 21, 252, 196, 79, 254, 36, 187, 174, 184, 2, 213, 64, 215, 90, 100, 102, 183, 254, 130, 43, 175, 188, 114, 215, - 158, 61, 187, 239, 216, 182, 125, 219, 135, 218, 104, 244, 239, 163, 250, 161, 104, 220, 23, 65, 222, 114, 203, 205, 39, 206, 157, 247, 234, 67, 15, 220, - 195, 254, 253, 251, 249, 171, 208, 120, 155, 219, 110, 185, 153, 174, 235, 218, 120, 113, 244, 119, 74, 190, 233, 252, 202, 10, 147, 201, 148, 201, 116, 194, - 116, 58, 101, 58, 235, 25, 250, 1, 73, 84, 21, 182, 153, 147, 132, 109, 34, 130, 204, 96, 46, 51, 248, 208, 135, 62, 148, 55, 223, 124, 51, 219, - 182, 109, 103, 52, 26, 17, 17, 68, 64, 102, 99, 46, 34, 200, 76, 34, 32, 51, 177, 77, 107, 13, 99, 36, 147, 145, 32, 99, 204, 92, 4, 23, - 101, 6, 59, 118, 236, 224, 190, 251, 238, 225, 193, 119, 63, 200, 116, 54, 227, 229, 151, 94, 102, 50, 153, 50, 30, 143, 176, 77, 85, 81, 85, 84, - 21, 153, 73, 215, 53, 150, 151, 215, 241, 31, 252, 216, 143, 242, 177, 143, 125, 148, 57, 169, 192, 198, 54, 17, 129, 44, 70, 227, 17, 59, 118, 238, - 224, 154, 107, 174, 25, 109, 221, 190, 117, 219, 116, 50, 185, 119, 229, 252, 202, 15, 73, 254, 200, 85, 87, 109, 95, 159, 45, 14, 62, 255, 252, 139, - 103, 127, 247, 243, 191, 207, 193, 215, 223, 224, 47, 83, 227, 109, 110, 186, 233, 6, 206, 158, 95, 99, 105, 221, 248, 135, 250, 26, 238, 152, 78, 167, - 172, 173, 173, 49, 157, 205, 232, 251, 129, 201, 100, 74, 13, 133, 109, 108, 83, 85, 204, 117, 221, 136, 136, 96, 110, 54, 155, 97, 155, 135, 30, 122, - 128, 31, 251, 177, 31, 229, 166, 155, 110, 98, 97, 97, 76, 102, 35, 51, 201, 76, 32, 120, 75, 102, 146, 25, 204, 101, 6, 178, 201, 76, 46, 49, - 17, 1, 17, 68, 4, 17, 129, 109, 36, 33, 21, 17, 176, 109, 251, 22, 222, 253, 238, 7, 185, 118, 247, 110, 94, 124, 241, 69, 78, 157, 58, 141, - 109, 50, 19, 12, 17, 65, 215, 53, 70, 163, 17, 215, 93, 183, 135, 159, 248, 201, 159, 96, 231, 206, 157, 72, 133, 106, 160, 170, 176, 141, 109, 140, - 177, 133, 100, 108, 179, 101, 235, 22, 246, 92, 183, 135, 133, 165, 133, 238, 244, 169, 83, 187, 39, 147, 181, 143, 102, 196, 71, 126, 253, 127, 255, 103, - 53, 38, 247, 221, 117, 231, 237, 147, 231, 94, 124, 137, 191, 44, 141, 183, 185, 241, 198, 235, 89, 191, 97, 209, 67, 213, 13, 195, 48, 124, 223, 100, - 50, 101, 232, 7, 166, 179, 25, 211, 217, 12, 201, 88, 38, 51, 105, 173, 33, 137, 136, 96, 52, 26, 33, 153, 190, 239, 217, 180, 105, 19, 63, 250, - 163, 159, 230, 231, 126, 238, 103, 185, 251, 238, 187, 89, 88, 24, 3, 65, 4, 23, 101, 38, 17, 129, 109, 34, 130, 8, 200, 108, 92, 18, 68, 4, - 16, 16, 92, 18, 16, 17, 68, 38, 193, 5, 22, 223, 148, 168, 68, 215, 37, 183, 220, 122, 51, 119, 220, 126, 27, 123, 247, 62, 203, 177, 99, 199, - 200, 72, 90, 235, 232, 90, 99, 52, 234, 88, 90, 28, 211, 247, 61, 207, 61, 247, 28, 235, 55, 172, 103, 215, 174, 157, 180, 214, 144, 196, 156, 36, - 164, 66, 22, 82, 17, 128, 109, 90, 107, 236, 220, 185, 157, 171, 174, 186, 138, 243, 231, 207, 230, 233, 211, 167, 174, 12, 226, 227, 209, 229, 157, 147, - 89, 191, 111, 251, 142, 157, 135, 111, 191, 237, 86, 246, 237, 219, 207, 191, 171, 198, 219, 188, 252, 202, 62, 174, 191, 238, 58, 192, 107, 54, 159, 236, - 251, 217, 198, 217, 108, 198, 80, 133, 36, 230, 84, 98, 206, 54, 153, 73, 102, 50, 153, 76, 168, 42, 62, 240, 129, 247, 243, 203, 191, 252, 75, 252, - 248, 143, 255, 56, 187, 119, 95, 67, 102, 0, 65, 107, 73, 102, 35, 34, 152, 203, 12, 50, 147, 204, 4, 76, 68, 2, 6, 2, 219, 68, 4, 17, - 96, 155, 57, 27, 108, 17, 4, 145, 129, 101, 8, 136, 224, 34, 203, 216, 102, 215, 174, 157, 220, 118, 199, 109, 28, 56, 112, 128, 55, 79, 158, 100, - 212, 37, 59, 118, 108, 227, 193, 135, 238, 103, 195, 134, 245, 156, 58, 117, 134, 55, 222, 56, 200, 151, 191, 252, 37, 206, 157, 59, 207, 205, 183, 220, - 194, 242, 242, 50, 150, 152, 179, 5, 97, 36, 3, 193, 220, 48, 244, 68, 152, 165, 229, 101, 174, 187, 126, 15, 37, 113, 232, 240, 209, 110, 24, 234, - 182, 136, 252, 216, 104, 212, 206, 175, 77, 39, 207, 222, 120, 227, 245, 195, 171, 251, 95, 227, 223, 69, 227, 50, 174, 191, 238, 90, 52, 232, 168, 131, - 205, 217, 242, 123, 134, 126, 136, 42, 49, 155, 206, 232, 135, 162, 159, 13, 204, 101, 38, 146, 153, 78, 39, 44, 175, 95, 230, 239, 254, 244, 79, 241, - 75, 191, 244, 11, 220, 123, 223, 189, 116, 221, 136, 136, 32, 51, 128, 36, 179, 49, 23, 17, 100, 38, 54, 68, 4, 151, 4, 223, 20, 68, 4, 23, - 5, 216, 38, 34, 137, 224, 162, 0, 36, 1, 6, 2, 219, 72, 194, 6, 35, 170, 6, 182, 111, 223, 202, 189, 247, 222, 195, 174, 93, 59, 185, 250, - 170, 43, 121, 224, 129, 123, 185, 247, 190, 187, 216, 115, 221, 53, 28, 120, 253, 0, 231, 206, 157, 103, 214, 207, 120, 234, 169, 63, 101, 255, 171, 175, - 114, 251, 109, 183, 178, 188, 188, 76, 213, 128, 109, 36, 17, 201, 69, 85, 69, 85, 1, 102, 168, 129, 214, 117, 92, 117, 213, 46, 22, 23, 23, 56, - 240, 218, 27, 244, 125, 191, 57, 91, 126, 95, 215, 229, 122, 13, 122, 252, 198, 27, 175, 155, 236, 219, 255, 26, 255, 95, 53, 46, 99, 223, 254, 215, - 216, 189, 231, 106, 151, 244, 188, 237, 123, 250, 126, 184, 81, 85, 24, 51, 244, 3, 17, 65, 107, 141, 214, 26, 125, 223, 179, 105, 211, 70, 254, 235, - 95, 250, 69, 126, 234, 167, 126, 130, 141, 27, 54, 98, 65, 68, 16, 193, 5, 65, 102, 71, 68, 2, 65, 68, 146, 217, 128, 32, 34, 137, 72, 90, - 235, 136, 8, 230, 34, 2, 219, 204, 5, 193, 156, 13, 216, 4, 193, 156, 13, 118, 96, 23, 150, 33, 184, 32, 48, 34, 2, 108, 179, 97, 253, 50, - 183, 220, 114, 51, 123, 246, 92, 67, 235, 26, 163, 81, 199, 246, 237, 219, 216, 178, 121, 51, 47, 60, 255, 34, 253, 48, 96, 155, 125, 175, 236, 231, - 165, 23, 95, 226, 214, 91, 111, 101, 243, 150, 77, 88, 96, 27, 169, 144, 10, 187, 176, 141, 109, 176, 177, 12, 152, 93, 187, 174, 96, 113, 105, 145, - 87, 247, 191, 74, 223, 207, 70, 153, 249, 158, 204, 184, 186, 134, 225, 177, 155, 111, 190, 126, 101, 180, 48, 226, 196, 137, 147, 252, 69, 53, 222, 193, - 85, 187, 175, 68, 131, 206, 75, 250, 211, 174, 181, 251, 193, 87, 151, 69, 16, 64, 96, 155, 217, 108, 198, 194, 194, 152, 159, 255, 249, 159, 227, 111, - 254, 205, 207, 48, 26, 143, 136, 8, 34, 130, 136, 32, 51, 137, 8, 50, 27, 17, 65, 68, 144, 153, 68, 4, 153, 73, 102, 18, 17, 204, 69, 152, - 136, 224, 45, 17, 65, 68, 96, 131, 45, 140, 177, 141, 101, 100, 17, 17, 128, 145, 69, 68, 32, 9, 171, 176, 141, 109, 108, 99, 139, 165, 165, 37, - 54, 108, 88, 79, 102, 208, 90, 227, 202, 171, 174, 224, 220, 249, 243, 188, 254, 218, 27, 68, 36, 115, 7, 15, 30, 228, 197, 23, 95, 226, 206, 119, - 189, 139, 205, 155, 55, 33, 9, 91, 84, 21, 17, 193, 91, 36, 35, 21, 115, 182, 216, 177, 99, 59, 75, 75, 75, 188, 252, 242, 126, 250, 126, 200, - 150, 121, 87, 100, 187, 106, 58, 12, 95, 218, 184, 97, 227, 234, 171, 251, 95, 227, 47, 170, 241, 14, 222, 56, 112, 144, 173, 155, 183, 48, 30, 181, - 163, 150, 190, 38, 124, 147, 97, 79, 215, 186, 28, 134, 129, 217, 108, 198, 250, 245, 235, 249, 217, 159, 253, 25, 62, 243, 153, 255, 144, 209, 104, 4, - 17, 180, 76, 50, 147, 204, 36, 34, 200, 12, 32, 153, 203, 76, 34, 130, 136, 32, 51, 137, 8, 222, 98, 155, 75, 204, 156, 109, 108, 115, 73, 96, - 155, 136, 192, 54, 115, 17, 96, 27, 8, 230, 108, 48, 38, 194, 72, 102, 24, 10, 48, 96, 90, 107, 44, 45, 45, 50, 30, 143, 24, 47, 140, 217, - 190, 109, 59, 207, 62, 251, 60, 103, 207, 157, 7, 76, 68, 114, 232, 208, 97, 14, 29, 60, 200, 61, 247, 220, 205, 242, 242, 50, 182, 136, 48, 182, - 168, 26, 176, 141, 109, 36, 17, 17, 216, 98, 110, 231, 206, 157, 200, 197, 171, 251, 95, 165, 74, 145, 173, 189, 43, 35, 54, 206, 166, 179, 71, 175, - 191, 110, 207, 236, 181, 215, 14, 240, 23, 209, 248, 22, 142, 30, 59, 198, 198, 13, 203, 196, 168, 29, 173, 97, 248, 125, 219, 71, 183, 108, 218, 116, - 237, 21, 59, 119, 236, 184, 249, 230, 155, 248, 233, 191, 247, 119, 249, 244, 143, 124, 154, 241, 194, 136, 204, 32, 72, 34, 130, 204, 36, 34, 136, 8, - 50, 147, 204, 36, 34, 137, 8, 34, 130, 204, 36, 34, 176, 77, 68, 96, 27, 155, 11, 2, 169, 0, 19, 145, 128, 177, 185, 36, 192, 64, 96, 34, - 130, 32, 144, 10, 108, 100, 35, 21, 198, 204, 73, 5, 24, 16, 54, 23, 24, 48, 182, 176, 204, 250, 245, 203, 156, 61, 115, 150, 23, 94, 120, 9, - 99, 48, 100, 118, 28, 56, 112, 144, 147, 39, 79, 241, 192, 253, 247, 50, 26, 53, 108, 83, 85, 216, 2, 2, 73, 100, 114, 145, 36, 108, 176, 205, - 206, 157, 59, 56, 117, 242, 36, 135, 14, 29, 37, 35, 35, 91, 222, 29, 48, 153, 76, 214, 30, 187, 238, 186, 61, 126, 253, 192, 27, 124, 167, 26, - 223, 198, 241, 19, 39, 57, 124, 232, 40, 191, 250, 107, 191, 186, 242, 145, 143, 124, 100, 239, 39, 63, 249, 3, 31, 249, 129, 71, 30, 185, 229, 147, - 159, 250, 36, 119, 190, 235, 93, 100, 75, 178, 53, 130, 32, 35, 200, 76, 230, 34, 160, 181, 198, 92, 102, 146, 153, 180, 214, 176, 77, 68, 48, 23, - 17, 204, 73, 34, 34, 184, 196, 68, 128, 109, 222, 34, 21, 127, 78, 198, 128, 45, 100, 97, 132, 108, 2, 144, 4, 8, 201, 128, 1, 99, 131, 84, - 72, 66, 18, 17, 73, 68, 176, 113, 211, 70, 158, 123, 246, 121, 206, 159, 95, 37, 162, 17, 17, 24, 216, 191, 111, 63, 227, 209, 136, 119, 189, 235, - 14, 108, 99, 11, 219, 204, 217, 194, 54, 182, 128, 192, 22, 96, 50, 147, 29, 59, 182, 179, 111, 223, 126, 206, 157, 59, 79, 16, 173, 107, 237, 222, - 214, 186, 231, 118, 108, 223, 250, 194, 166, 205, 155, 121, 227, 141, 131, 124, 39, 146, 239, 208, 149, 87, 94, 193, 246, 237, 91, 127, 96, 215, 174, 157, - 31, 222, 185, 115, 7, 203, 203, 235, 80, 21, 216, 96, 46, 138, 72, 164, 194, 54, 115, 182, 153, 139, 72, 34, 130, 203, 145, 68, 102, 146, 153, 128, - 153, 139, 8, 254, 159, 108, 176, 13, 54, 68, 32, 9, 73, 24, 227, 8, 8, 254, 156, 36, 34, 130, 136, 196, 54, 182, 0, 19, 1, 17, 9, 24, - 73, 92, 113, 197, 14, 238, 124, 215, 237, 100, 54, 90, 107, 216, 38, 35, 176, 204, 111, 252, 250, 191, 224, 241, 175, 61, 65, 132, 145, 140, 36, 36, - 1, 129, 109, 108, 83, 85, 216, 198, 54, 132, 216, 177, 115, 27, 239, 123, 223, 131, 216, 102, 24, 122, 100, 109, 203, 204, 255, 246, 232, 241, 55, 111, - 24, 143, 70, 124, 167, 26, 223, 129, 47, 252, 225, 239, 115, 246, 244, 233, 77, 155, 55, 111, 254, 149, 165, 165, 117, 183, 102, 36, 68, 210, 90, 66, - 4, 217, 146, 140, 196, 230, 162, 214, 146, 136, 192, 134, 204, 36, 34, 176, 33, 34, 136, 8, 50, 147, 214, 26, 182, 249, 127, 51, 118, 17, 145, 216, - 6, 204, 156, 36, 108, 17, 128, 36, 28, 38, 8, 176, 40, 21, 24, 44, 35, 21, 145, 96, 11, 169, 144, 138, 57, 219, 84, 21, 182, 144, 140, 100, - 2, 51, 234, 70, 60, 245, 141, 167, 233, 251, 129, 42, 97, 27, 34, 56, 191, 178, 202, 225, 35, 135, 121, 240, 161, 7, 88, 94, 183, 12, 24, 169, - 176, 69, 4, 84, 137, 170, 1, 219, 72, 2, 11, 89, 108, 218, 188, 145, 67, 7, 143, 112, 236, 232, 9, 32, 232, 186, 182, 43, 35, 125, 246, 236, - 217, 63, 188, 238, 218, 107, 244, 198, 193, 67, 124, 59, 141, 111, 227, 119, 126, 251, 179, 108, 218, 180, 145, 174, 235, 62, 182, 126, 253, 250, 159, 233, - 90, 55, 142, 76, 8, 46, 138, 8, 34, 147, 136, 4, 67, 215, 117, 68, 4, 16, 180, 214, 0, 19, 209, 200, 76, 34, 130, 185, 136, 192, 54, 115, - 182, 121, 139, 109, 108, 51, 103, 27, 73, 204, 217, 134, 0, 89, 4, 1, 6, 169, 48, 198, 50, 82, 17, 128, 45, 108, 99, 27, 73, 128, 145, 140, - 36, 108, 99, 11, 219, 204, 73, 197, 186, 165, 37, 94, 122, 121, 31, 39, 142, 191, 73, 73, 188, 37, 51, 56, 116, 232, 48, 155, 54, 109, 228, 206, - 59, 111, 71, 18, 182, 144, 4, 4, 96, 230, 108, 99, 155, 108, 129, 84, 140, 186, 17, 93, 55, 226, 249, 231, 95, 64, 50, 153, 73, 102, 222, 212, - 186, 246, 39, 227, 241, 248, 213, 173, 219, 182, 112, 248, 240, 81, 190, 149, 228, 219, 24, 141, 70, 124, 245, 79, 30, 111, 11, 11, 11, 63, 220, 186, - 92, 150, 141, 100, 34, 146, 204, 4, 2, 149, 80, 21, 17, 96, 27, 219, 68, 112, 129, 137, 72, 108, 97, 27, 73, 204, 217, 70, 18, 182, 105, 173, - 49, 103, 155, 185, 204, 64, 18, 96, 50, 147, 185, 214, 26, 173, 37, 115, 146, 192, 64, 4, 24, 146, 32, 34, 33, 76, 68, 128, 3, 27, 34, 130, - 136, 0, 140, 13, 17, 193, 55, 153, 185, 165, 165, 69, 110, 187, 245, 102, 50, 147, 204, 68, 18, 96, 108, 3, 201, 231, 126, 239, 243, 28, 58, 120, - 24, 48, 182, 153, 147, 10, 219, 68, 4, 111, 145, 140, 13, 170, 226, 198, 27, 246, 176, 123, 247, 213, 244, 179, 25, 179, 217, 20, 169, 182, 183, 214, - 254, 211, 217, 172, 95, 94, 90, 90, 226, 219, 73, 190, 141, 108, 112, 219, 237, 55, 95, 51, 234, 186, 15, 102, 36, 17, 144, 105, 112, 97, 27, 91, - 24, 51, 103, 155, 8, 136, 0, 27, 36, 3, 198, 22, 118, 97, 23, 146, 176, 141, 36, 108, 83, 85, 84, 21, 85, 3, 32, 108, 176, 141, 109, 108, - 19, 1, 146, 80, 153, 57, 89, 148, 197, 69, 6, 99, 176, 145, 140, 109, 34, 32, 2, 108, 115, 73, 16, 17, 216, 38, 34, 176, 141, 84, 128, 32, - 204, 77, 55, 94, 199, 104, 220, 97, 23, 173, 5, 17, 92, 96, 198, 227, 17, 111, 28, 56, 200, 23, 190, 240, 40, 96, 36, 243, 150, 170, 162, 74, - 24, 99, 138, 26, 122, 40, 225, 18, 227, 81, 227, 93, 119, 220, 138, 129, 26, 196, 48, 12, 4, 254, 104, 102, 124, 111, 215, 26, 223, 78, 242, 109, - 44, 45, 45, 49, 30, 47, 220, 215, 186, 182, 199, 54, 182, 144, 132, 44, 170, 6, 108, 131, 65, 18, 85, 66, 50, 16, 188, 165, 74, 84, 21, 85, - 133, 109, 164, 162, 170, 136, 224, 2, 35, 21, 182, 200, 12, 192, 216, 102, 174, 74, 216, 66, 50, 85, 3, 165, 66, 50, 153, 137, 45, 84, 194, 54, - 182, 145, 4, 2, 99, 74, 133, 36, 230, 170, 4, 4, 17, 96, 27, 201, 216, 226, 45, 42, 177, 243, 138, 237, 92, 121, 229, 14, 50, 131, 136, 0, - 76, 102, 163, 181, 198, 220, 163, 143, 126, 137, 19, 39, 78, 146, 13, 36, 33, 137, 136, 192, 22, 150, 176, 5, 54, 17, 65, 112, 201, 245, 55, 92, - 203, 134, 245, 203, 76, 166, 19, 250, 126, 64, 210, 198, 204, 248, 204, 217, 243, 231, 199, 239, 126, 207, 3, 124, 43, 201, 183, 240, 220, 115, 207, 114, - 195, 13, 123, 232, 186, 238, 193, 136, 24, 219, 198, 54, 146, 176, 77, 68, 18, 17, 128, 201, 76, 50, 19, 91, 72, 162, 170, 152, 139, 128, 214, 146, - 136, 96, 206, 22, 32, 134, 161, 167, 170, 7, 132, 45, 164, 66, 50, 182, 137, 8, 50, 131, 136, 224, 146, 32, 34, 136, 0, 3, 153, 13, 2, 108, - 33, 137, 57, 99, 108, 99, 155, 57, 219, 216, 70, 18, 182, 153, 179, 69, 68, 48, 103, 153, 185, 229, 229, 37, 174, 185, 230, 106, 108, 211, 90, 3, - 130, 57, 73, 116, 221, 136, 3, 175, 31, 228, 79, 159, 122, 6, 219, 72, 162, 170, 168, 42, 170, 10, 219, 216, 252, 185, 136, 192, 18, 155, 55, 109, - 228, 202, 171, 175, 96, 24, 6, 134, 97, 96, 24, 138, 11, 30, 94, 88, 24, 223, 213, 90, 227, 91, 73, 190, 133, 87, 246, 189, 196, 231, 191, 240, - 229, 133, 209, 104, 116, 71, 102, 98, 155, 32, 136, 8, 144, 209, 48, 96, 153, 32, 176, 133, 93, 12, 53, 96, 139, 57, 73, 204, 217, 6, 140, 109, - 34, 2, 91, 72, 66, 18, 54, 68, 4, 182, 145, 10, 91, 72, 194, 6, 219, 216, 34, 18, 108, 99, 131, 101, 84, 3, 168, 176, 184, 32, 176, 193, - 22, 96, 230, 108, 144, 4, 24, 16, 146, 1, 51, 103, 27, 99, 108, 131, 69, 6, 92, 187, 251, 106, 70, 93, 135, 109, 90, 107, 204, 217, 6, 204, - 172, 31, 248, 202, 87, 191, 206, 172, 47, 36, 17, 17, 72, 34, 49, 137, 73, 192, 50, 150, 40, 137, 185, 214, 53, 174, 189, 230, 106, 230, 170, 68, - 213, 128, 228, 93, 45, 242, 145, 43, 175, 220, 193, 67, 15, 222, 207, 59, 73, 190, 5, 73, 44, 173, 91, 220, 16, 25, 187, 249, 51, 178, 176, 141, - 13, 198, 204, 73, 194, 54, 102, 206, 148, 6, 108, 35, 137, 97, 24, 24, 134, 162, 170, 144, 132, 84, 216, 96, 27, 201, 216, 194, 54, 146, 145, 140, - 100, 108, 35, 139, 170, 66, 18, 85, 3, 82, 97, 11, 108, 2, 19, 54, 145, 208, 50, 1, 99, 132, 109, 108, 3, 193, 156, 205, 159, 49, 54, 23, - 25, 3, 102, 78, 42, 84, 3, 187, 118, 237, 100, 121, 121, 153, 136, 32, 2, 50, 147, 136, 128, 8, 34, 147, 103, 159, 125, 158, 147, 39, 79, 49, - 103, 131, 109, 192, 96, 99, 137, 136, 192, 64, 4, 216, 66, 42, 118, 94, 177, 157, 174, 107, 12, 195, 192, 48, 20, 82, 113, 193, 199, 95, 127, 245, - 208, 102, 219, 188, 147, 228, 91, 24, 141, 58, 22, 198, 11, 75, 192, 14, 219, 216, 198, 50, 146, 176, 133, 109, 36, 97, 27, 12, 182, 49, 96, 115, - 129, 137, 8, 170, 132, 109, 36, 3, 198, 6, 169, 136, 8, 108, 51, 12, 133, 36, 164, 34, 2, 108, 35, 23, 118, 225, 48, 229, 226, 146, 192, 54, - 210, 192, 225, 195, 135, 120, 230, 153, 167, 121, 225, 133, 231, 57, 118, 252, 24, 114, 145, 17, 216, 66, 42, 108, 17, 1, 17, 32, 25, 73, 72, 133, - 109, 130, 96, 206, 24, 12, 178, 217, 188, 121, 35, 203, 203, 75, 64, 0, 65, 107, 141, 214, 26, 151, 152, 227, 199, 79, 240, 250, 107, 175, 147, 153, - 72, 194, 54, 16, 148, 132, 13, 182, 177, 4, 4, 82, 97, 196, 230, 45, 155, 88, 92, 92, 64, 85, 84, 13, 12, 195, 128, 237, 59, 51, 243, 142, - 204, 224, 157, 116, 124, 11, 163, 174, 195, 242, 250, 8, 22, 165, 129, 200, 14, 34, 176, 205, 156, 109, 170, 6, 130, 70, 89, 180, 174, 35, 72, 44, - 81, 12, 200, 34, 34, 176, 141, 109, 34, 184, 32, 201, 12, 170, 10, 201, 204, 101, 6, 146, 1, 35, 9, 219, 148, 138, 136, 196, 18, 24, 130, 11, - 100, 158, 254, 198, 55, 248, 173, 223, 254, 44, 71, 14, 31, 165, 4, 91, 54, 109, 230, 246, 59, 110, 229, 193, 135, 30, 228, 202, 171, 174, 36, 34, - 168, 42, 36, 81, 85, 128, 1, 243, 22, 169, 168, 42, 108, 99, 140, 37, 70, 227, 17, 155, 54, 111, 228, 240, 145, 227, 16, 102, 46, 34, 136, 8, - 34, 146, 26, 6, 246, 237, 123, 141, 123, 239, 126, 23, 184, 8, 11, 243, 103, 108, 50, 130, 146, 168, 42, 48, 80, 98, 121, 105, 137, 197, 165, 5, - 78, 159, 62, 75, 14, 73, 215, 4, 205, 155, 51, 121, 223, 194, 194, 226, 99, 239, 126, 232, 94, 190, 250, 181, 111, 240, 118, 29, 239, 224, 7, 30, - 249, 56, 88, 188, 242, 202, 43, 55, 222, 183, 241, 238, 245, 94, 24, 97, 11, 57, 104, 36, 146, 201, 228, 2, 33, 65, 107, 13, 11, 8, 99, 12, - 134, 48, 36, 137, 84, 68, 4, 32, 106, 16, 163, 241, 8, 2, 108, 17, 17, 92, 20, 70, 26, 144, 141, 109, 108, 3, 6, 131, 74, 204, 157, 124, - 243, 77, 126, 231, 119, 254, 53, 127, 250, 212, 94, 206, 157, 95, 101, 24, 6, 146, 198, 222, 103, 159, 227, 235, 143, 127, 157, 135, 31, 254, 48, 247, - 63, 120, 31, 163, 241, 2, 146, 177, 3, 91, 216, 102, 78, 18, 54, 216, 198, 18, 150, 49, 166, 181, 198, 120, 60, 38, 2, 186, 236, 152, 14, 61, - 115, 54, 100, 38, 195, 96, 94, 123, 245, 0, 53, 244, 128, 1, 19, 17, 72, 166, 170, 104, 173, 97, 46, 176, 177, 141, 92, 68, 4, 75, 139, 11, - 84, 137, 42, 161, 18, 170, 66, 248, 125, 199, 79, 188, 185, 48, 234, 186, 41, 151, 209, 241, 14, 178, 5, 63, 253, 247, 254, 179, 117, 63, 242, 233, - 31, 254, 79, 238, 190, 231, 206, 101, 73, 100, 38, 216, 24, 131, 133, 20, 68, 4, 151, 4, 32, 108, 209, 90, 67, 18, 9, 84, 152, 32, 56, 115, - 234, 20, 79, 61, 249, 4, 47, 189, 242, 10, 235, 214, 45, 243, 61, 223, 243, 65, 246, 236, 185, 14, 147, 12, 85, 204, 25, 99, 137, 57, 219, 148, - 6, 194, 32, 137, 140, 224, 141, 131, 7, 121, 225, 165, 87, 56, 125, 230, 28, 147, 217, 12, 167, 32, 130, 213, 179, 107, 156, 223, 187, 194, 177, 227, - 39, 56, 118, 252, 56, 15, 127, 223, 135, 25, 47, 44, 0, 198, 54, 146, 169, 42, 36, 97, 11, 217, 4, 96, 46, 48, 100, 4, 11, 139, 11, 4, - 1, 152, 214, 26, 195, 48, 144, 25, 64, 80, 85, 28, 63, 118, 130, 233, 100, 202, 226, 210, 24, 8, 108, 192, 134, 8, 74, 66, 85, 16, 193, 92, - 56, 104, 153, 44, 44, 44, 82, 85, 216, 66, 54, 146, 136, 204, 59, 22, 198, 227, 45, 16, 71, 184, 140, 142, 119, 48, 110, 141, 219, 110, 190, 233, - 190, 233, 116, 242, 33, 219, 216, 66, 18, 17, 1, 81, 32, 200, 108, 132, 131, 204, 164, 170, 128, 36, 34, 176, 1, 131, 109, 144, 56, 124, 248, 16, - 159, 253, 236, 255, 197, 147, 95, 127, 130, 147, 167, 78, 209, 151, 248, 218, 227, 95, 231, 103, 126, 230, 103, 184, 254, 250, 235, 81, 9, 115, 65, 128, - 36, 108, 176, 69, 73, 132, 185, 192, 148, 138, 35, 71, 15, 115, 238, 220, 121, 102, 195, 140, 133, 205, 29, 59, 174, 217, 201, 120, 97, 204, 137, 163, - 39, 56, 125, 240, 44, 7, 15, 31, 229, 247, 62, 247, 111, 200, 22, 124, 232, 195, 255, 30, 173, 107, 84, 21, 182, 128, 128, 0, 91, 96, 99, 9, - 91, 216, 166, 36, 250, 217, 64, 169, 144, 76, 102, 71, 102, 34, 9, 219, 100, 54, 78, 158, 60, 197, 100, 50, 101, 97, 113, 140, 84, 216, 92, 96, - 34, 192, 18, 182, 152, 179, 140, 44, 140, 137, 12, 84, 69, 149, 168, 42, 134, 128, 110, 60, 222, 158, 153, 87, 3, 71, 184, 140, 228, 50, 126, 240, - 83, 159, 96, 235, 230, 141, 140, 23, 198, 31, 30, 250, 126, 107, 213, 0, 4, 146, 144, 10, 187, 176, 11, 91, 204, 85, 21, 182, 169, 234, 177, 6, - 108, 33, 21, 200, 28, 57, 116, 144, 95, 255, 231, 255, 156, 47, 124, 225, 139, 236, 59, 240, 58, 167, 166, 167, 89, 141, 21, 190, 241, 220, 147, 252, - 198, 111, 254, 6, 171, 171, 171, 88, 198, 18, 150, 128, 32, 50, 104, 93, 71, 102, 98, 27, 91, 216, 197, 234, 234, 121, 134, 26, 136, 81, 114, 199, - 125, 119, 242, 209, 135, 63, 198, 13, 55, 220, 194, 109, 247, 220, 206, 134, 157, 235, 25, 106, 224, 248, 137, 147, 252, 209, 23, 190, 200, 222, 189, 123, - 177, 140, 84, 216, 198, 54, 82, 97, 21, 150, 168, 18, 146, 32, 2, 108, 102, 179, 25, 173, 53, 34, 130, 170, 66, 18, 153, 137, 109, 90, 75, 86, - 86, 86, 153, 76, 103, 128, 177, 132, 85, 84, 21, 118, 81, 26, 48, 2, 12, 22, 152, 139, 102, 211, 41, 6, 36, 49, 235, 123, 6, 9, 73, 27, - 171, 106, 183, 36, 46, 39, 185, 12, 219, 188, 126, 248, 248, 82, 68, 190, 123, 54, 155, 49, 157, 78, 121, 139, 109, 170, 10, 219, 72, 194, 54, 16, - 128, 33, 12, 97, 164, 30, 44, 206, 156, 62, 197, 191, 250, 173, 207, 242, 229, 199, 190, 194, 145, 19, 199, 89, 220, 182, 196, 109, 15, 189, 139, 59, - 31, 186, 135, 93, 55, 93, 201, 87, 158, 248, 99, 246, 238, 125, 22, 34, 144, 196, 48, 12, 16, 208, 181, 70, 70, 50, 234, 58, 186, 174, 67, 18, - 182, 105, 173, 209, 117, 29, 163, 197, 17, 91, 55, 110, 99, 247, 230, 107, 57, 245, 250, 73, 22, 218, 2, 155, 182, 110, 196, 36, 125, 63, 112, 232, - 232, 81, 30, 251, 242, 99, 156, 57, 125, 138, 57, 73, 72, 133, 36, 108, 35, 137, 57, 27, 176, 233, 251, 129, 149, 213, 21, 130, 160, 235, 58, 34, - 2, 219, 68, 4, 182, 177, 205, 48, 12, 172, 172, 172, 128, 193, 22, 178, 80, 21, 85, 198, 6, 219, 72, 194, 152, 204, 196, 130, 149, 149, 85, 44, - 97, 9, 219, 216, 198, 246, 66, 68, 236, 204, 12, 238, 184, 253, 86, 222, 46, 185, 140, 22, 201, 66, 215, 109, 25, 117, 163, 91, 170, 138, 213, 149, - 85, 134, 161, 71, 42, 170, 10, 73, 216, 32, 137, 170, 98, 24, 122, 164, 194, 22, 146, 24, 106, 96, 152, 205, 248, 234, 87, 190, 204, 99, 143, 125, - 133, 227, 111, 158, 34, 70, 112, 195, 237, 55, 241, 137, 135, 63, 201, 117, 219, 111, 96, 195, 120, 19, 238, 204, 87, 190, 242, 37, 166, 147, 53, 164, - 98, 46, 51, 105, 109, 68, 215, 117, 100, 54, 34, 130, 185, 42, 177, 115, 199, 118, 182, 109, 221, 68, 20, 60, 245, 196, 83, 252, 247, 255, 228, 159, - 240, 248, 19, 95, 231, 141, 131, 7, 56, 127, 102, 5, 44, 108, 51, 89, 235, 217, 183, 239, 85, 94, 126, 233, 101, 192, 96, 97, 21, 72, 216, 6, - 11, 169, 8, 32, 34, 56, 123, 238, 28, 43, 231, 87, 137, 12, 50, 147, 204, 32, 34, 136, 8, 70, 163, 17, 17, 129, 108, 134, 190, 71, 18, 230, - 2, 155, 136, 0, 12, 152, 32, 152, 179, 77, 4, 204, 102, 61, 231, 206, 173, 80, 18, 37, 1, 70, 50, 146, 136, 136, 45, 139, 139, 75, 128, 121, - 187, 228, 50, 50, 147, 214, 186, 43, 91, 230, 214, 201, 218, 132, 179, 231, 206, 97, 23, 85, 61, 85, 3, 182, 169, 42, 84, 133, 36, 36, 161, 18, - 42, 83, 37, 112, 112, 228, 216, 17, 254, 237, 151, 31, 227, 240, 145, 99, 244, 253, 64, 118, 29, 145, 240, 252, 222, 23, 57, 248, 202, 33, 78, 188, - 113, 2, 15, 226, 245, 215, 95, 229, 220, 217, 211, 168, 138, 136, 0, 130, 136, 32, 72, 130, 164, 101, 71, 70, 99, 24, 6, 110, 190, 229, 22, 30, - 254, 190, 135, 89, 236, 22, 57, 119, 234, 44, 125, 78, 217, 184, 115, 153, 55, 143, 188, 201, 153, 35, 103, 120, 75, 73, 156, 61, 187, 194, 190, 125, - 251, 25, 102, 83, 194, 194, 26, 176, 132, 101, 176, 176, 197, 92, 100, 114, 234, 228, 105, 166, 147, 25, 173, 117, 216, 32, 153, 204, 36, 34, 136, 8, - 50, 147, 140, 128, 0, 169, 176, 5, 1, 132, 137, 0, 12, 4, 151, 68, 16, 145, 156, 59, 191, 194, 202, 234, 20, 3, 178, 40, 11, 169, 168, 42, - 134, 161, 182, 92, 125, 213, 46, 170, 196, 219, 117, 92, 86, 96, 188, 35, 34, 150, 135, 26, 56, 126, 236, 56, 183, 220, 114, 35, 153, 73, 4, 12, - 67, 79, 102, 16, 209, 48, 102, 212, 141, 48, 194, 6, 27, 236, 224, 185, 189, 207, 240, 210, 43, 175, 176, 186, 54, 1, 139, 217, 234, 148, 253, 47, - 191, 202, 243, 123, 95, 228, 232, 254, 35, 140, 23, 199, 108, 221, 180, 153, 171, 175, 186, 134, 241, 226, 34, 165, 129, 116, 71, 70, 48, 151, 153, 216, - 6, 76, 182, 196, 54, 24, 62, 240, 190, 247, 243, 218, 254, 3, 252, 206, 231, 126, 159, 129, 162, 95, 233, 169, 89, 193, 192, 5, 1, 8, 28, 244, - 125, 241, 230, 137, 147, 172, 173, 173, 177, 184, 184, 136, 205, 69, 182, 144, 204, 37, 6, 7, 135, 14, 29, 161, 170, 176, 133, 84, 204, 217, 38, 34, - 152, 107, 173, 163, 27, 117, 188, 69, 18, 115, 182, 129, 192, 54, 182, 201, 72, 140, 48, 230, 212, 201, 83, 172, 156, 95, 193, 6, 73, 72, 66, 18, - 150, 32, 98, 116, 231, 29, 215, 243, 228, 55, 158, 230, 237, 146, 203, 48, 6, 123, 83, 85, 45, 16, 193, 241, 227, 199, 25, 134, 162, 170, 144, 10, - 169, 176, 65, 18, 146, 40, 21, 146, 40, 21, 178, 88, 89, 89, 225, 185, 103, 159, 227, 212, 169, 51, 148, 4, 4, 158, 193, 155, 7, 78, 226, 126, - 96, 231, 238, 109, 44, 46, 45, 178, 97, 113, 35, 31, 250, 208, 135, 25, 141, 58, 36, 129, 33, 34, 136, 8, 34, 130, 174, 235, 152, 179, 13, 152, - 89, 63, 37, 187, 224, 227, 159, 120, 152, 59, 239, 184, 149, 24, 96, 88, 27, 176, 192, 24, 48, 16, 204, 5, 48, 235, 167, 76, 167, 83, 84, 133, - 37, 84, 3, 85, 133, 45, 108, 97, 204, 234, 218, 132, 3, 7, 14, 146, 153, 216, 102, 46, 2, 36, 81, 85, 12, 195, 128, 36, 48, 96, 99, 192, - 50, 54, 68, 4, 96, 34, 130, 140, 68, 18, 17, 65, 68, 112, 228, 232, 113, 166, 179, 25, 115, 54, 88, 198, 54, 54, 248, 130, 233, 84, 216, 230, - 237, 146, 203, 49, 16, 44, 218, 110, 92, 112, 242, 228, 105, 206, 157, 91, 193, 134, 97, 24, 144, 140, 45, 192, 72, 162, 170, 24, 106, 160, 159, 13, - 212, 32, 206, 156, 57, 195, 129, 55, 14, 49, 153, 204, 128, 192, 4, 118, 160, 85, 56, 119, 104, 149, 115, 135, 87, 153, 157, 238, 185, 255, 158, 251, - 216, 189, 251, 106, 134, 217, 0, 6, 219, 216, 38, 35, 136, 8, 192, 68, 4, 17, 80, 26, 168, 26, 232, 251, 158, 205, 155, 55, 241, 131, 63, 248, - 8, 123, 246, 92, 205, 120, 212, 8, 243, 103, 204, 92, 182, 100, 97, 97, 204, 210, 210, 34, 45, 27, 37, 81, 42, 228, 194, 42, 130, 32, 8, 50, - 147, 195, 71, 143, 113, 224, 141, 35, 188, 37, 51, 201, 108, 100, 38, 223, 100, 250, 190, 71, 50, 146, 48, 6, 140, 100, 44, 19, 17, 200, 66, 22, - 65, 82, 130, 3, 7, 14, 33, 25, 8, 230, 36, 83, 37, 100, 35, 41, 86, 87, 2, 91, 188, 93, 114, 25, 14, 99, 46, 8, 192, 112, 250, 244, - 105, 14, 31, 62, 140, 84, 216, 92, 96, 134, 97, 160, 170, 176, 11, 187, 176, 11, 185, 48, 197, 233, 51, 167, 57, 123, 230, 44, 85, 133, 13, 182, - 177, 205, 156, 21, 184, 96, 121, 121, 29, 239, 125, 223, 187, 105, 45, 24, 212, 51, 212, 0, 54, 182, 169, 18, 85, 133, 108, 130, 192, 54, 17, 129, - 45, 250, 126, 198, 116, 58, 225, 218, 107, 119, 243, 3, 159, 248, 40, 215, 237, 217, 205, 198, 13, 203, 44, 140, 71, 116, 173, 49, 30, 117, 172, 95, - 183, 196, 230, 77, 235, 217, 185, 99, 27, 163, 209, 152, 42, 33, 9, 201, 24, 48, 38, 34, 176, 205, 179, 123, 95, 100, 50, 153, 162, 18, 153, 13, - 155, 139, 34, 130, 57, 219, 216, 198, 54, 198, 204, 89, 102, 206, 22, 145, 129, 44, 50, 146, 204, 68, 50, 43, 231, 215, 120, 227, 141, 67, 72, 66, - 18, 182, 193, 198, 54, 182, 176, 209, 234, 116, 130, 109, 222, 174, 227, 114, 12, 97, 144, 68, 107, 73, 245, 197, 171, 251, 95, 229, 250, 235, 247, 208, - 117, 141, 8, 144, 76, 215, 113, 129, 145, 68, 102, 146, 153, 72, 48, 157, 174, 49, 155, 205, 176, 205, 37, 193, 156, 109, 230, 108, 115, 195, 13, 215, - 115, 195, 13, 215, 209, 15, 61, 182, 201, 12, 140, 1, 67, 0, 1, 65, 64, 152, 136, 96, 78, 18, 85, 3, 195, 208, 35, 137, 219, 239, 184, 141, - 8, 248, 250, 227, 79, 112, 236, 248, 9, 38, 107, 83, 34, 96, 221, 210, 18, 187, 118, 109, 231, 198, 27, 111, 32, 2, 36, 161, 42, 164, 98, 206, - 152, 108, 201, 177, 99, 111, 242, 252, 243, 47, 19, 36, 173, 5, 174, 129, 8, 144, 132, 109, 108, 19, 17, 216, 134, 224, 207, 152, 136, 192, 134, 136, - 224, 34, 131, 49, 17, 65, 100, 227, 196, 137, 55, 57, 122, 244, 4, 153, 9, 24, 219, 204, 101, 6, 182, 177, 125, 230, 137, 39, 255, 4, 203, 188, - 93, 199, 101, 132, 184, 72, 37, 164, 194, 14, 246, 239, 127, 141, 123, 78, 158, 100, 219, 182, 45, 216, 38, 2, 164, 192, 54, 153, 137, 13, 146, 1, - 179, 176, 176, 64, 107, 73, 70, 80, 46, 32, 136, 8, 230, 194, 176, 176, 48, 230, 221, 15, 221, 207, 186, 117, 235, 24, 134, 129, 139, 28, 212, 208, - 83, 53, 166, 181, 129, 140, 6, 153, 72, 194, 54, 115, 153, 73, 85, 49, 212, 128, 52, 144, 4, 183, 223, 118, 11, 219, 183, 109, 225, 181, 87, 95, - 227, 212, 169, 147, 148, 196, 250, 245, 235, 185, 118, 207, 53, 92, 125, 205, 85, 72, 61, 182, 136, 4, 156, 96, 46, 16, 67, 153, 175, 125, 253, 105, - 206, 156, 57, 71, 4, 32, 8, 131, 37, 108, 19, 17, 68, 4, 17, 65, 102, 146, 153, 88, 98, 46, 50, 80, 137, 200, 192, 134, 200, 192, 54, 150, - 201, 113, 240, 210, 43, 251, 57, 119, 126, 133, 136, 68, 50, 173, 129, 109, 170, 68, 132, 80, 213, 217, 51, 167, 207, 98, 155, 183, 235, 184, 44, 99, - 3, 1, 25, 193, 80, 197, 241, 227, 39, 121, 118, 239, 243, 124, 207, 7, 223, 139, 84, 124, 83, 210, 154, 169, 42, 90, 107, 216, 102, 211, 198, 141, - 108, 219, 190, 149, 215, 14, 28, 164, 175, 1, 108, 36, 136, 128, 209, 168, 113, 195, 13, 123, 120, 224, 254, 251, 1, 35, 9, 219, 68, 4, 82, 33, - 21, 195, 80, 100, 152, 200, 100, 46, 34, 136, 8, 50, 19, 219, 168, 138, 161, 6, 40, 211, 50, 217, 190, 99, 59, 219, 183, 111, 99, 168, 1, 219, - 180, 214, 145, 25, 88, 133, 36, 108, 99, 27, 155, 139, 50, 130, 151, 247, 189, 206, 51, 79, 63, 135, 109, 8, 232, 85, 72, 98, 46, 34, 152, 139, - 8, 108, 115, 145, 161, 36, 36, 33, 153, 200, 32, 8, 100, 1, 193, 69, 1, 179, 89, 207, 222, 189, 47, 32, 153, 174, 131, 204, 64, 18, 182, 177, - 132, 36, 151, 244, 166, 44, 94, 125, 253, 13, 222, 46, 185, 12, 217, 216, 194, 50, 17, 129, 36, 50, 131, 103, 158, 121, 150, 163, 71, 143, 99, 27, - 73, 84, 9, 169, 24, 134, 1, 91, 72, 98, 24, 138, 165, 165, 37, 222, 243, 158, 247, 176, 121, 243, 38, 90, 38, 4, 180, 46, 89, 92, 90, 96, - 215, 149, 59, 249, 232, 199, 30, 102, 215, 149, 87, 48, 12, 3, 85, 3, 195, 48, 80, 53, 32, 23, 170, 194, 22, 146, 81, 9, 201, 24, 147, 145, - 72, 34, 34, 176, 141, 74, 12, 195, 64, 63, 12, 12, 195, 64, 97, 218, 104, 196, 104, 97, 129, 236, 26, 146, 40, 21, 182, 193, 32, 153, 8, 147, - 25, 156, 58, 117, 150, 127, 251, 197, 175, 194, 196, 203, 222, 0, 0, 32, 0, 73, 68, 65, 84, 48, 153, 204, 192, 129, 10, 178, 53, 200, 32, 91, - 35, 34, 168, 42, 190, 41, 144, 68, 63, 155, 17, 4, 216, 216, 134, 128, 32, 192, 96, 155, 214, 26, 135, 14, 29, 101, 255, 190, 215, 201, 72, 34, - 130, 185, 136, 64, 18, 6, 50, 98, 5, 124, 156, 119, 208, 113, 25, 150, 145, 189, 58, 194, 131, 236, 142, 11, 50, 147, 179, 103, 207, 243, 199, 127, - 252, 85, 62, 254, 241, 135, 89, 92, 92, 4, 140, 36, 34, 2, 48, 54, 23, 4, 153, 201, 3, 15, 61, 64, 180, 228, 171, 127, 242, 56, 7, 222, - 56, 192, 208, 247, 236, 220, 185, 131, 247, 127, 224, 189, 188, 251, 221, 15, 32, 13, 216, 198, 54, 17, 193, 48, 64, 63, 43, 70, 157, 104, 77, 68, - 64, 102, 34, 9, 149, 32, 160, 181, 164, 69, 16, 54, 97, 46, 178, 132, 128, 4, 108, 48, 16, 97, 108, 161, 18, 178, 137, 8, 34, 128, 8, 206, - 173, 174, 242, 249, 63, 250, 18, 135, 14, 31, 35, 34, 32, 32, 19, 100, 147, 17, 244, 85, 216, 69, 132, 0, 49, 39, 21, 195, 32, 250, 161, 144, - 5, 17, 68, 128, 36, 50, 18, 27, 50, 3, 8, 158, 120, 226, 25, 78, 159, 57, 71, 107, 13, 27, 36, 17, 209, 32, 184, 168, 164, 21, 201, 71, - 9, 115, 57, 29, 151, 97, 11, 236, 73, 16, 195, 208, 247, 157, 36, 136, 100, 238, 133, 231, 95, 226, 170, 43, 175, 224, 129, 7, 239, 67, 226, 162, - 136, 192, 54, 146, 200, 76, 32, 137, 8, 30, 122, 247, 131, 220, 115, 207, 221, 156, 58, 121, 146, 126, 232, 89, 183, 110, 29, 219, 182, 109, 165, 181, - 198, 48, 20, 96, 108, 19, 17, 128, 169, 234, 169, 234, 169, 161, 145, 217, 40, 21, 150, 176, 197, 92, 70, 35, 51, 201, 76, 50, 2, 1, 6, 74, - 194, 24, 59, 200, 108, 88, 162, 84, 216, 230, 18, 19, 1, 231, 206, 175, 241, 232, 23, 255, 152, 151, 95, 218, 71, 68, 32, 21, 85, 3, 146, 128, - 64, 18, 153, 9, 85, 100, 54, 36, 19, 17, 100, 38, 4, 96, 46, 138, 128, 32, 152, 51, 16, 1, 153, 201, 137, 55, 79, 243, 248, 227, 79, 98, - 27, 219, 204, 101, 6, 115, 54, 72, 2, 251, 84, 223, 247, 199, 34, 184, 172, 142, 203, 176, 141, 237, 53, 225, 33, 91, 35, 29, 24, 136, 8, 250, - 94, 60, 246, 216, 87, 89, 94, 191, 142, 91, 110, 185, 153, 136, 96, 206, 22, 6, 44, 33, 7, 65, 195, 54, 173, 5, 59, 175, 216, 78, 68, 96, - 7, 85, 162, 74, 100, 6, 182, 121, 75, 132, 25, 106, 160, 52, 80, 53, 96, 139, 104, 201, 48, 12, 244, 179, 158, 190, 31, 144, 0, 7, 56, 48, - 23, 68, 128, 141, 37, 132, 177, 19, 48, 182, 145, 196, 92, 4, 16, 201, 177, 99, 111, 242, 232, 23, 255, 152, 87, 95, 61, 8, 52, 170, 122, 108, - 147, 153, 64, 32, 9, 219, 24, 51, 87, 85, 188, 69, 18, 227, 81, 71, 100, 16, 17, 216, 38, 51, 144, 64, 22, 38, 176, 197, 215, 30, 127, 146, - 131, 7, 143, 16, 17, 216, 38, 34, 136, 8, 32, 152, 139, 8, 100, 191, 90, 85, 231, 50, 147, 203, 233, 184, 140, 194, 24, 175, 150, 220, 119, 93, - 7, 97, 134, 190, 199, 230, 2, 115, 238, 236, 10, 159, 251, 189, 63, 164, 74, 220, 118, 219, 45, 24, 145, 110, 4, 16, 153, 68, 4, 25, 32, 21, - 115, 17, 65, 68, 48, 103, 155, 136, 64, 10, 34, 130, 57, 219, 68, 36, 85, 197, 202, 249, 21, 78, 245, 103, 57, 191, 178, 202, 249, 243, 231, 89, - 89, 89, 101, 58, 153, 34, 137, 204, 100, 212, 53, 198, 227, 96, 52, 78, 34, 6, 108, 97, 10, 28, 128, 169, 18, 96, 34, 146, 136, 100, 117, 50, - 229, 229, 151, 94, 228, 169, 111, 236, 229, 216, 241, 147, 212, 32, 100, 83, 37, 36, 19, 145, 192, 128, 36, 136, 0, 67, 102, 3, 68, 213, 128, 109, - 230, 100, 131, 33, 2, 236, 160, 100, 34, 0, 65, 100, 112, 226, 196, 105, 30, 125, 244, 49, 134, 161, 232, 186, 17, 111, 169, 18, 173, 5, 184, 17, - 36, 114, 61, 127, 227, 181, 55, 173, 236, 123, 99, 31, 151, 211, 113, 25, 178, 177, 125, 182, 164, 105, 200, 12, 253, 64, 149, 176, 197, 48, 12, 216, - 112, 252, 248, 73, 126, 235, 179, 191, 203, 185, 115, 231, 185, 251, 158, 59, 24, 141, 70, 204, 133, 130, 204, 134, 195, 204, 69, 36, 32, 34, 130, 185, - 136, 192, 134, 8, 243, 22, 201, 128, 120, 243, 196, 97, 14, 31, 62, 206, 155, 39, 79, 113, 230, 204, 89, 214, 214, 214, 152, 205, 102, 72, 34, 51, - 25, 143, 199, 44, 46, 45, 177, 113, 253, 50, 187, 119, 111, 99, 243, 166, 69, 2, 136, 8, 46, 49, 17, 9, 209, 88, 89, 89, 227, 224, 27, 135, - 120, 102, 239, 11, 28, 58, 124, 148, 26, 138, 97, 40, 8, 192, 38, 51, 145, 138, 185, 190, 31, 176, 69, 16, 152, 192, 54, 153, 137, 36, 108, 99, - 155, 170, 194, 54, 24, 164, 34, 8, 34, 147, 108, 13, 1, 127, 248, 135, 95, 226, 245, 215, 14, 67, 36, 182, 137, 8, 46, 49, 182, 137, 8, 36, - 203, 142, 103, 143, 28, 63, 202, 209, 163, 199, 185, 156, 142, 203, 144, 10, 73, 103, 236, 209, 164, 170, 40, 137, 170, 129, 136, 36, 34, 8, 32, 51, - 56, 119, 110, 133, 223, 251, 189, 207, 115, 244, 232, 49, 222, 243, 158, 7, 217, 186, 109, 11, 182, 176, 193, 97, 230, 34, 132, 13, 17, 16, 17, 68, - 4, 17, 193, 156, 13, 182, 152, 59, 117, 250, 60, 123, 159, 121, 153, 227, 199, 223, 228, 204, 153, 83, 156, 59, 119, 158, 213, 213, 85, 250, 190, 199, - 54, 151, 4, 27, 54, 108, 96, 219, 150, 205, 172, 223, 208, 177, 101, 243, 18, 198, 204, 69, 36, 231, 207, 175, 113, 252, 216, 155, 188, 113, 248, 8, - 175, 189, 250, 58, 167, 78, 157, 161, 202, 116, 93, 135, 29, 100, 38, 150, 17, 66, 18, 96, 44, 97, 11, 8, 34, 2, 169, 176, 185, 40, 51, 177, - 205, 92, 70, 64, 0, 17, 64, 16, 153, 148, 138, 209, 104, 204, 51, 207, 60, 207, 31, 253, 209, 151, 33, 18, 34, 152, 139, 8, 230, 34, 146, 204, - 100, 78, 82, 95, 85, 175, 172, 13, 3, 239, 164, 227, 50, 60, 8, 171, 86, 145, 78, 87, 137, 214, 18, 169, 97, 139, 57, 89, 180, 214, 33, 153, - 97, 86, 60, 246, 229, 175, 241, 242, 75, 251, 121, 255, 251, 30, 226, 182, 219, 111, 102, 253, 250, 117, 148, 5, 1, 4, 23, 152, 185, 204, 164, 69, - 195, 54, 182, 113, 128, 129, 32, 56, 123, 246, 44, 175, 31, 120, 157, 195, 135, 142, 114, 232, 208, 65, 250, 126, 32, 2, 140, 152, 77, 123, 78, 156, - 56, 65, 75, 184, 239, 222, 187, 185, 246, 158, 155, 185, 98, 199, 22, 44, 19, 17, 180, 214, 120, 241, 165, 215, 248, 252, 191, 249, 34, 167, 78, 157, - 166, 4, 153, 73, 107, 73, 68, 146, 145, 200, 34, 34, 24, 84, 188, 165, 101, 67, 37, 186, 110, 68, 85, 81, 42, 36, 49, 12, 34, 34, 200, 76, - 134, 97, 64, 50, 221, 66, 199, 210, 226, 24, 91, 100, 4, 115, 153, 141, 195, 71, 79, 240, 155, 255, 231, 191, 226, 236, 217, 85, 50, 19, 219, 204, - 217, 38, 51, 185, 196, 68, 6, 17, 76, 92, 58, 103, 204, 59, 233, 184, 12, 169, 168, 170, 169, 170, 142, 141, 198, 99, 196, 55, 85, 21, 125, 223, - 19, 17, 68, 4, 198, 84, 137, 3, 7, 14, 241, 47, 14, 255, 54, 187, 119, 95, 201, 61, 247, 220, 193, 173, 183, 220, 204, 150, 173, 155, 232, 186, - 134, 44, 34, 18, 75, 252, 223, 213, 193, 91, 240, 231, 247, 125, 223, 245, 231, 235, 253, 254, 252, 254, 199, 213, 238, 234, 96, 157, 173, 147, 79, 137, - 92, 199, 78, 161, 101, 154, 50, 147, 146, 25, 66, 153, 41, 229, 152, 97, 114, 65, 153, 97, 166, 189, 229, 146, 43, 110, 24, 46, 152, 1, 238, 128, - 14, 195, 5, 164, 153, 0, 197, 197, 83, 26, 55, 208, 184, 57, 214, 137, 237, 38, 150, 101, 71, 138, 117, 176, 180, 90, 89, 210, 106, 87, 218, 243, - 254, 79, 191, 239, 231, 253, 126, 177, 63, 41, 10, 30, 198, 146, 108, 147, 148, 244, 241, 88, 92, 72, 194, 221, 72, 66, 136, 182, 185, 251, 206, 59, - 120, 226, 177, 135, 184, 117, 227, 58, 135, 7, 55, 184, 120, 233, 45, 118, 118, 246, 56, 123, 246, 12, 203, 178, 240, 224, 67, 31, 225, 95, 249, 233, - 191, 196, 103, 62, 253, 41, 238, 190, 231, 110, 70, 6, 221, 69, 100, 112, 245, 234, 77, 190, 244, 171, 191, 197, 235, 111, 92, 100, 123, 123, 133, 36, - 64, 72, 193, 200, 4, 9, 33, 108, 3, 166, 102, 177, 209, 110, 218, 6, 140, 221, 204, 57, 217, 144, 68, 85, 81, 85, 188, 39, 34, 216, 221, 219, - 5, 27, 99, 66, 201, 173, 131, 35, 254, 247, 191, 247, 69, 94, 120, 241, 28, 82, 34, 9, 73, 188, 199, 54, 146, 216, 176, 27, 155, 19, 211, 39, - 182, 121, 63, 131, 247, 113, 243, 230, 225, 209, 222, 222, 238, 69, 4, 53, 27, 108, 64, 68, 4, 153, 73, 85, 1, 162, 170, 145, 132, 109, 142, 79, - 78, 120, 241, 197, 115, 188, 248, 226, 75, 220, 117, 247, 157, 60, 242, 200, 195, 60, 246, 216, 35, 60, 112, 223, 125, 220, 121, 215, 89, 118, 118, 86, - 172, 198, 32, 51, 201, 76, 66, 162, 108, 108, 179, 26, 193, 103, 63, 251, 41, 62, 246, 177, 135, 249, 169, 191, 244, 19, 60, 255, 194, 139, 124, 243, - 155, 207, 241, 246, 229, 235, 220, 127, 255, 93, 252, 244, 79, 255, 11, 60, 252, 224, 253, 40, 205, 156, 107, 114, 236, 160, 16, 54, 60, 253, 141, 103, - 120, 243, 205, 75, 140, 76, 108, 147, 153, 72, 162, 187, 209, 106, 240, 46, 209, 221, 72, 65, 68, 96, 160, 187, 17, 208, 109, 48, 216, 38, 51, 233, - 158, 72, 98, 163, 187, 137, 16, 123, 123, 187, 236, 237, 238, 210, 109, 20, 226, 120, 61, 249, 194, 23, 126, 133, 175, 124, 245, 235, 68, 36, 27, 221, - 77, 68, 176, 33, 137, 119, 137, 238, 166, 91, 140, 49, 144, 132, 109, 222, 207, 224, 125, 60, 244, 209, 251, 234, 228, 120, 253, 90, 85, 209, 213, 68, - 6, 85, 133, 16, 32, 64, 188, 203, 128, 137, 16, 115, 26, 133, 168, 130, 75, 23, 223, 230, 194, 27, 151, 248, 234, 87, 190, 206, 246, 246, 54, 219, - 219, 43, 78, 157, 222, 231, 212, 222, 62, 35, 7, 247, 220, 115, 55, 255, 242, 95, 254, 139, 220, 255, 192, 71, 0, 179, 49, 107, 178, 44, 199, 236, - 238, 38, 31, 255, 216, 131, 156, 218, 31, 60, 243, 204, 243, 220, 243, 145, 59, 217, 221, 9, 14, 15, 111, 161, 16, 85, 133, 27, 132, 185, 114, 237, - 58, 223, 120, 250, 15, 88, 102, 177, 181, 21, 136, 160, 219, 128, 201, 4, 204, 109, 166, 170, 168, 106, 196, 109, 130, 174, 162, 13, 8, 20, 66, 36, - 217, 201, 156, 197, 156, 133, 109, 36, 145, 153, 116, 55, 119, 222, 121, 150, 221, 189, 29, 114, 12, 110, 221, 58, 228, 239, 125, 225, 87, 248, 245, 95, - 255, 50, 221, 38, 34, 216, 176, 205, 134, 36, 254, 31, 70, 18, 54, 216, 2, 2, 73, 188, 159, 193, 247, 241, 235, 191, 253, 59, 252, 107, 63, 251, - 51, 148, 253, 138, 219, 29, 82, 148, 27, 73, 84, 55, 85, 19, 219, 72, 65, 183, 177, 65, 10, 4, 184, 77, 42, 32, 204, 156, 19, 12, 135, 71, - 39, 220, 188, 117, 200, 197, 75, 87, 216, 168, 42, 108, 243, 135, 223, 126, 158, 159, 255, 249, 127, 155, 143, 127, 236, 81, 170, 38, 115, 46, 204, 229, - 132, 147, 245, 49, 235, 245, 154, 213, 74, 124, 226, 19, 15, 33, 193, 250, 228, 132, 145, 43, 150, 165, 56, 58, 58, 38, 115, 197, 214, 106, 197, 243, - 207, 189, 196, 197, 75, 111, 99, 139, 110, 19, 1, 2, 186, 27, 9, 102, 21, 18, 84, 21, 96, 64, 84, 53, 179, 138, 141, 170, 194, 109, 170, 10, - 219, 108, 100, 38, 85, 69, 119, 227, 110, 78, 214, 107, 238, 190, 231, 46, 118, 119, 118, 185, 116, 233, 10, 255, 219, 231, 255, 1, 95, 253, 218, 83, - 116, 155, 136, 192, 54, 17, 129, 36, 108, 99, 27, 73, 72, 2, 68, 102, 18, 145, 216, 148, 77, 217, 226, 253, 12, 222, 199, 178, 94, 48, 188, 92, - 85, 107, 208, 78, 117, 33, 5, 115, 46, 216, 166, 219, 216, 147, 170, 34, 36, 26, 48, 208, 93, 8, 49, 103, 97, 243, 142, 136, 160, 187, 145, 68, - 68, 176, 81, 85, 156, 123, 229, 85, 126, 225, 239, 252, 93, 254, 195, 191, 241, 239, 243, 177, 39, 62, 74, 119, 115, 116, 124, 204, 141, 27, 55, 185, - 114, 229, 42, 151, 47, 95, 225, 230, 205, 27, 44, 203, 100, 181, 218, 102, 103, 123, 155, 179, 103, 239, 228, 145, 71, 30, 225, 244, 233, 51, 28, 28, - 28, 243, 244, 55, 158, 97, 89, 79, 198, 24, 116, 21, 206, 32, 98, 133, 16, 99, 12, 220, 205, 106, 123, 11, 27, 214, 235, 53, 17, 73, 183, 17, - 194, 54, 115, 22, 182, 89, 150, 133, 238, 198, 54, 18, 239, 152, 115, 98, 155, 173, 213, 138, 71, 30, 125, 152, 103, 190, 253, 34, 159, 255, 252, 63, - 224, 197, 23, 207, 33, 9, 73, 216, 70, 18, 221, 77, 68, 16, 17, 116, 55, 146, 176, 141, 36, 170, 10, 41, 144, 116, 36, 233, 8, 204, 251, 73, - 222, 199, 195, 15, 63, 68, 119, 239, 68, 232, 231, 16, 119, 180, 193, 221, 84, 23, 93, 13, 24, 119, 99, 140, 13, 203, 178, 96, 27, 219, 216, 96, - 55, 118, 99, 131, 219, 84, 55, 182, 145, 132, 109, 108, 99, 224, 250, 245, 155, 188, 114, 254, 187, 60, 242, 200, 67, 220, 115, 207, 93, 172, 215, 199, - 92, 185, 114, 133, 215, 94, 191, 192, 133, 11, 111, 241, 246, 219, 215, 184, 121, 243, 144, 245, 201, 194, 206, 206, 54, 15, 61, 120, 63, 15, 63, 252, - 16, 251, 251, 167, 248, 218, 215, 158, 226, 235, 95, 255, 38, 153, 43, 114, 12, 144, 176, 27, 183, 81, 136, 136, 96, 35, 51, 177, 161, 170, 153, 115, - 34, 192, 54, 146, 152, 53, 169, 106, 16, 116, 155, 170, 162, 202, 84, 21, 221, 13, 8, 219, 68, 4, 191, 246, 143, 127, 139, 215, 95, 127, 147, 136, - 64, 18, 239, 145, 68, 68, 176, 33, 9, 219, 72, 34, 51, 201, 76, 192, 128, 136, 136, 55, 109, 255, 79, 146, 110, 28, 28, 28, 240, 253, 12, 62, - 64, 87, 95, 4, 93, 168, 238, 7, 187, 27, 219, 100, 14, 108, 179, 177, 120, 66, 55, 85, 133, 221, 216, 198, 54, 110, 35, 132, 16, 229, 162, 91, - 216, 102, 163, 187, 145, 132, 36, 82, 73, 35, 206, 157, 251, 46, 191, 240, 119, 62, 207, 127, 240, 55, 254, 61, 30, 126, 240, 35, 60, 248, 224, 3, - 108, 111, 111, 241, 224, 3, 247, 113, 116, 120, 4, 152, 221, 189, 93, 206, 158, 61, 195, 153, 59, 78, 179, 179, 189, 197, 235, 175, 95, 228, 119, 191, - 242, 251, 44, 179, 136, 48, 138, 193, 24, 131, 170, 66, 17, 108, 116, 155, 204, 192, 54, 221, 141, 109, 192, 180, 205, 70, 117, 19, 145, 40, 26, 181, - 144, 64, 18, 17, 98, 189, 94, 179, 209, 93, 172, 215, 39, 124, 235, 155, 207, 18, 17, 140, 49, 248, 94, 182, 177, 141, 36, 54, 108, 35, 137, 136, - 0, 68, 85, 49, 70, 16, 17, 216, 190, 105, 251, 150, 36, 222, 79, 242, 62, 62, 250, 208, 131, 92, 189, 118, 125, 189, 183, 191, 247, 87, 36, 253, - 57, 219, 96, 110, 51, 54, 116, 23, 115, 78, 34, 130, 238, 166, 170, 217, 48, 198, 24, 219, 216, 70, 10, 186, 141, 36, 222, 83, 85, 216, 102, 195, - 54, 182, 185, 126, 253, 38, 231, 206, 189, 202, 71, 31, 126, 136, 187, 238, 60, 139, 4, 91, 219, 43, 246, 246, 119, 216, 223, 223, 229, 212, 169, 83, - 236, 237, 237, 177, 187, 183, 207, 193, 193, 49, 191, 252, 203, 95, 226, 252, 171, 111, 144, 25, 216, 38, 35, 177, 205, 198, 106, 12, 54, 50, 147, 204, - 164, 187, 232, 54, 27, 17, 73, 85, 81, 53, 193, 80, 221, 116, 55, 179, 138, 170, 137, 36, 230, 44, 186, 155, 238, 166, 170, 144, 196, 24, 3, 73, - 116, 55, 27, 221, 205, 134, 36, 222, 35, 9, 73, 108, 72, 66, 2, 73, 68, 136, 49, 18, 41, 158, 94, 175, 215, 191, 152, 153, 125, 112, 112, 192, - 247, 147, 188, 143, 143, 126, 244, 33, 238, 187, 239, 94, 47, 203, 242, 99, 153, 227, 103, 170, 138, 57, 39, 221, 205, 70, 87, 211, 221, 216, 208, 221, - 216, 77, 85, 99, 155, 119, 24, 12, 216, 198, 136, 141, 170, 162, 187, 233, 110, 54, 108, 51, 231, 68, 18, 27, 87, 175, 222, 224, 249, 231, 191, 195, - 238, 222, 46, 31, 249, 200, 221, 172, 182, 86, 100, 14, 182, 183, 118, 216, 218, 222, 1, 39, 175, 191, 246, 22, 255, 215, 255, 249, 155, 60, 255, 252, - 75, 40, 196, 70, 230, 64, 33, 16, 140, 49, 104, 155, 80, 96, 67, 102, 130, 1, 1, 54, 221, 141, 219, 216, 166, 170, 17, 48, 171, 88, 47, 107, - 170, 154, 13, 155, 119, 84, 21, 221, 77, 102, 34, 9, 73, 108, 216, 70, 18, 182, 249, 94, 17, 129, 109, 36, 177, 33, 9, 73, 216, 38, 34, 1, - 125, 233, 210, 165, 75, 255, 112, 127, 127, 159, 131, 131, 3, 190, 159, 228, 125, 124, 247, 181, 215, 121, 224, 254, 251, 232, 246, 61, 171, 213, 248, 183, - 128, 49, 70, 82, 213, 204, 185, 176, 209, 213, 108, 216, 96, 155, 119, 25, 119, 99, 27, 187, 193, 6, 137, 110, 211, 221, 116, 55, 182, 121, 143, 109, - 54, 36, 1, 230, 224, 224, 144, 231, 158, 251, 14, 175, 189, 246, 38, 235, 165, 88, 102, 115, 229, 234, 77, 190, 243, 226, 119, 249, 202, 239, 126, 131, - 223, 253, 202, 239, 115, 249, 242, 85, 20, 65, 230, 224, 61, 54, 100, 4, 57, 6, 27, 145, 73, 68, 16, 18, 109, 35, 137, 57, 139, 234, 6, 137, - 147, 147, 53, 85, 147, 89, 69, 119, 209, 54, 32, 230, 156, 128, 88, 150, 133, 57, 39, 182, 89, 173, 86, 124, 175, 136, 192, 54, 146, 136, 8, 54, - 108, 179, 33, 137, 136, 96, 35, 66, 68, 136, 136, 96, 140, 193, 109, 191, 116, 230, 204, 153, 175, 85, 21, 7, 7, 7, 124, 63, 131, 15, 96, 27, - 219, 207, 117, 251, 114, 68, 62, 184, 44, 107, 34, 68, 102, 82, 85, 204, 57, 65, 98, 206, 194, 110, 54, 108, 110, 19, 118, 97, 155, 101, 78, 20, - 73, 85, 209, 221, 216, 70, 18, 182, 169, 42, 50, 147, 170, 162, 187, 217, 144, 130, 101, 22, 207, 254, 225, 119, 120, 238, 249, 151, 89, 173, 2, 41, - 49, 224, 134, 72, 145, 17, 68, 4, 138, 6, 195, 200, 32, 199, 0, 137, 170, 98, 181, 90, 33, 9, 219, 108, 68, 136, 245, 122, 193, 109, 170, 38, - 110, 35, 241, 142, 49, 6, 179, 38, 27, 221, 133, 109, 192, 72, 194, 54, 99, 12, 54, 50, 147, 238, 230, 61, 17, 193, 123, 36, 97, 155, 238, 102, - 140, 129, 109, 36, 33, 5, 182, 217, 144, 226, 150, 221, 223, 182, 205, 165, 75, 151, 120, 63, 131, 15, 48, 231, 194, 156, 245, 250, 24, 227, 249, 49, - 242, 193, 57, 11, 219, 8, 17, 10, 222, 147, 25, 204, 217, 72, 252, 49, 41, 80, 192, 24, 131, 101, 54, 146, 136, 8, 54, 108, 179, 209, 221, 68, - 4, 146, 88, 150, 197, 85, 245, 150, 237, 206, 204, 123, 51, 51, 186, 77, 21, 183, 53, 118, 147, 153, 96, 176, 141, 109, 236, 38, 35, 105, 55, 234, - 194, 134, 213, 24, 72, 162, 187, 193, 70, 219, 91, 128, 145, 192, 128, 20, 156, 44, 199, 8, 144, 68, 119, 131, 65, 10, 64, 216, 32, 129, 36, 108, - 19, 17, 108, 216, 70, 18, 182, 217, 144, 132, 109, 170, 138, 204, 68, 18, 146, 216, 136, 72, 192, 216, 77, 166, 0, 211, 61, 223, 236, 230, 5, 219, - 124, 144, 224, 3, 44, 179, 249, 115, 159, 254, 228, 141, 170, 249, 7, 85, 133, 221, 108, 204, 42, 102, 53, 57, 6, 82, 16, 145, 216, 166, 219, 108, - 216, 166, 186, 233, 110, 20, 129, 36, 108, 99, 27, 219, 116, 55, 203, 178, 176, 81, 85, 172, 215, 107, 159, 156, 156, 252, 175, 221, 253, 87, 151, 101, - 249, 217, 101, 89, 254, 251, 170, 90, 115, 219, 156, 69, 85, 209, 109, 54, 50, 131, 119, 216, 132, 18, 73, 108, 84, 53, 96, 12, 204, 101, 193, 54, - 17, 129, 36, 108, 35, 5, 237, 198, 110, 34, 130, 234, 102, 163, 186, 152, 85, 44, 75, 209, 13, 17, 201, 156, 147, 245, 122, 189, 72, 42, 254, 72, - 85, 97, 155, 13, 219, 116, 55, 182, 249, 127, 179, 161, 219, 216, 16, 17, 68, 4, 153, 201, 109, 79, 207, 89, 23, 108, 243, 65, 146, 15, 112, 225, - 194, 155, 156, 58, 117, 138, 110, 223, 3, 250, 55, 193, 17, 18, 27, 85, 141, 13, 221, 133, 128, 57, 11, 219, 116, 55, 118, 35, 9, 27, 108, 3, - 98, 195, 54, 203, 178, 176, 145, 153, 100, 38, 221, 205, 241, 241, 241, 83, 221, 253, 183, 186, 251, 57, 73, 151, 186, 251, 183, 129, 251, 199, 24, 127, - 62, 51, 177, 141, 13, 99, 36, 96, 36, 145, 99, 96, 192, 109, 16, 100, 36, 25, 129, 34, 64, 16, 17, 100, 36, 17, 65, 119, 99, 155, 245, 122, - 205, 198, 156, 147, 141, 170, 194, 109, 204, 134, 168, 42, 186, 155, 170, 98, 206, 249, 173, 204, 140, 219, 78, 69, 4, 146, 176, 205, 134, 36, 34, 130, - 13, 73, 108, 72, 66, 18, 27, 17, 66, 18, 99, 36, 153, 1, 8, 219, 127, 123, 140, 252, 202, 155, 111, 94, 228, 131, 4, 31, 98, 189, 94, 152, - 115, 126, 203, 246, 91, 99, 12, 218, 102, 206, 201, 134, 36, 164, 160, 109, 192, 108, 216, 141, 13, 221, 102, 195, 54, 115, 78, 108, 99, 155, 49, 6, - 146, 168, 42, 150, 101, 97, 89, 22, 108, 255, 221, 204, 60, 47, 9, 219, 68, 196, 205, 170, 250, 47, 215, 203, 250, 133, 170, 66, 18, 99, 36, 54, - 216, 220, 38, 36, 177, 97, 160, 102, 33, 137, 182, 169, 154, 116, 27, 12, 109, 51, 231, 100, 206, 73, 85, 147, 145, 116, 55, 17, 65, 102, 82, 213, - 28, 31, 31, 83, 213, 216, 166, 187, 169, 42, 186, 251, 0, 248, 98, 132, 150, 204, 68, 18, 153, 137, 36, 36, 33, 9, 219, 72, 34, 34, 200, 76, - 34, 130, 204, 100, 181, 74, 50, 69, 166, 200, 12, 64, 68, 196, 5, 219, 191, 93, 85, 124, 152, 224, 67, 216, 80, 213, 175, 116, 247, 75, 199, 71, - 199, 204, 57, 201, 28, 72, 66, 2, 219, 204, 57, 233, 54, 221, 77, 183, 233, 110, 186, 139, 170, 162, 187, 137, 16, 115, 78, 230, 156, 72, 194, 54, - 146, 216, 168, 170, 235, 192, 151, 185, 205, 54, 27, 22, 216, 126, 177, 170, 254, 143, 238, 102, 67, 18, 221, 13, 4, 82, 178, 94, 79, 92, 32, 5, - 17, 194, 54, 146, 48, 48, 198, 32, 50, 201, 76, 186, 155, 185, 20, 235, 245, 194, 122, 89, 232, 106, 220, 102, 206, 137, 109, 36, 192, 102, 206, 201, - 187, 68, 151, 191, 177, 202, 124, 54, 34, 238, 144, 196, 134, 109, 34, 130, 136, 32, 34, 144, 132, 109, 34, 130, 136, 32, 66, 216, 133, 4, 146, 200, - 12, 64, 100, 174, 144, 242, 203, 115, 214, 243, 32, 62, 76, 240, 33, 186, 155, 175, 63, 245, 244, 77, 219, 79, 101, 38, 182, 177, 77, 205, 133, 101, - 89, 176, 141, 36, 54, 236, 70, 18, 221, 141, 36, 54, 34, 196, 156, 133, 36, 36, 209, 221, 72, 66, 18, 182, 185, 237, 130, 237, 215, 248, 30, 174, - 102, 140, 97, 204, 175, 74, 58, 144, 196, 134, 36, 186, 155, 182, 17, 2, 9, 187, 81, 4, 237, 38, 51, 201, 76, 186, 155, 174, 162, 187, 168, 106, - 34, 19, 108, 186, 139, 182, 169, 46, 108, 112, 55, 182, 105, 55, 138, 96, 140, 193, 109, 221, 230, 239, 175, 86, 91, 91, 224, 59, 248, 35, 146, 120, - 143, 36, 34, 130, 204, 228, 93, 198, 54, 17, 137, 20, 72, 34, 34, 1, 35, 105, 13, 124, 97, 127, 255, 212, 73, 55, 31, 42, 248, 16, 221, 205, - 191, 244, 23, 255, 188, 171, 230, 87, 21, 90, 86, 171, 65, 8, 20, 129, 36, 170, 38, 27, 182, 145, 132, 109, 108, 99, 243, 142, 101, 153, 116, 55, - 27, 17, 129, 36, 36, 97, 27, 219, 84, 213, 53, 219, 87, 186, 155, 199, 31, 251, 24, 143, 63, 250, 24, 143, 63, 250, 152, 94, 125, 234, 89, 34, - 226, 5, 219, 175, 74, 66, 18, 146, 216, 112, 55, 10, 97, 55, 180, 145, 130, 136, 100, 206, 137, 219, 84, 21, 203, 156, 84, 53, 96, 186, 27, 219, - 140, 49, 176, 77, 119, 51, 231, 164, 109, 186, 77, 87, 51, 151, 133, 245, 122, 205, 178, 44, 47, 111, 111, 109, 125, 25, 241, 241, 188, 45, 66, 68, - 4, 153, 73, 102, 146, 153, 72, 66, 18, 239, 145, 32, 51, 136, 72, 108, 144, 68, 119, 3, 194, 237, 111, 206, 57, 127, 227, 228, 228, 132, 183, 222, - 186, 196, 135, 9, 62, 196, 55, 158, 254, 22, 115, 22, 115, 246, 83, 115, 214, 155, 110, 83, 221, 128, 144, 130, 136, 68, 18, 171, 213, 138, 213, 88, - 177, 33, 137, 170, 162, 187, 17, 16, 17, 116, 55, 221, 77, 119, 211, 221, 116, 55, 2, 36, 85, 68, 244, 103, 126, 236, 211, 82, 207, 196, 94, 185, - 123, 235, 167, 254, 218, 207, 238, 158, 57, 117, 199, 173, 174, 122, 163, 187, 145, 132, 109, 36, 17, 17, 72, 66, 1, 229, 166, 170, 232, 42, 150, 101, - 97, 35, 51, 201, 76, 192, 216, 102, 206, 201, 172, 162, 102, 97, 27, 219, 116, 155, 89, 141, 9, 20, 73, 102, 98, 27, 236, 95, 191, 99, 127, 239, - 138, 228, 79, 70, 4, 82, 176, 97, 155, 141, 170, 162, 187, 145, 68, 68, 32, 9, 16, 27, 146, 201, 12, 34, 2, 99, 66, 242, 106, 140, 207, 239, - 140, 173, 139, 221, 205, 15, 34, 248, 1, 116, 55, 115, 206, 87, 109, 255, 65, 85, 97, 155, 238, 194, 54, 153, 129, 109, 108, 83, 221, 100, 38, 99, - 12, 70, 38, 238, 34, 34, 136, 16, 27, 182, 217, 176, 141, 36, 102, 21, 6, 237, 239, 237, 143, 91, 7, 183, 182, 218, 222, 118, 247, 142, 237, 157, - 238, 222, 221, 222, 222, 201, 136, 184, 32, 137, 238, 102, 195, 54, 223, 43, 51, 8, 137, 141, 144, 216, 144, 32, 66, 116, 53, 85, 13, 54, 17, 193, - 172, 162, 187, 176, 65, 17, 100, 14, 108, 51, 231, 164, 187, 89, 150, 229, 237, 49, 198, 111, 218, 125, 151, 34, 158, 224, 29, 6, 76, 119, 19, 33, - 50, 19, 219, 188, 71, 18, 18, 68, 8, 73, 188, 103, 100, 146, 153, 207, 85, 213, 23, 14, 79, 142, 216, 223, 221, 231, 137, 199, 158, 224, 195, 4, - 63, 128, 111, 60, 253, 7, 236, 237, 237, 28, 86, 213, 111, 42, 2, 219, 116, 27, 48, 235, 245, 194, 156, 147, 238, 98, 206, 133, 8, 97, 155, 234, - 162, 219, 116, 55, 182, 145, 132, 36, 54, 36, 241, 14, 9, 68, 108, 175, 86, 59, 221, 181, 211, 221, 187, 213, 189, 219, 221, 123, 93, 189, 7, 236, - 72, 186, 213, 221, 116, 55, 221, 205, 70, 85, 81, 53, 89, 150, 53, 27, 145, 73, 132, 136, 8, 186, 138, 170, 166, 170, 49, 32, 137, 118, 51, 231, - 66, 119, 179, 94, 175, 169, 154, 184, 155, 238, 166, 187, 169, 42, 214, 235, 53, 182, 127, 127, 103, 103, 231, 181, 234, 122, 56, 20, 143, 100, 38, 153, - 34, 51, 136, 0, 27, 108, 147, 153, 100, 38, 153, 137, 36, 34, 2, 73, 72, 34, 34, 136, 8, 86, 171, 45, 219, 253, 63, 175, 74, 231, 239, 216, - 63, 21, 1, 162, 139, 39, 30, 125, 156, 15, 50, 248, 1, 29, 159, 172, 177, 249, 39, 171, 149, 46, 71, 232, 110, 48, 115, 153, 84, 21, 85, 69, - 132, 144, 196, 178, 76, 170, 154, 57, 27, 69, 96, 68, 119, 1, 98, 195, 54, 221, 205, 70, 132, 88, 229, 216, 157, 85, 103, 203, 190, 233, 246, 176, - 157, 224, 180, 73, 64, 183, 29, 75, 162, 187, 89, 173, 86, 100, 38, 153, 9, 152, 110, 211, 109, 186, 155, 28, 3, 100, 54, 50, 147, 57, 39, 153, - 65, 68, 224, 54, 203, 178, 96, 64, 145, 116, 23, 221, 147, 110, 19, 17, 116, 21, 174, 62, 92, 229, 248, 178, 32, 192, 159, 24, 35, 239, 228, 54, - 219, 128, 145, 2, 137, 219, 154, 136, 68, 130, 8, 209, 13, 18, 72, 16, 17, 68, 136, 140, 68, 248, 27, 224, 255, 101, 108, 15, 149, 59, 64, 213, - 10, 132, 249, 32, 193, 15, 168, 219, 204, 89, 207, 44, 203, 242, 251, 85, 69, 119, 211, 54, 146, 200, 76, 34, 130, 80, 80, 93, 40, 68, 102, 50, - 198, 138, 13, 41, 176, 141, 36, 36, 33, 9, 219, 140, 28, 8, 206, 84, 213, 71, 220, 222, 177, 123, 215, 238, 221, 238, 222, 107, 247, 94, 119, 239, - 131, 182, 184, 77, 18, 153, 137, 36, 36, 81, 213, 8, 8, 9, 108, 150, 101, 97, 206, 66, 18, 221, 133, 109, 164, 96, 89, 47, 84, 55, 146, 176, - 161, 187, 169, 106, 230, 44, 230, 156, 84, 21, 115, 22, 221, 253, 252, 214, 106, 245, 74, 87, 239, 71, 198, 147, 153, 177, 189, 90, 37, 138, 32, 51, - 200, 12, 34, 130, 213, 106, 69, 132, 176, 27, 219, 100, 6, 146, 200, 76, 36, 200, 72, 34, 226, 176, 187, 255, 219, 17, 171, 215, 203, 29, 128, 16, - 18, 230, 195, 4, 63, 160, 170, 102, 127, 119, 235, 86, 119, 253, 67, 80, 71, 4, 171, 213, 138, 213, 24, 216, 166, 187, 105, 27, 41, 248, 94, 82, - 96, 27, 219, 108, 216, 198, 54, 239, 177, 57, 235, 246, 125, 118, 111, 87, 247, 110, 117, 239, 181, 189, 219, 221, 123, 213, 181, 111, 247, 25, 73, 68, - 4, 221, 77, 85, 81, 85, 68, 4, 57, 6, 198, 68, 136, 238, 162, 187, 1, 97, 131, 36, 106, 78, 102, 21, 33, 17, 145, 96, 179, 44, 11, 27, - 17, 129, 109, 54, 236, 94, 34, 226, 107, 72, 13, 156, 14, 197, 143, 75, 65, 230, 64, 130, 136, 96, 140, 65, 102, 32, 37, 17, 65, 102, 34, 137, - 8, 145, 153, 68, 36, 82, 16, 17, 216, 254, 130, 237, 47, 74, 4, 32, 254, 152, 0, 241, 65, 130, 31, 208, 179, 207, 254, 33, 199, 39, 107, 230, - 236, 95, 5, 206, 71, 4, 221, 77, 219, 100, 38, 54, 116, 55, 35, 19, 119, 35, 65, 132, 176, 139, 136, 32, 34, 168, 42, 108, 19, 17, 68, 4, - 182, 81, 232, 84, 211, 31, 45, 123, 167, 187, 119, 186, 189, 227, 238, 93, 119, 239, 85, 213, 190, 225, 78, 254, 72, 119, 35, 9, 73, 216, 166, 187, - 9, 5, 17, 193, 214, 214, 54, 91, 91, 91, 68, 136, 174, 98, 46, 11, 85, 69, 102, 98, 160, 187, 104, 27, 27, 170, 76, 85, 97, 155, 170, 194, - 246, 43, 91, 91, 91, 47, 218, 30, 202, 184, 127, 107, 103, 247, 209, 49, 182, 168, 134, 49, 182, 128, 4, 68, 68, 18, 33, 34, 146, 136, 224, 93, - 98, 53, 6, 35, 147, 145, 137, 224, 235, 180, 255, 235, 85, 172, 14, 176, 184, 205, 128, 217, 144, 248, 48, 193, 15, 161, 38, 220, 188, 113, 244, 98, - 85, 255, 74, 119, 51, 231, 68, 130, 238, 6, 76, 102, 0, 70, 226, 29, 221, 69, 102, 242, 30, 73, 68, 4, 27, 17, 65, 102, 18, 17, 163, 237, - 143, 119, 247, 142, 237, 29, 187, 119, 186, 122, 183, 187, 119, 186, 123, 223, 246, 221, 220, 38, 137, 136, 192, 54, 182, 145, 32, 4, 146, 168, 42, 236, - 6, 76, 85, 35, 9, 99, 12, 116, 55, 203, 178, 80, 85, 132, 2, 27, 36, 97, 131, 36, 230, 156, 5, 122, 42, 34, 142, 5, 219, 33, 61, 250, - 137, 79, 124, 226, 236, 125, 247, 63, 192, 131, 15, 62, 196, 24, 43, 238, 191, 255, 126, 246, 246, 246, 57, 125, 250, 12, 99, 172, 200, 76, 36, 17, - 17, 100, 38, 182, 1, 3, 62, 95, 213, 255, 77, 106, 188, 37, 148, 2, 27, 12, 24, 227, 173, 154, 216, 205, 7, 9, 126, 8, 221, 197, 233, 51, - 123, 93, 85, 191, 4, 92, 138, 8, 36, 129, 141, 219, 72, 194, 230, 29, 153, 9, 136, 238, 166, 187, 137, 8, 50, 147, 238, 102, 195, 54, 27, 153, - 73, 102, 126, 188, 230, 220, 119, 123, 203, 221, 219, 118, 111, 219, 222, 110, 247, 105, 73, 119, 74, 98, 67, 18, 153, 137, 36, 36, 33, 5, 221, 69, - 85, 99, 67, 68, 16, 17, 40, 2, 33, 186, 139, 154, 147, 170, 194, 134, 101, 153, 72, 162, 187, 177, 77, 85, 97, 251, 149, 213, 106, 245, 135, 64, - 70, 228, 174, 164, 211, 23, 46, 92, 200, 245, 250, 132, 157, 157, 29, 246, 246, 246, 184, 247, 222, 123, 57, 125, 250, 52, 247, 222, 123, 47, 71, 71, - 71, 204, 89, 68, 4, 171, 213, 138, 13, 73, 220, 246, 70, 205, 250, 69, 183, 223, 104, 247, 221, 192, 54, 82, 27, 186, 81, 163, 240, 58, 146, 115, - 175, 158, 231, 131, 36, 63, 132, 183, 47, 95, 230, 238, 187, 239, 98, 89, 47, 23, 115, 228, 227, 17, 241, 47, 118, 155, 28, 3, 69, 128, 33, 199, - 96, 86, 209, 93, 8, 48, 70, 10, 34, 130, 170, 34, 51, 169, 42, 222, 35, 137, 238, 118, 72, 191, 43, 81, 109, 111, 217, 94, 25, 70, 117, 223, - 135, 248, 87, 51, 115, 63, 51, 137, 8, 34, 2, 219, 100, 36, 153, 66, 18, 146, 144, 4, 134, 145, 9, 18, 216, 116, 155, 165, 38, 27, 85, 69, - 119, 19, 145, 116, 55, 238, 166, 103, 45, 192, 151, 86, 171, 213, 75, 66, 139, 4, 15, 62, 248, 208, 195, 183, 110, 222, 252, 204, 193, 193, 173, 184, - 118, 245, 42, 115, 78, 46, 95, 190, 204, 209, 209, 17, 87, 174, 92, 225, 228, 228, 4, 73, 140, 28, 8, 17, 138, 217, 246, 183, 215, 235, 229, 239, - 183, 121, 46, 20, 7, 138, 184, 21, 210, 77, 164, 99, 164, 6, 219, 152, 115, 175, 190, 194, 135, 73, 126, 72, 111, 189, 125, 153, 251, 30, 184, 175, - 221, 253, 122, 100, 254, 213, 64, 103, 109, 35, 160, 221, 84, 53, 203, 156, 132, 4, 152, 110, 131, 2, 219, 84, 21, 17, 129, 109, 186, 155, 204, 68, - 18, 85, 165, 219, 126, 39, 34, 14, 128, 149, 97, 24, 71, 187, 31, 31, 99, 252, 149, 213, 106, 53, 248, 35, 146, 144, 68, 102, 48, 198, 32, 51, - 145, 68, 68, 144, 17, 84, 55, 118, 83, 213, 72, 208, 109, 140, 233, 110, 218, 208, 109, 170, 138, 185, 44, 244, 236, 231, 182, 183, 183, 127, 45, 20, - 7, 130, 67, 164, 163, 204, 188, 188, 179, 189, 115, 243, 240, 224, 224, 12, 104, 107, 189, 94, 198, 178, 172, 181, 172, 23, 186, 155, 237, 237, 109, 86, - 171, 213, 146, 138, 91, 192, 185, 154, 243, 55, 150, 245, 252, 146, 164, 239, 100, 230, 91, 25, 113, 49, 35, 222, 82, 196, 117, 41, 22, 103, 88, 136, - 147, 48, 55, 175, 93, 231, 195, 12, 126, 4, 181, 76, 94, 120, 245, 252, 211, 79, 62, 241, 196, 223, 150, 244, 159, 27, 143, 57, 39, 109, 211, 110, - 50, 147, 141, 42, 131, 68, 40, 176, 77, 102, 82, 85, 100, 38, 221, 141, 109, 50, 19, 73, 219, 221, 125, 150, 228, 117, 64, 108, 152, 141, 135, 35, - 98, 123, 206, 73, 102, 18, 17, 100, 38, 146, 0, 209, 54, 33, 80, 4, 182, 81, 8, 170, 153, 101, 36, 81, 221, 44, 115, 98, 55, 221, 141, 20, - 72, 98, 163, 171, 15, 50, 243, 183, 71, 142, 171, 224, 35, 224, 8, 116, 120, 237, 234, 181, 183, 35, 116, 126, 172, 86, 95, 202, 200, 143, 2, 119, - 67, 110, 129, 19, 36, 33, 187, 250, 96, 218, 111, 185, 251, 34, 112, 101, 172, 198, 141, 80, 92, 85, 232, 74, 70, 92, 27, 210, 65, 75, 19, 133, - 163, 154, 151, 206, 159, 227, 7, 53, 248, 17, 92, 60, 127, 157, 79, 61, 246, 168, 151, 101, 249, 31, 86, 57, 254, 66, 142, 252, 119, 157, 1, 221, - 156, 172, 139, 8, 209, 221, 128, 200, 8, 20, 193, 178, 76, 108, 19, 17, 116, 55, 146, 136, 8, 186, 27, 73, 43, 236, 125, 65, 27, 10, 16, 144, - 146, 30, 1, 97, 55, 221, 77, 102, 82, 53, 137, 8, 198, 24, 96, 19, 49, 232, 46, 50, 18, 73, 68, 36, 166, 153, 115, 97, 89, 22, 54, 164, - 100, 195, 134, 101, 89, 179, 44, 11, 22, 95, 219, 217, 217, 121, 86, 161, 67, 208, 33, 112, 8, 28, 73, 58, 1, 234, 182, 55, 187, 251, 91, 66, - 72, 10, 133, 36, 48, 182, 5, 51, 34, 22, 101, 158, 32, 29, 11, 142, 20, 113, 28, 210, 90, 168, 44, 250, 47, 124, 234, 113, 254, 233, 115, 47, - 115, 238, 252, 43, 252, 48, 6, 63, 130, 123, 238, 63, 69, 157, 52, 63, 243, 115, 159, 188, 242, 91, 95, 120, 225, 63, 149, 185, 127, 53, 198, 95, - 70, 77, 196, 130, 0, 41, 16, 5, 18, 115, 22, 27, 146, 168, 42, 108, 19, 17, 140, 49, 144, 68, 85, 33, 41, 35, 2, 119, 79, 192, 183, 157, - 150, 244, 88, 102, 0, 38, 51, 129, 166, 187, 145, 192, 110, 148, 3, 48, 93, 197, 136, 100, 86, 209, 109, 186, 155, 101, 153, 44, 203, 66, 230, 138, - 136, 64, 50, 39, 39, 199, 44, 203, 66, 85, 189, 188, 183, 187, 247, 143, 34, 227, 26, 112, 44, 233, 16, 56, 4, 142, 129, 69, 82, 73, 154, 192, - 20, 154, 10, 77, 161, 10, 81, 146, 166, 164, 10, 152, 72, 37, 169, 128, 146, 84, 141, 220, 96, 117, 243, 181, 239, 92, 224, 149, 243, 175, 240, 195, - 74, 126, 4, 119, 157, 189, 19, 4, 231, 158, 125, 59, 14, 15, 214, 151, 35, 245, 117, 227, 79, 43, 244, 104, 68, 48, 171, 168, 154, 72, 65, 87, - 113, 199, 233, 51, 156, 57, 115, 134, 101, 89, 120, 228, 145, 71, 56, 58, 58, 226, 201, 39, 159, 228, 214, 173, 91, 252, 228, 79, 254, 36, 175, 191, - 254, 250, 113, 70, 252, 222, 24, 227, 138, 224, 4, 180, 238, 238, 79, 41, 227, 95, 143, 136, 149, 36, 50, 69, 102, 32, 137, 136, 32, 51, 16, 2, - 243, 142, 145, 131, 101, 153, 156, 172, 79, 0, 1, 166, 219, 204, 217, 204, 57, 145, 68, 119, 179, 44, 203, 173, 213, 106, 245, 75, 123, 187, 123, 207, - 6, 28, 41, 226, 86, 72, 7, 146, 14, 37, 29, 41, 98, 29, 138, 147, 144, 214, 82, 172, 35, 99, 137, 136, 69, 210, 58, 165, 69, 210, 18, 210, - 130, 52, 37, 77, 80, 129, 74, 33, 55, 197, 208, 224, 165, 243, 231, 184, 118, 245, 109, 126, 20, 131, 31, 153, 48, 246, 246, 206, 86, 156, 28, 215, - 51, 217, 245, 55, 35, 243, 63, 137, 204, 159, 3, 157, 18, 1, 134, 136, 100, 119, 119, 135, 199, 31, 127, 130, 91, 183, 110, 241, 227, 63, 254, 227, - 92, 186, 116, 137, 123, 239, 189, 151, 87, 207, 191, 202, 197, 55, 47, 50, 114, 220, 112, 247, 137, 164, 221, 200, 60, 176, 122, 161, 253, 185, 204, 177, - 27, 25, 224, 102, 140, 164, 170, 217, 144, 132, 13, 166, 129, 96, 140, 21, 179, 138, 200, 96, 197, 138, 170, 70, 10, 164, 192, 158, 116, 55, 182, 153, - 203, 82, 17, 241, 197, 83, 251, 251, 191, 19, 210, 145, 164, 35, 208, 145, 196, 17, 112, 2, 44, 66, 133, 84, 18, 133, 84, 192, 148, 212, 130, 146, - 84, 130, 66, 42, 65, 11, 25, 201, 220, 246, 157, 87, 206, 241, 39, 33, 249, 17, 156, 61, 123, 39, 33, 129, 4, 88, 10, 228, 230, 234, 156, 253, - 27, 93, 253, 124, 40, 238, 207, 200, 7, 164, 72, 110, 59, 58, 58, 164, 170, 185, 124, 249, 45, 230, 156, 92, 187, 118, 157, 27, 55, 110, 112, 116, - 120, 200, 229, 203, 151, 233, 234, 175, 142, 49, 158, 202, 136, 107, 146, 174, 172, 151, 245, 67, 18, 127, 51, 51, 239, 16, 38, 115, 176, 97, 131, 36, - 198, 72, 4, 140, 145, 116, 55, 182, 89, 150, 133, 89, 147, 238, 166, 219, 204, 89, 84, 21, 27, 221, 205, 122, 189, 118, 119, 255, 218, 233, 253, 83, - 191, 176, 26, 227, 154, 20, 7, 146, 110, 69, 198, 129, 164, 195, 144, 142, 36, 173, 35, 98, 157, 210, 146, 17, 235, 144, 214, 138, 152, 33, 45, 138, - 88, 80, 76, 164, 137, 212, 142, 52, 136, 151, 206, 159, 227, 202, 245, 107, 252, 73, 17, 63, 162, 187, 31, 122, 132, 51, 41, 12, 132, 20, 216, 1, - 72, 110, 150, 246, 67, 109, 255, 27, 134, 127, 39, 34, 126, 114, 246, 114, 186, 27, 173, 215, 39, 236, 238, 238, 114, 120, 116, 140, 128, 174, 238, 154, - 243, 247, 182, 183, 183, 127, 97, 123, 107, 251, 21, 227, 43, 93, 117, 180, 244, 252, 143, 87, 171, 213, 127, 180, 94, 175, 137, 8, 50, 19, 73, 128, - 217, 216, 218, 218, 194, 110, 50, 130, 110, 35, 137, 234, 102, 89, 22, 192, 84, 65, 119, 179, 81, 85, 156, 156, 156, 208, 221, 191, 115, 199, 254, 169, - 255, 106, 119, 119, 247, 2, 102, 65, 58, 150, 56, 1, 142, 5, 107, 73, 19, 104, 65, 133, 212, 64, 73, 106, 67, 11, 44, 100, 11, 115, 219, 75, - 231, 95, 225, 79, 139, 248, 255, 224, 241, 199, 158, 32, 49, 141, 144, 91, 216, 97, 8, 1, 182, 115, 153, 243, 158, 118, 127, 118, 186, 127, 234, 228, - 100, 253, 185, 49, 242, 225, 101, 153, 187, 64, 217, 190, 132, 249, 202, 222, 238, 238, 63, 94, 141, 241, 166, 205, 9, 176, 92, 189, 118, 245, 161, 159, - 248, 236, 79, 252, 143, 171, 173, 173, 79, 188, 250, 234, 121, 50, 147, 155, 55, 111, 145, 25, 116, 23, 146, 216, 222, 222, 38, 34, 16, 198, 134, 182, - 89, 150, 133, 170, 162, 170, 17, 162, 109, 132, 56, 62, 62, 242, 178, 204, 47, 239, 237, 237, 253, 23, 167, 246, 247, 95, 5, 166, 96, 45, 233, 4, - 233, 4, 88, 11, 166, 160, 5, 109, 169, 3, 89, 162, 185, 173, 52, 124, 237, 244, 3, 156, 190, 117, 137, 243, 47, 63, 207, 159, 54, 241, 39, 224, - 137, 71, 31, 167, 99, 69, 244, 130, 109, 9, 75, 16, 186, 109, 100, 82, 85, 99, 233, 222, 61, 62, 57, 57, 211, 213, 123, 17, 234, 49, 198, 173, - 213, 106, 117, 212, 221, 216, 14, 131, 70, 68, 95, 186, 114, 249, 167, 158, 120, 226, 137, 95, 60, 60, 60, 188, 227, 51, 159, 249, 12, 111, 188, 241, - 6, 27, 103, 207, 158, 229, 249, 231, 159, 231, 129, 7, 30, 224, 245, 215, 95, 35, 51, 176, 77, 85, 97, 155, 57, 155, 170, 162, 230, 36, 16, 182, - 89, 230, 156, 213, 245, 155, 251, 123, 251, 255, 221, 254, 222, 222, 183, 109, 31, 2, 235, 148, 22, 96, 45, 105, 1, 38, 96, 192, 128, 21, 233, 188, - 126, 139, 186, 243, 14, 190, 243, 242, 75, 252, 179, 54, 248, 19, 240, 242, 249, 115, 108, 124, 252, 177, 199, 177, 100, 57, 12, 182, 49, 235, 57, 5, - 56, 165, 121, 199, 222, 222, 77, 221, 102, 59, 170, 42, 220, 173, 128, 64, 82, 131, 70, 142, 14, 233, 198, 133, 11, 23, 214, 146, 184, 120, 241, 34, - 175, 190, 250, 42, 79, 62, 249, 36, 111, 189, 245, 22, 103, 206, 156, 225, 190, 251, 238, 227, 141, 55, 94, 163, 170, 144, 68, 119, 211, 93, 128, 136, - 8, 10, 49, 171, 152, 115, 94, 147, 244, 143, 78, 157, 186, 227, 151, 183, 183, 182, 222, 182, 221, 33, 221, 2, 142, 145, 166, 208, 148, 100, 41, 124, - 112, 120, 145, 83, 251, 15, 240, 194, 185, 23, 249, 99, 87, 47, 241, 255, 7, 241, 167, 232, 241, 71, 159, 224, 93, 6, 91, 41, 176, 45, 144, 192, - 226, 93, 178, 45, 64, 25, 193, 213, 27, 55, 118, 151, 154, 255, 153, 34, 254, 214, 169, 253, 253, 237, 131, 195, 67, 30, 120, 224, 1, 174, 95, 191, - 206, 238, 238, 46, 25, 201, 193, 225, 45, 186, 139, 238, 166, 109, 220, 13, 4, 85, 197, 92, 150, 195, 174, 126, 118, 140, 241, 27, 219, 219, 219, 223, - 202, 204, 75, 145, 121, 41, 35, 46, 14, 233, 42, 104, 177, 228, 163, 213, 142, 199, 92, 243, 221, 87, 94, 226, 207, 18, 241, 207, 208, 39, 31, 255, - 56, 118, 19, 26, 204, 94, 99, 54, 36, 113, 155, 13, 152, 207, 253, 216, 147, 254, 39, 95, 255, 189, 59, 142, 79, 78, 254, 58, 240, 243, 57, 198, - 231, 20, 186, 43, 51, 119, 186, 91, 171, 28, 108, 111, 111, 179, 94, 214, 172, 151, 5, 139, 118, 247, 81, 47, 117, 177, 219, 207, 103, 196, 211, 171, - 213, 234, 133, 28, 249, 86, 68, 92, 141, 136, 203, 17, 113, 57, 34, 174, 167, 98, 145, 18, 187, 121, 233, 252, 203, 252, 89, 36, 254, 140, 250, 220, - 103, 63, 199, 119, 95, 251, 238, 30, 240, 216, 241, 241, 241, 39, 247, 246, 246, 158, 152, 203, 124, 48, 35, 246, 70, 142, 81, 93, 89, 221, 199, 118, - 95, 150, 116, 33, 35, 223, 204, 204, 43, 17, 113, 32, 116, 168, 208, 77, 73, 183, 34, 226, 48, 164, 117, 219, 30, 17, 188, 116, 254, 21, 254, 44, - 19, 255, 28, 240, 23, 223, 64, 127, 237, 65, 62, 251, 233, 207, 228, 181, 27, 215, 87, 115, 206, 40, 125, 211, 16, 0, 0, 0, 35, 73, 68, 65, - 84, 149, 164, 204, 8, 133, 132, 13, 22, 190, 173, 132, 22, 133, 166, 164, 186, 251, 158, 143, 248, 248, 248, 136, 103, 158, 125, 134, 127, 94, 252, 223, - 160, 16, 125, 12, 251, 15, 241, 139, 0, 0, 0, 0, 73, 69, 78, 68, 174, 66, 96, 130]) - -let testJpg = new Uint8Array([255, 216, 255, 224, 0, 16, 74, 70, 73, 70, 0, 1, 1, 1, 0, 96, 0, 96, 0, 0, 255, 219, 0, 67, 0, 2, 1, 1, 2, 1, 1, 2, - 2, 2, 2, 2, 2, 2, 2, 3, 5, 3, 3, 3, 3, 3, 6, 4, 4, 3, 5, 7, 6, 7, 7, 7, 6, 7, 7, 8, 9, 11, 9, 8, - 8, 10, 8, 7, 7, 10, 13, 10, 10, 11, 12, 12, 12, 12, 7, 9, 14, 15, 13, 12, 14, 11, 12, 12, 12, 255, 219, 0, 67, 1, 2, 2, - 2, 3, 3, 3, 6, 3, 3, 6, 12, 8, 7, 8, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, - 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 255, 192, - 0, 17, 8, 0, 226, 1, 216, 3, 1, 34, 0, 2, 17, 1, 3, 17, 1, 255, 196, 0, 31, 0, 0, 1, 5, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 255, 196, 0, 181, 16, 0, 2, 1, 3, 3, 2, 4, 3, 5, - 5, 4, 4, 0, 0, 1, 125, 1, 2, 3, 0, 4, 17, 5, 18, 33, 49, 65, 6, 19, 81, 97, 7, 34, 113, 20, 50, 129, 145, 161, 8, 35, - 66, 177, 193, 21, 82, 209, 240, 36, 51, 98, 114, 130, 9, 10, 22, 23, 24, 25, 26, 37, 38, 39, 40, 41, 42, 52, 53, 54, 55, 56, 57, 58, - 67, 68, 69, 70, 71, 72, 73, 74, 83, 84, 85, 86, 87, 88, 89, 90, 99, 100, 101, 102, 103, 104, 105, 106, 115, 116, 117, 118, 119, 120, 121, 122, - 131, 132, 133, 134, 135, 136, 137, 138, 146, 147, 148, 149, 150, 151, 152, 153, 154, 162, 163, 164, 165, 166, 167, 168, 169, 170, 178, 179, 180, 181, 182, 183, - 184, 185, 186, 194, 195, 196, 197, 198, 199, 200, 201, 202, 210, 211, 212, 213, 214, 215, 216, 217, 218, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 241, - 242, 243, 244, 245, 246, 247, 248, 249, 250, 255, 196, 0, 31, 1, 0, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 1, - 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 255, 196, 0, 181, 17, 0, 2, 1, 2, 4, 4, 3, 4, 7, 5, 4, 4, 0, 1, 2, 119, 0, - 1, 2, 3, 17, 4, 5, 33, 49, 6, 18, 65, 81, 7, 97, 113, 19, 34, 50, 129, 8, 20, 66, 145, 161, 177, 193, 9, 35, 51, 82, 240, 21, - 98, 114, 209, 10, 22, 36, 52, 225, 37, 241, 23, 24, 25, 26, 38, 39, 40, 41, 42, 53, 54, 55, 56, 57, 58, 67, 68, 69, 70, 71, 72, 73, - 74, 83, 84, 85, 86, 87, 88, 89, 90, 99, 100, 101, 102, 103, 104, 105, 106, 115, 116, 117, 118, 119, 120, 121, 122, 130, 131, 132, 133, 134, 135, 136, - 137, 138, 146, 147, 148, 149, 150, 151, 152, 153, 154, 162, 163, 164, 165, 166, 167, 168, 169, 170, 178, 179, 180, 181, 182, 183, 184, 185, 186, 194, 195, 196, - 197, 198, 199, 200, 201, 202, 210, 211, 212, 213, 214, 215, 216, 217, 218, 226, 227, 228, 229, 230, 231, 232, 233, 234, 242, 243, 244, 245, 246, 247, 248, 249, - 250, 255, 218, 0, 12, 3, 1, 0, 2, 17, 3, 17, 0, 63, 0, 253, 16, 162, 138, 43, 252, 99, 63, 170, 2, 138, 40, 160, 2, 138, 40, 160, - 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, - 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, - 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, - 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, - 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, - 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, - 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, - 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, - 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, - 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, - 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, - 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, - 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, - 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, - 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, - 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, - 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, - 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, - 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, - 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, - 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, - 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, - 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, - 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, - 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, - 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, - 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, - 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, - 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, - 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, - 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, - 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, - 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, - 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, - 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, - 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, - 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, - 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, - 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, - 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, - 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, - 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, - 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, - 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, - 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, - 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, - 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, - 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, - 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, - 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, - 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, - 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, - 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, - 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, - 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, - 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 15, 255, 217]) - +/* + * Copyright (C) 2022 Huawei Device Co., Ltd. + * 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. + */ + +let testPng = new Uint8Array([137, 80, 78, 71, 13, 10, 26, 10, 0, 0, 0, 13, 73, 72, 68, 82, 0, 0, 0, 100, 0, 0, 0, 100, 8, 6, 0, 0, 0, 112, 226, 149, + 84, 0, 0, 32, 0, 73, 68, 65, 84, 120, 1, 212, 193, 123, 176, 231, 247, 93, 223, 247, 231, 251, 253, 249, 254, 126, 231, 156, 61, 123, 191, 105, + 37, 173, 180, 186, 95, 173, 187, 228, 43, 166, 182, 133, 109, 44, 108, 160, 6, 154, 105, 157, 116, 104, 50, 64, 72, 155, 41, 195, 64, 167, 13, 80, + 218, 73, 166, 76, 254, 104, 254, 104, 167, 51, 253, 39, 51, 45, 52, 77, 161, 36, 29, 19, 2, 24, 98, 140, 28, 91, 24, 91, 150, 44, 164, 213, + 93, 187, 146, 86, 123, 95, 237, 253, 156, 243, 251, 253, 190, 223, 247, 235, 213, 253, 237, 34, 220, 106, 86, 182, 105, 160, 99, 30, 143, 224, 175, 177, + 31, 251, 145, 31, 102, 101, 109, 133, 133, 241, 194, 174, 42, 253, 224, 108, 54, 123, 100, 24, 250, 235, 135, 161, 178, 239, 251, 67, 17, 241, 149, 42, + 253, 238, 100, 50, 121, 178, 117, 76, 207, 31, 221, 194, 243, 7, 30, 229, 187, 89, 240, 215, 212, 15, 253, 208, 167, 24, 47, 108, 98, 186, 118, 242, + 253, 165, 250, 135, 150, 62, 176, 178, 178, 186, 208, 247, 61, 146, 232, 103, 61, 173, 235, 4, 62, 106, 243, 175, 165, 250, 159, 108, 61, 149, 153, 126, + 252, 235, 79, 241, 221, 42, 248, 107, 232, 83, 159, 252, 126, 90, 27, 1, 250, 158, 217, 172, 255, 167, 171, 107, 43, 183, 204, 102, 61, 179, 233, 140, + 201, 100, 66, 149, 176, 4, 1, 173, 53, 70, 163, 17, 173, 181, 87, 128, 255, 102, 54, 27, 254, 143, 214, 114, 248, 198, 83, 79, 243, 221, 168, 241, + 215, 208, 237, 183, 221, 66, 102, 94, 93, 195, 240, 63, 207, 102, 211, 251, 214, 86, 39, 172, 156, 91, 101, 101, 117, 194, 249, 149, 53, 250, 97, 96, + 50, 157, 113, 254, 252, 10, 67, 153, 201, 116, 74, 149, 182, 70, 196, 71, 50, 242, 108, 102, 62, 177, 107, 231, 14, 31, 57, 122, 140, 239, 54, 141, + 191, 160, 237, 91, 55, 51, 30, 141, 216, 182, 109, 235, 120, 211, 198, 13, 235, 150, 214, 45, 141, 186, 46, 180, 113, 227, 6, 175, 174, 174, 241, 87, + 237, 83, 159, 122, 132, 79, 127, 252, 251, 121, 97, 223, 190, 191, 63, 235, 251, 31, 95, 91, 155, 196, 233, 211, 167, 89, 93, 153, 176, 54, 153, 48, + 212, 192, 80, 66, 18, 85, 98, 54, 155, 49, 157, 78, 137, 8, 76, 44, 142, 70, 221, 123, 35, 120, 153, 244, 179, 87, 238, 216, 195, 145, 99, 135, + 248, 110, 210, 241, 29, 186, 239, 190, 123, 233, 103, 253, 226, 120, 220, 30, 176, 253, 48, 196, 93, 147, 201, 100, 199, 80, 53, 93, 92, 92, 124, 117, + 109, 109, 237, 209, 141, 27, 55, 254, 193, 245, 215, 95, 127, 124, 239, 222, 189, 12, 195, 192, 95, 133, 8, 248, 151, 127, 240, 185, 235, 134, 161, 255, + 143, 38, 147, 181, 56, 123, 246, 12, 179, 217, 140, 201, 108, 74, 169, 232, 135, 129, 140, 4, 155, 204, 100, 174, 170, 88, 93, 93, 69, 18, 227, 81, + 183, 117, 97, 60, 254, 197, 136, 120, 146, 54, 125, 133, 239, 50, 29, 223, 198, 189, 247, 220, 197, 179, 207, 189, 196, 226, 194, 232, 254, 229, 117, 139, + 63, 11, 60, 50, 244, 195, 150, 217, 48, 208, 186, 14, 19, 100, 22, 227, 241, 194, 143, 75, 254, 234, 139, 47, 190, 248, 143, 134, 97, 248, 131, 204, + 212, 5, 252, 101, 75, 155, 176, 63, 58, 153, 206, 110, 155, 76, 166, 172, 172, 174, 49, 153, 206, 24, 134, 1, 99, 144, 113, 136, 204, 196, 54, 153, + 201, 92, 85, 49, 157, 78, 89, 89, 93, 163, 181, 188, 167, 139, 246, 31, 63, 249, 141, 39, 126, 249, 129, 251, 31, 224, 137, 39, 159, 230, 187, 69, + 242, 45, 188, 255, 125, 239, 37, 91, 151, 239, 125, 207, 253, 63, 178, 180, 180, 244, 235, 227, 209, 232, 51, 150, 183, 204, 102, 51, 214, 214, 86, 89, + 91, 155, 176, 178, 178, 198, 116, 58, 163, 239, 135, 113, 149, 190, 39, 34, 254, 151, 174, 235, 62, 35, 41, 248, 75, 246, 233, 79, 125, 146, 197, 241, + 186, 5, 75, 223, 95, 67, 181, 233, 116, 202, 116, 50, 101, 24, 6, 108, 97, 153, 214, 26, 17, 193, 91, 108, 51, 215, 90, 35, 34, 152, 205, 102, + 72, 34, 51, 31, 121, 224, 254, 7, 183, 65, 240, 221, 164, 227, 29, 124, 240, 131, 239, 103, 113, 221, 152, 209, 180, 251, 248, 226, 120, 252, 63, 88, + 190, 106, 101, 117, 149, 181, 181, 53, 86, 86, 87, 153, 245, 51, 250, 190, 152, 78, 103, 72, 98, 24, 6, 134, 97, 32, 34, 118, 117, 93, 247, 43, + 85, 117, 40, 51, 63, 95, 85, 252, 165, 137, 160, 52, 236, 138, 200, 123, 38, 211, 9, 125, 223, 51, 87, 85, 64, 144, 25, 204, 69, 4, 146, 200, + 76, 230, 36, 49, 55, 12, 3, 17, 48, 12, 3, 195, 208, 174, 109, 173, 93, 11, 188, 201, 119, 145, 142, 119, 176, 184, 48, 198, 131, 239, 88, 183, + 184, 244, 143, 9, 174, 90, 89, 91, 97, 50, 153, 178, 58, 153, 50, 157, 245, 204, 102, 61, 85, 98, 78, 18, 195, 48, 48, 23, 17, 116, 93, 119, + 181, 164, 95, 152, 205, 102, 79, 3, 199, 184, 140, 255, 226, 231, 126, 158, 151, 95, 126, 153, 135, 191, 239, 225, 118, 195, 13, 215, 143, 55, 109, 222, + 180, 28, 17, 203, 4, 75, 24, 108, 97, 27, 75, 171, 42, 77, 215, 38, 107, 43, 215, 93, 119, 195, 228, 23, 254, 193, 127, 185, 222, 25, 155, 185, + 96, 54, 155, 209, 15, 3, 85, 34, 51, 177, 185, 40, 34, 152, 179, 205, 219, 169, 68, 63, 155, 49, 30, 143, 151, 34, 189, 17, 155, 239, 38, 29, + 151, 241, 177, 143, 62, 76, 223, 15, 227, 117, 235, 22, 255, 243, 209, 168, 187, 107, 229, 252, 10, 125, 223, 51, 157, 245, 12, 67, 49, 157, 245, 244, + 179, 30, 219, 204, 101, 38, 173, 53, 102, 179, 25, 17, 65, 215, 117, 116, 93, 247, 189, 125, 223, 255, 141, 241, 120, 252, 63, 78, 167, 83, 126, 255, + 115, 191, 203, 71, 63, 246, 253, 60, 250, 232, 23, 214, 173, 91, 183, 124, 205, 194, 120, 124, 71, 55, 234, 238, 24, 141, 186, 155, 33, 174, 109, 45, + 183, 69, 198, 186, 140, 88, 144, 205, 156, 36, 106, 24, 214, 84, 53, 147, 106, 165, 239, 215, 142, 255, 237, 191, 243, 183, 103, 191, 246, 107, 255, 219, + 50, 113, 2, 8, 44, 19, 209, 184, 28, 219, 188, 197, 54, 195, 48, 48, 26, 141, 48, 38, 34, 107, 227, 198, 205, 62, 124, 248, 48, 255, 221, 63, + 250, 21, 254, 193, 47, 254, 87, 124, 55, 232, 120, 155, 77, 159, 249, 40, 221, 73, 104, 109, 116, 111, 215, 181, 31, 150, 204, 116, 54, 99, 58, 157, + 49, 155, 205, 152, 205, 102, 212, 48, 80, 85, 100, 38, 85, 69, 85, 49, 215, 90, 35, 51, 145, 68, 187, 228, 111, 76, 167, 211, 127, 246, 244, 51, + 79, 158, 95, 89, 89, 187, 243, 217, 103, 159, 126, 248, 154, 107, 118, 127, 100, 52, 30, 223, 213, 117, 221, 14, 240, 66, 107, 13, 73, 16, 96, 155, + 0, 100, 19, 128, 36, 172, 17, 86, 97, 25, 89, 220, 112, 195, 117, 220, 121, 231, 237, 28, 56, 112, 128, 204, 36, 91, 226, 161, 199, 134, 136, 96, + 46, 34, 136, 8, 36, 17, 17, 100, 38, 146, 200, 76, 50, 131, 42, 113, 197, 21, 59, 151, 127, 241, 151, 126, 241, 31, 110, 221, 182, 245, 137, 243, + 231, 206, 125, 227, 87, 255, 215, 127, 122, 240, 153, 167, 159, 62, 182, 119, 239, 222, 67, 207, 61, 255, 210, 217, 67, 135, 143, 206, 214, 173, 91, 226, + 228, 201, 147, 252, 255, 169, 227, 109, 62, 112, 2, 214, 111, 88, 100, 50, 233, 63, 156, 25, 59, 167, 211, 158, 97, 24, 24, 134, 1, 169, 24, 106, + 192, 54, 17, 129, 109, 170, 10, 73, 216, 166, 181, 70, 102, 98, 67, 102, 50, 26, 141, 238, 254, 91, 127, 235, 51, 127, 127, 58, 153, 221, 186, 121, + 243, 166, 143, 108, 216, 176, 113, 231, 120, 52, 138, 11, 32, 192, 54, 24, 162, 5, 146, 136, 72, 230, 194, 5, 1, 68, 16, 145, 68, 66, 89, 96, + 179, 176, 176, 192, 35, 143, 124, 130, 190, 239, 249, 220, 231, 254, 128, 51, 103, 206, 48, 244, 61, 217, 26, 93, 215, 17, 17, 216, 102, 46, 34, 152, + 155, 205, 102, 84, 21, 17, 1, 4, 216, 220, 127, 255, 125, 163, 235, 174, 223, 243, 189, 182, 190, 119, 221, 226, 130, 55, 172, 95, 158, 94, 123, 237, + 53, 167, 239, 190, 231, 174, 35, 251, 247, 237, 123, 229, 200, 161, 67, 207, 156, 59, 119, 246, 107, 131, 227, 233, 126, 82, 135, 178, 197, 240, 235, 191, + 249, 47, 249, 171, 214, 120, 155, 219, 111, 185, 153, 67, 175, 29, 203, 205, 91, 55, 252, 116, 73, 119, 77, 38, 83, 38, 147, 9, 147, 201, 132, 201, + 108, 74, 85, 81, 37, 170, 138, 97, 24, 136, 8, 50, 147, 185, 136, 192, 54, 182, 129, 196, 214, 194, 35, 143, 124, 226, 131, 119, 222, 121, 199, 221, + 235, 214, 173, 91, 191, 110, 105, 41, 50, 27, 115, 153, 73, 70, 227, 146, 32, 35, 9, 130, 224, 146, 8, 200, 76, 8, 192, 129, 205, 69, 182, 88, + 183, 110, 29, 119, 220, 113, 7, 119, 221, 117, 23, 235, 215, 47, 115, 228, 240, 97, 222, 60, 121, 18, 201, 64, 48, 103, 27, 73, 84, 21, 146, 176, + 77, 102, 178, 48, 30, 179, 107, 215, 21, 252, 196, 79, 254, 36, 187, 174, 184, 2, 213, 64, 215, 90, 100, 102, 183, 254, 130, 43, 175, 188, 114, 215, + 158, 61, 187, 239, 216, 182, 125, 219, 135, 218, 104, 244, 239, 163, 250, 161, 104, 220, 23, 65, 222, 114, 203, 205, 39, 206, 157, 247, 234, 67, 15, 220, + 195, 254, 253, 251, 249, 171, 208, 120, 155, 219, 110, 185, 153, 174, 235, 218, 120, 113, 244, 119, 74, 190, 233, 252, 202, 10, 147, 201, 148, 201, 116, 194, + 116, 58, 101, 58, 235, 25, 250, 1, 73, 84, 21, 182, 153, 147, 132, 109, 34, 130, 204, 96, 46, 51, 248, 208, 135, 62, 148, 55, 223, 124, 51, 219, + 182, 109, 103, 52, 26, 17, 17, 68, 64, 102, 99, 46, 34, 200, 76, 34, 32, 51, 177, 77, 107, 13, 99, 36, 147, 145, 32, 99, 204, 92, 4, 23, + 101, 6, 59, 118, 236, 224, 190, 251, 238, 225, 193, 119, 63, 200, 116, 54, 227, 229, 151, 94, 102, 50, 153, 50, 30, 143, 176, 77, 85, 81, 85, 84, + 21, 153, 73, 215, 53, 150, 151, 215, 241, 31, 252, 216, 143, 242, 177, 143, 125, 148, 57, 169, 192, 198, 54, 17, 129, 44, 70, 227, 17, 59, 118, 238, + 224, 154, 107, 174, 25, 109, 221, 190, 117, 219, 116, 50, 185, 119, 229, 252, 202, 15, 73, 254, 200, 85, 87, 109, 95, 159, 45, 14, 62, 255, 252, 139, + 103, 127, 247, 243, 191, 207, 193, 215, 223, 224, 47, 83, 227, 109, 110, 186, 233, 6, 206, 158, 95, 99, 105, 221, 248, 135, 250, 26, 238, 152, 78, 167, + 172, 173, 173, 49, 157, 205, 232, 251, 129, 201, 100, 74, 13, 133, 109, 108, 83, 85, 204, 117, 221, 136, 136, 96, 110, 54, 155, 97, 155, 135, 30, 122, + 128, 31, 251, 177, 31, 229, 166, 155, 110, 98, 97, 97, 76, 102, 35, 51, 201, 76, 32, 120, 75, 102, 146, 25, 204, 101, 6, 178, 201, 76, 46, 49, + 17, 1, 17, 68, 4, 17, 129, 109, 36, 33, 21, 17, 176, 109, 251, 22, 222, 253, 238, 7, 185, 118, 247, 110, 94, 124, 241, 69, 78, 157, 58, 141, + 109, 50, 19, 12, 17, 65, 215, 53, 70, 163, 17, 215, 93, 183, 135, 159, 248, 201, 159, 96, 231, 206, 157, 72, 133, 106, 160, 170, 176, 141, 109, 140, + 177, 133, 100, 108, 179, 101, 235, 22, 246, 92, 183, 135, 133, 165, 133, 238, 244, 169, 83, 187, 39, 147, 181, 143, 102, 196, 71, 126, 253, 127, 255, 103, + 53, 38, 247, 221, 117, 231, 237, 147, 231, 94, 124, 137, 191, 44, 141, 183, 185, 241, 198, 235, 89, 191, 97, 209, 67, 213, 13, 195, 48, 124, 223, 100, + 50, 101, 232, 7, 166, 179, 25, 211, 217, 12, 201, 88, 38, 51, 105, 173, 33, 137, 136, 96, 52, 26, 33, 153, 190, 239, 217, 180, 105, 19, 63, 250, + 163, 159, 230, 231, 126, 238, 103, 185, 251, 238, 187, 89, 88, 24, 3, 65, 4, 23, 101, 38, 17, 129, 109, 34, 130, 8, 200, 108, 92, 18, 68, 4, + 16, 16, 92, 18, 16, 17, 68, 38, 193, 5, 22, 223, 148, 168, 68, 215, 37, 183, 220, 122, 51, 119, 220, 126, 27, 123, 247, 62, 203, 177, 99, 199, + 200, 72, 90, 235, 232, 90, 99, 52, 234, 88, 90, 28, 211, 247, 61, 207, 61, 247, 28, 235, 55, 172, 103, 215, 174, 157, 180, 214, 144, 196, 156, 36, + 164, 66, 22, 82, 17, 128, 109, 90, 107, 236, 220, 185, 157, 171, 174, 186, 138, 243, 231, 207, 230, 233, 211, 167, 174, 12, 226, 227, 209, 229, 157, 147, + 89, 191, 111, 251, 142, 157, 135, 111, 191, 237, 86, 246, 237, 219, 207, 191, 171, 198, 219, 188, 252, 202, 62, 174, 191, 238, 58, 192, 107, 54, 159, 236, + 251, 217, 198, 217, 108, 198, 80, 133, 36, 230, 84, 98, 206, 54, 153, 73, 102, 50, 153, 76, 168, 42, 62, 240, 129, 247, 243, 203, 191, 252, 75, 252, + 248, 143, 255, 56, 187, 119, 95, 67, 102, 0, 65, 107, 73, 102, 35, 34, 152, 203, 12, 50, 147, 204, 4, 76, 68, 2, 6, 2, 219, 68, 4, 17, + 96, 155, 57, 27, 108, 17, 4, 145, 129, 101, 8, 136, 224, 34, 203, 216, 102, 215, 174, 157, 220, 118, 199, 109, 28, 56, 112, 128, 55, 79, 158, 100, + 212, 37, 59, 118, 108, 227, 193, 135, 238, 103, 195, 134, 245, 156, 58, 117, 134, 55, 222, 56, 200, 151, 191, 252, 37, 206, 157, 59, 207, 205, 183, 220, + 194, 242, 242, 50, 150, 152, 179, 5, 97, 36, 3, 193, 220, 48, 244, 68, 152, 165, 229, 101, 174, 187, 126, 15, 37, 113, 232, 240, 209, 110, 24, 234, + 182, 136, 252, 216, 104, 212, 206, 175, 77, 39, 207, 222, 120, 227, 245, 195, 171, 251, 95, 227, 223, 69, 227, 50, 174, 191, 238, 90, 52, 232, 168, 131, + 205, 217, 242, 123, 134, 126, 136, 42, 49, 155, 206, 232, 135, 162, 159, 13, 204, 101, 38, 146, 153, 78, 39, 44, 175, 95, 230, 239, 254, 244, 79, 241, + 75, 191, 244, 11, 220, 123, 223, 189, 116, 221, 136, 136, 32, 51, 128, 36, 179, 49, 23, 17, 100, 38, 54, 68, 4, 151, 4, 223, 20, 68, 4, 23, + 5, 216, 38, 34, 137, 224, 162, 0, 36, 1, 6, 2, 219, 72, 194, 6, 35, 170, 6, 182, 111, 223, 202, 189, 247, 222, 195, 174, 93, 59, 185, 250, + 170, 43, 121, 224, 129, 123, 185, 247, 190, 187, 216, 115, 221, 53, 28, 120, 253, 0, 231, 206, 157, 103, 214, 207, 120, 234, 169, 63, 101, 255, 171, 175, + 114, 251, 109, 183, 178, 188, 188, 76, 213, 128, 109, 36, 17, 201, 69, 85, 69, 85, 1, 102, 168, 129, 214, 117, 92, 117, 213, 46, 22, 23, 23, 56, + 240, 218, 27, 244, 125, 191, 57, 91, 126, 95, 215, 229, 122, 13, 122, 252, 198, 27, 175, 155, 236, 219, 255, 26, 255, 95, 53, 46, 99, 223, 254, 215, + 216, 189, 231, 106, 151, 244, 188, 237, 123, 250, 126, 184, 81, 85, 24, 51, 244, 3, 17, 65, 107, 141, 214, 26, 125, 223, 179, 105, 211, 70, 254, 235, + 95, 250, 69, 126, 234, 167, 126, 130, 141, 27, 54, 98, 65, 68, 16, 193, 5, 65, 102, 71, 68, 2, 65, 68, 146, 217, 128, 32, 34, 137, 72, 90, + 235, 136, 8, 230, 34, 2, 219, 204, 5, 193, 156, 13, 216, 4, 193, 156, 13, 118, 96, 23, 150, 33, 184, 32, 48, 34, 2, 108, 179, 97, 253, 50, + 183, 220, 114, 51, 123, 246, 92, 67, 235, 26, 163, 81, 199, 246, 237, 219, 216, 178, 121, 51, 47, 60, 255, 34, 253, 48, 96, 155, 125, 175, 236, 231, + 165, 23, 95, 226, 214, 91, 111, 101, 243, 150, 77, 88, 96, 27, 169, 144, 10, 187, 176, 141, 109, 176, 177, 12, 152, 93, 187, 174, 96, 113, 105, 145, + 87, 247, 191, 74, 223, 207, 70, 153, 249, 158, 204, 184, 186, 134, 225, 177, 155, 111, 190, 126, 101, 180, 48, 226, 196, 137, 147, 252, 69, 53, 222, 193, + 85, 187, 175, 68, 131, 206, 75, 250, 211, 174, 181, 251, 193, 87, 151, 69, 16, 64, 96, 155, 217, 108, 198, 194, 194, 152, 159, 255, 249, 159, 227, 111, + 254, 205, 207, 48, 26, 143, 136, 8, 34, 130, 136, 32, 51, 137, 8, 50, 27, 17, 65, 68, 144, 153, 68, 4, 153, 73, 102, 18, 17, 204, 69, 152, + 136, 224, 45, 17, 65, 68, 96, 131, 45, 140, 177, 141, 101, 100, 17, 17, 128, 145, 69, 68, 32, 9, 171, 176, 141, 109, 108, 99, 139, 165, 165, 37, + 54, 108, 88, 79, 102, 208, 90, 227, 202, 171, 174, 224, 220, 249, 243, 188, 254, 218, 27, 68, 36, 115, 7, 15, 30, 228, 197, 23, 95, 226, 206, 119, + 189, 139, 205, 155, 55, 33, 9, 91, 84, 21, 17, 193, 91, 36, 35, 21, 115, 182, 216, 177, 99, 59, 75, 75, 75, 188, 252, 242, 126, 250, 126, 200, + 150, 121, 87, 100, 187, 106, 58, 12, 95, 218, 184, 97, 227, 234, 171, 251, 95, 227, 47, 170, 241, 14, 222, 56, 112, 144, 173, 155, 183, 48, 30, 181, + 163, 150, 190, 38, 124, 147, 97, 79, 215, 186, 28, 134, 129, 217, 108, 198, 250, 245, 235, 249, 217, 159, 253, 25, 62, 243, 153, 255, 144, 209, 104, 4, + 17, 180, 76, 50, 147, 204, 36, 34, 200, 12, 32, 153, 203, 76, 34, 130, 136, 32, 51, 137, 8, 222, 98, 155, 75, 204, 156, 109, 108, 115, 73, 96, + 155, 136, 192, 54, 115, 17, 96, 27, 8, 230, 108, 48, 38, 194, 72, 102, 24, 10, 48, 96, 90, 107, 44, 45, 45, 50, 30, 143, 24, 47, 140, 217, + 190, 109, 59, 207, 62, 251, 60, 103, 207, 157, 7, 76, 68, 114, 232, 208, 97, 14, 29, 60, 200, 61, 247, 220, 205, 242, 242, 50, 182, 136, 48, 182, + 168, 26, 176, 141, 109, 36, 17, 17, 216, 98, 110, 231, 206, 157, 200, 197, 171, 251, 95, 165, 74, 145, 173, 189, 43, 35, 54, 206, 166, 179, 71, 175, + 191, 110, 207, 236, 181, 215, 14, 240, 23, 209, 248, 22, 142, 30, 59, 198, 198, 13, 203, 196, 168, 29, 173, 97, 248, 125, 219, 71, 183, 108, 218, 116, + 237, 21, 59, 119, 236, 184, 249, 230, 155, 248, 233, 191, 247, 119, 249, 244, 143, 124, 154, 241, 194, 136, 204, 32, 72, 34, 130, 204, 36, 34, 136, 8, + 50, 147, 204, 36, 34, 137, 8, 34, 130, 204, 36, 34, 176, 77, 68, 96, 27, 155, 11, 2, 169, 0, 19, 145, 128, 177, 185, 36, 192, 64, 96, 34, + 130, 32, 144, 10, 108, 100, 35, 21, 198, 204, 73, 5, 24, 16, 54, 23, 24, 48, 182, 176, 204, 250, 245, 203, 156, 61, 115, 150, 23, 94, 120, 9, + 99, 48, 100, 118, 28, 56, 112, 144, 147, 39, 79, 241, 192, 253, 247, 50, 26, 53, 108, 83, 85, 216, 2, 2, 73, 100, 114, 145, 36, 108, 176, 205, + 206, 157, 59, 56, 117, 242, 36, 135, 14, 29, 37, 35, 35, 91, 222, 29, 48, 153, 76, 214, 30, 187, 238, 186, 61, 126, 253, 192, 27, 124, 167, 26, + 223, 198, 241, 19, 39, 57, 124, 232, 40, 191, 250, 107, 191, 186, 242, 145, 143, 124, 100, 239, 39, 63, 249, 3, 31, 249, 129, 71, 30, 185, 229, 147, + 159, 250, 36, 119, 190, 235, 93, 100, 75, 178, 53, 130, 32, 35, 200, 76, 230, 34, 160, 181, 198, 92, 102, 146, 153, 180, 214, 176, 77, 68, 48, 23, + 17, 204, 73, 34, 34, 184, 196, 68, 128, 109, 222, 34, 21, 127, 78, 198, 128, 45, 100, 97, 132, 108, 2, 144, 4, 8, 201, 128, 1, 99, 131, 84, + 72, 66, 18, 17, 73, 68, 176, 113, 211, 70, 158, 123, 246, 121, 206, 159, 95, 37, 162, 17, 17, 24, 216, 191, 111, 63, 227, 209, 136, 119, 189, 235, + 14, 108, 99, 11, 219, 204, 217, 194, 54, 182, 128, 192, 22, 96, 50, 147, 29, 59, 182, 179, 111, 223, 126, 206, 157, 59, 79, 16, 173, 107, 237, 222, + 214, 186, 231, 118, 108, 223, 250, 194, 166, 205, 155, 121, 227, 141, 131, 124, 39, 146, 239, 208, 149, 87, 94, 193, 246, 237, 91, 127, 96, 215, 174, 157, + 31, 222, 185, 115, 7, 203, 203, 235, 80, 21, 216, 96, 46, 138, 72, 164, 194, 54, 115, 182, 153, 139, 72, 34, 130, 203, 145, 68, 102, 146, 153, 128, + 153, 139, 8, 254, 159, 108, 176, 13, 54, 68, 32, 9, 73, 24, 227, 8, 8, 254, 156, 36, 34, 130, 136, 196, 54, 182, 0, 19, 1, 17, 9, 24, + 73, 92, 113, 197, 14, 238, 124, 215, 237, 100, 54, 90, 107, 216, 38, 35, 176, 204, 111, 252, 250, 191, 224, 241, 175, 61, 65, 132, 145, 140, 36, 36, + 1, 129, 109, 108, 83, 85, 216, 198, 54, 132, 216, 177, 115, 27, 239, 123, 223, 131, 216, 102, 24, 122, 100, 109, 203, 204, 255, 246, 232, 241, 55, 111, + 24, 143, 70, 124, 167, 26, 223, 129, 47, 252, 225, 239, 115, 246, 244, 233, 77, 155, 55, 111, 254, 149, 165, 165, 117, 183, 102, 36, 68, 210, 90, 66, + 4, 217, 146, 140, 196, 230, 162, 214, 146, 136, 192, 134, 204, 36, 34, 176, 33, 34, 136, 8, 50, 147, 214, 26, 182, 249, 127, 51, 118, 17, 145, 216, + 6, 204, 156, 36, 108, 17, 128, 36, 28, 38, 8, 176, 40, 21, 24, 44, 35, 21, 145, 96, 11, 169, 144, 138, 57, 219, 84, 21, 182, 144, 140, 100, + 2, 51, 234, 70, 60, 245, 141, 167, 233, 251, 129, 42, 97, 27, 34, 56, 191, 178, 202, 225, 35, 135, 121, 240, 161, 7, 88, 94, 183, 12, 24, 169, + 176, 69, 4, 84, 137, 170, 1, 219, 72, 2, 11, 89, 108, 218, 188, 145, 67, 7, 143, 112, 236, 232, 9, 32, 232, 186, 182, 43, 35, 125, 246, 236, + 217, 63, 188, 238, 218, 107, 244, 198, 193, 67, 124, 59, 141, 111, 227, 119, 126, 251, 179, 108, 218, 180, 145, 174, 235, 62, 182, 126, 253, 250, 159, 233, + 90, 55, 142, 76, 8, 46, 138, 8, 34, 147, 136, 4, 67, 215, 117, 68, 4, 16, 180, 214, 0, 19, 209, 200, 76, 34, 130, 185, 136, 192, 54, 115, + 182, 121, 139, 109, 108, 51, 103, 27, 73, 204, 217, 134, 0, 89, 4, 1, 6, 169, 48, 198, 50, 82, 17, 128, 45, 108, 99, 27, 73, 128, 145, 140, + 36, 108, 99, 11, 219, 204, 73, 197, 186, 165, 37, 94, 122, 121, 31, 39, 142, 191, 73, 73, 188, 37, 51, 56, 116, 232, 48, 155, 54, 109, 228, 206, + 59, 111, 71, 18, 182, 144, 4, 4, 96, 230, 108, 99, 155, 108, 129, 84, 140, 186, 17, 93, 55, 226, 249, 231, 95, 64, 50, 153, 73, 102, 222, 212, + 186, 246, 39, 227, 241, 248, 213, 173, 219, 182, 112, 248, 240, 81, 190, 149, 228, 219, 24, 141, 70, 124, 245, 79, 30, 111, 11, 11, 11, 63, 220, 186, + 92, 150, 141, 100, 34, 146, 204, 4, 2, 149, 80, 21, 17, 96, 27, 219, 68, 112, 129, 137, 72, 108, 97, 27, 73, 204, 217, 70, 18, 182, 105, 173, + 49, 103, 155, 185, 204, 64, 18, 96, 50, 147, 185, 214, 26, 173, 37, 115, 146, 192, 64, 4, 24, 146, 32, 34, 33, 76, 68, 128, 3, 27, 34, 130, + 136, 0, 140, 13, 17, 193, 55, 153, 185, 165, 165, 69, 110, 187, 245, 102, 50, 147, 204, 68, 18, 96, 108, 3, 201, 231, 126, 239, 243, 28, 58, 120, + 24, 48, 182, 153, 147, 10, 219, 68, 4, 111, 145, 140, 13, 170, 226, 198, 27, 246, 176, 123, 247, 213, 244, 179, 25, 179, 217, 20, 169, 182, 183, 214, + 254, 211, 217, 172, 95, 94, 90, 90, 226, 219, 73, 190, 141, 108, 112, 219, 237, 55, 95, 51, 234, 186, 15, 102, 36, 17, 144, 105, 112, 97, 27, 91, + 24, 51, 103, 155, 8, 136, 0, 27, 36, 3, 198, 22, 118, 97, 23, 146, 176, 141, 36, 108, 83, 85, 84, 21, 85, 3, 32, 108, 176, 141, 109, 108, + 19, 1, 146, 80, 153, 57, 89, 148, 197, 69, 6, 99, 176, 145, 140, 109, 34, 32, 2, 108, 115, 73, 16, 17, 216, 38, 34, 176, 141, 84, 128, 32, + 204, 77, 55, 94, 199, 104, 220, 97, 23, 173, 5, 17, 92, 96, 198, 227, 17, 111, 28, 56, 200, 23, 190, 240, 40, 96, 36, 243, 150, 170, 162, 74, + 24, 99, 138, 26, 122, 40, 225, 18, 227, 81, 227, 93, 119, 220, 138, 129, 26, 196, 48, 12, 4, 254, 104, 102, 124, 111, 215, 26, 223, 78, 242, 109, + 44, 45, 45, 49, 30, 47, 220, 215, 186, 182, 199, 54, 182, 144, 132, 44, 170, 6, 108, 131, 65, 18, 85, 66, 50, 16, 188, 165, 74, 84, 21, 85, + 133, 109, 164, 162, 170, 136, 224, 2, 35, 21, 182, 200, 12, 192, 216, 102, 174, 74, 216, 66, 50, 85, 3, 165, 66, 50, 153, 137, 45, 84, 194, 54, + 182, 145, 4, 2, 99, 74, 133, 36, 230, 170, 4, 4, 17, 96, 27, 201, 216, 226, 45, 42, 177, 243, 138, 237, 92, 121, 229, 14, 50, 131, 136, 0, + 76, 102, 163, 181, 198, 220, 163, 143, 126, 137, 19, 39, 78, 146, 13, 36, 33, 137, 136, 192, 22, 150, 176, 5, 54, 17, 65, 112, 201, 245, 55, 92, + 203, 134, 245, 203, 76, 166, 19, 250, 126, 64, 210, 198, 204, 248, 204, 217, 243, 231, 199, 239, 126, 207, 3, 124, 43, 201, 183, 240, 220, 115, 207, 114, + 195, 13, 123, 232, 186, 238, 193, 136, 24, 219, 198, 54, 146, 176, 77, 68, 18, 17, 128, 201, 76, 50, 19, 91, 72, 162, 170, 152, 139, 128, 214, 146, + 136, 96, 206, 22, 32, 134, 161, 167, 170, 7, 132, 45, 164, 66, 50, 182, 137, 8, 50, 131, 136, 224, 146, 32, 34, 136, 0, 3, 153, 13, 2, 108, + 33, 137, 57, 99, 108, 99, 155, 57, 219, 216, 70, 18, 182, 153, 179, 69, 68, 48, 103, 153, 185, 229, 229, 37, 174, 185, 230, 106, 108, 211, 90, 3, + 130, 57, 73, 116, 221, 136, 3, 175, 31, 228, 79, 159, 122, 6, 219, 72, 162, 170, 168, 42, 170, 10, 219, 216, 252, 185, 136, 192, 18, 155, 55, 109, + 228, 202, 171, 175, 96, 24, 6, 134, 97, 96, 24, 138, 11, 30, 94, 88, 24, 223, 213, 90, 227, 91, 73, 190, 133, 87, 246, 189, 196, 231, 191, 240, + 229, 133, 209, 104, 116, 71, 102, 98, 155, 32, 136, 8, 144, 209, 48, 96, 153, 32, 176, 133, 93, 12, 53, 96, 139, 57, 73, 204, 217, 6, 140, 109, + 34, 2, 91, 72, 66, 18, 54, 68, 4, 182, 145, 10, 91, 72, 194, 6, 219, 216, 34, 18, 108, 99, 131, 101, 84, 3, 168, 176, 184, 32, 176, 193, + 22, 96, 230, 108, 144, 4, 24, 16, 146, 1, 51, 103, 27, 99, 108, 131, 69, 6, 92, 187, 251, 106, 70, 93, 135, 109, 90, 107, 204, 217, 6, 204, + 172, 31, 248, 202, 87, 191, 206, 172, 47, 36, 17, 17, 72, 34, 49, 137, 73, 192, 50, 150, 40, 137, 185, 214, 53, 174, 189, 230, 106, 230, 170, 68, + 213, 128, 228, 93, 45, 242, 145, 43, 175, 220, 193, 67, 15, 222, 207, 59, 73, 190, 5, 73, 44, 173, 91, 220, 16, 25, 187, 249, 51, 178, 176, 141, + 13, 198, 204, 73, 194, 54, 102, 206, 148, 6, 108, 35, 137, 97, 24, 24, 134, 162, 170, 144, 132, 84, 216, 96, 27, 201, 216, 194, 54, 146, 145, 140, + 100, 108, 35, 139, 170, 66, 18, 85, 3, 82, 97, 11, 108, 2, 19, 54, 145, 208, 50, 1, 99, 132, 109, 108, 3, 193, 156, 205, 159, 49, 54, 23, + 25, 3, 102, 78, 42, 84, 3, 187, 118, 237, 100, 121, 121, 153, 136, 32, 2, 50, 147, 136, 128, 8, 34, 147, 103, 159, 125, 158, 147, 39, 79, 49, + 103, 131, 109, 192, 96, 99, 137, 136, 192, 64, 4, 216, 66, 42, 118, 94, 177, 157, 174, 107, 12, 195, 192, 48, 20, 82, 113, 193, 199, 95, 127, 245, + 208, 102, 219, 188, 147, 228, 91, 24, 141, 58, 22, 198, 11, 75, 192, 14, 219, 216, 198, 50, 146, 176, 133, 109, 36, 97, 27, 12, 182, 49, 96, 115, + 129, 137, 8, 170, 132, 109, 36, 3, 198, 6, 169, 136, 8, 108, 51, 12, 133, 36, 164, 34, 2, 108, 35, 23, 118, 225, 48, 229, 226, 146, 192, 54, + 210, 192, 225, 195, 135, 120, 230, 153, 167, 121, 225, 133, 231, 57, 118, 252, 24, 114, 145, 17, 216, 66, 42, 108, 17, 1, 17, 32, 25, 73, 72, 133, + 109, 130, 96, 206, 24, 12, 178, 217, 188, 121, 35, 203, 203, 75, 64, 0, 65, 107, 141, 214, 26, 151, 152, 227, 199, 79, 240, 250, 107, 175, 147, 153, + 72, 194, 54, 16, 148, 132, 13, 182, 177, 4, 4, 82, 97, 196, 230, 45, 155, 88, 92, 92, 64, 85, 84, 13, 12, 195, 128, 237, 59, 51, 243, 142, + 204, 224, 157, 116, 124, 11, 163, 174, 195, 242, 250, 8, 22, 165, 129, 200, 14, 34, 176, 205, 156, 109, 170, 6, 130, 70, 89, 180, 174, 35, 72, 44, + 81, 12, 200, 34, 34, 176, 141, 109, 34, 184, 32, 201, 12, 170, 10, 201, 204, 101, 6, 146, 1, 35, 9, 219, 148, 138, 136, 196, 18, 24, 130, 11, + 100, 158, 254, 198, 55, 248, 173, 223, 254, 44, 71, 14, 31, 165, 4, 91, 54, 109, 230, 246, 59, 110, 229, 193, 135, 30, 228, 202, 171, 174, 36, 34, + 168, 42, 36, 81, 85, 128, 1, 243, 22, 169, 168, 42, 108, 99, 140, 37, 70, 227, 17, 155, 54, 111, 228, 240, 145, 227, 16, 102, 46, 34, 136, 8, + 34, 146, 26, 6, 246, 237, 123, 141, 123, 239, 126, 23, 184, 8, 11, 243, 103, 108, 50, 130, 146, 168, 42, 48, 80, 98, 121, 105, 137, 197, 165, 5, + 78, 159, 62, 75, 14, 73, 215, 4, 205, 155, 51, 121, 223, 194, 194, 226, 99, 239, 126, 232, 94, 190, 250, 181, 111, 240, 118, 29, 239, 224, 7, 30, + 249, 56, 88, 188, 242, 202, 43, 55, 222, 183, 241, 238, 245, 94, 24, 97, 11, 57, 104, 36, 146, 201, 228, 2, 33, 65, 107, 13, 11, 8, 99, 12, + 134, 48, 36, 137, 84, 68, 4, 32, 106, 16, 163, 241, 8, 2, 108, 17, 17, 92, 20, 70, 26, 144, 141, 109, 108, 3, 6, 131, 74, 204, 157, 124, + 243, 77, 126, 231, 119, 254, 53, 127, 250, 212, 94, 206, 157, 95, 101, 24, 6, 146, 198, 222, 103, 159, 227, 235, 143, 127, 157, 135, 31, 254, 48, 247, + 63, 120, 31, 163, 241, 2, 146, 177, 3, 91, 216, 102, 78, 18, 54, 216, 198, 18, 150, 49, 166, 181, 198, 120, 60, 38, 2, 186, 236, 152, 14, 61, + 115, 54, 100, 38, 195, 96, 94, 123, 245, 0, 53, 244, 128, 1, 19, 17, 72, 166, 170, 104, 173, 97, 46, 176, 177, 141, 92, 68, 4, 75, 139, 11, + 84, 137, 42, 161, 18, 170, 66, 248, 125, 199, 79, 188, 185, 48, 234, 186, 41, 151, 209, 241, 14, 178, 5, 63, 253, 247, 254, 179, 117, 63, 242, 233, + 31, 254, 79, 238, 190, 231, 206, 101, 73, 100, 38, 216, 24, 131, 133, 20, 68, 4, 151, 4, 32, 108, 209, 90, 67, 18, 9, 84, 152, 32, 56, 115, + 234, 20, 79, 61, 249, 4, 47, 189, 242, 10, 235, 214, 45, 243, 61, 223, 243, 65, 246, 236, 185, 14, 147, 12, 85, 204, 25, 99, 137, 57, 219, 148, + 6, 194, 32, 137, 140, 224, 141, 131, 7, 121, 225, 165, 87, 56, 125, 230, 28, 147, 217, 12, 167, 32, 130, 213, 179, 107, 156, 223, 187, 194, 177, 227, + 39, 56, 118, 252, 56, 15, 127, 223, 135, 25, 47, 44, 0, 198, 54, 146, 169, 42, 36, 97, 11, 217, 4, 96, 46, 48, 100, 4, 11, 139, 11, 4, + 1, 152, 214, 26, 195, 48, 144, 25, 64, 80, 85, 28, 63, 118, 130, 233, 100, 202, 226, 210, 24, 8, 108, 192, 134, 8, 74, 66, 85, 16, 193, 92, + 56, 104, 153, 44, 44, 44, 82, 85, 216, 66, 54, 146, 136, 204, 59, 22, 198, 227, 45, 16, 71, 184, 140, 142, 119, 48, 110, 141, 219, 110, 190, 233, + 190, 233, 116, 242, 33, 219, 216, 66, 18, 17, 1, 81, 32, 200, 108, 132, 131, 204, 164, 170, 128, 36, 34, 176, 1, 131, 109, 144, 56, 124, 248, 16, + 159, 253, 236, 255, 197, 147, 95, 127, 130, 147, 167, 78, 209, 151, 248, 218, 227, 95, 231, 103, 126, 230, 103, 184, 254, 250, 235, 81, 9, 115, 65, 128, + 36, 108, 176, 69, 73, 132, 185, 192, 148, 138, 35, 71, 15, 115, 238, 220, 121, 102, 195, 140, 133, 205, 29, 59, 174, 217, 201, 120, 97, 204, 137, 163, + 39, 56, 125, 240, 44, 7, 15, 31, 229, 247, 62, 247, 111, 200, 22, 124, 232, 195, 255, 30, 173, 107, 84, 21, 182, 128, 128, 0, 91, 96, 99, 9, + 91, 216, 166, 36, 250, 217, 64, 169, 144, 76, 102, 71, 102, 34, 9, 219, 100, 54, 78, 158, 60, 197, 100, 50, 101, 97, 113, 140, 84, 216, 92, 96, + 34, 192, 18, 182, 152, 179, 140, 44, 140, 137, 12, 84, 69, 149, 168, 42, 134, 128, 110, 60, 222, 158, 153, 87, 3, 71, 184, 140, 228, 50, 126, 240, + 83, 159, 96, 235, 230, 141, 140, 23, 198, 31, 30, 250, 126, 107, 213, 0, 4, 146, 144, 10, 187, 176, 11, 91, 204, 85, 21, 182, 169, 234, 177, 6, + 108, 33, 21, 200, 28, 57, 116, 144, 95, 255, 231, 255, 156, 47, 124, 225, 139, 236, 59, 240, 58, 167, 166, 167, 89, 141, 21, 190, 241, 220, 147, 252, + 198, 111, 254, 6, 171, 171, 171, 88, 198, 18, 150, 128, 32, 50, 104, 93, 71, 102, 98, 27, 91, 216, 197, 234, 234, 121, 134, 26, 136, 81, 114, 199, + 125, 119, 242, 209, 135, 63, 198, 13, 55, 220, 194, 109, 247, 220, 206, 134, 157, 235, 25, 106, 224, 248, 137, 147, 252, 209, 23, 190, 200, 222, 189, 123, + 177, 140, 84, 216, 198, 54, 82, 97, 21, 150, 168, 18, 146, 32, 2, 108, 102, 179, 25, 173, 53, 34, 130, 170, 66, 18, 153, 137, 109, 90, 75, 86, + 86, 86, 153, 76, 103, 128, 177, 132, 85, 84, 21, 118, 81, 26, 48, 2, 12, 22, 152, 139, 102, 211, 41, 6, 36, 49, 235, 123, 6, 9, 73, 27, + 171, 106, 183, 36, 46, 39, 185, 12, 219, 188, 126, 248, 248, 82, 68, 190, 123, 54, 155, 49, 157, 78, 121, 139, 109, 170, 10, 219, 72, 194, 54, 16, + 128, 33, 12, 97, 164, 30, 44, 206, 156, 62, 197, 191, 250, 173, 207, 242, 229, 199, 190, 194, 145, 19, 199, 89, 220, 182, 196, 109, 15, 189, 139, 59, + 31, 186, 135, 93, 55, 93, 201, 87, 158, 248, 99, 246, 238, 125, 22, 34, 144, 196, 48, 12, 16, 208, 181, 70, 70, 50, 234, 58, 186, 174, 67, 18, + 182, 105, 173, 209, 117, 29, 163, 197, 17, 91, 55, 110, 99, 247, 230, 107, 57, 245, 250, 73, 22, 218, 2, 155, 182, 110, 196, 36, 125, 63, 112, 232, + 232, 81, 30, 251, 242, 99, 156, 57, 125, 138, 57, 73, 72, 133, 36, 108, 35, 137, 57, 27, 176, 233, 251, 129, 149, 213, 21, 130, 160, 235, 58, 34, + 2, 219, 68, 4, 182, 177, 205, 48, 12, 172, 172, 172, 128, 193, 22, 178, 80, 21, 85, 198, 6, 219, 72, 194, 152, 204, 196, 130, 149, 149, 85, 44, + 97, 9, 219, 216, 198, 246, 66, 68, 236, 204, 12, 238, 184, 253, 86, 222, 46, 185, 140, 22, 201, 66, 215, 109, 25, 117, 163, 91, 170, 138, 213, 149, + 85, 134, 161, 71, 42, 170, 10, 73, 216, 32, 137, 170, 98, 24, 122, 164, 194, 22, 146, 24, 106, 96, 152, 205, 248, 234, 87, 190, 204, 99, 143, 125, + 133, 227, 111, 158, 34, 70, 112, 195, 237, 55, 241, 137, 135, 63, 201, 117, 219, 111, 96, 195, 120, 19, 238, 204, 87, 190, 242, 37, 166, 147, 53, 164, + 98, 46, 51, 105, 109, 68, 215, 117, 100, 54, 34, 130, 185, 42, 177, 115, 199, 118, 182, 109, 221, 68, 20, 60, 245, 196, 83, 252, 247, 255, 228, 159, + 240, 248, 19, 95, 231, 141, 131, 7, 56, 127, 102, 5, 44, 108, 51, 89, 235, 217, 183, 239, 85, 94, 126, 233, 101, 192, 96, 97, 21, 72, 216, 6, + 11, 169, 8, 32, 34, 56, 123, 238, 28, 43, 231, 87, 137, 12, 50, 147, 204, 32, 34, 136, 8, 70, 163, 17, 17, 129, 108, 134, 190, 71, 18, 230, + 2, 155, 136, 0, 12, 152, 32, 152, 179, 77, 4, 204, 102, 61, 231, 206, 173, 80, 18, 37, 1, 70, 50, 146, 136, 136, 45, 139, 139, 75, 128, 121, + 187, 228, 50, 50, 147, 214, 186, 43, 91, 230, 214, 201, 218, 132, 179, 231, 206, 97, 23, 85, 61, 85, 3, 182, 169, 42, 84, 133, 36, 36, 161, 18, + 42, 83, 37, 112, 112, 228, 216, 17, 254, 237, 151, 31, 227, 240, 145, 99, 244, 253, 64, 118, 29, 145, 240, 252, 222, 23, 57, 248, 202, 33, 78, 188, + 113, 2, 15, 226, 245, 215, 95, 229, 220, 217, 211, 168, 138, 136, 0, 130, 136, 32, 72, 130, 164, 101, 71, 70, 99, 24, 6, 110, 190, 229, 22, 30, + 254, 190, 135, 89, 236, 22, 57, 119, 234, 44, 125, 78, 217, 184, 115, 153, 55, 143, 188, 201, 153, 35, 103, 120, 75, 73, 156, 61, 187, 194, 190, 125, + 251, 25, 102, 83, 194, 194, 26, 176, 132, 101, 176, 176, 197, 92, 100, 114, 234, 228, 105, 166, 147, 25, 173, 117, 216, 32, 153, 204, 36, 34, 136, 8, + 50, 147, 140, 128, 0, 169, 176, 5, 1, 132, 137, 0, 12, 4, 151, 68, 16, 145, 156, 59, 191, 194, 202, 234, 20, 3, 178, 40, 11, 169, 168, 42, + 134, 161, 182, 92, 125, 213, 46, 170, 196, 219, 117, 92, 86, 96, 188, 35, 34, 150, 135, 26, 56, 126, 236, 56, 183, 220, 114, 35, 153, 73, 4, 12, + 67, 79, 102, 16, 209, 48, 102, 212, 141, 48, 194, 6, 27, 236, 224, 185, 189, 207, 240, 210, 43, 175, 176, 186, 54, 1, 139, 217, 234, 148, 253, 47, + 191, 202, 243, 123, 95, 228, 232, 254, 35, 140, 23, 199, 108, 221, 180, 153, 171, 175, 186, 134, 241, 226, 34, 165, 129, 116, 71, 70, 48, 151, 153, 216, + 6, 76, 182, 196, 54, 24, 62, 240, 190, 247, 243, 218, 254, 3, 252, 206, 231, 126, 159, 129, 162, 95, 233, 169, 89, 193, 192, 5, 1, 8, 28, 244, + 125, 241, 230, 137, 147, 172, 173, 173, 177, 184, 184, 136, 205, 69, 182, 144, 204, 37, 6, 7, 135, 14, 29, 161, 170, 176, 133, 84, 204, 217, 38, 34, + 152, 107, 173, 163, 27, 117, 188, 69, 18, 115, 182, 129, 192, 54, 182, 201, 72, 140, 48, 230, 212, 201, 83, 172, 156, 95, 193, 6, 73, 72, 66, 18, + 150, 32, 98, 116, 231, 29, 215, 243, 228, 55, 158, 230, 237, 146, 203, 48, 6, 123, 83, 85, 45, 16, 193, 241, 227, 199, 25, 134, 162, 170, 144, 10, + 169, 176, 65, 18, 146, 40, 21, 146, 40, 21, 178, 88, 89, 89, 225, 185, 103, 159, 227, 212, 169, 51, 148, 4, 4, 158, 193, 155, 7, 78, 226, 126, + 96, 231, 238, 109, 44, 46, 45, 178, 97, 113, 35, 31, 250, 208, 135, 25, 141, 58, 36, 129, 33, 34, 136, 8, 34, 130, 174, 235, 152, 179, 13, 152, + 89, 63, 37, 187, 224, 227, 159, 120, 152, 59, 239, 184, 149, 24, 96, 88, 27, 176, 192, 24, 48, 16, 204, 5, 48, 235, 167, 76, 167, 83, 84, 133, + 37, 84, 3, 85, 133, 45, 108, 97, 204, 234, 218, 132, 3, 7, 14, 146, 153, 216, 102, 46, 2, 36, 81, 85, 12, 195, 128, 36, 48, 96, 99, 192, + 50, 54, 68, 4, 96, 34, 130, 140, 68, 18, 17, 65, 68, 112, 228, 232, 113, 166, 179, 25, 115, 54, 88, 198, 54, 54, 248, 130, 233, 84, 216, 230, + 237, 146, 203, 49, 16, 44, 218, 110, 92, 112, 242, 228, 105, 206, 157, 91, 193, 134, 97, 24, 144, 140, 45, 192, 72, 162, 170, 24, 106, 160, 159, 13, + 212, 32, 206, 156, 57, 195, 129, 55, 14, 49, 153, 204, 128, 192, 4, 118, 160, 85, 56, 119, 104, 149, 115, 135, 87, 153, 157, 238, 185, 255, 158, 251, + 216, 189, 251, 106, 134, 217, 0, 6, 219, 216, 38, 35, 136, 8, 192, 68, 4, 17, 80, 26, 168, 26, 232, 251, 158, 205, 155, 55, 241, 131, 63, 248, + 8, 123, 246, 92, 205, 120, 212, 8, 243, 103, 204, 92, 182, 100, 97, 97, 204, 210, 210, 34, 45, 27, 37, 81, 42, 228, 194, 42, 130, 32, 8, 50, + 147, 195, 71, 143, 113, 224, 141, 35, 188, 37, 51, 201, 108, 100, 38, 223, 100, 250, 190, 71, 50, 146, 48, 6, 140, 100, 44, 19, 17, 200, 66, 22, + 65, 82, 130, 3, 7, 14, 33, 25, 8, 230, 36, 83, 37, 100, 35, 41, 86, 87, 2, 91, 188, 93, 114, 25, 14, 99, 46, 8, 192, 112, 250, 244, + 105, 14, 31, 62, 140, 84, 216, 92, 96, 134, 97, 160, 170, 176, 11, 187, 176, 11, 185, 48, 197, 233, 51, 167, 57, 123, 230, 44, 85, 133, 13, 182, + 177, 205, 156, 21, 184, 96, 121, 121, 29, 239, 125, 223, 187, 105, 45, 24, 212, 51, 212, 0, 54, 182, 169, 18, 85, 133, 108, 130, 192, 54, 17, 129, + 45, 250, 126, 198, 116, 58, 225, 218, 107, 119, 243, 3, 159, 248, 40, 215, 237, 217, 205, 198, 13, 203, 44, 140, 71, 116, 173, 49, 30, 117, 172, 95, + 183, 196, 230, 77, 235, 217, 185, 99, 27, 163, 209, 152, 42, 33, 9, 201, 24, 48, 38, 34, 176, 205, 179, 123, 95, 100, 50, 153, 162, 18, 153, 13, + 155, 139, 34, 130, 57, 219, 216, 198, 54, 198, 204, 89, 102, 206, 22, 145, 129, 44, 50, 146, 204, 68, 50, 43, 231, 215, 120, 227, 141, 67, 72, 66, + 18, 182, 193, 198, 54, 182, 176, 209, 234, 116, 130, 109, 222, 174, 227, 114, 12, 97, 144, 68, 107, 73, 245, 197, 171, 251, 95, 229, 250, 235, 247, 208, + 117, 141, 8, 144, 76, 215, 113, 129, 145, 68, 102, 146, 153, 72, 48, 157, 174, 49, 155, 205, 176, 205, 37, 193, 156, 109, 230, 108, 115, 195, 13, 215, + 115, 195, 13, 215, 209, 15, 61, 182, 201, 12, 140, 1, 67, 0, 1, 65, 64, 152, 136, 96, 78, 18, 85, 3, 195, 208, 35, 137, 219, 239, 184, 141, + 8, 248, 250, 227, 79, 112, 236, 248, 9, 38, 107, 83, 34, 96, 221, 210, 18, 187, 118, 109, 231, 198, 27, 111, 32, 2, 36, 161, 42, 164, 98, 206, + 152, 108, 201, 177, 99, 111, 242, 252, 243, 47, 19, 36, 173, 5, 174, 129, 8, 144, 132, 109, 108, 19, 17, 216, 134, 224, 207, 152, 136, 192, 134, 136, + 224, 34, 131, 49, 17, 65, 100, 227, 196, 137, 55, 57, 122, 244, 4, 153, 9, 24, 219, 204, 101, 6, 182, 177, 125, 230, 137, 39, 255, 4, 203, 188, + 93, 199, 101, 132, 184, 72, 37, 164, 194, 14, 246, 239, 127, 141, 123, 78, 158, 100, 219, 182, 45, 216, 38, 2, 164, 192, 54, 153, 137, 13, 146, 1, + 179, 176, 176, 64, 107, 73, 70, 80, 46, 32, 136, 8, 230, 194, 176, 176, 48, 230, 221, 15, 221, 207, 186, 117, 235, 24, 134, 129, 139, 28, 212, 208, + 83, 53, 166, 181, 129, 140, 6, 153, 72, 194, 54, 115, 153, 73, 85, 49, 212, 128, 52, 144, 4, 183, 223, 118, 11, 219, 183, 109, 225, 181, 87, 95, + 227, 212, 169, 147, 148, 196, 250, 245, 235, 185, 118, 207, 53, 92, 125, 205, 85, 72, 61, 182, 136, 4, 156, 96, 46, 16, 67, 153, 175, 125, 253, 105, + 206, 156, 57, 71, 4, 32, 8, 131, 37, 108, 19, 17, 68, 4, 17, 65, 102, 146, 153, 88, 98, 46, 50, 80, 137, 200, 192, 134, 200, 192, 54, 150, + 201, 113, 240, 210, 43, 251, 57, 119, 126, 133, 136, 68, 50, 173, 129, 109, 170, 68, 132, 80, 213, 217, 51, 167, 207, 98, 155, 183, 235, 184, 44, 99, + 3, 1, 25, 193, 80, 197, 241, 227, 39, 121, 118, 239, 243, 124, 207, 7, 223, 139, 84, 124, 83, 210, 154, 169, 42, 90, 107, 216, 102, 211, 198, 141, + 108, 219, 190, 149, 215, 14, 28, 164, 175, 1, 108, 36, 136, 128, 209, 168, 113, 195, 13, 123, 120, 224, 254, 251, 1, 35, 9, 219, 68, 4, 82, 33, + 21, 195, 80, 100, 152, 200, 100, 46, 34, 136, 8, 50, 19, 219, 168, 138, 161, 6, 40, 211, 50, 217, 190, 99, 59, 219, 183, 111, 99, 168, 1, 219, + 180, 214, 145, 25, 88, 133, 36, 108, 99, 27, 155, 139, 50, 130, 151, 247, 189, 206, 51, 79, 63, 135, 109, 8, 232, 85, 72, 98, 46, 34, 152, 139, + 8, 108, 115, 145, 161, 36, 36, 33, 153, 200, 32, 8, 100, 1, 193, 69, 1, 179, 89, 207, 222, 189, 47, 32, 153, 174, 131, 204, 64, 18, 182, 177, + 132, 36, 151, 244, 166, 44, 94, 125, 253, 13, 222, 46, 185, 12, 217, 216, 194, 50, 17, 129, 36, 50, 131, 103, 158, 121, 150, 163, 71, 143, 99, 27, + 73, 84, 9, 169, 24, 134, 1, 91, 72, 98, 24, 138, 165, 165, 37, 222, 243, 158, 247, 176, 121, 243, 38, 90, 38, 4, 180, 46, 89, 92, 90, 96, + 215, 149, 59, 249, 232, 199, 30, 102, 215, 149, 87, 48, 12, 3, 85, 3, 195, 48, 80, 53, 32, 23, 170, 194, 22, 146, 81, 9, 201, 24, 147, 145, + 72, 34, 34, 176, 141, 74, 12, 195, 64, 63, 12, 12, 195, 64, 97, 218, 104, 196, 104, 97, 129, 236, 26, 146, 40, 21, 182, 193, 32, 153, 8, 147, + 25, 156, 58, 117, 150, 127, 251, 197, 175, 194, 196, 203, 222, 0, 0, 32, 0, 73, 68, 65, 84, 48, 153, 204, 192, 129, 10, 178, 53, 200, 32, 91, + 35, 34, 168, 42, 190, 41, 144, 68, 63, 155, 17, 4, 216, 216, 134, 128, 32, 192, 96, 155, 214, 26, 135, 14, 29, 101, 255, 190, 215, 201, 72, 34, + 130, 185, 136, 64, 18, 6, 50, 98, 5, 124, 156, 119, 208, 113, 25, 150, 145, 189, 58, 194, 131, 236, 142, 11, 50, 147, 179, 103, 207, 243, 199, 127, + 252, 85, 62, 254, 241, 135, 89, 92, 92, 4, 140, 36, 34, 2, 48, 54, 23, 4, 153, 201, 3, 15, 61, 64, 180, 228, 171, 127, 242, 56, 7, 222, + 56, 192, 208, 247, 236, 220, 185, 131, 247, 127, 224, 189, 188, 251, 221, 15, 32, 13, 216, 198, 54, 17, 193, 48, 64, 63, 43, 70, 157, 104, 77, 68, + 64, 102, 34, 9, 149, 32, 160, 181, 164, 69, 16, 54, 97, 46, 178, 132, 128, 4, 108, 48, 16, 97, 108, 161, 18, 178, 137, 8, 34, 128, 8, 206, + 173, 174, 242, 249, 63, 250, 18, 135, 14, 31, 35, 34, 32, 32, 19, 100, 147, 17, 244, 85, 216, 69, 132, 0, 49, 39, 21, 195, 32, 250, 161, 144, + 5, 17, 68, 128, 36, 50, 18, 27, 50, 3, 8, 158, 120, 226, 25, 78, 159, 57, 71, 107, 13, 27, 36, 17, 209, 32, 184, 168, 164, 21, 201, 71, + 9, 115, 57, 29, 151, 97, 11, 236, 73, 16, 195, 208, 247, 157, 36, 136, 100, 238, 133, 231, 95, 226, 170, 43, 175, 224, 129, 7, 239, 67, 226, 162, + 136, 192, 54, 146, 200, 76, 32, 137, 8, 30, 122, 247, 131, 220, 115, 207, 221, 156, 58, 121, 146, 126, 232, 89, 183, 110, 29, 219, 182, 109, 165, 181, + 198, 48, 20, 96, 108, 19, 17, 128, 169, 234, 169, 234, 169, 161, 145, 217, 40, 21, 150, 176, 197, 92, 70, 35, 51, 201, 76, 50, 2, 1, 6, 74, + 194, 24, 59, 200, 108, 88, 162, 84, 216, 230, 18, 19, 1, 231, 206, 175, 241, 232, 23, 255, 152, 151, 95, 218, 71, 68, 32, 21, 85, 3, 146, 128, + 64, 18, 153, 9, 85, 100, 54, 36, 19, 17, 100, 38, 4, 96, 46, 138, 128, 32, 152, 51, 16, 1, 153, 201, 137, 55, 79, 243, 248, 227, 79, 98, + 27, 219, 204, 101, 6, 115, 54, 72, 2, 251, 84, 223, 247, 199, 34, 184, 172, 142, 203, 176, 141, 237, 53, 225, 33, 91, 35, 29, 24, 136, 8, 250, + 94, 60, 246, 216, 87, 89, 94, 191, 142, 91, 110, 185, 153, 136, 96, 206, 22, 6, 44, 33, 7, 65, 195, 54, 173, 5, 59, 175, 216, 78, 68, 96, + 7, 85, 162, 74, 100, 6, 182, 121, 75, 132, 25, 106, 160, 52, 80, 53, 96, 139, 104, 201, 48, 12, 244, 179, 158, 190, 31, 144, 0, 7, 56, 48, + 23, 68, 128, 141, 37, 132, 177, 19, 48, 182, 145, 196, 92, 4, 16, 201, 177, 99, 111, 242, 232, 23, 255, 152, 87, 95, 61, 8, 52, 170, 122, 108, + 147, 153, 64, 32, 9, 219, 24, 51, 87, 85, 188, 69, 18, 227, 81, 71, 100, 16, 17, 216, 38, 51, 144, 64, 22, 38, 176, 197, 215, 30, 127, 146, + 131, 7, 143, 16, 17, 216, 38, 34, 136, 8, 32, 152, 139, 8, 100, 191, 90, 85, 231, 50, 147, 203, 233, 184, 140, 194, 24, 175, 150, 220, 119, 93, + 7, 97, 134, 190, 199, 230, 2, 115, 238, 236, 10, 159, 251, 189, 63, 164, 74, 220, 118, 219, 45, 24, 145, 110, 4, 16, 153, 68, 4, 25, 32, 21, + 115, 17, 65, 68, 48, 103, 155, 136, 64, 10, 34, 130, 57, 219, 68, 36, 85, 197, 202, 249, 21, 78, 245, 103, 57, 191, 178, 202, 249, 243, 231, 89, + 89, 89, 101, 58, 153, 34, 137, 204, 100, 212, 53, 198, 227, 96, 52, 78, 34, 6, 108, 97, 10, 28, 128, 169, 18, 96, 34, 146, 136, 100, 117, 50, + 229, 229, 151, 94, 228, 169, 111, 236, 229, 216, 241, 147, 212, 32, 100, 83, 37, 36, 19, 145, 192, 128, 36, 136, 0, 67, 102, 3, 68, 213, 128, 109, + 230, 100, 131, 33, 2, 236, 160, 100, 34, 0, 65, 100, 112, 226, 196, 105, 30, 125, 244, 49, 134, 161, 232, 186, 17, 111, 169, 18, 173, 5, 184, 17, + 36, 114, 61, 127, 227, 181, 55, 173, 236, 123, 99, 31, 151, 211, 113, 25, 178, 177, 125, 182, 164, 105, 200, 12, 253, 64, 149, 176, 197, 48, 12, 216, + 112, 252, 248, 73, 126, 235, 179, 191, 203, 185, 115, 231, 185, 251, 158, 59, 24, 141, 70, 204, 133, 130, 204, 134, 195, 204, 69, 36, 32, 34, 130, 185, + 136, 192, 134, 8, 243, 22, 201, 128, 120, 243, 196, 97, 14, 31, 62, 206, 155, 39, 79, 113, 230, 204, 89, 214, 214, 214, 152, 205, 102, 72, 34, 51, + 25, 143, 199, 44, 46, 45, 177, 113, 253, 50, 187, 119, 111, 99, 243, 166, 69, 2, 136, 8, 46, 49, 17, 9, 209, 88, 89, 89, 227, 224, 27, 135, + 120, 102, 239, 11, 28, 58, 124, 148, 26, 138, 97, 40, 8, 192, 38, 51, 145, 138, 185, 190, 31, 176, 69, 16, 152, 192, 54, 153, 137, 36, 108, 99, + 155, 170, 194, 54, 24, 164, 34, 8, 34, 147, 108, 13, 1, 127, 248, 135, 95, 226, 245, 215, 14, 67, 36, 182, 137, 8, 46, 49, 182, 137, 8, 36, + 203, 142, 103, 143, 28, 63, 202, 209, 163, 199, 185, 156, 142, 203, 144, 10, 73, 103, 236, 209, 164, 170, 40, 137, 170, 129, 136, 36, 34, 8, 32, 51, + 56, 119, 110, 133, 223, 251, 189, 207, 115, 244, 232, 49, 222, 243, 158, 7, 217, 186, 109, 11, 182, 176, 193, 97, 230, 34, 132, 13, 17, 16, 17, 68, + 4, 17, 193, 156, 13, 182, 152, 59, 117, 250, 60, 123, 159, 121, 153, 227, 199, 223, 228, 204, 153, 83, 156, 59, 119, 158, 213, 213, 85, 250, 190, 199, + 54, 151, 4, 27, 54, 108, 96, 219, 150, 205, 172, 223, 208, 177, 101, 243, 18, 198, 204, 69, 36, 231, 207, 175, 113, 252, 216, 155, 188, 113, 248, 8, + 175, 189, 250, 58, 167, 78, 157, 161, 202, 116, 93, 135, 29, 100, 38, 150, 17, 66, 18, 96, 44, 97, 11, 8, 34, 2, 169, 176, 185, 40, 51, 177, + 205, 92, 70, 64, 0, 17, 64, 16, 153, 148, 138, 209, 104, 204, 51, 207, 60, 207, 31, 253, 209, 151, 33, 18, 34, 152, 139, 8, 230, 34, 146, 204, + 100, 78, 82, 95, 85, 175, 172, 13, 3, 239, 164, 227, 50, 60, 8, 171, 86, 145, 78, 87, 137, 214, 18, 169, 97, 139, 57, 89, 180, 214, 33, 153, + 97, 86, 60, 246, 229, 175, 241, 242, 75, 251, 121, 255, 251, 30, 226, 182, 219, 111, 102, 253, 250, 117, 148, 5, 1, 4, 23, 152, 185, 204, 164, 69, + 195, 54, 182, 113, 128, 129, 32, 56, 123, 246, 44, 175, 31, 120, 157, 195, 135, 142, 114, 232, 208, 65, 250, 126, 32, 2, 140, 152, 77, 123, 78, 156, + 56, 65, 75, 184, 239, 222, 187, 185, 246, 158, 155, 185, 98, 199, 22, 44, 19, 17, 180, 214, 120, 241, 165, 215, 248, 252, 191, 249, 34, 167, 78, 157, + 166, 4, 153, 73, 107, 73, 68, 146, 145, 200, 34, 34, 24, 84, 188, 165, 101, 67, 37, 186, 110, 68, 85, 81, 42, 36, 49, 12, 34, 34, 200, 76, + 134, 97, 64, 50, 221, 66, 199, 210, 226, 24, 91, 100, 4, 115, 153, 141, 195, 71, 79, 240, 155, 255, 231, 191, 226, 236, 217, 85, 50, 19, 219, 204, + 217, 38, 51, 185, 196, 68, 6, 17, 76, 92, 58, 103, 204, 59, 233, 184, 12, 169, 168, 170, 169, 170, 142, 141, 198, 99, 196, 55, 85, 21, 125, 223, + 19, 17, 68, 4, 198, 84, 137, 3, 7, 14, 241, 47, 14, 255, 54, 187, 119, 95, 201, 61, 247, 220, 193, 173, 183, 220, 204, 150, 173, 155, 232, 186, + 134, 44, 34, 18, 75, 252, 223, 213, 193, 91, 240, 231, 247, 125, 223, 245, 231, 235, 253, 254, 252, 254, 199, 213, 238, 234, 96, 157, 173, 147, 79, 137, + 92, 199, 78, 161, 101, 154, 50, 147, 146, 25, 66, 153, 41, 229, 152, 97, 114, 65, 153, 97, 166, 189, 229, 146, 43, 110, 24, 46, 152, 1, 238, 128, + 14, 195, 5, 164, 153, 0, 197, 197, 83, 26, 55, 208, 184, 57, 214, 137, 237, 38, 150, 101, 71, 138, 117, 176, 180, 90, 89, 210, 106, 87, 218, 243, + 254, 79, 191, 239, 231, 253, 126, 177, 63, 41, 10, 30, 198, 146, 108, 147, 148, 244, 241, 88, 92, 72, 194, 221, 72, 66, 136, 182, 185, 251, 206, 59, + 120, 226, 177, 135, 184, 117, 227, 58, 135, 7, 55, 184, 120, 233, 45, 118, 118, 246, 56, 123, 246, 12, 203, 178, 240, 224, 67, 31, 225, 95, 249, 233, + 191, 196, 103, 62, 253, 41, 238, 190, 231, 110, 70, 6, 221, 69, 100, 112, 245, 234, 77, 190, 244, 171, 191, 197, 235, 111, 92, 100, 123, 123, 133, 36, + 64, 72, 193, 200, 4, 9, 33, 108, 3, 166, 102, 177, 209, 110, 218, 6, 140, 221, 204, 57, 217, 144, 68, 85, 81, 85, 188, 39, 34, 216, 221, 219, + 5, 27, 99, 66, 201, 173, 131, 35, 254, 247, 191, 247, 69, 94, 120, 241, 28, 82, 34, 9, 73, 188, 199, 54, 146, 216, 176, 27, 155, 19, 211, 39, + 182, 121, 63, 131, 247, 113, 243, 230, 225, 209, 222, 222, 238, 69, 4, 53, 27, 108, 64, 68, 4, 153, 73, 85, 1, 162, 170, 145, 132, 109, 142, 79, + 78, 120, 241, 197, 115, 188, 248, 226, 75, 220, 117, 247, 157, 60, 242, 200, 195, 60, 246, 216, 35, 60, 112, 223, 125, 220, 121, 215, 89, 118, 118, 86, + 172, 198, 32, 51, 201, 76, 66, 162, 108, 108, 179, 26, 193, 103, 63, 251, 41, 62, 246, 177, 135, 249, 169, 191, 244, 19, 60, 255, 194, 139, 124, 243, + 155, 207, 241, 246, 229, 235, 220, 127, 255, 93, 252, 244, 79, 255, 11, 60, 252, 224, 253, 40, 205, 156, 107, 114, 236, 160, 16, 54, 60, 253, 141, 103, + 120, 243, 205, 75, 140, 76, 108, 147, 153, 72, 162, 187, 209, 106, 240, 46, 209, 221, 72, 65, 68, 96, 160, 187, 17, 208, 109, 48, 216, 38, 51, 233, + 158, 72, 98, 163, 187, 137, 16, 123, 123, 187, 236, 237, 238, 210, 109, 20, 226, 120, 61, 249, 194, 23, 126, 133, 175, 124, 245, 235, 68, 36, 27, 221, + 77, 68, 176, 33, 137, 119, 137, 238, 166, 91, 140, 49, 144, 132, 109, 222, 207, 224, 125, 60, 244, 209, 251, 234, 228, 120, 253, 90, 85, 209, 213, 68, + 6, 85, 133, 16, 32, 64, 188, 203, 128, 137, 16, 115, 26, 133, 168, 130, 75, 23, 223, 230, 194, 27, 151, 248, 234, 87, 190, 206, 246, 246, 54, 219, + 219, 43, 78, 157, 222, 231, 212, 222, 62, 35, 7, 247, 220, 115, 55, 255, 242, 95, 254, 139, 220, 255, 192, 71, 0, 179, 49, 107, 178, 44, 199, 236, + 238, 38, 31, 255, 216, 131, 156, 218, 31, 60, 243, 204, 243, 220, 243, 145, 59, 217, 221, 9, 14, 15, 111, 161, 16, 85, 133, 27, 132, 185, 114, 237, + 58, 223, 120, 250, 15, 88, 102, 177, 181, 21, 136, 160, 219, 128, 201, 4, 204, 109, 166, 170, 168, 106, 196, 109, 130, 174, 162, 13, 8, 20, 66, 36, + 217, 201, 156, 197, 156, 133, 109, 36, 145, 153, 116, 55, 119, 222, 121, 150, 221, 189, 29, 114, 12, 110, 221, 58, 228, 239, 125, 225, 87, 248, 245, 95, + 255, 50, 221, 38, 34, 216, 176, 205, 134, 36, 254, 31, 70, 18, 54, 216, 2, 2, 73, 188, 159, 193, 247, 241, 235, 191, 253, 59, 252, 107, 63, 251, + 51, 148, 253, 138, 219, 29, 82, 148, 27, 73, 84, 55, 85, 19, 219, 72, 65, 183, 177, 65, 10, 4, 184, 77, 42, 32, 204, 156, 19, 12, 135, 71, + 39, 220, 188, 117, 200, 197, 75, 87, 216, 168, 42, 108, 243, 135, 223, 126, 158, 159, 255, 249, 127, 155, 143, 127, 236, 81, 170, 38, 115, 46, 204, 229, + 132, 147, 245, 49, 235, 245, 154, 213, 74, 124, 226, 19, 15, 33, 193, 250, 228, 132, 145, 43, 150, 165, 56, 58, 58, 38, 115, 197, 214, 106, 197, 243, + 207, 189, 196, 197, 75, 111, 99, 139, 110, 19, 1, 2, 186, 27, 9, 102, 21, 18, 84, 21, 96, 64, 84, 53, 179, 138, 141, 170, 194, 109, 170, 10, + 219, 108, 100, 38, 85, 69, 119, 227, 110, 78, 214, 107, 238, 190, 231, 46, 118, 119, 118, 185, 116, 233, 10, 255, 219, 231, 255, 1, 95, 253, 218, 83, + 116, 155, 136, 192, 54, 17, 129, 36, 108, 99, 27, 73, 72, 2, 68, 102, 18, 145, 216, 148, 77, 217, 226, 253, 12, 222, 199, 178, 94, 48, 188, 92, + 85, 107, 208, 78, 117, 33, 5, 115, 46, 216, 166, 219, 216, 147, 170, 34, 36, 26, 48, 208, 93, 8, 49, 103, 97, 243, 142, 136, 160, 187, 145, 68, + 68, 176, 81, 85, 156, 123, 229, 85, 126, 225, 239, 252, 93, 254, 195, 191, 241, 239, 243, 177, 39, 62, 74, 119, 115, 116, 124, 204, 141, 27, 55, 185, + 114, 229, 42, 151, 47, 95, 225, 230, 205, 27, 44, 203, 100, 181, 218, 102, 103, 123, 155, 179, 103, 239, 228, 145, 71, 30, 225, 244, 233, 51, 28, 28, + 28, 243, 244, 55, 158, 97, 89, 79, 198, 24, 116, 21, 206, 32, 98, 133, 16, 99, 12, 220, 205, 106, 123, 11, 27, 214, 235, 53, 17, 73, 183, 17, + 194, 54, 115, 22, 182, 89, 150, 133, 238, 198, 54, 18, 239, 152, 115, 98, 155, 173, 213, 138, 71, 30, 125, 152, 103, 190, 253, 34, 159, 255, 252, 63, + 224, 197, 23, 207, 33, 9, 73, 216, 70, 18, 221, 77, 68, 16, 17, 116, 55, 146, 176, 141, 36, 170, 10, 41, 144, 116, 36, 233, 8, 204, 251, 73, + 222, 199, 195, 15, 63, 68, 119, 239, 68, 232, 231, 16, 119, 180, 193, 221, 84, 23, 93, 13, 24, 119, 99, 140, 13, 203, 178, 96, 27, 219, 216, 96, + 55, 118, 99, 131, 219, 84, 55, 182, 145, 132, 109, 108, 99, 224, 250, 245, 155, 188, 114, 254, 187, 60, 242, 200, 67, 220, 115, 207, 93, 172, 215, 199, + 92, 185, 114, 133, 215, 94, 191, 192, 133, 11, 111, 241, 246, 219, 215, 184, 121, 243, 144, 245, 201, 194, 206, 206, 54, 15, 61, 120, 63, 15, 63, 252, + 16, 251, 251, 167, 248, 218, 215, 158, 226, 235, 95, 255, 38, 153, 43, 114, 12, 144, 176, 27, 183, 81, 136, 136, 96, 35, 51, 177, 161, 170, 153, 115, + 34, 192, 54, 146, 152, 53, 169, 106, 16, 116, 155, 170, 162, 202, 84, 21, 221, 13, 8, 219, 68, 4, 191, 246, 143, 127, 139, 215, 95, 127, 147, 136, + 64, 18, 239, 145, 68, 68, 176, 33, 9, 219, 72, 34, 51, 201, 76, 192, 128, 136, 136, 55, 109, 255, 79, 146, 110, 28, 28, 28, 240, 253, 12, 62, + 64, 87, 95, 4, 93, 168, 238, 7, 187, 27, 219, 100, 14, 108, 179, 177, 120, 66, 55, 85, 133, 221, 216, 198, 54, 110, 35, 132, 16, 229, 162, 91, + 216, 102, 163, 187, 145, 132, 36, 82, 73, 35, 206, 157, 251, 46, 191, 240, 119, 62, 207, 127, 240, 55, 254, 61, 30, 126, 240, 35, 60, 248, 224, 3, + 108, 111, 111, 241, 224, 3, 247, 113, 116, 120, 4, 152, 221, 189, 93, 206, 158, 61, 195, 153, 59, 78, 179, 179, 189, 197, 235, 175, 95, 228, 119, 191, + 242, 251, 44, 179, 136, 48, 138, 193, 24, 131, 170, 66, 17, 108, 116, 155, 204, 192, 54, 221, 141, 109, 192, 180, 205, 70, 117, 19, 145, 40, 26, 181, + 144, 64, 18, 17, 98, 189, 94, 179, 209, 93, 172, 215, 39, 124, 235, 155, 207, 18, 17, 140, 49, 248, 94, 182, 177, 141, 36, 54, 108, 35, 137, 136, + 0, 68, 85, 49, 70, 16, 17, 216, 190, 105, 251, 150, 36, 222, 79, 242, 62, 62, 250, 208, 131, 92, 189, 118, 125, 189, 183, 191, 247, 87, 36, 253, + 57, 219, 96, 110, 51, 54, 116, 23, 115, 78, 34, 130, 238, 166, 170, 217, 48, 198, 24, 219, 216, 70, 10, 186, 141, 36, 222, 83, 85, 216, 102, 195, + 54, 182, 185, 126, 253, 38, 231, 206, 189, 202, 71, 31, 126, 136, 187, 238, 60, 139, 4, 91, 219, 43, 246, 246, 119, 216, 223, 223, 229, 212, 169, 83, + 236, 237, 237, 177, 187, 183, 207, 193, 193, 49, 191, 252, 203, 95, 226, 252, 171, 111, 144, 25, 216, 38, 35, 177, 205, 198, 106, 12, 54, 50, 147, 204, + 164, 187, 232, 54, 27, 17, 73, 85, 81, 53, 193, 80, 221, 116, 55, 179, 138, 170, 137, 36, 230, 44, 186, 155, 238, 166, 170, 144, 196, 24, 3, 73, + 116, 55, 27, 221, 205, 134, 36, 222, 35, 9, 73, 108, 72, 66, 2, 73, 68, 136, 49, 18, 41, 158, 94, 175, 215, 191, 152, 153, 125, 112, 112, 192, + 247, 147, 188, 143, 143, 126, 244, 33, 238, 187, 239, 94, 47, 203, 242, 99, 153, 227, 103, 170, 138, 57, 39, 221, 205, 70, 87, 211, 221, 216, 208, 221, + 216, 77, 85, 99, 155, 119, 24, 12, 216, 198, 136, 141, 170, 162, 187, 233, 110, 54, 108, 51, 231, 68, 18, 27, 87, 175, 222, 224, 249, 231, 191, 195, + 238, 222, 46, 31, 249, 200, 221, 172, 182, 86, 100, 14, 182, 183, 118, 216, 218, 222, 1, 39, 175, 191, 246, 22, 255, 215, 255, 249, 155, 60, 255, 252, + 75, 40, 196, 70, 230, 64, 33, 16, 140, 49, 104, 155, 80, 96, 67, 102, 130, 1, 1, 54, 221, 141, 219, 216, 166, 170, 17, 48, 171, 88, 47, 107, + 170, 154, 13, 155, 119, 84, 21, 221, 77, 102, 34, 9, 73, 108, 216, 70, 18, 182, 249, 94, 17, 129, 109, 36, 177, 33, 9, 73, 216, 38, 34, 1, + 125, 233, 210, 165, 75, 255, 112, 127, 127, 159, 131, 131, 3, 190, 159, 228, 125, 124, 247, 181, 215, 121, 224, 254, 251, 232, 246, 61, 171, 213, 248, 183, + 128, 49, 70, 82, 213, 204, 185, 176, 209, 213, 108, 216, 96, 155, 119, 25, 119, 99, 27, 187, 193, 6, 137, 110, 211, 221, 116, 55, 182, 121, 143, 109, + 54, 36, 1, 230, 224, 224, 144, 231, 158, 251, 14, 175, 189, 246, 38, 235, 165, 88, 102, 115, 229, 234, 77, 190, 243, 226, 119, 249, 202, 239, 126, 131, + 223, 253, 202, 239, 115, 249, 242, 85, 20, 65, 230, 224, 61, 54, 100, 4, 57, 6, 27, 145, 73, 68, 16, 18, 109, 35, 137, 57, 139, 234, 6, 137, + 147, 147, 53, 85, 147, 89, 69, 119, 209, 54, 32, 230, 156, 128, 88, 150, 133, 57, 39, 182, 89, 173, 86, 124, 175, 136, 192, 54, 146, 136, 8, 54, + 108, 179, 33, 137, 136, 96, 35, 66, 68, 136, 136, 96, 140, 193, 109, 191, 116, 230, 204, 153, 175, 85, 21, 7, 7, 7, 124, 63, 131, 15, 96, 27, + 219, 207, 117, 251, 114, 68, 62, 184, 44, 107, 34, 68, 102, 82, 85, 204, 57, 65, 98, 206, 194, 110, 54, 108, 110, 19, 118, 97, 155, 101, 78, 20, + 73, 85, 209, 221, 216, 70, 18, 182, 169, 42, 50, 147, 170, 162, 187, 217, 144, 130, 101, 22, 207, 254, 225, 119, 120, 238, 249, 151, 89, 173, 2, 41, + 49, 224, 134, 72, 145, 17, 68, 4, 138, 6, 195, 200, 32, 199, 0, 137, 170, 98, 181, 90, 33, 9, 219, 108, 68, 136, 245, 122, 193, 109, 170, 38, + 110, 35, 241, 142, 49, 6, 179, 38, 27, 221, 133, 109, 192, 72, 194, 54, 99, 12, 54, 50, 147, 238, 230, 61, 17, 193, 123, 36, 97, 155, 238, 102, + 140, 129, 109, 36, 33, 5, 182, 217, 144, 226, 150, 221, 223, 182, 205, 165, 75, 151, 120, 63, 131, 15, 48, 231, 194, 156, 245, 250, 24, 227, 249, 49, + 242, 193, 57, 11, 219, 8, 17, 10, 222, 147, 25, 204, 217, 72, 252, 49, 41, 80, 192, 24, 131, 101, 54, 146, 136, 8, 54, 108, 179, 209, 221, 68, + 4, 146, 88, 150, 197, 85, 245, 150, 237, 206, 204, 123, 51, 51, 186, 77, 21, 183, 53, 118, 147, 153, 96, 176, 141, 109, 236, 38, 35, 105, 55, 234, + 194, 134, 213, 24, 72, 162, 187, 193, 70, 219, 91, 128, 145, 192, 128, 20, 156, 44, 199, 8, 144, 68, 119, 131, 65, 10, 64, 216, 32, 129, 36, 108, + 19, 17, 108, 216, 70, 18, 182, 217, 144, 132, 109, 170, 138, 204, 68, 18, 146, 216, 136, 72, 192, 216, 77, 166, 0, 211, 61, 223, 236, 230, 5, 219, + 124, 144, 224, 3, 44, 179, 249, 115, 159, 254, 228, 141, 170, 249, 7, 85, 133, 221, 108, 204, 42, 102, 53, 57, 6, 82, 16, 145, 216, 166, 219, 108, + 216, 166, 186, 233, 110, 20, 129, 36, 108, 99, 27, 219, 116, 55, 203, 178, 176, 81, 85, 172, 215, 107, 159, 156, 156, 252, 175, 221, 253, 87, 151, 101, + 249, 217, 101, 89, 254, 251, 170, 90, 115, 219, 156, 69, 85, 209, 109, 54, 50, 131, 119, 216, 132, 18, 73, 108, 84, 53, 96, 12, 204, 101, 193, 54, + 17, 129, 36, 108, 35, 5, 237, 198, 110, 34, 130, 234, 102, 163, 186, 152, 85, 44, 75, 209, 13, 17, 201, 156, 147, 245, 122, 189, 72, 42, 254, 72, + 85, 97, 155, 13, 219, 116, 55, 182, 249, 127, 179, 161, 219, 216, 16, 17, 68, 4, 153, 201, 109, 79, 207, 89, 23, 108, 243, 65, 146, 15, 112, 225, + 194, 155, 156, 58, 117, 138, 110, 223, 3, 250, 55, 193, 17, 18, 27, 85, 141, 13, 221, 133, 128, 57, 11, 219, 116, 55, 118, 35, 9, 27, 108, 3, + 98, 195, 54, 203, 178, 176, 145, 153, 100, 38, 221, 205, 241, 241, 241, 83, 221, 253, 183, 186, 251, 57, 73, 151, 186, 251, 183, 129, 251, 199, 24, 127, + 62, 51, 177, 141, 13, 99, 36, 96, 36, 145, 99, 96, 192, 109, 16, 100, 36, 25, 129, 34, 64, 16, 17, 100, 36, 17, 65, 119, 99, 155, 245, 122, + 205, 198, 156, 147, 141, 170, 194, 109, 204, 134, 168, 42, 186, 155, 170, 98, 206, 249, 173, 204, 140, 219, 78, 69, 4, 146, 176, 205, 134, 36, 34, 130, + 13, 73, 108, 72, 66, 18, 27, 17, 66, 18, 99, 36, 153, 1, 8, 219, 127, 123, 140, 252, 202, 155, 111, 94, 228, 131, 4, 31, 98, 189, 94, 152, + 115, 126, 203, 246, 91, 99, 12, 218, 102, 206, 201, 134, 36, 164, 160, 109, 192, 108, 216, 141, 13, 221, 102, 195, 54, 115, 78, 108, 99, 155, 49, 6, + 146, 168, 42, 150, 101, 97, 89, 22, 108, 255, 221, 204, 60, 47, 9, 219, 68, 196, 205, 170, 250, 47, 215, 203, 250, 133, 170, 66, 18, 99, 36, 54, + 216, 220, 38, 36, 177, 97, 160, 102, 33, 137, 182, 169, 154, 116, 27, 12, 109, 51, 231, 100, 206, 73, 85, 147, 145, 116, 55, 17, 65, 102, 82, 213, + 28, 31, 31, 83, 213, 216, 166, 187, 169, 42, 186, 251, 0, 248, 98, 132, 150, 204, 68, 18, 153, 137, 36, 36, 33, 9, 219, 72, 34, 34, 200, 76, + 34, 130, 204, 100, 181, 74, 50, 69, 166, 200, 12, 64, 68, 196, 5, 219, 191, 93, 85, 124, 152, 224, 67, 216, 80, 213, 175, 116, 247, 75, 199, 71, + 199, 204, 57, 201, 28, 72, 66, 2, 219, 204, 57, 233, 54, 221, 77, 183, 233, 110, 186, 139, 170, 162, 187, 137, 16, 115, 78, 230, 156, 72, 194, 54, + 146, 216, 168, 170, 235, 192, 151, 185, 205, 54, 27, 22, 216, 126, 177, 170, 254, 143, 238, 102, 67, 18, 221, 13, 4, 82, 178, 94, 79, 92, 32, 5, + 17, 194, 54, 146, 48, 48, 198, 32, 50, 201, 76, 186, 155, 185, 20, 235, 245, 194, 122, 89, 232, 106, 220, 102, 206, 137, 109, 36, 192, 102, 206, 201, + 187, 68, 151, 191, 177, 202, 124, 54, 34, 238, 144, 196, 134, 109, 34, 130, 136, 32, 34, 144, 132, 109, 34, 130, 136, 32, 66, 216, 133, 4, 146, 200, + 12, 64, 100, 174, 144, 242, 203, 115, 214, 243, 32, 62, 76, 240, 33, 186, 155, 175, 63, 245, 244, 77, 219, 79, 101, 38, 182, 177, 77, 205, 133, 101, + 89, 176, 141, 36, 54, 236, 70, 18, 221, 141, 36, 54, 34, 196, 156, 133, 36, 36, 209, 221, 72, 66, 18, 182, 185, 237, 130, 237, 215, 248, 30, 174, + 102, 140, 97, 204, 175, 74, 58, 144, 196, 134, 36, 186, 155, 182, 17, 2, 9, 187, 81, 4, 237, 38, 51, 201, 76, 186, 155, 174, 162, 187, 168, 106, + 34, 19, 108, 186, 139, 182, 169, 46, 108, 112, 55, 182, 105, 55, 138, 96, 140, 193, 109, 221, 230, 239, 175, 86, 91, 91, 224, 59, 248, 35, 146, 120, + 143, 36, 34, 130, 204, 228, 93, 198, 54, 17, 137, 20, 72, 34, 34, 1, 35, 105, 13, 124, 97, 127, 255, 212, 73, 55, 31, 42, 248, 16, 221, 205, + 191, 244, 23, 255, 188, 171, 230, 87, 21, 90, 86, 171, 65, 8, 20, 129, 36, 170, 38, 27, 182, 145, 132, 109, 108, 99, 243, 142, 101, 153, 116, 55, + 27, 17, 129, 36, 36, 97, 27, 219, 84, 213, 53, 219, 87, 186, 155, 199, 31, 251, 24, 143, 63, 250, 24, 143, 63, 250, 152, 94, 125, 234, 89, 34, + 226, 5, 219, 175, 74, 66, 18, 146, 216, 112, 55, 10, 97, 55, 180, 145, 130, 136, 100, 206, 137, 219, 84, 21, 203, 156, 84, 53, 96, 186, 27, 219, + 140, 49, 176, 77, 119, 51, 231, 164, 109, 186, 77, 87, 51, 151, 133, 245, 122, 205, 178, 44, 47, 111, 111, 109, 125, 25, 241, 241, 188, 45, 66, 68, + 4, 153, 73, 102, 146, 153, 72, 66, 18, 239, 145, 32, 51, 136, 72, 108, 144, 68, 119, 3, 194, 237, 111, 206, 57, 127, 227, 228, 228, 132, 183, 222, + 186, 196, 135, 9, 62, 196, 55, 158, 254, 22, 115, 22, 115, 246, 83, 115, 214, 155, 110, 83, 221, 128, 144, 130, 136, 68, 18, 171, 213, 138, 213, 88, + 177, 33, 137, 170, 162, 187, 17, 16, 17, 116, 55, 221, 77, 119, 211, 221, 116, 55, 2, 36, 85, 68, 244, 103, 126, 236, 211, 82, 207, 196, 94, 185, + 123, 235, 167, 254, 218, 207, 238, 158, 57, 117, 199, 173, 174, 122, 163, 187, 145, 132, 109, 36, 17, 17, 72, 66, 1, 229, 166, 170, 232, 42, 150, 101, + 97, 35, 51, 201, 76, 192, 216, 102, 206, 201, 172, 162, 102, 97, 27, 219, 116, 155, 89, 141, 9, 20, 73, 102, 98, 27, 236, 95, 191, 99, 127, 239, + 138, 228, 79, 70, 4, 82, 176, 97, 155, 141, 170, 162, 187, 145, 68, 68, 32, 9, 16, 27, 146, 201, 12, 34, 2, 99, 66, 242, 106, 140, 207, 239, + 140, 173, 139, 221, 205, 15, 34, 248, 1, 116, 55, 115, 206, 87, 109, 255, 65, 85, 97, 155, 238, 194, 54, 153, 129, 109, 108, 83, 221, 100, 38, 99, + 12, 70, 38, 238, 34, 34, 136, 16, 27, 182, 217, 176, 141, 36, 102, 21, 6, 237, 239, 237, 143, 91, 7, 183, 182, 218, 222, 118, 247, 142, 237, 157, + 238, 222, 221, 222, 222, 201, 136, 184, 32, 137, 238, 102, 195, 54, 223, 43, 51, 8, 137, 141, 144, 216, 144, 32, 66, 116, 53, 85, 13, 54, 17, 193, + 172, 162, 187, 176, 65, 17, 100, 14, 108, 51, 231, 164, 187, 89, 150, 229, 237, 49, 198, 111, 218, 125, 151, 34, 158, 224, 29, 6, 76, 119, 19, 33, + 50, 19, 219, 188, 71, 18, 18, 68, 8, 73, 188, 103, 100, 146, 153, 207, 85, 213, 23, 14, 79, 142, 216, 223, 221, 231, 137, 199, 158, 224, 195, 4, + 63, 128, 111, 60, 253, 7, 236, 237, 237, 28, 86, 213, 111, 42, 2, 219, 116, 27, 48, 235, 245, 194, 156, 147, 238, 98, 206, 133, 8, 97, 155, 234, + 162, 219, 116, 55, 182, 145, 132, 36, 54, 36, 241, 14, 9, 68, 108, 175, 86, 59, 221, 181, 211, 221, 187, 213, 189, 219, 221, 123, 93, 189, 7, 236, + 72, 186, 213, 221, 116, 55, 221, 205, 70, 85, 81, 53, 89, 150, 53, 27, 145, 73, 132, 136, 8, 186, 138, 170, 166, 170, 49, 32, 137, 118, 51, 231, + 66, 119, 179, 94, 175, 169, 154, 184, 155, 238, 166, 187, 169, 42, 214, 235, 53, 182, 127, 127, 103, 103, 231, 181, 234, 122, 56, 20, 143, 100, 38, 153, + 34, 51, 136, 0, 27, 108, 147, 153, 100, 38, 153, 137, 36, 34, 2, 73, 72, 34, 34, 136, 8, 86, 171, 45, 219, 253, 63, 175, 74, 231, 239, 216, + 63, 21, 1, 162, 139, 39, 30, 125, 156, 15, 50, 248, 1, 29, 159, 172, 177, 249, 39, 171, 149, 46, 71, 232, 110, 48, 115, 153, 84, 21, 85, 69, + 132, 144, 196, 178, 76, 170, 154, 57, 27, 69, 96, 68, 119, 1, 98, 195, 54, 221, 205, 70, 132, 88, 229, 216, 157, 85, 103, 203, 190, 233, 246, 176, + 157, 224, 180, 73, 64, 183, 29, 75, 162, 187, 89, 173, 86, 100, 38, 153, 9, 152, 110, 211, 109, 186, 155, 28, 3, 100, 54, 50, 147, 57, 39, 153, + 65, 68, 224, 54, 203, 178, 96, 64, 145, 116, 23, 221, 147, 110, 19, 17, 116, 21, 174, 62, 92, 229, 248, 178, 32, 192, 159, 24, 35, 239, 228, 54, + 219, 128, 145, 2, 137, 219, 154, 136, 68, 130, 8, 209, 13, 18, 72, 16, 17, 68, 136, 140, 68, 248, 27, 224, 255, 101, 108, 15, 149, 59, 64, 213, + 10, 132, 249, 32, 193, 15, 168, 219, 204, 89, 207, 44, 203, 242, 251, 85, 69, 119, 211, 54, 146, 200, 76, 34, 130, 80, 80, 93, 40, 68, 102, 50, + 198, 138, 13, 41, 176, 141, 36, 36, 33, 9, 219, 140, 28, 8, 206, 84, 213, 71, 220, 222, 177, 123, 215, 238, 221, 238, 222, 107, 247, 94, 119, 239, + 131, 182, 184, 77, 18, 153, 137, 36, 36, 81, 213, 8, 8, 9, 108, 150, 101, 97, 206, 66, 18, 221, 133, 109, 164, 96, 89, 47, 84, 55, 146, 176, + 161, 187, 169, 106, 230, 44, 230, 156, 84, 21, 115, 22, 221, 253, 252, 214, 106, 245, 74, 87, 239, 71, 198, 147, 153, 177, 189, 90, 37, 138, 32, 51, + 200, 12, 34, 130, 213, 106, 69, 132, 176, 27, 219, 100, 6, 146, 200, 76, 36, 200, 72, 34, 226, 176, 187, 255, 219, 17, 171, 215, 203, 29, 128, 16, + 18, 230, 195, 4, 63, 160, 170, 102, 127, 119, 235, 86, 119, 253, 67, 80, 71, 4, 171, 213, 138, 213, 24, 216, 166, 187, 105, 27, 41, 248, 94, 82, + 96, 27, 219, 108, 216, 198, 54, 239, 177, 57, 235, 246, 125, 118, 111, 87, 247, 110, 117, 239, 181, 189, 219, 221, 123, 213, 181, 111, 247, 25, 73, 68, + 4, 221, 77, 85, 81, 85, 68, 4, 57, 6, 198, 68, 136, 238, 162, 187, 1, 97, 131, 36, 106, 78, 102, 21, 33, 17, 145, 96, 179, 44, 11, 27, + 17, 129, 109, 54, 236, 94, 34, 226, 107, 72, 13, 156, 14, 197, 143, 75, 65, 230, 64, 130, 136, 96, 140, 65, 102, 32, 37, 17, 65, 102, 34, 137, + 8, 145, 153, 68, 36, 82, 16, 17, 216, 254, 130, 237, 47, 74, 4, 32, 254, 152, 0, 241, 65, 130, 31, 208, 179, 207, 254, 33, 199, 39, 107, 230, + 236, 95, 5, 206, 71, 4, 221, 77, 219, 100, 38, 54, 116, 55, 35, 19, 119, 35, 65, 132, 176, 139, 136, 32, 34, 168, 42, 108, 19, 17, 68, 4, + 182, 81, 232, 84, 211, 31, 45, 123, 167, 187, 119, 186, 189, 227, 238, 93, 119, 239, 85, 213, 190, 225, 78, 254, 72, 119, 35, 9, 73, 216, 166, 187, + 9, 5, 17, 193, 214, 214, 54, 91, 91, 91, 68, 136, 174, 98, 46, 11, 85, 69, 102, 98, 160, 187, 104, 27, 27, 170, 76, 85, 97, 155, 170, 194, + 246, 43, 91, 91, 91, 47, 218, 30, 202, 184, 127, 107, 103, 247, 209, 49, 182, 168, 134, 49, 182, 128, 4, 68, 68, 18, 33, 34, 146, 136, 224, 93, + 98, 53, 6, 35, 147, 145, 137, 224, 235, 180, 255, 235, 85, 172, 14, 176, 184, 205, 128, 217, 144, 248, 48, 193, 15, 161, 38, 220, 188, 113, 244, 98, + 85, 255, 74, 119, 51, 231, 68, 130, 238, 6, 76, 102, 0, 70, 226, 29, 221, 69, 102, 242, 30, 73, 68, 4, 27, 17, 65, 102, 18, 17, 163, 237, + 143, 119, 247, 142, 237, 29, 187, 119, 186, 122, 183, 187, 119, 186, 123, 223, 246, 221, 220, 38, 137, 136, 192, 54, 182, 145, 32, 4, 146, 168, 42, 236, + 6, 76, 85, 35, 9, 99, 12, 116, 55, 203, 178, 80, 85, 132, 2, 27, 36, 97, 131, 36, 230, 156, 5, 122, 42, 34, 142, 5, 219, 33, 61, 250, + 137, 79, 124, 226, 236, 125, 247, 63, 192, 131, 15, 62, 196, 24, 43, 238, 191, 255, 126, 246, 246, 246, 57, 125, 250, 12, 99, 172, 200, 76, 36, 17, + 17, 100, 38, 182, 1, 3, 62, 95, 213, 255, 77, 106, 188, 37, 148, 2, 27, 12, 24, 227, 173, 154, 216, 205, 7, 9, 126, 8, 221, 197, 233, 51, + 123, 93, 85, 191, 4, 92, 138, 8, 36, 129, 141, 219, 72, 194, 230, 29, 153, 9, 136, 238, 166, 187, 137, 8, 50, 147, 238, 102, 195, 54, 27, 153, + 73, 102, 126, 188, 230, 220, 119, 123, 203, 221, 219, 118, 111, 219, 222, 110, 247, 105, 73, 119, 74, 98, 67, 18, 153, 137, 36, 36, 33, 5, 221, 69, + 85, 99, 67, 68, 16, 17, 40, 2, 33, 186, 139, 154, 147, 170, 194, 134, 101, 153, 72, 162, 187, 177, 77, 85, 97, 251, 149, 213, 106, 245, 135, 64, + 70, 228, 174, 164, 211, 23, 46, 92, 200, 245, 250, 132, 157, 157, 29, 246, 246, 246, 184, 247, 222, 123, 57, 125, 250, 52, 247, 222, 123, 47, 71, 71, + 71, 204, 89, 68, 4, 171, 213, 138, 13, 73, 220, 246, 70, 205, 250, 69, 183, 223, 104, 247, 221, 192, 54, 82, 27, 186, 81, 163, 240, 58, 146, 115, + 175, 158, 231, 131, 36, 63, 132, 183, 47, 95, 230, 238, 187, 239, 98, 89, 47, 23, 115, 228, 227, 17, 241, 47, 118, 155, 28, 3, 69, 128, 33, 199, + 96, 86, 209, 93, 8, 48, 70, 10, 34, 130, 170, 34, 51, 169, 42, 222, 35, 137, 238, 118, 72, 191, 43, 81, 109, 111, 217, 94, 25, 70, 117, 223, + 135, 248, 87, 51, 115, 63, 51, 137, 8, 34, 2, 219, 100, 36, 153, 66, 18, 146, 144, 4, 134, 145, 9, 18, 216, 116, 155, 165, 38, 27, 85, 69, + 119, 19, 145, 116, 55, 238, 166, 103, 45, 192, 151, 86, 171, 213, 75, 66, 139, 4, 15, 62, 248, 208, 195, 183, 110, 222, 252, 204, 193, 193, 173, 184, + 118, 245, 42, 115, 78, 46, 95, 190, 204, 209, 209, 17, 87, 174, 92, 225, 228, 228, 4, 73, 140, 28, 8, 17, 138, 217, 246, 183, 215, 235, 229, 239, + 183, 121, 46, 20, 7, 138, 184, 21, 210, 77, 164, 99, 164, 6, 219, 152, 115, 175, 190, 194, 135, 73, 126, 72, 111, 189, 125, 153, 251, 30, 184, 175, + 221, 253, 122, 100, 254, 213, 64, 103, 109, 35, 160, 221, 84, 53, 203, 156, 132, 4, 152, 110, 131, 2, 219, 84, 21, 17, 129, 109, 186, 155, 204, 68, + 18, 85, 165, 219, 126, 39, 34, 14, 128, 149, 97, 24, 71, 187, 31, 31, 99, 252, 149, 213, 106, 53, 248, 35, 146, 144, 68, 102, 48, 198, 32, 51, + 145, 68, 68, 144, 17, 84, 55, 118, 83, 213, 72, 208, 109, 140, 233, 110, 218, 208, 109, 170, 138, 185, 44, 244, 236, 231, 182, 183, 183, 127, 45, 20, + 7, 130, 67, 164, 163, 204, 188, 188, 179, 189, 115, 243, 240, 224, 224, 12, 104, 107, 189, 94, 198, 178, 172, 181, 172, 23, 186, 155, 237, 237, 109, 86, + 171, 213, 146, 138, 91, 192, 185, 154, 243, 55, 150, 245, 252, 146, 164, 239, 100, 230, 91, 25, 113, 49, 35, 222, 82, 196, 117, 41, 22, 103, 88, 136, + 147, 48, 55, 175, 93, 231, 195, 12, 126, 4, 181, 76, 94, 120, 245, 252, 211, 79, 62, 241, 196, 223, 150, 244, 159, 27, 143, 57, 39, 109, 211, 110, + 50, 147, 141, 42, 131, 68, 40, 176, 77, 102, 82, 85, 100, 38, 221, 141, 109, 50, 19, 73, 219, 221, 125, 150, 228, 117, 64, 108, 152, 141, 135, 35, + 98, 123, 206, 73, 102, 18, 17, 100, 38, 146, 0, 209, 54, 33, 80, 4, 182, 81, 8, 170, 153, 101, 36, 81, 221, 44, 115, 98, 55, 221, 141, 20, + 72, 98, 163, 171, 15, 50, 243, 183, 71, 142, 171, 224, 35, 224, 8, 116, 120, 237, 234, 181, 183, 35, 116, 126, 172, 86, 95, 202, 200, 143, 2, 119, + 67, 110, 129, 19, 36, 33, 187, 250, 96, 218, 111, 185, 251, 34, 112, 101, 172, 198, 141, 80, 92, 85, 232, 74, 70, 92, 27, 210, 65, 75, 19, 133, + 163, 154, 151, 206, 159, 227, 7, 53, 248, 17, 92, 60, 127, 157, 79, 61, 246, 168, 151, 101, 249, 31, 86, 57, 254, 66, 142, 252, 119, 157, 1, 221, + 156, 172, 139, 8, 209, 221, 128, 200, 8, 20, 193, 178, 76, 108, 19, 17, 116, 55, 146, 136, 8, 186, 27, 73, 43, 236, 125, 65, 27, 10, 16, 144, + 146, 30, 1, 97, 55, 221, 77, 102, 82, 53, 137, 8, 198, 24, 96, 19, 49, 232, 46, 50, 18, 73, 68, 36, 166, 153, 115, 97, 89, 22, 54, 164, + 100, 195, 134, 101, 89, 179, 44, 11, 22, 95, 219, 217, 217, 121, 86, 161, 67, 208, 33, 112, 8, 28, 73, 58, 1, 234, 182, 55, 187, 251, 91, 66, + 72, 10, 133, 36, 48, 182, 5, 51, 34, 22, 101, 158, 32, 29, 11, 142, 20, 113, 28, 210, 90, 168, 44, 250, 47, 124, 234, 113, 254, 233, 115, 47, + 115, 238, 252, 43, 252, 48, 6, 63, 130, 123, 238, 63, 69, 157, 52, 63, 243, 115, 159, 188, 242, 91, 95, 120, 225, 63, 149, 185, 127, 53, 198, 95, + 70, 77, 196, 130, 0, 41, 16, 5, 18, 115, 22, 27, 146, 168, 42, 108, 19, 17, 140, 49, 144, 68, 85, 33, 41, 35, 2, 119, 79, 192, 183, 157, + 150, 244, 88, 102, 0, 38, 51, 129, 166, 187, 145, 192, 110, 148, 3, 48, 93, 197, 136, 100, 86, 209, 109, 186, 155, 101, 153, 44, 203, 66, 230, 138, + 136, 64, 50, 39, 39, 199, 44, 203, 66, 85, 189, 188, 183, 187, 247, 143, 34, 227, 26, 112, 44, 233, 16, 56, 4, 142, 129, 69, 82, 73, 154, 192, + 20, 154, 10, 77, 161, 10, 81, 146, 166, 164, 10, 152, 72, 37, 169, 128, 146, 84, 141, 220, 96, 117, 243, 181, 239, 92, 224, 149, 243, 175, 240, 195, + 74, 126, 4, 119, 157, 189, 19, 4, 231, 158, 125, 59, 14, 15, 214, 151, 35, 245, 117, 227, 79, 43, 244, 104, 68, 48, 171, 168, 154, 72, 65, 87, + 113, 199, 233, 51, 156, 57, 115, 134, 101, 89, 120, 228, 145, 71, 56, 58, 58, 226, 201, 39, 159, 228, 214, 173, 91, 252, 228, 79, 254, 36, 175, 191, + 254, 250, 113, 70, 252, 222, 24, 227, 138, 224, 4, 180, 238, 238, 79, 41, 227, 95, 143, 136, 149, 36, 50, 69, 102, 32, 137, 136, 32, 51, 16, 2, + 243, 142, 145, 131, 101, 153, 156, 172, 79, 0, 1, 166, 219, 204, 217, 204, 57, 145, 68, 119, 179, 44, 203, 173, 213, 106, 245, 75, 123, 187, 123, 207, + 6, 28, 41, 226, 86, 72, 7, 146, 14, 37, 29, 41, 98, 29, 138, 147, 144, 214, 82, 172, 35, 99, 137, 136, 69, 210, 58, 165, 69, 210, 18, 210, + 130, 52, 37, 77, 80, 129, 74, 33, 55, 197, 208, 224, 165, 243, 231, 184, 118, 245, 109, 126, 20, 131, 31, 153, 48, 246, 246, 206, 86, 156, 28, 215, + 51, 217, 245, 55, 35, 243, 63, 137, 204, 159, 3, 157, 18, 1, 134, 136, 100, 119, 119, 135, 199, 31, 127, 130, 91, 183, 110, 241, 227, 63, 254, 227, + 92, 186, 116, 137, 123, 239, 189, 151, 87, 207, 191, 202, 197, 55, 47, 50, 114, 220, 112, 247, 137, 164, 221, 200, 60, 176, 122, 161, 253, 185, 204, 177, + 27, 25, 224, 102, 140, 164, 170, 217, 144, 132, 13, 166, 129, 96, 140, 21, 179, 138, 200, 96, 197, 138, 170, 70, 10, 164, 192, 158, 116, 55, 182, 153, + 203, 82, 17, 241, 197, 83, 251, 251, 191, 19, 210, 145, 164, 35, 208, 145, 196, 17, 112, 2, 44, 66, 133, 84, 18, 133, 84, 192, 148, 212, 130, 146, + 84, 130, 66, 42, 65, 11, 25, 201, 220, 246, 157, 87, 206, 241, 39, 33, 249, 17, 156, 61, 123, 39, 33, 129, 4, 88, 10, 228, 230, 234, 156, 253, + 27, 93, 253, 124, 40, 238, 207, 200, 7, 164, 72, 110, 59, 58, 58, 164, 170, 185, 124, 249, 45, 230, 156, 92, 187, 118, 157, 27, 55, 110, 112, 116, + 120, 200, 229, 203, 151, 233, 234, 175, 142, 49, 158, 202, 136, 107, 146, 174, 172, 151, 245, 67, 18, 127, 51, 51, 239, 16, 38, 115, 176, 97, 131, 36, + 198, 72, 4, 140, 145, 116, 55, 182, 89, 150, 133, 89, 147, 238, 166, 219, 204, 89, 84, 21, 27, 221, 205, 122, 189, 118, 119, 255, 218, 233, 253, 83, + 191, 176, 26, 227, 154, 20, 7, 146, 110, 69, 198, 129, 164, 195, 144, 142, 36, 173, 35, 98, 157, 210, 146, 17, 235, 144, 214, 138, 152, 33, 45, 138, + 88, 80, 76, 164, 137, 212, 142, 52, 136, 151, 206, 159, 227, 202, 245, 107, 252, 73, 17, 63, 162, 187, 31, 122, 132, 51, 41, 12, 132, 20, 216, 1, + 72, 110, 150, 246, 67, 109, 255, 27, 134, 127, 39, 34, 126, 114, 246, 114, 186, 27, 173, 215, 39, 236, 238, 238, 114, 120, 116, 140, 128, 174, 238, 154, + 243, 247, 182, 183, 183, 127, 97, 123, 107, 251, 21, 227, 43, 93, 117, 180, 244, 252, 143, 87, 171, 213, 127, 180, 94, 175, 137, 8, 50, 19, 73, 128, + 217, 216, 218, 218, 194, 110, 50, 130, 110, 35, 137, 234, 102, 89, 22, 192, 84, 65, 119, 179, 81, 85, 156, 156, 156, 208, 221, 191, 115, 199, 254, 169, + 255, 106, 119, 119, 247, 2, 102, 65, 58, 150, 56, 1, 142, 5, 107, 73, 19, 104, 65, 133, 212, 64, 73, 106, 67, 11, 44, 100, 11, 115, 219, 75, + 231, 95, 225, 79, 139, 248, 255, 224, 241, 199, 158, 32, 49, 141, 144, 91, 216, 97, 8, 1, 182, 115, 153, 243, 158, 118, 127, 118, 186, 127, 234, 228, + 100, 253, 185, 49, 242, 225, 101, 153, 187, 64, 217, 190, 132, 249, 202, 222, 238, 238, 63, 94, 141, 241, 166, 205, 9, 176, 92, 189, 118, 245, 161, 159, + 248, 236, 79, 252, 143, 171, 173, 173, 79, 188, 250, 234, 121, 50, 147, 155, 55, 111, 145, 25, 116, 23, 146, 216, 222, 222, 38, 34, 16, 198, 134, 182, + 89, 150, 133, 170, 162, 170, 17, 162, 109, 132, 56, 62, 62, 242, 178, 204, 47, 239, 237, 237, 253, 23, 167, 246, 247, 95, 5, 166, 96, 45, 233, 4, + 233, 4, 88, 11, 166, 160, 5, 109, 169, 3, 89, 162, 185, 173, 52, 124, 237, 244, 3, 156, 190, 117, 137, 243, 47, 63, 207, 159, 54, 241, 39, 224, + 137, 71, 31, 167, 99, 69, 244, 130, 109, 9, 75, 16, 186, 109, 100, 82, 85, 99, 233, 222, 61, 62, 57, 57, 211, 213, 123, 17, 234, 49, 198, 173, + 213, 106, 117, 212, 221, 216, 14, 131, 70, 68, 95, 186, 114, 249, 167, 158, 120, 226, 137, 95, 60, 60, 60, 188, 227, 51, 159, 249, 12, 111, 188, 241, + 6, 27, 103, 207, 158, 229, 249, 231, 159, 231, 129, 7, 30, 224, 245, 215, 95, 35, 51, 176, 77, 85, 97, 155, 57, 155, 170, 162, 230, 36, 16, 182, + 89, 230, 156, 213, 245, 155, 251, 123, 251, 255, 221, 254, 222, 222, 183, 109, 31, 2, 235, 148, 22, 96, 45, 105, 1, 38, 96, 192, 128, 21, 233, 188, + 126, 139, 186, 243, 14, 190, 243, 242, 75, 252, 179, 54, 248, 19, 240, 242, 249, 115, 108, 124, 252, 177, 199, 177, 100, 57, 12, 182, 49, 235, 57, 5, + 56, 165, 121, 199, 222, 222, 77, 221, 102, 59, 170, 42, 220, 173, 128, 64, 82, 131, 70, 142, 14, 233, 198, 133, 11, 23, 214, 146, 184, 120, 241, 34, + 175, 190, 250, 42, 79, 62, 249, 36, 111, 189, 245, 22, 103, 206, 156, 225, 190, 251, 238, 227, 141, 55, 94, 163, 170, 144, 68, 119, 211, 93, 128, 136, + 8, 10, 49, 171, 152, 115, 94, 147, 244, 143, 78, 157, 186, 227, 151, 183, 183, 182, 222, 182, 221, 33, 221, 2, 142, 145, 166, 208, 148, 100, 41, 124, + 112, 120, 145, 83, 251, 15, 240, 194, 185, 23, 249, 99, 87, 47, 241, 255, 7, 241, 167, 232, 241, 71, 159, 224, 93, 6, 91, 41, 176, 45, 144, 192, + 226, 93, 178, 45, 64, 25, 193, 213, 27, 55, 118, 151, 154, 255, 153, 34, 254, 214, 169, 253, 253, 237, 131, 195, 67, 30, 120, 224, 1, 174, 95, 191, + 206, 238, 238, 46, 25, 201, 193, 225, 45, 186, 139, 238, 166, 109, 220, 13, 4, 85, 197, 92, 150, 195, 174, 126, 118, 140, 241, 27, 219, 219, 219, 223, + 202, 204, 75, 145, 121, 41, 35, 46, 14, 233, 42, 104, 177, 228, 163, 213, 142, 199, 92, 243, 221, 87, 94, 226, 207, 18, 241, 207, 208, 39, 31, 255, + 56, 118, 19, 26, 204, 94, 99, 54, 36, 113, 155, 13, 152, 207, 253, 216, 147, 254, 39, 95, 255, 189, 59, 142, 79, 78, 254, 58, 240, 243, 57, 198, + 231, 20, 186, 43, 51, 119, 186, 91, 171, 28, 108, 111, 111, 179, 94, 214, 172, 151, 5, 139, 118, 247, 81, 47, 117, 177, 219, 207, 103, 196, 211, 171, + 213, 234, 133, 28, 249, 86, 68, 92, 141, 136, 203, 17, 113, 57, 34, 174, 167, 98, 145, 18, 187, 121, 233, 252, 203, 252, 89, 36, 254, 140, 250, 220, + 103, 63, 199, 119, 95, 251, 238, 30, 240, 216, 241, 241, 241, 39, 247, 246, 246, 158, 152, 203, 124, 48, 35, 246, 70, 142, 81, 93, 89, 221, 199, 118, + 95, 150, 116, 33, 35, 223, 204, 204, 43, 17, 113, 32, 116, 168, 208, 77, 73, 183, 34, 226, 48, 164, 117, 219, 30, 17, 188, 116, 254, 21, 254, 44, + 19, 255, 28, 240, 23, 223, 64, 127, 237, 65, 62, 251, 233, 207, 228, 181, 27, 215, 87, 115, 206, 40, 125, 211, 16, 0, 0, 0, 35, 73, 68, 65, + 84, 149, 164, 204, 8, 133, 132, 13, 22, 190, 173, 132, 22, 133, 166, 164, 186, 251, 158, 143, 248, 248, 248, 136, 103, 158, 125, 134, 127, 94, 252, 223, + 160, 16, 125, 12, 251, 15, 241, 139, 0, 0, 0, 0, 73, 69, 78, 68, 174, 66, 96, 130]) + +let testJpg = new Uint8Array([255, 216, 255, 224, 0, 16, 74, 70, 73, 70, 0, 1, 1, 1, 0, 96, 0, 96, 0, 0, 255, 219, 0, 67, 0, 2, 1, 1, 2, 1, 1, 2, + 2, 2, 2, 2, 2, 2, 2, 3, 5, 3, 3, 3, 3, 3, 6, 4, 4, 3, 5, 7, 6, 7, 7, 7, 6, 7, 7, 8, 9, 11, 9, 8, + 8, 10, 8, 7, 7, 10, 13, 10, 10, 11, 12, 12, 12, 12, 7, 9, 14, 15, 13, 12, 14, 11, 12, 12, 12, 255, 219, 0, 67, 1, 2, 2, + 2, 3, 3, 3, 6, 3, 3, 6, 12, 8, 7, 8, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, + 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 255, 192, + 0, 17, 8, 0, 226, 1, 216, 3, 1, 34, 0, 2, 17, 1, 3, 17, 1, 255, 196, 0, 31, 0, 0, 1, 5, 1, 1, 1, 1, 1, 1, 0, + 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 255, 196, 0, 181, 16, 0, 2, 1, 3, 3, 2, 4, 3, 5, + 5, 4, 4, 0, 0, 1, 125, 1, 2, 3, 0, 4, 17, 5, 18, 33, 49, 65, 6, 19, 81, 97, 7, 34, 113, 20, 50, 129, 145, 161, 8, 35, + 66, 177, 193, 21, 82, 209, 240, 36, 51, 98, 114, 130, 9, 10, 22, 23, 24, 25, 26, 37, 38, 39, 40, 41, 42, 52, 53, 54, 55, 56, 57, 58, + 67, 68, 69, 70, 71, 72, 73, 74, 83, 84, 85, 86, 87, 88, 89, 90, 99, 100, 101, 102, 103, 104, 105, 106, 115, 116, 117, 118, 119, 120, 121, 122, + 131, 132, 133, 134, 135, 136, 137, 138, 146, 147, 148, 149, 150, 151, 152, 153, 154, 162, 163, 164, 165, 166, 167, 168, 169, 170, 178, 179, 180, 181, 182, 183, + 184, 185, 186, 194, 195, 196, 197, 198, 199, 200, 201, 202, 210, 211, 212, 213, 214, 215, 216, 217, 218, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 241, + 242, 243, 244, 245, 246, 247, 248, 249, 250, 255, 196, 0, 31, 1, 0, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 1, + 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 255, 196, 0, 181, 17, 0, 2, 1, 2, 4, 4, 3, 4, 7, 5, 4, 4, 0, 1, 2, 119, 0, + 1, 2, 3, 17, 4, 5, 33, 49, 6, 18, 65, 81, 7, 97, 113, 19, 34, 50, 129, 8, 20, 66, 145, 161, 177, 193, 9, 35, 51, 82, 240, 21, + 98, 114, 209, 10, 22, 36, 52, 225, 37, 241, 23, 24, 25, 26, 38, 39, 40, 41, 42, 53, 54, 55, 56, 57, 58, 67, 68, 69, 70, 71, 72, 73, + 74, 83, 84, 85, 86, 87, 88, 89, 90, 99, 100, 101, 102, 103, 104, 105, 106, 115, 116, 117, 118, 119, 120, 121, 122, 130, 131, 132, 133, 134, 135, 136, + 137, 138, 146, 147, 148, 149, 150, 151, 152, 153, 154, 162, 163, 164, 165, 166, 167, 168, 169, 170, 178, 179, 180, 181, 182, 183, 184, 185, 186, 194, 195, 196, + 197, 198, 199, 200, 201, 202, 210, 211, 212, 213, 214, 215, 216, 217, 218, 226, 227, 228, 229, 230, 231, 232, 233, 234, 242, 243, 244, 245, 246, 247, 248, 249, + 250, 255, 218, 0, 12, 3, 1, 0, 2, 17, 3, 17, 0, 63, 0, 253, 16, 162, 138, 43, 252, 99, 63, 170, 2, 138, 40, 160, 2, 138, 40, 160, + 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, + 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, + 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, + 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, + 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, + 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, + 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, + 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, + 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, + 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, + 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, + 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, + 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, + 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, + 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, + 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, + 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, + 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, + 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, + 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, + 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, + 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, + 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, + 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, + 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, + 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, + 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, + 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, + 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, + 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, + 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, + 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, + 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, + 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, + 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, + 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, + 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, + 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, + 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, + 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, + 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, + 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, + 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, + 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, + 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, + 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, + 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, + 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, + 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, + 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, + 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, + 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, + 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, + 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, + 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, + 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 15, 255, 217]) + export {testPng, testJpg} \ No newline at end of file diff --git a/multimedia/image/image_js_standard/image/src/main/resources/base/element/string.json b/multimedia/image/image_js_standard/image/src/main/resources/base/element/string.json index 22af6ba2c..4522e38f2 100644 --- a/multimedia/image/image_js_standard/image/src/main/resources/base/element/string.json +++ b/multimedia/image/image_js_standard/image/src/main/resources/base/element/string.json @@ -1,12 +1,28 @@ -{ - "string": [ - { - "name": "entry_MainAbility", - "value": "ImageJSTestMain" - }, - { - "name": "mainability_description", - "value": "ImageJSTestMain Ability" - } - ] +{ + "string": [ + { + "name": "entry_MainAbility", + "value": "ImageJSTestMain" + }, + { + "name": "mainability_description", + "value": "ImageJSTestMain Ability" + }, + { + "name": "MainAbility_desc", + "value": "description" + }, + { + "name": "MainAbility_label", + "value": "label" + }, + { + "name": "TestAbility_desc", + "value": "description" + }, + { + "name": "TestAbility_label", + "value": "label" + } + ] } \ No newline at end of file -- GitLab