0s autopkgtest [10:54:43]: starting date and time: 2024-03-20 10:54:43+0000 0s autopkgtest [10:54:43]: git checkout: 4a1cd702 l/adt_testbed: don't blame the testbed for unsolvable build deps 0s autopkgtest [10:54:43]: host juju-7f2275-prod-proposed-migration-environment-2; command line: /home/ubuntu/autopkgtest/runner/autopkgtest --output-dir /tmp/autopkgtest-work.l82f4lw4/out --timeout-copy=6000 --setup-commands /home/ubuntu/autopkgtest-cloud/worker-config-production/setup-canonical.sh --apt-pocket=proposed=src:jruby --apt-upgrade jruby --timeout-short=300 --timeout-copy=20000 --timeout-build=20000 --env=ADT_TEST_TRIGGERS=jruby/9.4.6.0+ds-1ubuntu3 -- ssh -s /home/ubuntu/autopkgtest/ssh-setup/nova -- --flavor autopkgtest --security-groups autopkgtest-juju-7f2275-prod-proposed-migration-environment-2@bos03-arm64-14.secgroup --name adt-noble-arm64-jruby-20240320-105442-juju-7f2275-prod-proposed-migration-environment-2 --image adt/ubuntu-noble-arm64-server --keyname testbed-juju-7f2275-prod-proposed-migration-environment-2 --net-id=net_prod-proposed-migration -e TERM=linux -e ''"'"'http_proxy=http://squid.internal:3128'"'"'' -e ''"'"'https_proxy=http://squid.internal:3128'"'"'' -e ''"'"'no_proxy=127.0.0.1,127.0.1.1,login.ubuntu.com,localhost,localdomain,novalocal,internal,archive.ubuntu.com,ports.ubuntu.com,security.ubuntu.com,ddebs.ubuntu.com,changelogs.ubuntu.com,launchpadlibrarian.net,launchpadcontent.net,launchpad.net,10.24.0.0/24,keystone.ps5.canonical.com,objectstorage.prodstack5.canonical.com'"'"'' --mirror=http://ftpmaster.internal/ubuntu/ 67s autopkgtest [10:55:50]: testbed dpkg architecture: arm64 67s autopkgtest [10:55:50]: testbed apt version: 2.7.12 67s autopkgtest [10:55:50]: @@@@@@@@@@@@@@@@@@@@ test bed setup 67s Get:1 http://ftpmaster.internal/ubuntu noble-proposed InRelease [117 kB] 69s Get:2 http://ftpmaster.internal/ubuntu noble-proposed/multiverse Sources [52.7 kB] 69s Get:3 http://ftpmaster.internal/ubuntu noble-proposed/restricted Sources [6540 B] 69s Get:4 http://ftpmaster.internal/ubuntu noble-proposed/universe Sources [3766 kB] 69s Get:5 http://ftpmaster.internal/ubuntu noble-proposed/main Sources [496 kB] 69s Get:6 http://ftpmaster.internal/ubuntu noble-proposed/main arm64 Packages [670 kB] 69s Get:7 http://ftpmaster.internal/ubuntu noble-proposed/main arm64 c-n-f Metadata [3144 B] 69s Get:8 http://ftpmaster.internal/ubuntu noble-proposed/restricted arm64 Packages [41.7 kB] 69s Get:9 http://ftpmaster.internal/ubuntu noble-proposed/restricted arm64 c-n-f Metadata [116 B] 69s Get:10 http://ftpmaster.internal/ubuntu noble-proposed/universe arm64 Packages [4234 kB] 69s Get:11 http://ftpmaster.internal/ubuntu noble-proposed/universe arm64 c-n-f Metadata [8528 B] 69s Get:12 http://ftpmaster.internal/ubuntu noble-proposed/multiverse arm64 Packages [56.7 kB] 69s Get:13 http://ftpmaster.internal/ubuntu noble-proposed/multiverse arm64 c-n-f Metadata [116 B] 70s Fetched 9452 kB in 2s (5284 kB/s) 70s Reading package lists... 73s Reading package lists... 73s Building dependency tree... 73s Reading state information... 74s Calculating upgrade... 74s 0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded. 75s Reading package lists... 75s Building dependency tree... 75s Reading state information... 76s 0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded. 76s Hit:1 http://ftpmaster.internal/ubuntu noble InRelease 76s Hit:2 http://ftpmaster.internal/ubuntu noble-updates InRelease 76s Hit:3 http://ftpmaster.internal/ubuntu noble-security InRelease 76s Hit:4 http://ftpmaster.internal/ubuntu noble-proposed InRelease 77s Reading package lists... 77s Reading package lists... 78s Building dependency tree... 78s Reading state information... 78s Calculating upgrade... 79s 0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded. 79s Reading package lists... 79s Building dependency tree... 79s Reading state information... 80s 0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded. 83s autopkgtest [10:56:06]: testbed running kernel: Linux 6.8.0-11-generic #11-Ubuntu SMP PREEMPT_DYNAMIC Wed Feb 14 02:53:31 UTC 2024 83s autopkgtest [10:56:06]: @@@@@@@@@@@@@@@@@@@@ apt-source jruby 86s Get:1 http://ftpmaster.internal/ubuntu noble-proposed/universe jruby 9.4.6.0+ds-1ubuntu3 (dsc) [3591 B] 86s Get:2 http://ftpmaster.internal/ubuntu noble-proposed/universe jruby 9.4.6.0+ds-1ubuntu3 (tar) [15.2 MB] 86s Get:3 http://ftpmaster.internal/ubuntu noble-proposed/universe jruby 9.4.6.0+ds-1ubuntu3 (tar) [6204 kB] 86s Get:4 http://ftpmaster.internal/ubuntu noble-proposed/universe jruby 9.4.6.0+ds-1ubuntu3 (diff) [39.4 kB] 86s gpgv: Signature made Wed Mar 20 06:57:01 2024 UTC 86s gpgv: using RSA key 92978A6E195E4921825F7FF0F34F09744E9F5DD9 86s gpgv: Can't check signature: No public key 86s dpkg-source: warning: cannot verify inline signature for ./jruby_9.4.6.0+ds-1ubuntu3.dsc: no acceptable signature found 87s autopkgtest [10:56:10]: testing package jruby version 9.4.6.0+ds-1ubuntu3 89s autopkgtest [10:56:12]: build not needed 94s autopkgtest [10:56:17]: test smoke: preparing testbed 99s Reading package lists... 99s Building dependency tree... 99s Reading state information... 100s Starting pkgProblemResolver with broken count: 0 100s Starting 2 pkgProblemResolver with broken count: 0 100s Done 100s The following additional packages will be installed: 100s ca-certificates-java default-jre-headless fontconfig-config 100s fonts-dejavu-core fonts-dejavu-mono java-common jruby libasm-java libasound2 100s libasound2-data libavahi-client3 libavahi-common-data libavahi-common3 100s libbackport9-java libcups2 libdirgra-java libfixposix4t64 libfontconfig1 100s libgraphite2-3 libharfbuzz0b libhawtjni-runtime-java libheadius-options-java 100s libinvokebinder-java libjansi-native-java libjansi1-java libjcodings-java 100s libjffi-java libjffi-jni libjitescript-java libjline2-java 100s libjnr-constants-java libjnr-enxio-java libjnr-ffi-java libjnr-netdb-java 100s libjnr-posix-java libjnr-unixsocket-java libjnr-x86asm-java 101s libjoda-time-java libjpeg-turbo8 libjpeg8 libjruby-joni-java libjzlib-java 101s liblcms2-2 libpcsclite1 libsnakeyaml-engine-java openjdk-21-jre-headless 101s Suggested packages: 101s default-jre libasound2-plugins alsa-utils cups-common 101s libheadius-options-java-doc libinvokebinder-java-doc libjnr-ffi-java-doc 101s libjnr-netdb-java-doc libjnr-posix-java-doc libjoda-convert-java 101s liblcms2-utils pcscd libnss-mdns fonts-dejavu-extra fonts-ipafont-gothic 101s fonts-ipafont-mincho fonts-wqy-microhei | fonts-wqy-zenhei fonts-indic 101s Recommended packages: 101s fonts-lato alsa-ucm-conf alsa-topology-conf 101s The following NEW packages will be installed: 101s autopkgtest-satdep ca-certificates-java default-jre-headless 101s fontconfig-config fonts-dejavu-core fonts-dejavu-mono java-common jruby 101s libasm-java libasound2 libasound2-data libavahi-client3 libavahi-common-data 101s libavahi-common3 libbackport9-java libcups2 libdirgra-java libfixposix4t64 101s libfontconfig1 libgraphite2-3 libharfbuzz0b libhawtjni-runtime-java 101s libheadius-options-java libinvokebinder-java libjansi-native-java 101s libjansi1-java libjcodings-java libjffi-java libjffi-jni libjitescript-java 101s libjline2-java libjnr-constants-java libjnr-enxio-java libjnr-ffi-java 101s libjnr-netdb-java libjnr-posix-java libjnr-unixsocket-java 101s libjnr-x86asm-java libjoda-time-java libjpeg-turbo8 libjpeg8 101s libjruby-joni-java libjzlib-java liblcms2-2 libpcsclite1 101s libsnakeyaml-engine-java openjdk-21-jre-headless 101s 0 upgraded, 47 newly installed, 0 to remove and 0 not upgraded. 101s Need to get 88.4 MB/88.4 MB of archives. 101s After this operation, 269 MB of additional disk space will be used. 101s Get:1 /tmp/autopkgtest.nFBjtB/1-autopkgtest-satdep.deb autopkgtest-satdep arm64 0 [704 B] 101s Get:2 http://ftpmaster.internal/ubuntu noble/main arm64 ca-certificates-java all 20240118 [11.6 kB] 101s Get:3 http://ftpmaster.internal/ubuntu noble/main arm64 java-common all 0.75+exp1 [6798 B] 101s Get:4 http://ftpmaster.internal/ubuntu noble/main arm64 libavahi-common-data arm64 0.8-13ubuntu2 [29.5 kB] 101s Get:5 http://ftpmaster.internal/ubuntu noble/main arm64 libavahi-common3 arm64 0.8-13ubuntu2 [23.2 kB] 101s Get:6 http://ftpmaster.internal/ubuntu noble/main arm64 libavahi-client3 arm64 0.8-13ubuntu2 [27.3 kB] 101s Get:7 http://ftpmaster.internal/ubuntu noble/main arm64 libcups2 arm64 2.4.6-0ubuntu3 [270 kB] 101s Get:8 http://ftpmaster.internal/ubuntu noble/main arm64 liblcms2-2 arm64 2.14-2 [159 kB] 102s Get:9 http://ftpmaster.internal/ubuntu noble/main arm64 libjpeg-turbo8 arm64 2.1.5-2ubuntu1 [160 kB] 102s Get:10 http://ftpmaster.internal/ubuntu noble/main arm64 libjpeg8 arm64 8c-2ubuntu11 [2148 B] 102s Get:11 http://ftpmaster.internal/ubuntu noble/main arm64 fonts-dejavu-mono all 2.37-8 [502 kB] 102s Get:12 http://ftpmaster.internal/ubuntu noble/main arm64 fonts-dejavu-core all 2.37-8 [835 kB] 102s Get:13 http://ftpmaster.internal/ubuntu noble/main arm64 fontconfig-config arm64 2.15.0-1ubuntu1 [37.0 kB] 102s Get:14 http://ftpmaster.internal/ubuntu noble/main arm64 libfontconfig1 arm64 2.15.0-1ubuntu1 [142 kB] 102s Get:15 http://ftpmaster.internal/ubuntu noble/main arm64 libasound2-data all 1.2.10-3build1 [20.7 kB] 102s Get:16 http://ftpmaster.internal/ubuntu noble/main arm64 libasound2 arm64 1.2.10-3build1 [386 kB] 102s Get:17 http://ftpmaster.internal/ubuntu noble/main arm64 libgraphite2-3 arm64 1.3.14-2 [81.5 kB] 102s Get:18 http://ftpmaster.internal/ubuntu noble/main arm64 libharfbuzz0b arm64 8.3.0-2 [463 kB] 102s Get:19 http://ftpmaster.internal/ubuntu noble/main arm64 libpcsclite1 arm64 2.0.0-1 [21.2 kB] 102s Get:20 http://ftpmaster.internal/ubuntu noble/main arm64 openjdk-21-jre-headless arm64 21.0.2+13-2 [45.8 MB] 105s Get:21 http://ftpmaster.internal/ubuntu noble/main arm64 default-jre-headless arm64 2:1.21-75+exp1 [3096 B] 105s Get:22 http://ftpmaster.internal/ubuntu noble/universe arm64 libasm-java all 9.6~us1-0ubuntu1 [386 kB] 105s Get:23 http://ftpmaster.internal/ubuntu noble/universe arm64 libbackport9-java all 1.10-2 [13.2 kB] 105s Get:24 http://ftpmaster.internal/ubuntu noble/universe arm64 libdirgra-java all 0.4-2 [21.6 kB] 105s Get:25 http://ftpmaster.internal/ubuntu noble/universe arm64 libfixposix4t64 arm64 1:0.5.1-1+nmu1.1 [16.9 kB] 105s Get:26 http://ftpmaster.internal/ubuntu noble/universe arm64 libheadius-options-java all 1.7-1 [18.2 kB] 105s Get:27 http://ftpmaster.internal/ubuntu noble/universe arm64 libinvokebinder-java all 1.13-1 [51.7 kB] 105s Get:28 http://ftpmaster.internal/ubuntu noble/universe arm64 libhawtjni-runtime-java all 1.18-1 [28.9 kB] 105s Get:29 http://ftpmaster.internal/ubuntu noble/universe arm64 libjansi-native-java all 1.8-2 [24.1 kB] 105s Get:30 http://ftpmaster.internal/ubuntu noble/universe arm64 libjansi1-java all 1.18-3ubuntu1 [56.0 kB] 105s Get:31 http://ftpmaster.internal/ubuntu noble/universe arm64 libjcodings-java all 1.0.58-1 [1474 kB] 105s Get:32 http://ftpmaster.internal/ubuntu noble/universe arm64 libjffi-jni arm64 1.3.13+ds-1 [29.8 kB] 105s Get:33 http://ftpmaster.internal/ubuntu noble/universe arm64 libjffi-java all 1.3.13+ds-1 [112 kB] 105s Get:34 http://ftpmaster.internal/ubuntu noble/universe arm64 libjitescript-java all 0.4.3-1 [24.4 kB] 105s Get:35 http://ftpmaster.internal/ubuntu noble/universe arm64 libjline2-java all 2.14.6-5 [150 kB] 105s Get:36 http://ftpmaster.internal/ubuntu noble/universe arm64 libjnr-constants-java all 0.10.4-2 [1397 kB] 105s Get:37 http://ftpmaster.internal/ubuntu noble/universe arm64 libjnr-x86asm-java all 1.0.2-5.1 [207 kB] 105s Get:38 http://ftpmaster.internal/ubuntu noble/universe arm64 libjnr-ffi-java all 2.2.15-2 [627 kB] 105s Get:39 http://ftpmaster.internal/ubuntu noble/universe arm64 libjnr-enxio-java all 0.32.16-1 [33.7 kB] 105s Get:40 http://ftpmaster.internal/ubuntu noble/universe arm64 libjnr-netdb-java all 1.1.6-1.1 [58.8 kB] 105s Get:41 http://ftpmaster.internal/ubuntu noble/universe arm64 libjnr-posix-java all 3.1.18-1 [267 kB] 105s Get:42 http://ftpmaster.internal/ubuntu noble/universe arm64 libjnr-unixsocket-java all 0.38.21-2 [46.9 kB] 105s Get:43 http://ftpmaster.internal/ubuntu noble/universe arm64 libjoda-time-java all 2.10.14-1 [535 kB] 105s Get:44 http://ftpmaster.internal/ubuntu noble/universe arm64 libjruby-joni-java all 2.2.1-1 [222 kB] 105s Get:45 http://ftpmaster.internal/ubuntu noble/universe arm64 libjzlib-java all 1.1.3-3 [76.8 kB] 105s Get:46 http://ftpmaster.internal/ubuntu noble/universe arm64 libsnakeyaml-engine-java all 2.7+ds-3 [258 kB] 105s Get:47 http://ftpmaster.internal/ubuntu noble-proposed/universe arm64 jruby all 9.4.6.0+ds-1ubuntu3 [33.3 MB] 107s Fetched 88.4 MB in 6s (15.4 MB/s) 107s Selecting previously unselected package ca-certificates-java. 107s (Reading database ... (Reading database ... 5% (Reading database ... 10% (Reading database ... 15% (Reading database ... 20% (Reading database ... 25% (Reading database ... 30% (Reading database ... 35% (Reading database ... 40% (Reading database ... 45% (Reading database ... 50% (Reading database ... 55% (Reading database ... 60% (Reading database ... 65% (Reading database ... 70% (Reading database ... 75% (Reading database ... 80% (Reading database ... 85% (Reading database ... 90% (Reading database ... 95% (Reading database ... 100% (Reading database ... 74758 files and directories currently installed.) 107s Preparing to unpack .../00-ca-certificates-java_20240118_all.deb ... 107s Unpacking ca-certificates-java (20240118) ... 107s Selecting previously unselected package java-common. 107s Preparing to unpack .../01-java-common_0.75+exp1_all.deb ... 107s Unpacking java-common (0.75+exp1) ... 107s Selecting previously unselected package libavahi-common-data:arm64. 107s Preparing to unpack .../02-libavahi-common-data_0.8-13ubuntu2_arm64.deb ... 107s Unpacking libavahi-common-data:arm64 (0.8-13ubuntu2) ... 107s Selecting previously unselected package libavahi-common3:arm64. 107s Preparing to unpack .../03-libavahi-common3_0.8-13ubuntu2_arm64.deb ... 107s Unpacking libavahi-common3:arm64 (0.8-13ubuntu2) ... 107s Selecting previously unselected package libavahi-client3:arm64. 107s Preparing to unpack .../04-libavahi-client3_0.8-13ubuntu2_arm64.deb ... 107s Unpacking libavahi-client3:arm64 (0.8-13ubuntu2) ... 107s Selecting previously unselected package libcups2:arm64. 107s Preparing to unpack .../05-libcups2_2.4.6-0ubuntu3_arm64.deb ... 107s Unpacking libcups2:arm64 (2.4.6-0ubuntu3) ... 107s Selecting previously unselected package liblcms2-2:arm64. 107s Preparing to unpack .../06-liblcms2-2_2.14-2_arm64.deb ... 107s Unpacking liblcms2-2:arm64 (2.14-2) ... 107s Selecting previously unselected package libjpeg-turbo8:arm64. 107s Preparing to unpack .../07-libjpeg-turbo8_2.1.5-2ubuntu1_arm64.deb ... 107s Unpacking libjpeg-turbo8:arm64 (2.1.5-2ubuntu1) ... 107s Selecting previously unselected package libjpeg8:arm64. 107s Preparing to unpack .../08-libjpeg8_8c-2ubuntu11_arm64.deb ... 107s Unpacking libjpeg8:arm64 (8c-2ubuntu11) ... 107s Selecting previously unselected package fonts-dejavu-mono. 107s Preparing to unpack .../09-fonts-dejavu-mono_2.37-8_all.deb ... 107s Unpacking fonts-dejavu-mono (2.37-8) ... 107s Selecting previously unselected package fonts-dejavu-core. 107s Preparing to unpack .../10-fonts-dejavu-core_2.37-8_all.deb ... 107s Unpacking fonts-dejavu-core (2.37-8) ... 108s Selecting previously unselected package fontconfig-config. 108s Preparing to unpack .../11-fontconfig-config_2.15.0-1ubuntu1_arm64.deb ... 108s Unpacking fontconfig-config (2.15.0-1ubuntu1) ... 108s Selecting previously unselected package libfontconfig1:arm64. 108s Preparing to unpack .../12-libfontconfig1_2.15.0-1ubuntu1_arm64.deb ... 108s Unpacking libfontconfig1:arm64 (2.15.0-1ubuntu1) ... 108s Selecting previously unselected package libasound2-data. 108s Preparing to unpack .../13-libasound2-data_1.2.10-3build1_all.deb ... 108s Unpacking libasound2-data (1.2.10-3build1) ... 108s Selecting previously unselected package libasound2:arm64. 108s Preparing to unpack .../14-libasound2_1.2.10-3build1_arm64.deb ... 108s Unpacking libasound2:arm64 (1.2.10-3build1) ... 108s Selecting previously unselected package libgraphite2-3:arm64. 108s Preparing to unpack .../15-libgraphite2-3_1.3.14-2_arm64.deb ... 108s Unpacking libgraphite2-3:arm64 (1.3.14-2) ... 108s Selecting previously unselected package libharfbuzz0b:arm64. 108s Preparing to unpack .../16-libharfbuzz0b_8.3.0-2_arm64.deb ... 108s Unpacking libharfbuzz0b:arm64 (8.3.0-2) ... 108s Selecting previously unselected package libpcsclite1:arm64. 108s Preparing to unpack .../17-libpcsclite1_2.0.0-1_arm64.deb ... 108s Unpacking libpcsclite1:arm64 (2.0.0-1) ... 108s Selecting previously unselected package openjdk-21-jre-headless:arm64. 108s Preparing to unpack .../18-openjdk-21-jre-headless_21.0.2+13-2_arm64.deb ... 108s Unpacking openjdk-21-jre-headless:arm64 (21.0.2+13-2) ... 110s Selecting previously unselected package default-jre-headless. 110s Preparing to unpack .../19-default-jre-headless_2%3a1.21-75+exp1_arm64.deb ... 110s Unpacking default-jre-headless (2:1.21-75+exp1) ... 110s Selecting previously unselected package libasm-java. 110s Preparing to unpack .../20-libasm-java_9.6~us1-0ubuntu1_all.deb ... 110s Unpacking libasm-java (9.6~us1-0ubuntu1) ... 110s Selecting previously unselected package libbackport9-java. 110s Preparing to unpack .../21-libbackport9-java_1.10-2_all.deb ... 110s Unpacking libbackport9-java (1.10-2) ... 110s Selecting previously unselected package libdirgra-java. 110s Preparing to unpack .../22-libdirgra-java_0.4-2_all.deb ... 110s Unpacking libdirgra-java (0.4-2) ... 110s Selecting previously unselected package libfixposix4t64:arm64. 110s Preparing to unpack .../23-libfixposix4t64_1%3a0.5.1-1+nmu1.1_arm64.deb ... 110s Unpacking libfixposix4t64:arm64 (1:0.5.1-1+nmu1.1) ... 110s Selecting previously unselected package libheadius-options-java. 110s Preparing to unpack .../24-libheadius-options-java_1.7-1_all.deb ... 110s Unpacking libheadius-options-java (1.7-1) ... 110s Selecting previously unselected package libinvokebinder-java. 110s Preparing to unpack .../25-libinvokebinder-java_1.13-1_all.deb ... 110s Unpacking libinvokebinder-java (1.13-1) ... 110s Selecting previously unselected package libhawtjni-runtime-java. 110s Preparing to unpack .../26-libhawtjni-runtime-java_1.18-1_all.deb ... 110s Unpacking libhawtjni-runtime-java (1.18-1) ... 110s Selecting previously unselected package libjansi-native-java. 110s Preparing to unpack .../27-libjansi-native-java_1.8-2_all.deb ... 110s Unpacking libjansi-native-java (1.8-2) ... 110s Selecting previously unselected package libjansi1-java. 110s Preparing to unpack .../28-libjansi1-java_1.18-3ubuntu1_all.deb ... 110s Unpacking libjansi1-java (1.18-3ubuntu1) ... 110s Selecting previously unselected package libjcodings-java. 110s Preparing to unpack .../29-libjcodings-java_1.0.58-1_all.deb ... 110s Unpacking libjcodings-java (1.0.58-1) ... 110s Selecting previously unselected package libjffi-jni:arm64. 110s Preparing to unpack .../30-libjffi-jni_1.3.13+ds-1_arm64.deb ... 110s Unpacking libjffi-jni:arm64 (1.3.13+ds-1) ... 110s Selecting previously unselected package libjffi-java. 110s Preparing to unpack .../31-libjffi-java_1.3.13+ds-1_all.deb ... 110s Unpacking libjffi-java (1.3.13+ds-1) ... 110s Selecting previously unselected package libjitescript-java. 110s Preparing to unpack .../32-libjitescript-java_0.4.3-1_all.deb ... 110s Unpacking libjitescript-java (0.4.3-1) ... 110s Selecting previously unselected package libjline2-java. 110s Preparing to unpack .../33-libjline2-java_2.14.6-5_all.deb ... 110s Unpacking libjline2-java (2.14.6-5) ... 110s Selecting previously unselected package libjnr-constants-java. 110s Preparing to unpack .../34-libjnr-constants-java_0.10.4-2_all.deb ... 110s Unpacking libjnr-constants-java (0.10.4-2) ... 110s Selecting previously unselected package libjnr-x86asm-java. 110s Preparing to unpack .../35-libjnr-x86asm-java_1.0.2-5.1_all.deb ... 110s Unpacking libjnr-x86asm-java (1.0.2-5.1) ... 110s Selecting previously unselected package libjnr-ffi-java. 110s Preparing to unpack .../36-libjnr-ffi-java_2.2.15-2_all.deb ... 110s Unpacking libjnr-ffi-java (2.2.15-2) ... 110s Selecting previously unselected package libjnr-enxio-java. 110s Preparing to unpack .../37-libjnr-enxio-java_0.32.16-1_all.deb ... 110s Unpacking libjnr-enxio-java (0.32.16-1) ... 110s Selecting previously unselected package libjnr-netdb-java. 110s Preparing to unpack .../38-libjnr-netdb-java_1.1.6-1.1_all.deb ... 110s Unpacking libjnr-netdb-java (1.1.6-1.1) ... 110s Selecting previously unselected package libjnr-posix-java. 110s Preparing to unpack .../39-libjnr-posix-java_3.1.18-1_all.deb ... 110s Unpacking libjnr-posix-java (3.1.18-1) ... 110s Selecting previously unselected package libjnr-unixsocket-java. 110s Preparing to unpack .../40-libjnr-unixsocket-java_0.38.21-2_all.deb ... 110s Unpacking libjnr-unixsocket-java (0.38.21-2) ... 110s Selecting previously unselected package libjoda-time-java. 110s Preparing to unpack .../41-libjoda-time-java_2.10.14-1_all.deb ... 110s Unpacking libjoda-time-java (2.10.14-1) ... 110s Selecting previously unselected package libjruby-joni-java. 111s Preparing to unpack .../42-libjruby-joni-java_2.2.1-1_all.deb ... 111s Unpacking libjruby-joni-java (2.2.1-1) ... 111s Selecting previously unselected package libjzlib-java. 111s Preparing to unpack .../43-libjzlib-java_1.1.3-3_all.deb ... 111s Unpacking libjzlib-java (1.1.3-3) ... 111s Selecting previously unselected package libsnakeyaml-engine-java. 111s Preparing to unpack .../44-libsnakeyaml-engine-java_2.7+ds-3_all.deb ... 111s Unpacking libsnakeyaml-engine-java (2.7+ds-3) ... 111s Selecting previously unselected package jruby. 111s Preparing to unpack .../45-jruby_9.4.6.0+ds-1ubuntu3_all.deb ... 111s Unpacking jruby (9.4.6.0+ds-1ubuntu3) ... 111s Selecting previously unselected package autopkgtest-satdep. 111s Preparing to unpack .../46-1-autopkgtest-satdep.deb ... 111s Unpacking autopkgtest-satdep (0) ... 111s Setting up libgraphite2-3:arm64 (1.3.14-2) ... 111s Setting up liblcms2-2:arm64 (2.14-2) ... 111s Setting up libfixposix4t64:arm64 (1:0.5.1-1+nmu1.1) ... 111s Setting up java-common (0.75+exp1) ... 111s Setting up libasm-java (9.6~us1-0ubuntu1) ... 111s Setting up libheadius-options-java (1.7-1) ... 111s Setting up libjnr-x86asm-java (1.0.2-5.1) ... 111s Setting up libjzlib-java (1.1.3-3) ... 111s Setting up libbackport9-java (1.10-2) ... 111s Setting up libasound2-data (1.2.10-3build1) ... 111s Setting up libjitescript-java (0.4.3-1) ... 111s Setting up libsnakeyaml-engine-java (2.7+ds-3) ... 111s Setting up libavahi-common-data:arm64 (0.8-13ubuntu2) ... 111s Setting up fonts-dejavu-mono (2.37-8) ... 111s Setting up fonts-dejavu-core (2.37-8) ... 111s Setting up libpcsclite1:arm64 (2.0.0-1) ... 111s Setting up libjpeg-turbo8:arm64 (2.1.5-2ubuntu1) ... 111s Setting up libjoda-time-java (2.10.14-1) ... 111s Setting up libjcodings-java (1.0.58-1) ... 111s Setting up libasound2:arm64 (1.2.10-3build1) ... 111s Setting up libharfbuzz0b:arm64 (8.3.0-2) ... 111s Setting up libinvokebinder-java (1.13-1) ... 111s Setting up libjffi-jni:arm64 (1.3.13+ds-1) ... 111s Setting up ca-certificates-java (20240118) ... 111s No JRE found. Skipping Java certificates setup. 111s Setting up libhawtjni-runtime-java (1.18-1) ... 111s Setting up libdirgra-java (0.4-2) ... 111s Setting up libjnr-constants-java (0.10.4-2) ... 111s Setting up libjpeg8:arm64 (8c-2ubuntu11) ... 111s Setting up libjffi-java (1.3.13+ds-1) ... 111s Setting up libjruby-joni-java (2.2.1-1) ... 111s Setting up fontconfig-config (2.15.0-1ubuntu1) ... 112s Setting up libavahi-common3:arm64 (0.8-13ubuntu2) ... 112s Setting up libjansi-native-java (1.8-2) ... 112s Setting up libjansi1-java (1.18-3ubuntu1) ... 112s Setting up libfontconfig1:arm64 (2.15.0-1ubuntu1) ... 112s Setting up libjline2-java (2.14.6-5) ... 112s Setting up libavahi-client3:arm64 (0.8-13ubuntu2) ... 112s Setting up libjnr-ffi-java (2.2.15-2) ... 112s Setting up libjnr-enxio-java (0.32.16-1) ... 112s Setting up libcups2:arm64 (2.4.6-0ubuntu3) ... 112s Setting up libjnr-netdb-java (1.1.6-1.1) ... 112s Setting up libjnr-posix-java (3.1.18-1) ... 112s Setting up openjdk-21-jre-headless:arm64 (21.0.2+13-2) ... 112s update-alternatives: using /usr/lib/jvm/java-21-openjdk-arm64/bin/java to provide /usr/bin/java (java) in auto mode 112s update-alternatives: using /usr/lib/jvm/java-21-openjdk-arm64/bin/jpackage to provide /usr/bin/jpackage (jpackage) in auto mode 112s update-alternatives: using /usr/lib/jvm/java-21-openjdk-arm64/bin/keytool to provide /usr/bin/keytool (keytool) in auto mode 112s update-alternatives: using /usr/lib/jvm/java-21-openjdk-arm64/bin/rmiregistry to provide /usr/bin/rmiregistry (rmiregistry) in auto mode 112s update-alternatives: using /usr/lib/jvm/java-21-openjdk-arm64/lib/jexec to provide /usr/bin/jexec (jexec) in auto mode 112s Setting up libjnr-unixsocket-java (0.38.21-2) ... 112s Processing triggers for libc-bin (2.39-0ubuntu2) ... 112s Processing triggers for man-db (2.12.0-3) ... 113s Processing triggers for ca-certificates-java (20240118) ... 113s Adding debian:ACCVRAIZ1.pem 113s Adding debian:AC_RAIZ_FNMT-RCM.pem 113s Adding debian:AC_RAIZ_FNMT-RCM_SERVIDORES_SEGUROS.pem 113s Adding debian:ANF_Secure_Server_Root_CA.pem 113s Adding debian:Actalis_Authentication_Root_CA.pem 113s Adding debian:AffirmTrust_Commercial.pem 113s Adding debian:AffirmTrust_Networking.pem 113s Adding debian:AffirmTrust_Premium.pem 113s Adding debian:AffirmTrust_Premium_ECC.pem 113s Adding debian:Amazon_Root_CA_1.pem 113s Adding debian:Amazon_Root_CA_2.pem 113s Adding debian:Amazon_Root_CA_3.pem 113s Adding debian:Amazon_Root_CA_4.pem 113s Adding debian:Atos_TrustedRoot_2011.pem 113s Adding debian:Atos_TrustedRoot_Root_CA_ECC_TLS_2021.pem 113s Adding debian:Atos_TrustedRoot_Root_CA_RSA_TLS_2021.pem 113s Adding debian:Autoridad_de_Certificacion_Firmaprofesional_CIF_A62634068.pem 113s Adding debian:BJCA_Global_Root_CA1.pem 113s Adding debian:BJCA_Global_Root_CA2.pem 113s Adding debian:Baltimore_CyberTrust_Root.pem 113s Adding debian:Buypass_Class_2_Root_CA.pem 113s Adding debian:Buypass_Class_3_Root_CA.pem 113s Adding debian:CA_Disig_Root_R2.pem 113s Adding debian:CFCA_EV_ROOT.pem 113s Adding debian:COMODO_Certification_Authority.pem 113s Adding debian:COMODO_ECC_Certification_Authority.pem 113s Adding debian:COMODO_RSA_Certification_Authority.pem 113s Adding debian:Certainly_Root_E1.pem 113s Adding debian:Certainly_Root_R1.pem 113s Adding debian:Certigna.pem 113s Adding debian:Certigna_Root_CA.pem 113s Adding debian:Certum_EC-384_CA.pem 113s Adding debian:Certum_Trusted_Network_CA.pem 113s Adding debian:Certum_Trusted_Network_CA_2.pem 113s Adding debian:Certum_Trusted_Root_CA.pem 113s Adding debian:CommScope_Public_Trust_ECC_Root-01.pem 113s Adding debian:CommScope_Public_Trust_ECC_Root-02.pem 113s Adding debian:CommScope_Public_Trust_RSA_Root-01.pem 113s Adding debian:CommScope_Public_Trust_RSA_Root-02.pem 113s Adding debian:Comodo_AAA_Services_root.pem 113s Adding debian:D-TRUST_BR_Root_CA_1_2020.pem 113s Adding debian:D-TRUST_EV_Root_CA_1_2020.pem 113s Adding debian:D-TRUST_Root_Class_3_CA_2_2009.pem 113s Adding debian:D-TRUST_Root_Class_3_CA_2_EV_2009.pem 113s Adding debian:DigiCert_Assured_ID_Root_CA.pem 113s Adding debian:DigiCert_Assured_ID_Root_G2.pem 113s Adding debian:DigiCert_Assured_ID_Root_G3.pem 113s Adding debian:DigiCert_Global_Root_CA.pem 113s Adding debian:DigiCert_Global_Root_G2.pem 113s Adding debian:DigiCert_Global_Root_G3.pem 113s Adding debian:DigiCert_High_Assurance_EV_Root_CA.pem 113s Adding debian:DigiCert_TLS_ECC_P384_Root_G5.pem 113s Adding debian:DigiCert_TLS_RSA4096_Root_G5.pem 113s Adding debian:DigiCert_Trusted_Root_G4.pem 113s Adding debian:Entrust.net_Premium_2048_Secure_Server_CA.pem 113s Adding debian:Entrust_Root_Certification_Authority.pem 113s Adding debian:Entrust_Root_Certification_Authority_-_EC1.pem 113s Adding debian:Entrust_Root_Certification_Authority_-_G2.pem 113s Adding debian:Entrust_Root_Certification_Authority_-_G4.pem 113s Adding debian:GDCA_TrustAUTH_R5_ROOT.pem 113s Adding debian:GLOBALTRUST_2020.pem 113s Adding debian:GTS_Root_R1.pem 113s Adding debian:GTS_Root_R2.pem 113s Adding debian:GTS_Root_R3.pem 113s Adding debian:GTS_Root_R4.pem 113s Adding debian:GlobalSign_ECC_Root_CA_-_R4.pem 113s Adding debian:GlobalSign_ECC_Root_CA_-_R5.pem 113s Adding debian:GlobalSign_Root_CA.pem 113s Adding debian:GlobalSign_Root_CA_-_R3.pem 113s Adding debian:GlobalSign_Root_CA_-_R6.pem 113s Adding debian:GlobalSign_Root_E46.pem 113s Adding debian:GlobalSign_Root_R46.pem 114s Adding debian:Go_Daddy_Class_2_CA.pem 114s Adding debian:Go_Daddy_Root_Certificate_Authority_-_G2.pem 114s Adding debian:HARICA_TLS_ECC_Root_CA_2021.pem 114s Adding debian:HARICA_TLS_RSA_Root_CA_2021.pem 114s Adding debian:Hellenic_Academic_and_Research_Institutions_ECC_RootCA_2015.pem 114s Adding debian:Hellenic_Academic_and_Research_Institutions_RootCA_2015.pem 114s Adding debian:HiPKI_Root_CA_-_G1.pem 114s Adding debian:Hongkong_Post_Root_CA_3.pem 114s Adding debian:ISRG_Root_X1.pem 114s Adding debian:ISRG_Root_X2.pem 114s Adding debian:IdenTrust_Commercial_Root_CA_1.pem 114s Adding debian:IdenTrust_Public_Sector_Root_CA_1.pem 114s Adding debian:Izenpe.com.pem 114s Adding debian:Microsec_e-Szigno_Root_CA_2009.pem 114s Adding debian:Microsoft_ECC_Root_Certificate_Authority_2017.pem 114s Adding debian:Microsoft_RSA_Root_Certificate_Authority_2017.pem 114s Adding debian:NAVER_Global_Root_Certification_Authority.pem 114s Adding debian:NetLock_Arany_=Class_Gold=_Főtanúsítvány.pem 114s Adding debian:OISTE_WISeKey_Global_Root_GB_CA.pem 114s Adding debian:OISTE_WISeKey_Global_Root_GC_CA.pem 114s Adding debian:QuoVadis_Root_CA_1_G3.pem 114s Adding debian:QuoVadis_Root_CA_2.pem 114s Adding debian:QuoVadis_Root_CA_2_G3.pem 114s Adding debian:QuoVadis_Root_CA_3.pem 114s Adding debian:QuoVadis_Root_CA_3_G3.pem 114s Adding debian:SSL.com_EV_Root_Certification_Authority_ECC.pem 114s Adding debian:SSL.com_EV_Root_Certification_Authority_RSA_R2.pem 114s Adding debian:SSL.com_Root_Certification_Authority_ECC.pem 114s Adding debian:SSL.com_Root_Certification_Authority_RSA.pem 114s Adding debian:SSL.com_TLS_ECC_Root_CA_2022.pem 114s Adding debian:SSL.com_TLS_RSA_Root_CA_2022.pem 114s Adding debian:SZAFIR_ROOT_CA2.pem 114s Adding debian:Sectigo_Public_Server_Authentication_Root_E46.pem 114s Adding debian:Sectigo_Public_Server_Authentication_Root_R46.pem 114s Adding debian:SecureSign_RootCA11.pem 114s Adding debian:SecureTrust_CA.pem 114s Adding debian:Secure_Global_CA.pem 114s Adding debian:Security_Communication_ECC_RootCA1.pem 114s Adding debian:Security_Communication_RootCA2.pem 114s Adding debian:Security_Communication_RootCA3.pem 114s Adding debian:Security_Communication_Root_CA.pem 114s Adding debian:Starfield_Class_2_CA.pem 114s Adding debian:Starfield_Root_Certificate_Authority_-_G2.pem 114s Adding debian:Starfield_Services_Root_Certificate_Authority_-_G2.pem 114s Adding debian:SwissSign_Gold_CA_-_G2.pem 114s Adding debian:SwissSign_Silver_CA_-_G2.pem 114s Adding debian:T-TeleSec_GlobalRoot_Class_2.pem 114s Adding debian:T-TeleSec_GlobalRoot_Class_3.pem 114s Adding debian:TUBITAK_Kamu_SM_SSL_Kok_Sertifikasi_-_Surum_1.pem 114s Adding debian:TWCA_Global_Root_CA.pem 114s Adding debian:TWCA_Root_Certification_Authority.pem 114s Adding debian:TeliaSonera_Root_CA_v1.pem 114s Adding debian:Telia_Root_CA_v2.pem 114s Adding debian:TrustAsia_Global_Root_CA_G3.pem 114s Adding debian:TrustAsia_Global_Root_CA_G4.pem 114s Adding debian:Trustwave_Global_Certification_Authority.pem 114s Adding debian:Trustwave_Global_ECC_P256_Certification_Authority.pem 114s Adding debian:Trustwave_Global_ECC_P384_Certification_Authority.pem 114s Adding debian:TunTrust_Root_CA.pem 114s Adding debian:UCA_Extended_Validation_Root.pem 114s Adding debian:UCA_Global_G2_Root.pem 114s Adding debian:USERTrust_ECC_Certification_Authority.pem 114s Adding debian:USERTrust_RSA_Certification_Authority.pem 114s Adding debian:XRamp_Global_CA_Root.pem 114s Adding debian:certSIGN_ROOT_CA.pem 114s Adding debian:certSIGN_Root_CA_G2.pem 114s Adding debian:e-Szigno_Root_CA_2017.pem 114s Adding debian:ePKI_Root_Certification_Authority.pem 114s Adding debian:emSign_ECC_Root_CA_-_C3.pem 114s Adding debian:emSign_ECC_Root_CA_-_G3.pem 114s Adding debian:emSign_Root_CA_-_C1.pem 114s Adding debian:emSign_Root_CA_-_G1.pem 114s Adding debian:vTrus_ECC_Root_CA.pem 114s Adding debian:vTrus_Root_CA.pem 114s done. 114s Setting up default-jre-headless (2:1.21-75+exp1) ... 114s Setting up jruby (9.4.6.0+ds-1ubuntu3) ... 114s Setting up autopkgtest-satdep (0) ... 119s (Reading database ... 77522 files and directories currently installed.) 119s Removing autopkgtest-satdep (0) ... 119s autopkgtest [10:56:42]: test smoke: [----------------------- 124s Hello World! 129s Hello JRuby! 129s autopkgtest [10:56:52]: test smoke: -----------------------] 130s autopkgtest [10:56:53]: test smoke: - - - - - - - - - - results - - - - - - - - - - 130s smoke PASS (superficial) 130s autopkgtest [10:56:53]: test jgem: preparing testbed 132s Reading package lists... 132s Building dependency tree... 132s Reading state information... 133s Starting pkgProblemResolver with broken count: 0 133s Starting 2 pkgProblemResolver with broken count: 0 133s Done 134s The following additional packages will be installed: 134s libgmp-dev libgmpxx4ldbl libruby libruby3.1 libruby3.2 rake ruby 134s ruby-all-dev ruby-diff-lcs ruby-net-telnet ruby-rspec ruby-rspec-core 134s ruby-rspec-expectations ruby-rspec-mocks ruby-rspec-support ruby-rubygems 134s ruby-sdbm ruby-webrick ruby-xmlrpc ruby3.1 ruby3.1-dev ruby3.2 ruby3.2-dev 134s rubygems-integration 134s Suggested packages: 134s gmp-doc libgmp10-doc libmpfr-dev ri ruby-dev bundler 134s Recommended packages: 134s zip fonts-lato libjs-jquery ruby3.1-doc ruby3.2-doc 134s The following NEW packages will be installed: 134s autopkgtest-satdep libgmp-dev libgmpxx4ldbl libruby libruby3.1 libruby3.2 134s rake ruby ruby-all-dev ruby-diff-lcs ruby-net-telnet ruby-rspec 134s ruby-rspec-core ruby-rspec-expectations ruby-rspec-mocks ruby-rspec-support 134s ruby-rubygems ruby-sdbm ruby-webrick ruby-xmlrpc ruby3.1 ruby3.1-dev ruby3.2 134s ruby3.2-dev rubygems-integration 134s 0 upgraded, 25 newly installed, 0 to remove and 0 not upgraded. 134s Need to get 12.5 MB/12.5 MB of archives. 134s After this operation, 71.7 MB of additional disk space will be used. 134s Get:1 /tmp/autopkgtest.nFBjtB/2-autopkgtest-satdep.deb autopkgtest-satdep arm64 0 [760 B] 134s Get:2 http://ftpmaster.internal/ubuntu noble/main arm64 libgmpxx4ldbl arm64 2:6.3.0+dfsg-2ubuntu4 [9950 B] 135s Get:3 http://ftpmaster.internal/ubuntu noble/main arm64 libgmp-dev arm64 2:6.3.0+dfsg-2ubuntu4 [330 kB] 135s Get:4 http://ftpmaster.internal/ubuntu noble/main arm64 rubygems-integration all 1.18 [5336 B] 135s Get:5 http://ftpmaster.internal/ubuntu noble/main arm64 ruby3.1 arm64 3.1.2-7ubuntu4 [49.0 kB] 135s Get:6 http://ftpmaster.internal/ubuntu noble/main arm64 ruby-rubygems all 3.4.20-1 [238 kB] 135s Get:7 http://ftpmaster.internal/ubuntu noble/main arm64 ruby arm64 1:3.1+1 [3464 B] 135s Get:8 http://ftpmaster.internal/ubuntu noble/main arm64 rake all 13.0.6-3 [61.6 kB] 135s Get:9 http://ftpmaster.internal/ubuntu noble/main arm64 ruby-net-telnet all 0.2.0-1 [13.3 kB] 135s Get:10 http://ftpmaster.internal/ubuntu noble/main arm64 ruby-webrick all 1.8.1-1 [52.3 kB] 135s Get:11 http://ftpmaster.internal/ubuntu noble/main arm64 ruby-xmlrpc all 0.3.2-2 [24.8 kB] 135s Get:12 http://ftpmaster.internal/ubuntu noble/main arm64 libruby3.2 arm64 3.2.3-1 [5345 kB] 135s Get:13 http://ftpmaster.internal/ubuntu noble/main arm64 ruby-sdbm arm64 1.0.0-5build3 [17.9 kB] 135s Get:14 http://ftpmaster.internal/ubuntu noble/main arm64 libruby3.1 arm64 3.1.2-7ubuntu4 [5115 kB] 135s Get:15 http://ftpmaster.internal/ubuntu noble/main arm64 libruby arm64 1:3.1+1 [4640 B] 135s Get:16 http://ftpmaster.internal/ubuntu noble/main arm64 ruby3.1-dev arm64 3.1.2-7ubuntu4 [398 kB] 135s Get:17 http://ftpmaster.internal/ubuntu noble/main arm64 ruby3.2 arm64 3.2.3-1 [50.8 kB] 135s Get:18 http://ftpmaster.internal/ubuntu noble/main arm64 ruby3.2-dev arm64 3.2.3-1 [403 kB] 135s Get:19 http://ftpmaster.internal/ubuntu noble/main arm64 ruby-all-dev arm64 1:3.1+1 [5726 B] 135s Get:20 http://ftpmaster.internal/ubuntu noble/universe arm64 ruby-diff-lcs all 1.5.0-1 [23.9 kB] 135s Get:21 http://ftpmaster.internal/ubuntu noble/universe arm64 ruby-rspec-support all 3.12.0c0e1m1s0-1 [28.8 kB] 135s Get:22 http://ftpmaster.internal/ubuntu noble/universe arm64 ruby-rspec-core all 3.12.0c0e1m1s0-1 [163 kB] 135s Get:23 http://ftpmaster.internal/ubuntu noble/universe arm64 ruby-rspec-expectations all 3.12.0c0e1m1s0-1 [89.2 kB] 135s Get:24 http://ftpmaster.internal/ubuntu noble/universe arm64 ruby-rspec-mocks all 3.12.0c0e1m1s0-1 [79.4 kB] 135s Get:25 http://ftpmaster.internal/ubuntu noble/universe arm64 ruby-rspec all 3.12.0c0e1m1s0-1 [3506 B] 136s Fetched 12.5 MB in 1s (12.4 MB/s) 136s Selecting previously unselected package libgmpxx4ldbl:arm64. 136s (Reading database ... (Reading database ... 5% (Reading database ... 10% (Reading database ... 15% (Reading database ... 20% (Reading database ... 25% (Reading database ... 30% (Reading database ... 35% (Reading database ... 40% (Reading database ... 45% (Reading database ... 50% (Reading database ... 55% (Reading database ... 60% (Reading database ... 65% (Reading database ... 70% (Reading database ... 75% (Reading database ... 80% (Reading database ... 85% (Reading database ... 90% (Reading database ... 95% (Reading database ... 100% (Reading database ... 77522 files and directories currently installed.) 136s Preparing to unpack .../00-libgmpxx4ldbl_2%3a6.3.0+dfsg-2ubuntu4_arm64.deb ... 136s Unpacking libgmpxx4ldbl:arm64 (2:6.3.0+dfsg-2ubuntu4) ... 136s Selecting previously unselected package libgmp-dev:arm64. 136s Preparing to unpack .../01-libgmp-dev_2%3a6.3.0+dfsg-2ubuntu4_arm64.deb ... 136s Unpacking libgmp-dev:arm64 (2:6.3.0+dfsg-2ubuntu4) ... 136s Selecting previously unselected package rubygems-integration. 136s Preparing to unpack .../02-rubygems-integration_1.18_all.deb ... 136s Unpacking rubygems-integration (1.18) ... 136s Selecting previously unselected package ruby3.1. 136s Preparing to unpack .../03-ruby3.1_3.1.2-7ubuntu4_arm64.deb ... 136s Unpacking ruby3.1 (3.1.2-7ubuntu4) ... 136s Selecting previously unselected package ruby-rubygems. 136s Preparing to unpack .../04-ruby-rubygems_3.4.20-1_all.deb ... 136s Unpacking ruby-rubygems (3.4.20-1) ... 136s Selecting previously unselected package ruby. 136s Preparing to unpack .../05-ruby_1%3a3.1+1_arm64.deb ... 136s Unpacking ruby (1:3.1+1) ... 136s Selecting previously unselected package rake. 136s Preparing to unpack .../06-rake_13.0.6-3_all.deb ... 136s Unpacking rake (13.0.6-3) ... 136s Selecting previously unselected package ruby-net-telnet. 136s Preparing to unpack .../07-ruby-net-telnet_0.2.0-1_all.deb ... 136s Unpacking ruby-net-telnet (0.2.0-1) ... 136s Selecting previously unselected package ruby-webrick. 136s Preparing to unpack .../08-ruby-webrick_1.8.1-1_all.deb ... 136s Unpacking ruby-webrick (1.8.1-1) ... 136s Selecting previously unselected package ruby-xmlrpc. 136s Preparing to unpack .../09-ruby-xmlrpc_0.3.2-2_all.deb ... 136s Unpacking ruby-xmlrpc (0.3.2-2) ... 136s Selecting previously unselected package libruby3.2:arm64. 136s Preparing to unpack .../10-libruby3.2_3.2.3-1_arm64.deb ... 136s Unpacking libruby3.2:arm64 (3.2.3-1) ... 137s Selecting previously unselected package ruby-sdbm:arm64. 137s Preparing to unpack .../11-ruby-sdbm_1.0.0-5build3_arm64.deb ... 137s Unpacking ruby-sdbm:arm64 (1.0.0-5build3) ... 137s Selecting previously unselected package libruby3.1:arm64. 137s Preparing to unpack .../12-libruby3.1_3.1.2-7ubuntu4_arm64.deb ... 137s Unpacking libruby3.1:arm64 (3.1.2-7ubuntu4) ... 137s Selecting previously unselected package libruby:arm64. 137s Preparing to unpack .../13-libruby_1%3a3.1+1_arm64.deb ... 137s Unpacking libruby:arm64 (1:3.1+1) ... 137s Selecting previously unselected package ruby3.1-dev:arm64. 137s Preparing to unpack .../14-ruby3.1-dev_3.1.2-7ubuntu4_arm64.deb ... 137s Unpacking ruby3.1-dev:arm64 (3.1.2-7ubuntu4) ... 137s Selecting previously unselected package ruby3.2. 137s Preparing to unpack .../15-ruby3.2_3.2.3-1_arm64.deb ... 137s Unpacking ruby3.2 (3.2.3-1) ... 137s Selecting previously unselected package ruby3.2-dev:arm64. 137s Preparing to unpack .../16-ruby3.2-dev_3.2.3-1_arm64.deb ... 137s Unpacking ruby3.2-dev:arm64 (3.2.3-1) ... 137s Selecting previously unselected package ruby-all-dev:arm64. 137s Preparing to unpack .../17-ruby-all-dev_1%3a3.1+1_arm64.deb ... 137s Unpacking ruby-all-dev:arm64 (1:3.1+1) ... 137s Selecting previously unselected package ruby-diff-lcs. 137s Preparing to unpack .../18-ruby-diff-lcs_1.5.0-1_all.deb ... 137s Unpacking ruby-diff-lcs (1.5.0-1) ... 137s Selecting previously unselected package ruby-rspec-support. 137s Preparing to unpack .../19-ruby-rspec-support_3.12.0c0e1m1s0-1_all.deb ... 137s Unpacking ruby-rspec-support (3.12.0c0e1m1s0-1) ... 137s Selecting previously unselected package ruby-rspec-core. 137s Preparing to unpack .../20-ruby-rspec-core_3.12.0c0e1m1s0-1_all.deb ... 137s Unpacking ruby-rspec-core (3.12.0c0e1m1s0-1) ... 137s Selecting previously unselected package ruby-rspec-expectations. 137s Preparing to unpack .../21-ruby-rspec-expectations_3.12.0c0e1m1s0-1_all.deb ... 137s Unpacking ruby-rspec-expectations (3.12.0c0e1m1s0-1) ... 137s Selecting previously unselected package ruby-rspec-mocks. 137s Preparing to unpack .../22-ruby-rspec-mocks_3.12.0c0e1m1s0-1_all.deb ... 137s Unpacking ruby-rspec-mocks (3.12.0c0e1m1s0-1) ... 137s Selecting previously unselected package ruby-rspec. 137s Preparing to unpack .../23-ruby-rspec_3.12.0c0e1m1s0-1_all.deb ... 137s Unpacking ruby-rspec (3.12.0c0e1m1s0-1) ... 137s Selecting previously unselected package autopkgtest-satdep. 137s Preparing to unpack .../24-2-autopkgtest-satdep.deb ... 137s Unpacking autopkgtest-satdep (0) ... 137s Setting up rubygems-integration (1.18) ... 137s Setting up libgmpxx4ldbl:arm64 (2:6.3.0+dfsg-2ubuntu4) ... 137s Setting up ruby-net-telnet (0.2.0-1) ... 137s Setting up ruby-rspec-support (3.12.0c0e1m1s0-1) ... 137s Setting up ruby-webrick (1.8.1-1) ... 137s Setting up ruby-xmlrpc (0.3.2-2) ... 137s Setting up libgmp-dev:arm64 (2:6.3.0+dfsg-2ubuntu4) ... 137s Setting up rake (13.0.6-3) ... 137s Setting up libruby:arm64 (1:3.1+1) ... 137s Setting up ruby-rubygems (3.4.20-1) ... 137s Setting up ruby-sdbm:arm64 (1.0.0-5build3) ... 137s Setting up libruby3.1:arm64 (3.1.2-7ubuntu4) ... 137s Setting up libruby3.2:arm64 (3.2.3-1) ... 137s Setting up ruby3.1 (3.1.2-7ubuntu4) ... 137s Setting up ruby3.2 (3.2.3-1) ... 137s Setting up ruby3.1-dev:arm64 (3.1.2-7ubuntu4) ... 137s Setting up ruby3.2-dev:arm64 (3.2.3-1) ... 137s Setting up ruby-all-dev:arm64 (1:3.1+1) ... 137s Setting up ruby (1:3.1+1) ... 137s Setting up ruby-rspec-core (3.12.0c0e1m1s0-1) ... 137s Setting up ruby-diff-lcs (1.5.0-1) ... 137s Setting up ruby-rspec-expectations (3.12.0c0e1m1s0-1) ... 137s Setting up ruby-rspec-mocks (3.12.0c0e1m1s0-1) ... 137s Setting up ruby-rspec (3.12.0c0e1m1s0-1) ... 137s Setting up autopkgtest-satdep (0) ... 137s Processing triggers for libc-bin (2.39-0ubuntu2) ... 137s Processing triggers for man-db (2.12.0-3) ... 142s (Reading database ... 83969 files and directories currently installed.) 142s Removing autopkgtest-satdep (0) ... 143s autopkgtest [10:57:06]: test jgem: [----------------------- 144s installing system gems into jruby: 144s * diff-lcs-1.5.0 144s * minitest-5.15.0 144s * power_assert-2.0.1 144s * rake-13.0.6 144s * rexml-3.2.5 144s * rspec-3.12.0 144s * rspec-core-3.12.0 144s * rspec-expectations-3.12.1 144s * rspec-mocks-3.12.1 144s * rspec-support-3.12.0 144s * test-unit-3.5.3 152s json (default: 2.7.1 java) 162s Successfully installed hello_command_line-0.1.0 162s 1 gem installed 168s hello_command_line (0.1.0) 172s This is a command tool written by ruby. 172s autopkgtest [10:57:35]: test jgem: -----------------------] 173s autopkgtest [10:57:36]: test jgem: - - - - - - - - - - results - - - - - - - - - - 173s jgem PASS 173s autopkgtest [10:57:36]: test jirb: preparing testbed 253s autopkgtest [10:58:56]: testbed dpkg architecture: arm64 253s autopkgtest [10:58:56]: testbed apt version: 2.7.12 253s autopkgtest [10:58:56]: @@@@@@@@@@@@@@@@@@@@ test bed setup 253s Get:1 http://ftpmaster.internal/ubuntu noble-proposed InRelease [117 kB] 254s Get:2 http://ftpmaster.internal/ubuntu noble-proposed/universe Sources [3766 kB] 254s Get:3 http://ftpmaster.internal/ubuntu noble-proposed/main Sources [496 kB] 254s Get:4 http://ftpmaster.internal/ubuntu noble-proposed/multiverse Sources [52.7 kB] 254s Get:5 http://ftpmaster.internal/ubuntu noble-proposed/restricted Sources [6540 B] 254s Get:6 http://ftpmaster.internal/ubuntu noble-proposed/main arm64 Packages [670 kB] 254s Get:7 http://ftpmaster.internal/ubuntu noble-proposed/main arm64 c-n-f Metadata [3144 B] 254s Get:8 http://ftpmaster.internal/ubuntu noble-proposed/restricted arm64 Packages [41.7 kB] 254s Get:9 http://ftpmaster.internal/ubuntu noble-proposed/restricted arm64 c-n-f Metadata [116 B] 254s Get:10 http://ftpmaster.internal/ubuntu noble-proposed/universe arm64 Packages [4234 kB] 254s Get:11 http://ftpmaster.internal/ubuntu noble-proposed/universe arm64 c-n-f Metadata [8528 B] 254s Get:12 http://ftpmaster.internal/ubuntu noble-proposed/multiverse arm64 Packages [56.7 kB] 254s Get:13 http://ftpmaster.internal/ubuntu noble-proposed/multiverse arm64 c-n-f Metadata [116 B] 257s Fetched 9452 kB in 2s (5446 kB/s) 257s Reading package lists... 259s Reading package lists... 259s Building dependency tree... 259s Reading state information... 260s Calculating upgrade... 260s 0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded. 260s Reading package lists... 260s Building dependency tree... 260s Reading state information... 261s 0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded. 261s Hit:1 http://ftpmaster.internal/ubuntu noble InRelease 261s Hit:2 http://ftpmaster.internal/ubuntu noble-updates InRelease 261s Hit:3 http://ftpmaster.internal/ubuntu noble-security InRelease 261s Hit:4 http://ftpmaster.internal/ubuntu noble-proposed InRelease 263s Reading package lists... 263s Reading package lists... 264s Building dependency tree... 264s Reading state information... 265s Calculating upgrade... 266s 0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded. 266s Reading package lists... 267s Building dependency tree... 267s Reading state information... 268s 0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded. 273s Reading package lists... 273s Building dependency tree... 273s Reading state information... 273s Starting pkgProblemResolver with broken count: 0 273s Starting 2 pkgProblemResolver with broken count: 0 273s Done 274s The following additional packages will be installed: 274s ca-certificates-java default-jre-headless expect fontconfig-config 274s fonts-dejavu-core fonts-dejavu-mono java-common jruby libasm-java libasound2 274s libasound2-data libavahi-client3 libavahi-common-data libavahi-common3 274s libbackport9-java libcups2 libdirgra-java libfixposix4t64 libfontconfig1 274s libgraphite2-3 libharfbuzz0b libhawtjni-runtime-java libheadius-options-java 274s libinvokebinder-java libjansi-native-java libjansi1-java libjcodings-java 274s libjffi-java libjffi-jni libjitescript-java libjline2-java 274s libjnr-constants-java libjnr-enxio-java libjnr-ffi-java libjnr-netdb-java 274s libjnr-posix-java libjnr-unixsocket-java libjnr-x86asm-java 274s libjoda-time-java libjpeg-turbo8 libjpeg8 libjruby-joni-java libjzlib-java 274s liblcms2-2 libpcsclite1 libsnakeyaml-engine-java libtcl8.6 274s openjdk-21-jre-headless tcl-expect tcl8.6 274s Suggested packages: 274s default-jre tk8.6 libasound2-plugins alsa-utils cups-common 274s libheadius-options-java-doc libinvokebinder-java-doc libjnr-ffi-java-doc 274s libjnr-netdb-java-doc libjnr-posix-java-doc libjoda-convert-java 274s liblcms2-utils pcscd libnss-mdns fonts-dejavu-extra fonts-ipafont-gothic 274s fonts-ipafont-mincho fonts-wqy-microhei | fonts-wqy-zenhei fonts-indic 274s tcl-tclreadline 274s Recommended packages: 274s fonts-lato alsa-ucm-conf alsa-topology-conf 274s The following NEW packages will be installed: 274s autopkgtest-satdep ca-certificates-java default-jre-headless expect 274s fontconfig-config fonts-dejavu-core fonts-dejavu-mono java-common jruby 274s libasm-java libasound2 libasound2-data libavahi-client3 libavahi-common-data 274s libavahi-common3 libbackport9-java libcups2 libdirgra-java libfixposix4t64 274s libfontconfig1 libgraphite2-3 libharfbuzz0b libhawtjni-runtime-java 274s libheadius-options-java libinvokebinder-java libjansi-native-java 274s libjansi1-java libjcodings-java libjffi-java libjffi-jni libjitescript-java 274s libjline2-java libjnr-constants-java libjnr-enxio-java libjnr-ffi-java 274s libjnr-netdb-java libjnr-posix-java libjnr-unixsocket-java 274s libjnr-x86asm-java libjoda-time-java libjpeg-turbo8 libjpeg8 274s libjruby-joni-java libjzlib-java liblcms2-2 libpcsclite1 274s libsnakeyaml-engine-java libtcl8.6 openjdk-21-jre-headless tcl-expect tcl8.6 274s 0 upgraded, 51 newly installed, 0 to remove and 0 not upgraded. 274s Need to get 89.6 MB/89.6 MB of archives. 274s After this operation, 274 MB of additional disk space will be used. 274s Get:1 /tmp/autopkgtest.nFBjtB/3-autopkgtest-satdep.deb autopkgtest-satdep arm64 0 [704 B] 274s Get:2 http://ftpmaster.internal/ubuntu noble/main arm64 ca-certificates-java all 20240118 [11.6 kB] 274s Get:3 http://ftpmaster.internal/ubuntu noble/main arm64 java-common all 0.75+exp1 [6798 B] 274s Get:4 http://ftpmaster.internal/ubuntu noble/main arm64 libavahi-common-data arm64 0.8-13ubuntu2 [29.5 kB] 274s Get:5 http://ftpmaster.internal/ubuntu noble/main arm64 libavahi-common3 arm64 0.8-13ubuntu2 [23.2 kB] 274s Get:6 http://ftpmaster.internal/ubuntu noble/main arm64 libavahi-client3 arm64 0.8-13ubuntu2 [27.3 kB] 274s Get:7 http://ftpmaster.internal/ubuntu noble/main arm64 libcups2 arm64 2.4.6-0ubuntu3 [270 kB] 274s Get:8 http://ftpmaster.internal/ubuntu noble/main arm64 liblcms2-2 arm64 2.14-2 [159 kB] 274s Get:9 http://ftpmaster.internal/ubuntu noble/main arm64 libjpeg-turbo8 arm64 2.1.5-2ubuntu1 [160 kB] 274s Get:10 http://ftpmaster.internal/ubuntu noble/main arm64 libjpeg8 arm64 8c-2ubuntu11 [2148 B] 274s Get:11 http://ftpmaster.internal/ubuntu noble/main arm64 fonts-dejavu-mono all 2.37-8 [502 kB] 274s Get:12 http://ftpmaster.internal/ubuntu noble/main arm64 fonts-dejavu-core all 2.37-8 [835 kB] 275s Get:13 http://ftpmaster.internal/ubuntu noble/main arm64 fontconfig-config arm64 2.15.0-1ubuntu1 [37.0 kB] 275s Get:14 http://ftpmaster.internal/ubuntu noble/main arm64 libfontconfig1 arm64 2.15.0-1ubuntu1 [142 kB] 275s Get:15 http://ftpmaster.internal/ubuntu noble/main arm64 libasound2-data all 1.2.10-3build1 [20.7 kB] 275s Get:16 http://ftpmaster.internal/ubuntu noble/main arm64 libasound2 arm64 1.2.10-3build1 [386 kB] 275s Get:17 http://ftpmaster.internal/ubuntu noble/main arm64 libgraphite2-3 arm64 1.3.14-2 [81.5 kB] 275s Get:18 http://ftpmaster.internal/ubuntu noble/main arm64 libharfbuzz0b arm64 8.3.0-2 [463 kB] 275s Get:19 http://ftpmaster.internal/ubuntu noble/main arm64 libpcsclite1 arm64 2.0.0-1 [21.2 kB] 275s Get:20 http://ftpmaster.internal/ubuntu noble/main arm64 openjdk-21-jre-headless arm64 21.0.2+13-2 [45.8 MB] 276s Get:21 http://ftpmaster.internal/ubuntu noble/main arm64 default-jre-headless arm64 2:1.21-75+exp1 [3096 B] 276s Get:22 http://ftpmaster.internal/ubuntu noble/main arm64 libtcl8.6 arm64 8.6.13+dfsg-2 [980 kB] 276s Get:23 http://ftpmaster.internal/ubuntu noble/main arm64 tcl8.6 arm64 8.6.13+dfsg-2 [14.6 kB] 276s Get:24 http://ftpmaster.internal/ubuntu noble/universe arm64 tcl-expect arm64 5.45.4-2build1 [103 kB] 276s Get:25 http://ftpmaster.internal/ubuntu noble/universe arm64 expect arm64 5.45.4-2build1 [137 kB] 276s Get:26 http://ftpmaster.internal/ubuntu noble/universe arm64 libasm-java all 9.6~us1-0ubuntu1 [386 kB] 276s Get:27 http://ftpmaster.internal/ubuntu noble/universe arm64 libbackport9-java all 1.10-2 [13.2 kB] 276s Get:28 http://ftpmaster.internal/ubuntu noble/universe arm64 libdirgra-java all 0.4-2 [21.6 kB] 276s Get:29 http://ftpmaster.internal/ubuntu noble/universe arm64 libfixposix4t64 arm64 1:0.5.1-1+nmu1.1 [16.9 kB] 276s Get:30 http://ftpmaster.internal/ubuntu noble/universe arm64 libheadius-options-java all 1.7-1 [18.2 kB] 276s Get:31 http://ftpmaster.internal/ubuntu noble/universe arm64 libinvokebinder-java all 1.13-1 [51.7 kB] 276s Get:32 http://ftpmaster.internal/ubuntu noble/universe arm64 libhawtjni-runtime-java all 1.18-1 [28.9 kB] 276s Get:33 http://ftpmaster.internal/ubuntu noble/universe arm64 libjansi-native-java all 1.8-2 [24.1 kB] 276s Get:34 http://ftpmaster.internal/ubuntu noble/universe arm64 libjansi1-java all 1.18-3ubuntu1 [56.0 kB] 276s Get:35 http://ftpmaster.internal/ubuntu noble/universe arm64 libjcodings-java all 1.0.58-1 [1474 kB] 276s Get:36 http://ftpmaster.internal/ubuntu noble/universe arm64 libjffi-jni arm64 1.3.13+ds-1 [29.8 kB] 276s Get:37 http://ftpmaster.internal/ubuntu noble/universe arm64 libjffi-java all 1.3.13+ds-1 [112 kB] 276s Get:38 http://ftpmaster.internal/ubuntu noble/universe arm64 libjitescript-java all 0.4.3-1 [24.4 kB] 276s Get:39 http://ftpmaster.internal/ubuntu noble/universe arm64 libjline2-java all 2.14.6-5 [150 kB] 277s Get:40 http://ftpmaster.internal/ubuntu noble/universe arm64 libjnr-constants-java all 0.10.4-2 [1397 kB] 277s Get:41 http://ftpmaster.internal/ubuntu noble/universe arm64 libjnr-x86asm-java all 1.0.2-5.1 [207 kB] 277s Get:42 http://ftpmaster.internal/ubuntu noble/universe arm64 libjnr-ffi-java all 2.2.15-2 [627 kB] 277s Get:43 http://ftpmaster.internal/ubuntu noble/universe arm64 libjnr-enxio-java all 0.32.16-1 [33.7 kB] 277s Get:44 http://ftpmaster.internal/ubuntu noble/universe arm64 libjnr-netdb-java all 1.1.6-1.1 [58.8 kB] 277s Get:45 http://ftpmaster.internal/ubuntu noble/universe arm64 libjnr-posix-java all 3.1.18-1 [267 kB] 277s Get:46 http://ftpmaster.internal/ubuntu noble/universe arm64 libjnr-unixsocket-java all 0.38.21-2 [46.9 kB] 277s Get:47 http://ftpmaster.internal/ubuntu noble/universe arm64 libjoda-time-java all 2.10.14-1 [535 kB] 277s Get:48 http://ftpmaster.internal/ubuntu noble/universe arm64 libjruby-joni-java all 2.2.1-1 [222 kB] 277s Get:49 http://ftpmaster.internal/ubuntu noble/universe arm64 libjzlib-java all 1.1.3-3 [76.8 kB] 277s Get:50 http://ftpmaster.internal/ubuntu noble/universe arm64 libsnakeyaml-engine-java all 2.7+ds-3 [258 kB] 277s Get:51 http://ftpmaster.internal/ubuntu noble-proposed/universe arm64 jruby all 9.4.6.0+ds-1ubuntu3 [33.3 MB] 279s Fetched 89.6 MB in 4s (23.2 MB/s) 279s Selecting previously unselected package ca-certificates-java. 279s (Reading database ... (Reading database ... 5% (Reading database ... 10% (Reading database ... 15% (Reading database ... 20% (Reading database ... 25% (Reading database ... 30% (Reading database ... 35% (Reading database ... 40% (Reading database ... 45% (Reading database ... 50% (Reading database ... 55% (Reading database ... 60% (Reading database ... 65% (Reading database ... 70% (Reading database ... 75% (Reading database ... 80% (Reading database ... 85% (Reading database ... 90% (Reading database ... 95% (Reading database ... 100% (Reading database ... 74758 files and directories currently installed.) 279s Preparing to unpack .../00-ca-certificates-java_20240118_all.deb ... 279s Unpacking ca-certificates-java (20240118) ... 279s Selecting previously unselected package java-common. 279s Preparing to unpack .../01-java-common_0.75+exp1_all.deb ... 279s Unpacking java-common (0.75+exp1) ... 279s Selecting previously unselected package libavahi-common-data:arm64. 279s Preparing to unpack .../02-libavahi-common-data_0.8-13ubuntu2_arm64.deb ... 279s Unpacking libavahi-common-data:arm64 (0.8-13ubuntu2) ... 279s Selecting previously unselected package libavahi-common3:arm64. 279s Preparing to unpack .../03-libavahi-common3_0.8-13ubuntu2_arm64.deb ... 279s Unpacking libavahi-common3:arm64 (0.8-13ubuntu2) ... 279s Selecting previously unselected package libavahi-client3:arm64. 279s Preparing to unpack .../04-libavahi-client3_0.8-13ubuntu2_arm64.deb ... 279s Unpacking libavahi-client3:arm64 (0.8-13ubuntu2) ... 279s Selecting previously unselected package libcups2:arm64. 279s Preparing to unpack .../05-libcups2_2.4.6-0ubuntu3_arm64.deb ... 279s Unpacking libcups2:arm64 (2.4.6-0ubuntu3) ... 279s Selecting previously unselected package liblcms2-2:arm64. 279s Preparing to unpack .../06-liblcms2-2_2.14-2_arm64.deb ... 279s Unpacking liblcms2-2:arm64 (2.14-2) ... 279s Selecting previously unselected package libjpeg-turbo8:arm64. 279s Preparing to unpack .../07-libjpeg-turbo8_2.1.5-2ubuntu1_arm64.deb ... 279s Unpacking libjpeg-turbo8:arm64 (2.1.5-2ubuntu1) ... 279s Selecting previously unselected package libjpeg8:arm64. 279s Preparing to unpack .../08-libjpeg8_8c-2ubuntu11_arm64.deb ... 279s Unpacking libjpeg8:arm64 (8c-2ubuntu11) ... 279s Selecting previously unselected package fonts-dejavu-mono. 279s Preparing to unpack .../09-fonts-dejavu-mono_2.37-8_all.deb ... 279s Unpacking fonts-dejavu-mono (2.37-8) ... 279s Selecting previously unselected package fonts-dejavu-core. 279s Preparing to unpack .../10-fonts-dejavu-core_2.37-8_all.deb ... 279s Unpacking fonts-dejavu-core (2.37-8) ... 279s Selecting previously unselected package fontconfig-config. 279s Preparing to unpack .../11-fontconfig-config_2.15.0-1ubuntu1_arm64.deb ... 280s Unpacking fontconfig-config (2.15.0-1ubuntu1) ... 280s Selecting previously unselected package libfontconfig1:arm64. 280s Preparing to unpack .../12-libfontconfig1_2.15.0-1ubuntu1_arm64.deb ... 280s Unpacking libfontconfig1:arm64 (2.15.0-1ubuntu1) ... 280s Selecting previously unselected package libasound2-data. 280s Preparing to unpack .../13-libasound2-data_1.2.10-3build1_all.deb ... 280s Unpacking libasound2-data (1.2.10-3build1) ... 280s Selecting previously unselected package libasound2:arm64. 280s Preparing to unpack .../14-libasound2_1.2.10-3build1_arm64.deb ... 280s Unpacking libasound2:arm64 (1.2.10-3build1) ... 280s Selecting previously unselected package libgraphite2-3:arm64. 280s Preparing to unpack .../15-libgraphite2-3_1.3.14-2_arm64.deb ... 280s Unpacking libgraphite2-3:arm64 (1.3.14-2) ... 280s Selecting previously unselected package libharfbuzz0b:arm64. 280s Preparing to unpack .../16-libharfbuzz0b_8.3.0-2_arm64.deb ... 280s Unpacking libharfbuzz0b:arm64 (8.3.0-2) ... 280s Selecting previously unselected package libpcsclite1:arm64. 280s Preparing to unpack .../17-libpcsclite1_2.0.0-1_arm64.deb ... 280s Unpacking libpcsclite1:arm64 (2.0.0-1) ... 280s Selecting previously unselected package openjdk-21-jre-headless:arm64. 280s Preparing to unpack .../18-openjdk-21-jre-headless_21.0.2+13-2_arm64.deb ... 280s Unpacking openjdk-21-jre-headless:arm64 (21.0.2+13-2) ... 281s Selecting previously unselected package default-jre-headless. 281s Preparing to unpack .../19-default-jre-headless_2%3a1.21-75+exp1_arm64.deb ... 281s Unpacking default-jre-headless (2:1.21-75+exp1) ... 281s Selecting previously unselected package libtcl8.6:arm64. 281s Preparing to unpack .../20-libtcl8.6_8.6.13+dfsg-2_arm64.deb ... 281s Unpacking libtcl8.6:arm64 (8.6.13+dfsg-2) ... 281s Selecting previously unselected package tcl8.6. 281s Preparing to unpack .../21-tcl8.6_8.6.13+dfsg-2_arm64.deb ... 281s Unpacking tcl8.6 (8.6.13+dfsg-2) ... 281s Selecting previously unselected package tcl-expect:arm64. 281s Preparing to unpack .../22-tcl-expect_5.45.4-2build1_arm64.deb ... 281s Unpacking tcl-expect:arm64 (5.45.4-2build1) ... 281s Selecting previously unselected package expect. 281s Preparing to unpack .../23-expect_5.45.4-2build1_arm64.deb ... 281s Unpacking expect (5.45.4-2build1) ... 281s Selecting previously unselected package libasm-java. 281s Preparing to unpack .../24-libasm-java_9.6~us1-0ubuntu1_all.deb ... 281s Unpacking libasm-java (9.6~us1-0ubuntu1) ... 281s Selecting previously unselected package libbackport9-java. 281s Preparing to unpack .../25-libbackport9-java_1.10-2_all.deb ... 281s Unpacking libbackport9-java (1.10-2) ... 281s Selecting previously unselected package libdirgra-java. 281s Preparing to unpack .../26-libdirgra-java_0.4-2_all.deb ... 281s Unpacking libdirgra-java (0.4-2) ... 282s Selecting previously unselected package libfixposix4t64:arm64. 282s Preparing to unpack .../27-libfixposix4t64_1%3a0.5.1-1+nmu1.1_arm64.deb ... 282s Unpacking libfixposix4t64:arm64 (1:0.5.1-1+nmu1.1) ... 282s Selecting previously unselected package libheadius-options-java. 282s Preparing to unpack .../28-libheadius-options-java_1.7-1_all.deb ... 282s Unpacking libheadius-options-java (1.7-1) ... 282s Selecting previously unselected package libinvokebinder-java. 282s Preparing to unpack .../29-libinvokebinder-java_1.13-1_all.deb ... 282s Unpacking libinvokebinder-java (1.13-1) ... 282s Selecting previously unselected package libhawtjni-runtime-java. 282s Preparing to unpack .../30-libhawtjni-runtime-java_1.18-1_all.deb ... 282s Unpacking libhawtjni-runtime-java (1.18-1) ... 282s Selecting previously unselected package libjansi-native-java. 282s Preparing to unpack .../31-libjansi-native-java_1.8-2_all.deb ... 282s Unpacking libjansi-native-java (1.8-2) ... 282s Selecting previously unselected package libjansi1-java. 282s Preparing to unpack .../32-libjansi1-java_1.18-3ubuntu1_all.deb ... 282s Unpacking libjansi1-java (1.18-3ubuntu1) ... 282s Selecting previously unselected package libjcodings-java. 282s Preparing to unpack .../33-libjcodings-java_1.0.58-1_all.deb ... 282s Unpacking libjcodings-java (1.0.58-1) ... 282s Selecting previously unselected package libjffi-jni:arm64. 282s Preparing to unpack .../34-libjffi-jni_1.3.13+ds-1_arm64.deb ... 282s Unpacking libjffi-jni:arm64 (1.3.13+ds-1) ... 282s Selecting previously unselected package libjffi-java. 282s Preparing to unpack .../35-libjffi-java_1.3.13+ds-1_all.deb ... 282s Unpacking libjffi-java (1.3.13+ds-1) ... 282s Selecting previously unselected package libjitescript-java. 282s Preparing to unpack .../36-libjitescript-java_0.4.3-1_all.deb ... 282s Unpacking libjitescript-java (0.4.3-1) ... 282s Selecting previously unselected package libjline2-java. 282s Preparing to unpack .../37-libjline2-java_2.14.6-5_all.deb ... 282s Unpacking libjline2-java (2.14.6-5) ... 282s Selecting previously unselected package libjnr-constants-java. 282s Preparing to unpack .../38-libjnr-constants-java_0.10.4-2_all.deb ... 282s Unpacking libjnr-constants-java (0.10.4-2) ... 282s Selecting previously unselected package libjnr-x86asm-java. 282s Preparing to unpack .../39-libjnr-x86asm-java_1.0.2-5.1_all.deb ... 282s Unpacking libjnr-x86asm-java (1.0.2-5.1) ... 282s Selecting previously unselected package libjnr-ffi-java. 282s Preparing to unpack .../40-libjnr-ffi-java_2.2.15-2_all.deb ... 282s Unpacking libjnr-ffi-java (2.2.15-2) ... 282s Selecting previously unselected package libjnr-enxio-java. 282s Preparing to unpack .../41-libjnr-enxio-java_0.32.16-1_all.deb ... 282s Unpacking libjnr-enxio-java (0.32.16-1) ... 282s Selecting previously unselected package libjnr-netdb-java. 282s Preparing to unpack .../42-libjnr-netdb-java_1.1.6-1.1_all.deb ... 282s Unpacking libjnr-netdb-java (1.1.6-1.1) ... 282s Selecting previously unselected package libjnr-posix-java. 282s Preparing to unpack .../43-libjnr-posix-java_3.1.18-1_all.deb ... 282s Unpacking libjnr-posix-java (3.1.18-1) ... 282s Selecting previously unselected package libjnr-unixsocket-java. 282s Preparing to unpack .../44-libjnr-unixsocket-java_0.38.21-2_all.deb ... 282s Unpacking libjnr-unixsocket-java (0.38.21-2) ... 282s Selecting previously unselected package libjoda-time-java. 282s Preparing to unpack .../45-libjoda-time-java_2.10.14-1_all.deb ... 282s Unpacking libjoda-time-java (2.10.14-1) ... 282s Selecting previously unselected package libjruby-joni-java. 282s Preparing to unpack .../46-libjruby-joni-java_2.2.1-1_all.deb ... 282s Unpacking libjruby-joni-java (2.2.1-1) ... 282s Selecting previously unselected package libjzlib-java. 282s Preparing to unpack .../47-libjzlib-java_1.1.3-3_all.deb ... 282s Unpacking libjzlib-java (1.1.3-3) ... 282s Selecting previously unselected package libsnakeyaml-engine-java. 283s Preparing to unpack .../48-libsnakeyaml-engine-java_2.7+ds-3_all.deb ... 283s Unpacking libsnakeyaml-engine-java (2.7+ds-3) ... 283s Selecting previously unselected package jruby. 283s Preparing to unpack .../49-jruby_9.4.6.0+ds-1ubuntu3_all.deb ... 283s Unpacking jruby (9.4.6.0+ds-1ubuntu3) ... 283s Selecting previously unselected package autopkgtest-satdep. 283s Preparing to unpack .../50-3-autopkgtest-satdep.deb ... 283s Unpacking autopkgtest-satdep (0) ... 283s Setting up libgraphite2-3:arm64 (1.3.14-2) ... 283s Setting up liblcms2-2:arm64 (2.14-2) ... 283s Setting up libfixposix4t64:arm64 (1:0.5.1-1+nmu1.1) ... 283s Setting up java-common (0.75+exp1) ... 283s Setting up libasm-java (9.6~us1-0ubuntu1) ... 283s Setting up libheadius-options-java (1.7-1) ... 283s Setting up libjnr-x86asm-java (1.0.2-5.1) ... 283s Setting up libjzlib-java (1.1.3-3) ... 283s Setting up libbackport9-java (1.10-2) ... 283s Setting up libasound2-data (1.2.10-3build1) ... 283s Setting up libjitescript-java (0.4.3-1) ... 283s Setting up libsnakeyaml-engine-java (2.7+ds-3) ... 283s Setting up libavahi-common-data:arm64 (0.8-13ubuntu2) ... 283s Setting up fonts-dejavu-mono (2.37-8) ... 283s Setting up libtcl8.6:arm64 (8.6.13+dfsg-2) ... 283s Setting up fonts-dejavu-core (2.37-8) ... 283s Setting up libpcsclite1:arm64 (2.0.0-1) ... 283s Setting up libjpeg-turbo8:arm64 (2.1.5-2ubuntu1) ... 283s Setting up libjoda-time-java (2.10.14-1) ... 283s Setting up libjcodings-java (1.0.58-1) ... 283s Setting up libasound2:arm64 (1.2.10-3build1) ... 283s Setting up libharfbuzz0b:arm64 (8.3.0-2) ... 283s Setting up libinvokebinder-java (1.13-1) ... 283s Setting up libjffi-jni:arm64 (1.3.13+ds-1) ... 283s Setting up ca-certificates-java (20240118) ... 283s No JRE found. Skipping Java certificates setup. 283s Setting up libhawtjni-runtime-java (1.18-1) ... 283s Setting up libdirgra-java (0.4-2) ... 283s Setting up libjnr-constants-java (0.10.4-2) ... 283s Setting up libjpeg8:arm64 (8c-2ubuntu11) ... 283s Setting up libjffi-java (1.3.13+ds-1) ... 283s Setting up tcl8.6 (8.6.13+dfsg-2) ... 283s Setting up libjruby-joni-java (2.2.1-1) ... 283s Setting up fontconfig-config (2.15.0-1ubuntu1) ... 283s Setting up libavahi-common3:arm64 (0.8-13ubuntu2) ... 283s Setting up tcl-expect:arm64 (5.45.4-2build1) ... 283s Setting up libjansi-native-java (1.8-2) ... 283s Setting up libjansi1-java (1.18-3ubuntu1) ... 283s Setting up libfontconfig1:arm64 (2.15.0-1ubuntu1) ... 283s Setting up libjline2-java (2.14.6-5) ... 283s Setting up libavahi-client3:arm64 (0.8-13ubuntu2) ... 283s Setting up libjnr-ffi-java (2.2.15-2) ... 283s Setting up expect (5.45.4-2build1) ... 283s Setting up libjnr-enxio-java (0.32.16-1) ... 283s Setting up libcups2:arm64 (2.4.6-0ubuntu3) ... 283s Setting up libjnr-netdb-java (1.1.6-1.1) ... 283s Setting up libjnr-posix-java (3.1.18-1) ... 283s Setting up openjdk-21-jre-headless:arm64 (21.0.2+13-2) ... 283s update-alternatives: using /usr/lib/jvm/java-21-openjdk-arm64/bin/java to provide /usr/bin/java (java) in auto mode 283s update-alternatives: using /usr/lib/jvm/java-21-openjdk-arm64/bin/jpackage to provide /usr/bin/jpackage (jpackage) in auto mode 283s update-alternatives: using /usr/lib/jvm/java-21-openjdk-arm64/bin/keytool to provide /usr/bin/keytool (keytool) in auto mode 283s update-alternatives: using /usr/lib/jvm/java-21-openjdk-arm64/bin/rmiregistry to provide /usr/bin/rmiregistry (rmiregistry) in auto mode 283s update-alternatives: using /usr/lib/jvm/java-21-openjdk-arm64/lib/jexec to provide /usr/bin/jexec (jexec) in auto mode 283s Setting up libjnr-unixsocket-java (0.38.21-2) ... 283s Processing triggers for libc-bin (2.39-0ubuntu2) ... 284s Processing triggers for man-db (2.12.0-3) ... 285s Processing triggers for ca-certificates-java (20240118) ... 285s Adding debian:ACCVRAIZ1.pem 285s Adding debian:AC_RAIZ_FNMT-RCM.pem 285s Adding debian:AC_RAIZ_FNMT-RCM_SERVIDORES_SEGUROS.pem 285s Adding debian:ANF_Secure_Server_Root_CA.pem 285s Adding debian:Actalis_Authentication_Root_CA.pem 285s Adding debian:AffirmTrust_Commercial.pem 285s Adding debian:AffirmTrust_Networking.pem 285s Adding debian:AffirmTrust_Premium.pem 285s Adding debian:AffirmTrust_Premium_ECC.pem 285s Adding debian:Amazon_Root_CA_1.pem 285s Adding debian:Amazon_Root_CA_2.pem 285s Adding debian:Amazon_Root_CA_3.pem 285s Adding debian:Amazon_Root_CA_4.pem 285s Adding debian:Atos_TrustedRoot_2011.pem 285s Adding debian:Atos_TrustedRoot_Root_CA_ECC_TLS_2021.pem 285s Adding debian:Atos_TrustedRoot_Root_CA_RSA_TLS_2021.pem 285s Adding debian:Autoridad_de_Certificacion_Firmaprofesional_CIF_A62634068.pem 285s Adding debian:BJCA_Global_Root_CA1.pem 285s Adding debian:BJCA_Global_Root_CA2.pem 285s Adding debian:Baltimore_CyberTrust_Root.pem 285s Adding debian:Buypass_Class_2_Root_CA.pem 285s Adding debian:Buypass_Class_3_Root_CA.pem 285s Adding debian:CA_Disig_Root_R2.pem 285s Adding debian:CFCA_EV_ROOT.pem 285s Adding debian:COMODO_Certification_Authority.pem 285s Adding debian:COMODO_ECC_Certification_Authority.pem 285s Adding debian:COMODO_RSA_Certification_Authority.pem 285s Adding debian:Certainly_Root_E1.pem 285s Adding debian:Certainly_Root_R1.pem 285s Adding debian:Certigna.pem 285s Adding debian:Certigna_Root_CA.pem 285s Adding debian:Certum_EC-384_CA.pem 285s Adding debian:Certum_Trusted_Network_CA.pem 285s Adding debian:Certum_Trusted_Network_CA_2.pem 285s Adding debian:Certum_Trusted_Root_CA.pem 285s Adding debian:CommScope_Public_Trust_ECC_Root-01.pem 285s Adding debian:CommScope_Public_Trust_ECC_Root-02.pem 285s Adding debian:CommScope_Public_Trust_RSA_Root-01.pem 285s Adding debian:CommScope_Public_Trust_RSA_Root-02.pem 285s Adding debian:Comodo_AAA_Services_root.pem 285s Adding debian:D-TRUST_BR_Root_CA_1_2020.pem 285s Adding debian:D-TRUST_EV_Root_CA_1_2020.pem 285s Adding debian:D-TRUST_Root_Class_3_CA_2_2009.pem 285s Adding debian:D-TRUST_Root_Class_3_CA_2_EV_2009.pem 285s Adding debian:DigiCert_Assured_ID_Root_CA.pem 285s Adding debian:DigiCert_Assured_ID_Root_G2.pem 285s Adding debian:DigiCert_Assured_ID_Root_G3.pem 285s Adding debian:DigiCert_Global_Root_CA.pem 285s Adding debian:DigiCert_Global_Root_G2.pem 285s Adding debian:DigiCert_Global_Root_G3.pem 285s Adding debian:DigiCert_High_Assurance_EV_Root_CA.pem 285s Adding debian:DigiCert_TLS_ECC_P384_Root_G5.pem 285s Adding debian:DigiCert_TLS_RSA4096_Root_G5.pem 285s Adding debian:DigiCert_Trusted_Root_G4.pem 285s Adding debian:Entrust.net_Premium_2048_Secure_Server_CA.pem 286s Adding debian:Entrust_Root_Certification_Authority.pem 286s Adding debian:Entrust_Root_Certification_Authority_-_EC1.pem 286s Adding debian:Entrust_Root_Certification_Authority_-_G2.pem 286s Adding debian:Entrust_Root_Certification_Authority_-_G4.pem 286s Adding debian:GDCA_TrustAUTH_R5_ROOT.pem 286s Adding debian:GLOBALTRUST_2020.pem 286s Adding debian:GTS_Root_R1.pem 286s Adding debian:GTS_Root_R2.pem 286s Adding debian:GTS_Root_R3.pem 286s Adding debian:GTS_Root_R4.pem 286s Adding debian:GlobalSign_ECC_Root_CA_-_R4.pem 286s Adding debian:GlobalSign_ECC_Root_CA_-_R5.pem 286s Adding debian:GlobalSign_Root_CA.pem 286s Adding debian:GlobalSign_Root_CA_-_R3.pem 286s Adding debian:GlobalSign_Root_CA_-_R6.pem 286s Adding debian:GlobalSign_Root_E46.pem 286s Adding debian:GlobalSign_Root_R46.pem 286s Adding debian:Go_Daddy_Class_2_CA.pem 286s Adding debian:Go_Daddy_Root_Certificate_Authority_-_G2.pem 286s Adding debian:HARICA_TLS_ECC_Root_CA_2021.pem 286s Adding debian:HARICA_TLS_RSA_Root_CA_2021.pem 286s Adding debian:Hellenic_Academic_and_Research_Institutions_ECC_RootCA_2015.pem 286s Adding debian:Hellenic_Academic_and_Research_Institutions_RootCA_2015.pem 286s Adding debian:HiPKI_Root_CA_-_G1.pem 286s Adding debian:Hongkong_Post_Root_CA_3.pem 286s Adding debian:ISRG_Root_X1.pem 286s Adding debian:ISRG_Root_X2.pem 286s Adding debian:IdenTrust_Commercial_Root_CA_1.pem 286s Adding debian:IdenTrust_Public_Sector_Root_CA_1.pem 286s Adding debian:Izenpe.com.pem 286s Adding debian:Microsec_e-Szigno_Root_CA_2009.pem 286s Adding debian:Microsoft_ECC_Root_Certificate_Authority_2017.pem 286s Adding debian:Microsoft_RSA_Root_Certificate_Authority_2017.pem 286s Adding debian:NAVER_Global_Root_Certification_Authority.pem 286s Adding debian:NetLock_Arany_=Class_Gold=_Főtanúsítvány.pem 286s Adding debian:OISTE_WISeKey_Global_Root_GB_CA.pem 286s Adding debian:OISTE_WISeKey_Global_Root_GC_CA.pem 286s Adding debian:QuoVadis_Root_CA_1_G3.pem 286s Adding debian:QuoVadis_Root_CA_2.pem 286s Adding debian:QuoVadis_Root_CA_2_G3.pem 286s Adding debian:QuoVadis_Root_CA_3.pem 286s Adding debian:QuoVadis_Root_CA_3_G3.pem 286s Adding debian:SSL.com_EV_Root_Certification_Authority_ECC.pem 286s Adding debian:SSL.com_EV_Root_Certification_Authority_RSA_R2.pem 286s Adding debian:SSL.com_Root_Certification_Authority_ECC.pem 286s Adding debian:SSL.com_Root_Certification_Authority_RSA.pem 286s Adding debian:SSL.com_TLS_ECC_Root_CA_2022.pem 286s Adding debian:SSL.com_TLS_RSA_Root_CA_2022.pem 286s Adding debian:SZAFIR_ROOT_CA2.pem 286s Adding debian:Sectigo_Public_Server_Authentication_Root_E46.pem 286s Adding debian:Sectigo_Public_Server_Authentication_Root_R46.pem 286s Adding debian:SecureSign_RootCA11.pem 286s Adding debian:SecureTrust_CA.pem 286s Adding debian:Secure_Global_CA.pem 286s Adding debian:Security_Communication_ECC_RootCA1.pem 286s Adding debian:Security_Communication_RootCA2.pem 286s Adding debian:Security_Communication_RootCA3.pem 286s Adding debian:Security_Communication_Root_CA.pem 286s Adding debian:Starfield_Class_2_CA.pem 286s Adding debian:Starfield_Root_Certificate_Authority_-_G2.pem 286s Adding debian:Starfield_Services_Root_Certificate_Authority_-_G2.pem 286s Adding debian:SwissSign_Gold_CA_-_G2.pem 286s Adding debian:SwissSign_Silver_CA_-_G2.pem 286s Adding debian:T-TeleSec_GlobalRoot_Class_2.pem 286s Adding debian:T-TeleSec_GlobalRoot_Class_3.pem 286s Adding debian:TUBITAK_Kamu_SM_SSL_Kok_Sertifikasi_-_Surum_1.pem 286s Adding debian:TWCA_Global_Root_CA.pem 286s Adding debian:TWCA_Root_Certification_Authority.pem 286s Adding debian:TeliaSonera_Root_CA_v1.pem 286s Adding debian:Telia_Root_CA_v2.pem 286s Adding debian:TrustAsia_Global_Root_CA_G3.pem 286s Adding debian:TrustAsia_Global_Root_CA_G4.pem 286s Adding debian:Trustwave_Global_Certification_Authority.pem 286s Adding debian:Trustwave_Global_ECC_P256_Certification_Authority.pem 286s Adding debian:Trustwave_Global_ECC_P384_Certification_Authority.pem 286s Adding debian:TunTrust_Root_CA.pem 286s Adding debian:UCA_Extended_Validation_Root.pem 286s Adding debian:UCA_Global_G2_Root.pem 286s Adding debian:USERTrust_ECC_Certification_Authority.pem 286s Adding debian:USERTrust_RSA_Certification_Authority.pem 286s Adding debian:XRamp_Global_CA_Root.pem 286s Adding debian:certSIGN_ROOT_CA.pem 286s Adding debian:certSIGN_Root_CA_G2.pem 286s Adding debian:e-Szigno_Root_CA_2017.pem 286s Adding debian:ePKI_Root_Certification_Authority.pem 286s Adding debian:emSign_ECC_Root_CA_-_C3.pem 286s Adding debian:emSign_ECC_Root_CA_-_G3.pem 286s Adding debian:emSign_Root_CA_-_C1.pem 286s Adding debian:emSign_Root_CA_-_G1.pem 286s Adding debian:vTrus_ECC_Root_CA.pem 286s Adding debian:vTrus_Root_CA.pem 286s done. 286s Setting up default-jre-headless (2:1.21-75+exp1) ... 286s Setting up jruby (9.4.6.0+ds-1ubuntu3) ... 286s Setting up autopkgtest-satdep (0) ... 292s (Reading database ... 77852 files and directories currently installed.) 292s Removing autopkgtest-satdep (0) ... 308s autopkgtest [10:59:51]: test jirb: [----------------------- 308s spawn /usr/bin/jirb --singleline --prompt simple 318s >> puts 'Hello' + 'World' 322s HelloWorldautopkgtest [11:00:05]: test jirb: -----------------------] 323s jirb PASS 323s autopkgtest [11:00:06]: test jirb: - - - - - - - - - - results - - - - - - - - - - 323s autopkgtest [11:00:06]: test jruby: preparing testbed 398s autopkgtest [11:01:21]: testbed dpkg architecture: arm64 398s autopkgtest [11:01:21]: testbed apt version: 2.7.12 398s autopkgtest [11:01:21]: @@@@@@@@@@@@@@@@@@@@ test bed setup 398s Get:1 http://ftpmaster.internal/ubuntu noble-proposed InRelease [117 kB] 399s Get:2 http://ftpmaster.internal/ubuntu noble-proposed/multiverse Sources [52.7 kB] 399s Get:3 http://ftpmaster.internal/ubuntu noble-proposed/main Sources [496 kB] 399s Get:4 http://ftpmaster.internal/ubuntu noble-proposed/universe Sources [3766 kB] 399s Get:5 http://ftpmaster.internal/ubuntu noble-proposed/restricted Sources [6540 B] 399s Get:6 http://ftpmaster.internal/ubuntu noble-proposed/main arm64 Packages [670 kB] 399s Get:7 http://ftpmaster.internal/ubuntu noble-proposed/main arm64 c-n-f Metadata [3144 B] 399s Get:8 http://ftpmaster.internal/ubuntu noble-proposed/restricted arm64 Packages [41.7 kB] 399s Get:9 http://ftpmaster.internal/ubuntu noble-proposed/restricted arm64 c-n-f Metadata [116 B] 399s Get:10 http://ftpmaster.internal/ubuntu noble-proposed/universe arm64 Packages [4234 kB] 399s Get:11 http://ftpmaster.internal/ubuntu noble-proposed/universe arm64 c-n-f Metadata [8528 B] 399s Get:12 http://ftpmaster.internal/ubuntu noble-proposed/multiverse arm64 Packages [56.7 kB] 399s Get:13 http://ftpmaster.internal/ubuntu noble-proposed/multiverse arm64 c-n-f Metadata [116 B] 401s Fetched 9452 kB in 2s (5338 kB/s) 401s Reading package lists... 404s Reading package lists... 405s Building dependency tree... 405s Reading state information... 406s Calculating upgrade... 407s 0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded. 407s Reading package lists... 408s Building dependency tree... 408s Reading state information... 408s 0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded. 409s Hit:1 http://ftpmaster.internal/ubuntu noble InRelease 409s Hit:2 http://ftpmaster.internal/ubuntu noble-updates InRelease 409s Hit:3 http://ftpmaster.internal/ubuntu noble-security InRelease 409s Hit:4 http://ftpmaster.internal/ubuntu noble-proposed InRelease 410s Reading package lists... 411s Reading package lists... 411s Building dependency tree... 411s Reading state information... 412s Calculating upgrade... 413s 0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded. 413s Reading package lists... 413s Building dependency tree... 413s Reading state information... 414s 0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded. 424s Reading package lists... 424s Building dependency tree... 424s Reading state information... 424s Starting pkgProblemResolver with broken count: 0 424s Starting 2 pkgProblemResolver with broken count: 0 424s Done 425s The following additional packages will be installed: 425s ant build-essential ca-certificates-java cpp cpp-13 cpp-13-aarch64-linux-gnu 425s cpp-aarch64-linux-gnu default-jdk-headless default-jre-headless 425s fontconfig-config fonts-dejavu-core fonts-dejavu-mono g++ g++-13 425s g++-13-aarch64-linux-gnu g++-aarch64-linux-gnu gcc gcc-13 425s gcc-13-aarch64-linux-gnu gcc-aarch64-linux-gnu java-common jruby junit4 425s libasan8 libasm-java libasound2 libasound2-data libatomic1 libavahi-client3 425s libavahi-common-data libavahi-common3 libbackport9-java libc-dev-bin 425s libc6-dev libcc1-0 libcrypt-dev libcups2 libdirgra-java libfixposix4t64 425s libfontconfig1 libgcc-13-dev libgmp-dev libgmpxx4ldbl libgomp1 425s libgraphite2-3 libhamcrest-java libharfbuzz0b libhawtjni-runtime-java 425s libheadius-options-java libhwasan0 libinvokebinder-java libisl23 libitm1 425s libjakarta-annotation-api-java libjansi-native-java libjansi1-java 425s libjcodings-java libjffi-java libjffi-jni libjitescript-java libjline2-java 425s libjnr-constants-java libjnr-enxio-java libjnr-ffi-java libjnr-netdb-java 425s libjnr-posix-java libjnr-unixsocket-java libjnr-x86asm-java 425s libjoda-time-java libjpeg-turbo8 libjpeg8 libjruby-joni-java libjzlib-java 425s liblcms2-2 liblsan0 libmpc3 libnsl-dev libpcsclite1 libruby libruby3.1 425s libruby3.2 libsnakeyaml-engine-java libstdc++-13-dev libtirpc-dev libtsan2 425s libubsan1 linux-libc-dev openjdk-21-jdk-headless openjdk-21-jre-headless 425s rake rpcsvc-proto ruby ruby-all-dev ruby-diff-lcs ruby-net-telnet ruby-rspec 425s ruby-rspec-core ruby-rspec-expectations ruby-rspec-mocks ruby-rspec-support 425s ruby-rubygems ruby-sdbm ruby-webrick ruby-xmlrpc ruby3.1 ruby3.1-dev ruby3.2 425s ruby3.2-dev rubygems-integration 425s Suggested packages: 425s ant-doc cpp-doc gcc-13-locales cpp-13-doc default-jre gcc-13-doc 425s gcc-multilib manpages-dev autoconf automake libtool flex bison gdb gcc-doc 425s gdb-aarch64-linux-gnu libasound2-plugins alsa-utils glibc-doc cups-common 425s gmp-doc libgmp10-doc libmpfr-dev libheadius-options-java-doc 425s libinvokebinder-java-doc libjnr-ffi-java-doc libjnr-netdb-java-doc 425s libjnr-posix-java-doc libjoda-convert-java liblcms2-utils pcscd 425s libstdc++-13-doc openjdk-21-demo openjdk-21-source libnss-mdns 425s fonts-dejavu-extra fonts-ipafont-gothic fonts-ipafont-mincho 425s fonts-wqy-microhei | fonts-wqy-zenhei fonts-indic ri ruby-dev bundler 425s Recommended packages: 425s ant-optional fonts-lato alsa-ucm-conf alsa-topology-conf manpages 425s manpages-dev libc-devtools zip libjs-jquery ruby3.1-doc ruby3.2-doc 425s The following NEW packages will be installed: 425s ant autopkgtest-satdep build-essential ca-certificates-java cpp cpp-13 425s cpp-13-aarch64-linux-gnu cpp-aarch64-linux-gnu default-jdk-headless 425s default-jre-headless fontconfig-config fonts-dejavu-core fonts-dejavu-mono 425s g++ g++-13 g++-13-aarch64-linux-gnu g++-aarch64-linux-gnu gcc gcc-13 425s gcc-13-aarch64-linux-gnu gcc-aarch64-linux-gnu java-common jruby junit4 425s libasan8 libasm-java libasound2 libasound2-data libatomic1 libavahi-client3 425s libavahi-common-data libavahi-common3 libbackport9-java libc-dev-bin 425s libc6-dev libcc1-0 libcrypt-dev libcups2 libdirgra-java libfixposix4t64 425s libfontconfig1 libgcc-13-dev libgmp-dev libgmpxx4ldbl libgomp1 425s libgraphite2-3 libhamcrest-java libharfbuzz0b libhawtjni-runtime-java 425s libheadius-options-java libhwasan0 libinvokebinder-java libisl23 libitm1 425s libjakarta-annotation-api-java libjansi-native-java libjansi1-java 425s libjcodings-java libjffi-java libjffi-jni libjitescript-java libjline2-java 425s libjnr-constants-java libjnr-enxio-java libjnr-ffi-java libjnr-netdb-java 425s libjnr-posix-java libjnr-unixsocket-java libjnr-x86asm-java 425s libjoda-time-java libjpeg-turbo8 libjpeg8 libjruby-joni-java libjzlib-java 425s liblcms2-2 liblsan0 libmpc3 libnsl-dev libpcsclite1 libruby libruby3.1 425s libruby3.2 libsnakeyaml-engine-java libstdc++-13-dev libtirpc-dev libtsan2 425s libubsan1 linux-libc-dev openjdk-21-jdk-headless openjdk-21-jre-headless 425s rake rpcsvc-proto ruby ruby-all-dev ruby-diff-lcs ruby-net-telnet ruby-rspec 425s ruby-rspec-core ruby-rspec-expectations ruby-rspec-mocks ruby-rspec-support 425s ruby-rubygems ruby-sdbm ruby-webrick ruby-xmlrpc ruby3.1 ruby3.1-dev ruby3.2 425s ruby3.2-dev rubygems-integration 425s 0 upgraded, 110 newly installed, 0 to remove and 0 not upgraded. 425s Need to get 247 MB/247 MB of archives. 425s After this operation, 661 MB of additional disk space will be used. 425s Get:1 /tmp/autopkgtest.nFBjtB/4-autopkgtest-satdep.deb autopkgtest-satdep arm64 0 [820 B] 425s Get:2 http://ftpmaster.internal/ubuntu noble/main arm64 ca-certificates-java all 20240118 [11.6 kB] 425s Get:3 http://ftpmaster.internal/ubuntu noble/main arm64 java-common all 0.75+exp1 [6798 B] 425s Get:4 http://ftpmaster.internal/ubuntu noble/main arm64 libavahi-common-data arm64 0.8-13ubuntu2 [29.5 kB] 425s Get:5 http://ftpmaster.internal/ubuntu noble/main arm64 libavahi-common3 arm64 0.8-13ubuntu2 [23.2 kB] 425s Get:6 http://ftpmaster.internal/ubuntu noble/main arm64 libavahi-client3 arm64 0.8-13ubuntu2 [27.3 kB] 425s Get:7 http://ftpmaster.internal/ubuntu noble/main arm64 libcups2 arm64 2.4.6-0ubuntu3 [270 kB] 425s Get:8 http://ftpmaster.internal/ubuntu noble/main arm64 liblcms2-2 arm64 2.14-2 [159 kB] 425s Get:9 http://ftpmaster.internal/ubuntu noble/main arm64 libjpeg-turbo8 arm64 2.1.5-2ubuntu1 [160 kB] 426s Get:10 http://ftpmaster.internal/ubuntu noble/main arm64 libjpeg8 arm64 8c-2ubuntu11 [2148 B] 426s Get:11 http://ftpmaster.internal/ubuntu noble/main arm64 fonts-dejavu-mono all 2.37-8 [502 kB] 426s Get:12 http://ftpmaster.internal/ubuntu noble/main arm64 fonts-dejavu-core all 2.37-8 [835 kB] 426s Get:13 http://ftpmaster.internal/ubuntu noble/main arm64 fontconfig-config arm64 2.15.0-1ubuntu1 [37.0 kB] 426s Get:14 http://ftpmaster.internal/ubuntu noble/main arm64 libfontconfig1 arm64 2.15.0-1ubuntu1 [142 kB] 426s Get:15 http://ftpmaster.internal/ubuntu noble/main arm64 libasound2-data all 1.2.10-3build1 [20.7 kB] 426s Get:16 http://ftpmaster.internal/ubuntu noble/main arm64 libasound2 arm64 1.2.10-3build1 [386 kB] 426s Get:17 http://ftpmaster.internal/ubuntu noble/main arm64 libgraphite2-3 arm64 1.3.14-2 [81.5 kB] 426s Get:18 http://ftpmaster.internal/ubuntu noble/main arm64 libharfbuzz0b arm64 8.3.0-2 [463 kB] 426s Get:19 http://ftpmaster.internal/ubuntu noble/main arm64 libpcsclite1 arm64 2.0.0-1 [21.2 kB] 426s Get:20 http://ftpmaster.internal/ubuntu noble/main arm64 openjdk-21-jre-headless arm64 21.0.2+13-2 [45.8 MB] 427s Get:21 http://ftpmaster.internal/ubuntu noble/main arm64 default-jre-headless arm64 2:1.21-75+exp1 [3096 B] 427s Get:22 http://ftpmaster.internal/ubuntu noble/universe arm64 ant all 1.10.14-1 [2147 kB] 427s Get:23 http://ftpmaster.internal/ubuntu noble/main arm64 libc-dev-bin arm64 2.39-0ubuntu2 [19.7 kB] 427s Get:24 http://ftpmaster.internal/ubuntu noble/main arm64 linux-libc-dev arm64 6.8.0-11.11 [1569 kB] 427s Get:25 http://ftpmaster.internal/ubuntu noble/main arm64 libcrypt-dev arm64 1:4.4.36-4 [136 kB] 427s Get:26 http://ftpmaster.internal/ubuntu noble/main arm64 libtirpc-dev arm64 1.3.4+ds-1build1 [232 kB] 427s Get:27 http://ftpmaster.internal/ubuntu noble/main arm64 libnsl-dev arm64 1.3.0-3 [71.9 kB] 427s Get:28 http://ftpmaster.internal/ubuntu noble/main arm64 rpcsvc-proto arm64 1.4.2-0ubuntu6 [65.4 kB] 427s Get:29 http://ftpmaster.internal/ubuntu noble/main arm64 libc6-dev arm64 2.39-0ubuntu2 [1596 kB] 427s Get:30 http://ftpmaster.internal/ubuntu noble/main arm64 libisl23 arm64 0.26-3 [713 kB] 427s Get:31 http://ftpmaster.internal/ubuntu noble/main arm64 libmpc3 arm64 1.3.1-1 [55.3 kB] 427s Get:32 http://ftpmaster.internal/ubuntu noble/main arm64 cpp-13-aarch64-linux-gnu arm64 13.2.0-17ubuntu2 [10.3 MB] 428s Get:33 http://ftpmaster.internal/ubuntu noble/main arm64 cpp-13 arm64 13.2.0-17ubuntu2 [1028 B] 428s Get:34 http://ftpmaster.internal/ubuntu noble/main arm64 cpp-aarch64-linux-gnu arm64 4:13.2.0-7ubuntu1 [5316 B] 428s Get:35 http://ftpmaster.internal/ubuntu noble/main arm64 cpp arm64 4:13.2.0-7ubuntu1 [22.4 kB] 428s Get:36 http://ftpmaster.internal/ubuntu noble/main arm64 libcc1-0 arm64 14-20240303-1ubuntu1 [44.7 kB] 428s Get:37 http://ftpmaster.internal/ubuntu noble/main arm64 libgomp1 arm64 14-20240303-1ubuntu1 [144 kB] 428s Get:38 http://ftpmaster.internal/ubuntu noble/main arm64 libitm1 arm64 14-20240303-1ubuntu1 [27.7 kB] 428s Get:39 http://ftpmaster.internal/ubuntu noble/main arm64 libatomic1 arm64 14-20240303-1ubuntu1 [11.4 kB] 428s Get:40 http://ftpmaster.internal/ubuntu noble/main arm64 libasan8 arm64 14-20240303-1ubuntu1 [2919 kB] 428s Get:41 http://ftpmaster.internal/ubuntu noble/main arm64 liblsan0 arm64 14-20240303-1ubuntu1 [1282 kB] 428s Get:42 http://ftpmaster.internal/ubuntu noble/main arm64 libtsan2 arm64 14-20240303-1ubuntu1 [2687 kB] 428s Get:43 http://ftpmaster.internal/ubuntu noble/main arm64 libubsan1 arm64 14-20240303-1ubuntu1 [1151 kB] 428s Get:44 http://ftpmaster.internal/ubuntu noble/main arm64 libhwasan0 arm64 14-20240303-1ubuntu1 [1597 kB] 428s Get:45 http://ftpmaster.internal/ubuntu noble/main arm64 libgcc-13-dev arm64 13.2.0-17ubuntu2 [2464 kB] 428s Get:46 http://ftpmaster.internal/ubuntu noble/main arm64 gcc-13-aarch64-linux-gnu arm64 13.2.0-17ubuntu2 [20.1 MB] 429s Get:47 http://ftpmaster.internal/ubuntu noble/main arm64 gcc-13 arm64 13.2.0-17ubuntu2 [467 kB] 429s Get:48 http://ftpmaster.internal/ubuntu noble/main arm64 gcc-aarch64-linux-gnu arm64 4:13.2.0-7ubuntu1 [1198 B] 429s Get:49 http://ftpmaster.internal/ubuntu noble/main arm64 gcc arm64 4:13.2.0-7ubuntu1 [5018 B] 429s Get:50 http://ftpmaster.internal/ubuntu noble/main arm64 libstdc++-13-dev arm64 13.2.0-17ubuntu2 [2322 kB] 429s Get:51 http://ftpmaster.internal/ubuntu noble/main arm64 g++-13-aarch64-linux-gnu arm64 13.2.0-17ubuntu2 [11.7 MB] 429s Get:52 http://ftpmaster.internal/ubuntu noble/main arm64 g++-13 arm64 13.2.0-17ubuntu2 [14.4 kB] 429s Get:53 http://ftpmaster.internal/ubuntu noble/main arm64 g++-aarch64-linux-gnu arm64 4:13.2.0-7ubuntu1 [962 B] 429s Get:54 http://ftpmaster.internal/ubuntu noble/main arm64 g++ arm64 4:13.2.0-7ubuntu1 [1082 B] 429s Get:55 http://ftpmaster.internal/ubuntu noble/main arm64 build-essential arm64 12.10ubuntu1 [4932 B] 429s Get:56 http://ftpmaster.internal/ubuntu noble/main arm64 openjdk-21-jdk-headless arm64 21.0.2+13-2 [81.6 MB] 432s Get:57 http://ftpmaster.internal/ubuntu noble/main arm64 default-jdk-headless arm64 2:1.21-75+exp1 [960 B] 432s Get:58 http://ftpmaster.internal/ubuntu noble/universe arm64 libasm-java all 9.6~us1-0ubuntu1 [386 kB] 432s Get:59 http://ftpmaster.internal/ubuntu noble/universe arm64 libbackport9-java all 1.10-2 [13.2 kB] 432s Get:60 http://ftpmaster.internal/ubuntu noble/universe arm64 libdirgra-java all 0.4-2 [21.6 kB] 432s Get:61 http://ftpmaster.internal/ubuntu noble/universe arm64 libfixposix4t64 arm64 1:0.5.1-1+nmu1.1 [16.9 kB] 432s Get:62 http://ftpmaster.internal/ubuntu noble/universe arm64 libheadius-options-java all 1.7-1 [18.2 kB] 432s Get:63 http://ftpmaster.internal/ubuntu noble/universe arm64 libinvokebinder-java all 1.13-1 [51.7 kB] 432s Get:64 http://ftpmaster.internal/ubuntu noble/universe arm64 libhawtjni-runtime-java all 1.18-1 [28.9 kB] 432s Get:65 http://ftpmaster.internal/ubuntu noble/universe arm64 libjansi-native-java all 1.8-2 [24.1 kB] 432s Get:66 http://ftpmaster.internal/ubuntu noble/universe arm64 libjansi1-java all 1.18-3ubuntu1 [56.0 kB] 432s Get:67 http://ftpmaster.internal/ubuntu noble/universe arm64 libjcodings-java all 1.0.58-1 [1474 kB] 432s Get:68 http://ftpmaster.internal/ubuntu noble/universe arm64 libjffi-jni arm64 1.3.13+ds-1 [29.8 kB] 432s Get:69 http://ftpmaster.internal/ubuntu noble/universe arm64 libjffi-java all 1.3.13+ds-1 [112 kB] 432s Get:70 http://ftpmaster.internal/ubuntu noble/universe arm64 libjitescript-java all 0.4.3-1 [24.4 kB] 432s Get:71 http://ftpmaster.internal/ubuntu noble/universe arm64 libjline2-java all 2.14.6-5 [150 kB] 432s Get:72 http://ftpmaster.internal/ubuntu noble/universe arm64 libjnr-constants-java all 0.10.4-2 [1397 kB] 432s Get:73 http://ftpmaster.internal/ubuntu noble/universe arm64 libjnr-x86asm-java all 1.0.2-5.1 [207 kB] 432s Get:74 http://ftpmaster.internal/ubuntu noble/universe arm64 libjnr-ffi-java all 2.2.15-2 [627 kB] 432s Get:75 http://ftpmaster.internal/ubuntu noble/universe arm64 libjnr-enxio-java all 0.32.16-1 [33.7 kB] 432s Get:76 http://ftpmaster.internal/ubuntu noble/universe arm64 libjnr-netdb-java all 1.1.6-1.1 [58.8 kB] 432s Get:77 http://ftpmaster.internal/ubuntu noble/universe arm64 libjnr-posix-java all 3.1.18-1 [267 kB] 432s Get:78 http://ftpmaster.internal/ubuntu noble/universe arm64 libjnr-unixsocket-java all 0.38.21-2 [46.9 kB] 432s Get:79 http://ftpmaster.internal/ubuntu noble/universe arm64 libjoda-time-java all 2.10.14-1 [535 kB] 432s Get:80 http://ftpmaster.internal/ubuntu noble/universe arm64 libjruby-joni-java all 2.2.1-1 [222 kB] 432s Get:81 http://ftpmaster.internal/ubuntu noble/universe arm64 libjzlib-java all 1.1.3-3 [76.8 kB] 432s Get:82 http://ftpmaster.internal/ubuntu noble/universe arm64 libsnakeyaml-engine-java all 2.7+ds-3 [258 kB] 432s Get:83 http://ftpmaster.internal/ubuntu noble-proposed/universe arm64 jruby all 9.4.6.0+ds-1ubuntu3 [33.3 MB] 433s Get:84 http://ftpmaster.internal/ubuntu noble/universe arm64 libhamcrest-java all 2.2-2 [117 kB] 433s Get:85 http://ftpmaster.internal/ubuntu noble/universe arm64 junit4 all 4.13.2-4 [347 kB] 433s Get:86 http://ftpmaster.internal/ubuntu noble/main arm64 libgmpxx4ldbl arm64 2:6.3.0+dfsg-2ubuntu4 [9950 B] 433s Get:87 http://ftpmaster.internal/ubuntu noble/main arm64 libgmp-dev arm64 2:6.3.0+dfsg-2ubuntu4 [330 kB] 433s Get:88 http://ftpmaster.internal/ubuntu noble/universe arm64 libjakarta-annotation-api-java all 2.1.1-1 [30.1 kB] 433s Get:89 http://ftpmaster.internal/ubuntu noble/main arm64 rubygems-integration all 1.18 [5336 B] 433s Get:90 http://ftpmaster.internal/ubuntu noble/main arm64 ruby3.1 arm64 3.1.2-7ubuntu4 [49.0 kB] 433s Get:91 http://ftpmaster.internal/ubuntu noble/main arm64 ruby-rubygems all 3.4.20-1 [238 kB] 433s Get:92 http://ftpmaster.internal/ubuntu noble/main arm64 ruby arm64 1:3.1+1 [3464 B] 433s Get:93 http://ftpmaster.internal/ubuntu noble/main arm64 rake all 13.0.6-3 [61.6 kB] 433s Get:94 http://ftpmaster.internal/ubuntu noble/main arm64 ruby-net-telnet all 0.2.0-1 [13.3 kB] 433s Get:95 http://ftpmaster.internal/ubuntu noble/main arm64 ruby-webrick all 1.8.1-1 [52.3 kB] 433s Get:96 http://ftpmaster.internal/ubuntu noble/main arm64 ruby-xmlrpc all 0.3.2-2 [24.8 kB] 433s Get:97 http://ftpmaster.internal/ubuntu noble/main arm64 libruby3.2 arm64 3.2.3-1 [5345 kB] 434s Get:98 http://ftpmaster.internal/ubuntu noble/main arm64 ruby-sdbm arm64 1.0.0-5build3 [17.9 kB] 434s Get:99 http://ftpmaster.internal/ubuntu noble/main arm64 libruby3.1 arm64 3.1.2-7ubuntu4 [5115 kB] 434s Get:100 http://ftpmaster.internal/ubuntu noble/main arm64 libruby arm64 1:3.1+1 [4640 B] 434s Get:101 http://ftpmaster.internal/ubuntu noble/main arm64 ruby3.1-dev arm64 3.1.2-7ubuntu4 [398 kB] 434s Get:102 http://ftpmaster.internal/ubuntu noble/main arm64 ruby3.2 arm64 3.2.3-1 [50.8 kB] 434s Get:103 http://ftpmaster.internal/ubuntu noble/main arm64 ruby3.2-dev arm64 3.2.3-1 [403 kB] 434s Get:104 http://ftpmaster.internal/ubuntu noble/main arm64 ruby-all-dev arm64 1:3.1+1 [5726 B] 434s Get:105 http://ftpmaster.internal/ubuntu noble/universe arm64 ruby-diff-lcs all 1.5.0-1 [23.9 kB] 434s Get:106 http://ftpmaster.internal/ubuntu noble/universe arm64 ruby-rspec-support all 3.12.0c0e1m1s0-1 [28.8 kB] 434s Get:107 http://ftpmaster.internal/ubuntu noble/universe arm64 ruby-rspec-core all 3.12.0c0e1m1s0-1 [163 kB] 434s Get:108 http://ftpmaster.internal/ubuntu noble/universe arm64 ruby-rspec-expectations all 3.12.0c0e1m1s0-1 [89.2 kB] 434s Get:109 http://ftpmaster.internal/ubuntu noble/universe arm64 ruby-rspec-mocks all 3.12.0c0e1m1s0-1 [79.4 kB] 434s Get:110 http://ftpmaster.internal/ubuntu noble/universe arm64 ruby-rspec all 3.12.0c0e1m1s0-1 [3506 B] 435s Fetched 247 MB in 9s (26.1 MB/s) 435s Selecting previously unselected package ca-certificates-java. 435s (Reading database ... (Reading database ... 5% (Reading database ... 10% (Reading database ... 15% (Reading database ... 20% (Reading database ... 25% (Reading database ... 30% (Reading database ... 35% (Reading database ... 40% (Reading database ... 45% (Reading database ... 50% (Reading database ... 55% (Reading database ... 60% (Reading database ... 65% (Reading database ... 70% (Reading database ... 75% (Reading database ... 80% (Reading database ... 85% (Reading database ... 90% (Reading database ... 95% (Reading database ... 100% (Reading database ... 74758 files and directories currently installed.) 435s Preparing to unpack .../000-ca-certificates-java_20240118_all.deb ... 435s Unpacking ca-certificates-java (20240118) ... 436s Selecting previously unselected package java-common. 436s Preparing to unpack .../001-java-common_0.75+exp1_all.deb ... 436s Unpacking java-common (0.75+exp1) ... 436s Selecting previously unselected package libavahi-common-data:arm64. 436s Preparing to unpack .../002-libavahi-common-data_0.8-13ubuntu2_arm64.deb ... 436s Unpacking libavahi-common-data:arm64 (0.8-13ubuntu2) ... 436s Selecting previously unselected package libavahi-common3:arm64. 436s Preparing to unpack .../003-libavahi-common3_0.8-13ubuntu2_arm64.deb ... 436s Unpacking libavahi-common3:arm64 (0.8-13ubuntu2) ... 436s Selecting previously unselected package libavahi-client3:arm64. 436s Preparing to unpack .../004-libavahi-client3_0.8-13ubuntu2_arm64.deb ... 436s Unpacking libavahi-client3:arm64 (0.8-13ubuntu2) ... 436s Selecting previously unselected package libcups2:arm64. 436s Preparing to unpack .../005-libcups2_2.4.6-0ubuntu3_arm64.deb ... 436s Unpacking libcups2:arm64 (2.4.6-0ubuntu3) ... 436s Selecting previously unselected package liblcms2-2:arm64. 436s Preparing to unpack .../006-liblcms2-2_2.14-2_arm64.deb ... 436s Unpacking liblcms2-2:arm64 (2.14-2) ... 436s Selecting previously unselected package libjpeg-turbo8:arm64. 436s Preparing to unpack .../007-libjpeg-turbo8_2.1.5-2ubuntu1_arm64.deb ... 436s Unpacking libjpeg-turbo8:arm64 (2.1.5-2ubuntu1) ... 436s Selecting previously unselected package libjpeg8:arm64. 436s Preparing to unpack .../008-libjpeg8_8c-2ubuntu11_arm64.deb ... 436s Unpacking libjpeg8:arm64 (8c-2ubuntu11) ... 436s Selecting previously unselected package fonts-dejavu-mono. 436s Preparing to unpack .../009-fonts-dejavu-mono_2.37-8_all.deb ... 436s Unpacking fonts-dejavu-mono (2.37-8) ... 436s Selecting previously unselected package fonts-dejavu-core. 436s Preparing to unpack .../010-fonts-dejavu-core_2.37-8_all.deb ... 436s Unpacking fonts-dejavu-core (2.37-8) ... 436s Selecting previously unselected package fontconfig-config. 436s Preparing to unpack .../011-fontconfig-config_2.15.0-1ubuntu1_arm64.deb ... 436s Unpacking fontconfig-config (2.15.0-1ubuntu1) ... 436s Selecting previously unselected package libfontconfig1:arm64. 436s Preparing to unpack .../012-libfontconfig1_2.15.0-1ubuntu1_arm64.deb ... 436s Unpacking libfontconfig1:arm64 (2.15.0-1ubuntu1) ... 436s Selecting previously unselected package libasound2-data. 436s Preparing to unpack .../013-libasound2-data_1.2.10-3build1_all.deb ... 436s Unpacking libasound2-data (1.2.10-3build1) ... 436s Selecting previously unselected package libasound2:arm64. 436s Preparing to unpack .../014-libasound2_1.2.10-3build1_arm64.deb ... 436s Unpacking libasound2:arm64 (1.2.10-3build1) ... 436s Selecting previously unselected package libgraphite2-3:arm64. 436s Preparing to unpack .../015-libgraphite2-3_1.3.14-2_arm64.deb ... 436s Unpacking libgraphite2-3:arm64 (1.3.14-2) ... 436s Selecting previously unselected package libharfbuzz0b:arm64. 436s Preparing to unpack .../016-libharfbuzz0b_8.3.0-2_arm64.deb ... 436s Unpacking libharfbuzz0b:arm64 (8.3.0-2) ... 436s Selecting previously unselected package libpcsclite1:arm64. 436s Preparing to unpack .../017-libpcsclite1_2.0.0-1_arm64.deb ... 436s Unpacking libpcsclite1:arm64 (2.0.0-1) ... 436s Selecting previously unselected package openjdk-21-jre-headless:arm64. 436s Preparing to unpack .../018-openjdk-21-jre-headless_21.0.2+13-2_arm64.deb ... 436s Unpacking openjdk-21-jre-headless:arm64 (21.0.2+13-2) ... 437s Selecting previously unselected package default-jre-headless. 437s Preparing to unpack .../019-default-jre-headless_2%3a1.21-75+exp1_arm64.deb ... 437s Unpacking default-jre-headless (2:1.21-75+exp1) ... 437s Selecting previously unselected package ant. 437s Preparing to unpack .../020-ant_1.10.14-1_all.deb ... 437s Unpacking ant (1.10.14-1) ... 437s Selecting previously unselected package libc-dev-bin. 437s Preparing to unpack .../021-libc-dev-bin_2.39-0ubuntu2_arm64.deb ... 437s Unpacking libc-dev-bin (2.39-0ubuntu2) ... 437s Selecting previously unselected package linux-libc-dev:arm64. 437s Preparing to unpack .../022-linux-libc-dev_6.8.0-11.11_arm64.deb ... 437s Unpacking linux-libc-dev:arm64 (6.8.0-11.11) ... 438s Selecting previously unselected package libcrypt-dev:arm64. 438s Preparing to unpack .../023-libcrypt-dev_1%3a4.4.36-4_arm64.deb ... 438s Unpacking libcrypt-dev:arm64 (1:4.4.36-4) ... 438s Selecting previously unselected package libtirpc-dev:arm64. 438s Preparing to unpack .../024-libtirpc-dev_1.3.4+ds-1build1_arm64.deb ... 438s Unpacking libtirpc-dev:arm64 (1.3.4+ds-1build1) ... 438s Selecting previously unselected package libnsl-dev:arm64. 438s Preparing to unpack .../025-libnsl-dev_1.3.0-3_arm64.deb ... 438s Unpacking libnsl-dev:arm64 (1.3.0-3) ... 438s Selecting previously unselected package rpcsvc-proto. 438s Preparing to unpack .../026-rpcsvc-proto_1.4.2-0ubuntu6_arm64.deb ... 438s Unpacking rpcsvc-proto (1.4.2-0ubuntu6) ... 438s Selecting previously unselected package libc6-dev:arm64. 438s Preparing to unpack .../027-libc6-dev_2.39-0ubuntu2_arm64.deb ... 438s Unpacking libc6-dev:arm64 (2.39-0ubuntu2) ... 438s Selecting previously unselected package libisl23:arm64. 438s Preparing to unpack .../028-libisl23_0.26-3_arm64.deb ... 438s Unpacking libisl23:arm64 (0.26-3) ... 438s Selecting previously unselected package libmpc3:arm64. 438s Preparing to unpack .../029-libmpc3_1.3.1-1_arm64.deb ... 438s Unpacking libmpc3:arm64 (1.3.1-1) ... 438s Selecting previously unselected package cpp-13-aarch64-linux-gnu. 438s Preparing to unpack .../030-cpp-13-aarch64-linux-gnu_13.2.0-17ubuntu2_arm64.deb ... 438s Unpacking cpp-13-aarch64-linux-gnu (13.2.0-17ubuntu2) ... 438s Selecting previously unselected package cpp-13. 438s Preparing to unpack .../031-cpp-13_13.2.0-17ubuntu2_arm64.deb ... 438s Unpacking cpp-13 (13.2.0-17ubuntu2) ... 438s Selecting previously unselected package cpp-aarch64-linux-gnu. 438s Preparing to unpack .../032-cpp-aarch64-linux-gnu_4%3a13.2.0-7ubuntu1_arm64.deb ... 438s Unpacking cpp-aarch64-linux-gnu (4:13.2.0-7ubuntu1) ... 438s Selecting previously unselected package cpp. 438s Preparing to unpack .../033-cpp_4%3a13.2.0-7ubuntu1_arm64.deb ... 438s Unpacking cpp (4:13.2.0-7ubuntu1) ... 438s Selecting previously unselected package libcc1-0:arm64. 438s Preparing to unpack .../034-libcc1-0_14-20240303-1ubuntu1_arm64.deb ... 438s Unpacking libcc1-0:arm64 (14-20240303-1ubuntu1) ... 438s Selecting previously unselected package libgomp1:arm64. 438s Preparing to unpack .../035-libgomp1_14-20240303-1ubuntu1_arm64.deb ... 438s Unpacking libgomp1:arm64 (14-20240303-1ubuntu1) ... 438s Selecting previously unselected package libitm1:arm64. 438s Preparing to unpack .../036-libitm1_14-20240303-1ubuntu1_arm64.deb ... 438s Unpacking libitm1:arm64 (14-20240303-1ubuntu1) ... 438s Selecting previously unselected package libatomic1:arm64. 438s Preparing to unpack .../037-libatomic1_14-20240303-1ubuntu1_arm64.deb ... 438s Unpacking libatomic1:arm64 (14-20240303-1ubuntu1) ... 438s Selecting previously unselected package libasan8:arm64. 438s Preparing to unpack .../038-libasan8_14-20240303-1ubuntu1_arm64.deb ... 438s Unpacking libasan8:arm64 (14-20240303-1ubuntu1) ... 438s Selecting previously unselected package liblsan0:arm64. 438s Preparing to unpack .../039-liblsan0_14-20240303-1ubuntu1_arm64.deb ... 438s Unpacking liblsan0:arm64 (14-20240303-1ubuntu1) ... 438s Selecting previously unselected package libtsan2:arm64. 438s Preparing to unpack .../040-libtsan2_14-20240303-1ubuntu1_arm64.deb ... 438s Unpacking libtsan2:arm64 (14-20240303-1ubuntu1) ... 439s Selecting previously unselected package libubsan1:arm64. 439s Preparing to unpack .../041-libubsan1_14-20240303-1ubuntu1_arm64.deb ... 439s Unpacking libubsan1:arm64 (14-20240303-1ubuntu1) ... 439s Selecting previously unselected package libhwasan0:arm64. 439s Preparing to unpack .../042-libhwasan0_14-20240303-1ubuntu1_arm64.deb ... 439s Unpacking libhwasan0:arm64 (14-20240303-1ubuntu1) ... 439s Selecting previously unselected package libgcc-13-dev:arm64. 439s Preparing to unpack .../043-libgcc-13-dev_13.2.0-17ubuntu2_arm64.deb ... 439s Unpacking libgcc-13-dev:arm64 (13.2.0-17ubuntu2) ... 439s Selecting previously unselected package gcc-13-aarch64-linux-gnu. 439s Preparing to unpack .../044-gcc-13-aarch64-linux-gnu_13.2.0-17ubuntu2_arm64.deb ... 439s Unpacking gcc-13-aarch64-linux-gnu (13.2.0-17ubuntu2) ... 439s Selecting previously unselected package gcc-13. 439s Preparing to unpack .../045-gcc-13_13.2.0-17ubuntu2_arm64.deb ... 439s Unpacking gcc-13 (13.2.0-17ubuntu2) ... 439s Selecting previously unselected package gcc-aarch64-linux-gnu. 439s Preparing to unpack .../046-gcc-aarch64-linux-gnu_4%3a13.2.0-7ubuntu1_arm64.deb ... 439s Unpacking gcc-aarch64-linux-gnu (4:13.2.0-7ubuntu1) ... 439s Selecting previously unselected package gcc. 439s Preparing to unpack .../047-gcc_4%3a13.2.0-7ubuntu1_arm64.deb ... 439s Unpacking gcc (4:13.2.0-7ubuntu1) ... 439s Selecting previously unselected package libstdc++-13-dev:arm64. 439s Preparing to unpack .../048-libstdc++-13-dev_13.2.0-17ubuntu2_arm64.deb ... 439s Unpacking libstdc++-13-dev:arm64 (13.2.0-17ubuntu2) ... 439s Selecting previously unselected package g++-13-aarch64-linux-gnu. 439s Preparing to unpack .../049-g++-13-aarch64-linux-gnu_13.2.0-17ubuntu2_arm64.deb ... 439s Unpacking g++-13-aarch64-linux-gnu (13.2.0-17ubuntu2) ... 440s Selecting previously unselected package g++-13. 440s Preparing to unpack .../050-g++-13_13.2.0-17ubuntu2_arm64.deb ... 440s Unpacking g++-13 (13.2.0-17ubuntu2) ... 440s Selecting previously unselected package g++-aarch64-linux-gnu. 440s Preparing to unpack .../051-g++-aarch64-linux-gnu_4%3a13.2.0-7ubuntu1_arm64.deb ... 440s Unpacking g++-aarch64-linux-gnu (4:13.2.0-7ubuntu1) ... 440s Selecting previously unselected package g++. 440s Preparing to unpack .../052-g++_4%3a13.2.0-7ubuntu1_arm64.deb ... 440s Unpacking g++ (4:13.2.0-7ubuntu1) ... 440s Selecting previously unselected package build-essential. 440s Preparing to unpack .../053-build-essential_12.10ubuntu1_arm64.deb ... 440s Unpacking build-essential (12.10ubuntu1) ... 440s Selecting previously unselected package openjdk-21-jdk-headless:arm64. 440s Preparing to unpack .../054-openjdk-21-jdk-headless_21.0.2+13-2_arm64.deb ... 440s Unpacking openjdk-21-jdk-headless:arm64 (21.0.2+13-2) ... 440s Selecting previously unselected package default-jdk-headless. 440s Preparing to unpack .../055-default-jdk-headless_2%3a1.21-75+exp1_arm64.deb ... 440s Unpacking default-jdk-headless (2:1.21-75+exp1) ... 440s Selecting previously unselected package libasm-java. 440s Preparing to unpack .../056-libasm-java_9.6~us1-0ubuntu1_all.deb ... 440s Unpacking libasm-java (9.6~us1-0ubuntu1) ... 440s Selecting previously unselected package libbackport9-java. 440s Preparing to unpack .../057-libbackport9-java_1.10-2_all.deb ... 440s Unpacking libbackport9-java (1.10-2) ... 440s Selecting previously unselected package libdirgra-java. 440s Preparing to unpack .../058-libdirgra-java_0.4-2_all.deb ... 440s Unpacking libdirgra-java (0.4-2) ... 440s Selecting previously unselected package libfixposix4t64:arm64. 440s Preparing to unpack .../059-libfixposix4t64_1%3a0.5.1-1+nmu1.1_arm64.deb ... 440s Unpacking libfixposix4t64:arm64 (1:0.5.1-1+nmu1.1) ... 440s Selecting previously unselected package libheadius-options-java. 440s Preparing to unpack .../060-libheadius-options-java_1.7-1_all.deb ... 440s Unpacking libheadius-options-java (1.7-1) ... 440s Selecting previously unselected package libinvokebinder-java. 440s Preparing to unpack .../061-libinvokebinder-java_1.13-1_all.deb ... 440s Unpacking libinvokebinder-java (1.13-1) ... 440s Selecting previously unselected package libhawtjni-runtime-java. 440s Preparing to unpack .../062-libhawtjni-runtime-java_1.18-1_all.deb ... 440s Unpacking libhawtjni-runtime-java (1.18-1) ... 440s Selecting previously unselected package libjansi-native-java. 440s Preparing to unpack .../063-libjansi-native-java_1.8-2_all.deb ... 440s Unpacking libjansi-native-java (1.8-2) ... 440s Selecting previously unselected package libjansi1-java. 440s Preparing to unpack .../064-libjansi1-java_1.18-3ubuntu1_all.deb ... 440s Unpacking libjansi1-java (1.18-3ubuntu1) ... 440s Selecting previously unselected package libjcodings-java. 440s Preparing to unpack .../065-libjcodings-java_1.0.58-1_all.deb ... 440s Unpacking libjcodings-java (1.0.58-1) ... 440s Selecting previously unselected package libjffi-jni:arm64. 440s Preparing to unpack .../066-libjffi-jni_1.3.13+ds-1_arm64.deb ... 440s Unpacking libjffi-jni:arm64 (1.3.13+ds-1) ... 440s Selecting previously unselected package libjffi-java. 440s Preparing to unpack .../067-libjffi-java_1.3.13+ds-1_all.deb ... 440s Unpacking libjffi-java (1.3.13+ds-1) ... 441s Selecting previously unselected package libjitescript-java. 441s Preparing to unpack .../068-libjitescript-java_0.4.3-1_all.deb ... 441s Unpacking libjitescript-java (0.4.3-1) ... 441s Selecting previously unselected package libjline2-java. 441s Preparing to unpack .../069-libjline2-java_2.14.6-5_all.deb ... 441s Unpacking libjline2-java (2.14.6-5) ... 441s Selecting previously unselected package libjnr-constants-java. 441s Preparing to unpack .../070-libjnr-constants-java_0.10.4-2_all.deb ... 441s Unpacking libjnr-constants-java (0.10.4-2) ... 441s Selecting previously unselected package libjnr-x86asm-java. 441s Preparing to unpack .../071-libjnr-x86asm-java_1.0.2-5.1_all.deb ... 441s Unpacking libjnr-x86asm-java (1.0.2-5.1) ... 441s Selecting previously unselected package libjnr-ffi-java. 441s Preparing to unpack .../072-libjnr-ffi-java_2.2.15-2_all.deb ... 441s Unpacking libjnr-ffi-java (2.2.15-2) ... 441s Selecting previously unselected package libjnr-enxio-java. 441s Preparing to unpack .../073-libjnr-enxio-java_0.32.16-1_all.deb ... 441s Unpacking libjnr-enxio-java (0.32.16-1) ... 441s Selecting previously unselected package libjnr-netdb-java. 441s Preparing to unpack .../074-libjnr-netdb-java_1.1.6-1.1_all.deb ... 441s Unpacking libjnr-netdb-java (1.1.6-1.1) ... 441s Selecting previously unselected package libjnr-posix-java. 441s Preparing to unpack .../075-libjnr-posix-java_3.1.18-1_all.deb ... 441s Unpacking libjnr-posix-java (3.1.18-1) ... 441s Selecting previously unselected package libjnr-unixsocket-java. 441s Preparing to unpack .../076-libjnr-unixsocket-java_0.38.21-2_all.deb ... 441s Unpacking libjnr-unixsocket-java (0.38.21-2) ... 441s Selecting previously unselected package libjoda-time-java. 441s Preparing to unpack .../077-libjoda-time-java_2.10.14-1_all.deb ... 441s Unpacking libjoda-time-java (2.10.14-1) ... 441s Selecting previously unselected package libjruby-joni-java. 441s Preparing to unpack .../078-libjruby-joni-java_2.2.1-1_all.deb ... 441s Unpacking libjruby-joni-java (2.2.1-1) ... 441s Selecting previously unselected package libjzlib-java. 441s Preparing to unpack .../079-libjzlib-java_1.1.3-3_all.deb ... 441s Unpacking libjzlib-java (1.1.3-3) ... 441s Selecting previously unselected package libsnakeyaml-engine-java. 441s Preparing to unpack .../080-libsnakeyaml-engine-java_2.7+ds-3_all.deb ... 441s Unpacking libsnakeyaml-engine-java (2.7+ds-3) ... 441s Selecting previously unselected package jruby. 441s Preparing to unpack .../081-jruby_9.4.6.0+ds-1ubuntu3_all.deb ... 441s Unpacking jruby (9.4.6.0+ds-1ubuntu3) ... 441s Selecting previously unselected package libhamcrest-java. 441s Preparing to unpack .../082-libhamcrest-java_2.2-2_all.deb ... 441s Unpacking libhamcrest-java (2.2-2) ... 441s Selecting previously unselected package junit4. 441s Preparing to unpack .../083-junit4_4.13.2-4_all.deb ... 441s Unpacking junit4 (4.13.2-4) ... 441s Selecting previously unselected package libgmpxx4ldbl:arm64. 441s Preparing to unpack .../084-libgmpxx4ldbl_2%3a6.3.0+dfsg-2ubuntu4_arm64.deb ... 441s Unpacking libgmpxx4ldbl:arm64 (2:6.3.0+dfsg-2ubuntu4) ... 441s Selecting previously unselected package libgmp-dev:arm64. 441s Preparing to unpack .../085-libgmp-dev_2%3a6.3.0+dfsg-2ubuntu4_arm64.deb ... 441s Unpacking libgmp-dev:arm64 (2:6.3.0+dfsg-2ubuntu4) ... 441s Selecting previously unselected package libjakarta-annotation-api-java. 441s Preparing to unpack .../086-libjakarta-annotation-api-java_2.1.1-1_all.deb ... 441s Unpacking libjakarta-annotation-api-java (2.1.1-1) ... 441s Selecting previously unselected package rubygems-integration. 441s Preparing to unpack .../087-rubygems-integration_1.18_all.deb ... 441s Unpacking rubygems-integration (1.18) ... 441s Selecting previously unselected package ruby3.1. 441s Preparing to unpack .../088-ruby3.1_3.1.2-7ubuntu4_arm64.deb ... 441s Unpacking ruby3.1 (3.1.2-7ubuntu4) ... 441s Selecting previously unselected package ruby-rubygems. 441s Preparing to unpack .../089-ruby-rubygems_3.4.20-1_all.deb ... 441s Unpacking ruby-rubygems (3.4.20-1) ... 442s Selecting previously unselected package ruby. 442s Preparing to unpack .../090-ruby_1%3a3.1+1_arm64.deb ... 442s Unpacking ruby (1:3.1+1) ... 442s Selecting previously unselected package rake. 442s Preparing to unpack .../091-rake_13.0.6-3_all.deb ... 442s Unpacking rake (13.0.6-3) ... 442s Selecting previously unselected package ruby-net-telnet. 442s Preparing to unpack .../092-ruby-net-telnet_0.2.0-1_all.deb ... 442s Unpacking ruby-net-telnet (0.2.0-1) ... 442s Selecting previously unselected package ruby-webrick. 442s Preparing to unpack .../093-ruby-webrick_1.8.1-1_all.deb ... 442s Unpacking ruby-webrick (1.8.1-1) ... 442s Selecting previously unselected package ruby-xmlrpc. 442s Preparing to unpack .../094-ruby-xmlrpc_0.3.2-2_all.deb ... 442s Unpacking ruby-xmlrpc (0.3.2-2) ... 442s Selecting previously unselected package libruby3.2:arm64. 442s Preparing to unpack .../095-libruby3.2_3.2.3-1_arm64.deb ... 442s Unpacking libruby3.2:arm64 (3.2.3-1) ... 442s Selecting previously unselected package ruby-sdbm:arm64. 442s Preparing to unpack .../096-ruby-sdbm_1.0.0-5build3_arm64.deb ... 442s Unpacking ruby-sdbm:arm64 (1.0.0-5build3) ... 442s Selecting previously unselected package libruby3.1:arm64. 442s Preparing to unpack .../097-libruby3.1_3.1.2-7ubuntu4_arm64.deb ... 442s Unpacking libruby3.1:arm64 (3.1.2-7ubuntu4) ... 442s Selecting previously unselected package libruby:arm64. 442s Preparing to unpack .../098-libruby_1%3a3.1+1_arm64.deb ... 442s Unpacking libruby:arm64 (1:3.1+1) ... 442s Selecting previously unselected package ruby3.1-dev:arm64. 442s Preparing to unpack .../099-ruby3.1-dev_3.1.2-7ubuntu4_arm64.deb ... 442s Unpacking ruby3.1-dev:arm64 (3.1.2-7ubuntu4) ... 442s Selecting previously unselected package ruby3.2. 442s Preparing to unpack .../100-ruby3.2_3.2.3-1_arm64.deb ... 442s Unpacking ruby3.2 (3.2.3-1) ... 442s Selecting previously unselected package ruby3.2-dev:arm64. 442s Preparing to unpack .../101-ruby3.2-dev_3.2.3-1_arm64.deb ... 442s Unpacking ruby3.2-dev:arm64 (3.2.3-1) ... 443s Selecting previously unselected package ruby-all-dev:arm64. 443s Preparing to unpack .../102-ruby-all-dev_1%3a3.1+1_arm64.deb ... 443s Unpacking ruby-all-dev:arm64 (1:3.1+1) ... 443s Selecting previously unselected package ruby-diff-lcs. 443s Preparing to unpack .../103-ruby-diff-lcs_1.5.0-1_all.deb ... 443s Unpacking ruby-diff-lcs (1.5.0-1) ... 443s Selecting previously unselected package ruby-rspec-support. 443s Preparing to unpack .../104-ruby-rspec-support_3.12.0c0e1m1s0-1_all.deb ... 443s Unpacking ruby-rspec-support (3.12.0c0e1m1s0-1) ... 443s Selecting previously unselected package ruby-rspec-core. 443s Preparing to unpack .../105-ruby-rspec-core_3.12.0c0e1m1s0-1_all.deb ... 443s Unpacking ruby-rspec-core (3.12.0c0e1m1s0-1) ... 443s Selecting previously unselected package ruby-rspec-expectations. 443s Preparing to unpack .../106-ruby-rspec-expectations_3.12.0c0e1m1s0-1_all.deb ... 443s Unpacking ruby-rspec-expectations (3.12.0c0e1m1s0-1) ... 443s Selecting previously unselected package ruby-rspec-mocks. 443s Preparing to unpack .../107-ruby-rspec-mocks_3.12.0c0e1m1s0-1_all.deb ... 443s Unpacking ruby-rspec-mocks (3.12.0c0e1m1s0-1) ... 443s Selecting previously unselected package ruby-rspec. 443s Preparing to unpack .../108-ruby-rspec_3.12.0c0e1m1s0-1_all.deb ... 443s Unpacking ruby-rspec (3.12.0c0e1m1s0-1) ... 443s Selecting previously unselected package autopkgtest-satdep. 443s Preparing to unpack .../109-4-autopkgtest-satdep.deb ... 443s Unpacking autopkgtest-satdep (0) ... 443s Setting up libjakarta-annotation-api-java (2.1.1-1) ... 443s Setting up libgraphite2-3:arm64 (1.3.14-2) ... 443s Setting up liblcms2-2:arm64 (2.14-2) ... 443s Setting up libfixposix4t64:arm64 (1:0.5.1-1+nmu1.1) ... 443s Setting up java-common (0.75+exp1) ... 443s Setting up libasm-java (9.6~us1-0ubuntu1) ... 443s Setting up linux-libc-dev:arm64 (6.8.0-11.11) ... 443s Setting up rubygems-integration (1.18) ... 443s Setting up libheadius-options-java (1.7-1) ... 443s Setting up libgomp1:arm64 (14-20240303-1ubuntu1) ... 443s Setting up libjnr-x86asm-java (1.0.2-5.1) ... 443s Setting up libjzlib-java (1.1.3-3) ... 443s Setting up libbackport9-java (1.10-2) ... 443s Setting up libasound2-data (1.2.10-3build1) ... 443s Setting up libjitescript-java (0.4.3-1) ... 443s Setting up libsnakeyaml-engine-java (2.7+ds-3) ... 443s Setting up libtirpc-dev:arm64 (1.3.4+ds-1build1) ... 443s Setting up libgmpxx4ldbl:arm64 (2:6.3.0+dfsg-2ubuntu4) ... 443s Setting up rpcsvc-proto (1.4.2-0ubuntu6) ... 443s Setting up libavahi-common-data:arm64 (0.8-13ubuntu2) ... 443s Setting up ruby-net-telnet (0.2.0-1) ... 443s Setting up fonts-dejavu-mono (2.37-8) ... 443s Setting up libmpc3:arm64 (1.3.1-1) ... 443s Setting up libatomic1:arm64 (14-20240303-1ubuntu1) ... 443s Setting up fonts-dejavu-core (2.37-8) ... 443s Setting up libpcsclite1:arm64 (2.0.0-1) ... 443s Setting up libjpeg-turbo8:arm64 (2.1.5-2ubuntu1) ... 443s Setting up libhamcrest-java (2.2-2) ... 443s Setting up ruby-rspec-support (3.12.0c0e1m1s0-1) ... 443s Setting up libjoda-time-java (2.10.14-1) ... 443s Setting up libjcodings-java (1.0.58-1) ... 443s Setting up ruby-webrick (1.8.1-1) ... 443s Setting up libubsan1:arm64 (14-20240303-1ubuntu1) ... 443s Setting up libnsl-dev:arm64 (1.3.0-3) ... 443s Setting up libhwasan0:arm64 (14-20240303-1ubuntu1) ... 443s Setting up libcrypt-dev:arm64 (1:4.4.36-4) ... 443s Setting up libasan8:arm64 (14-20240303-1ubuntu1) ... 443s Setting up libasound2:arm64 (1.2.10-3build1) ... 443s Setting up libharfbuzz0b:arm64 (8.3.0-2) ... 443s Setting up libinvokebinder-java (1.13-1) ... 443s Setting up libjffi-jni:arm64 (1.3.13+ds-1) ... 443s Setting up libtsan2:arm64 (14-20240303-1ubuntu1) ... 443s Setting up ca-certificates-java (20240118) ... 443s No JRE found. Skipping Java certificates setup. 443s Setting up libisl23:arm64 (0.26-3) ... 443s Setting up libc-dev-bin (2.39-0ubuntu2) ... 443s Setting up ruby-xmlrpc (0.3.2-2) ... 443s Setting up libhawtjni-runtime-java (1.18-1) ... 443s Setting up libdirgra-java (0.4-2) ... 443s Setting up libcc1-0:arm64 (14-20240303-1ubuntu1) ... 443s Setting up liblsan0:arm64 (14-20240303-1ubuntu1) ... 443s Setting up libitm1:arm64 (14-20240303-1ubuntu1) ... 443s Setting up libjnr-constants-java (0.10.4-2) ... 443s Setting up libjpeg8:arm64 (8c-2ubuntu11) ... 443s Setting up libjffi-java (1.3.13+ds-1) ... 443s Setting up libgmp-dev:arm64 (2:6.3.0+dfsg-2ubuntu4) ... 443s Setting up libjruby-joni-java (2.2.1-1) ... 443s Setting up cpp-13-aarch64-linux-gnu (13.2.0-17ubuntu2) ... 443s Setting up fontconfig-config (2.15.0-1ubuntu1) ... 443s Setting up libavahi-common3:arm64 (0.8-13ubuntu2) ... 443s Setting up cpp-aarch64-linux-gnu (4:13.2.0-7ubuntu1) ... 443s Setting up libjansi-native-java (1.8-2) ... 443s Setting up libgcc-13-dev:arm64 (13.2.0-17ubuntu2) ... 443s Setting up libjansi1-java (1.18-3ubuntu1) ... 443s Setting up libc6-dev:arm64 (2.39-0ubuntu2) ... 443s Setting up libfontconfig1:arm64 (2.15.0-1ubuntu1) ... 443s Setting up libjline2-java (2.14.6-5) ... 443s Setting up libavahi-client3:arm64 (0.8-13ubuntu2) ... 443s Setting up libstdc++-13-dev:arm64 (13.2.0-17ubuntu2) ... 443s Setting up libjnr-ffi-java (2.2.15-2) ... 443s Setting up cpp-13 (13.2.0-17ubuntu2) ... 443s Setting up gcc-13-aarch64-linux-gnu (13.2.0-17ubuntu2) ... 443s Setting up libjnr-enxio-java (0.32.16-1) ... 443s Setting up gcc-13 (13.2.0-17ubuntu2) ... 443s Setting up libcups2:arm64 (2.4.6-0ubuntu3) ... 443s Setting up libjnr-netdb-java (1.1.6-1.1) ... 443s Setting up cpp (4:13.2.0-7ubuntu1) ... 443s Setting up libjnr-posix-java (3.1.18-1) ... 443s Setting up g++-13-aarch64-linux-gnu (13.2.0-17ubuntu2) ... 443s Setting up gcc-aarch64-linux-gnu (4:13.2.0-7ubuntu1) ... 443s Setting up g++-13 (13.2.0-17ubuntu2) ... 443s Setting up openjdk-21-jre-headless:arm64 (21.0.2+13-2) ... 443s update-alternatives: using /usr/lib/jvm/java-21-openjdk-arm64/bin/java to provide /usr/bin/java (java) in auto mode 443s update-alternatives: using /usr/lib/jvm/java-21-openjdk-arm64/bin/jpackage to provide /usr/bin/jpackage (jpackage) in auto mode 443s update-alternatives: using /usr/lib/jvm/java-21-openjdk-arm64/bin/keytool to provide /usr/bin/keytool (keytool) in auto mode 443s update-alternatives: using /usr/lib/jvm/java-21-openjdk-arm64/bin/rmiregistry to provide /usr/bin/rmiregistry (rmiregistry) in auto mode 443s update-alternatives: using /usr/lib/jvm/java-21-openjdk-arm64/lib/jexec to provide /usr/bin/jexec (jexec) in auto mode 443s Setting up gcc (4:13.2.0-7ubuntu1) ... 443s Setting up g++-aarch64-linux-gnu (4:13.2.0-7ubuntu1) ... 443s Setting up libjnr-unixsocket-java (0.38.21-2) ... 443s Setting up g++ (4:13.2.0-7ubuntu1) ... 443s update-alternatives: using /usr/bin/g++ to provide /usr/bin/c++ (c++) in auto mode 443s Setting up build-essential (12.10ubuntu1) ... 443s Setting up libruby3.1:arm64 (3.1.2-7ubuntu4) ... 443s Setting up libruby:arm64 (1:3.1+1) ... 443s Setting up ruby-rubygems (3.4.20-1) ... 443s Setting up ruby3.1 (3.1.2-7ubuntu4) ... 443s Setting up ruby3.1-dev:arm64 (3.1.2-7ubuntu4) ... 443s Setting up ruby-sdbm:arm64 (1.0.0-5build3) ... 443s Setting up ruby (1:3.1+1) ... 443s Setting up rake (13.0.6-3) ... 443s Setting up ruby-rspec-core (3.12.0c0e1m1s0-1) ... 443s Setting up ruby-diff-lcs (1.5.0-1) ... 443s Setting up libruby3.2:arm64 (3.2.3-1) ... 443s Setting up ruby-rspec-expectations (3.12.0c0e1m1s0-1) ... 443s Setting up ruby-rspec-mocks (3.12.0c0e1m1s0-1) ... 443s Setting up ruby3.2 (3.2.3-1) ... 443s Setting up ruby3.2-dev:arm64 (3.2.3-1) ... 443s Setting up ruby-rspec (3.12.0c0e1m1s0-1) ... 443s Setting up ruby-all-dev:arm64 (1:3.1+1) ... 443s Processing triggers for libc-bin (2.39-0ubuntu2) ... 443s Processing triggers for man-db (2.12.0-3) ... 444s Processing triggers for ca-certificates-java (20240118) ... 445s Adding debian:ACCVRAIZ1.pem 445s Adding debian:AC_RAIZ_FNMT-RCM.pem 445s Adding debian:AC_RAIZ_FNMT-RCM_SERVIDORES_SEGUROS.pem 445s Adding debian:ANF_Secure_Server_Root_CA.pem 445s Adding debian:Actalis_Authentication_Root_CA.pem 445s Adding debian:AffirmTrust_Commercial.pem 445s Adding debian:AffirmTrust_Networking.pem 445s Adding debian:AffirmTrust_Premium.pem 445s Adding debian:AffirmTrust_Premium_ECC.pem 445s Adding debian:Amazon_Root_CA_1.pem 445s Adding debian:Amazon_Root_CA_2.pem 445s Adding debian:Amazon_Root_CA_3.pem 445s Adding debian:Amazon_Root_CA_4.pem 445s Adding debian:Atos_TrustedRoot_2011.pem 445s Adding debian:Atos_TrustedRoot_Root_CA_ECC_TLS_2021.pem 445s Adding debian:Atos_TrustedRoot_Root_CA_RSA_TLS_2021.pem 445s Adding debian:Autoridad_de_Certificacion_Firmaprofesional_CIF_A62634068.pem 445s Adding debian:BJCA_Global_Root_CA1.pem 445s Adding debian:BJCA_Global_Root_CA2.pem 445s Adding debian:Baltimore_CyberTrust_Root.pem 445s Adding debian:Buypass_Class_2_Root_CA.pem 445s Adding debian:Buypass_Class_3_Root_CA.pem 445s Adding debian:CA_Disig_Root_R2.pem 445s Adding debian:CFCA_EV_ROOT.pem 445s Adding debian:COMODO_Certification_Authority.pem 445s Adding debian:COMODO_ECC_Certification_Authority.pem 445s Adding debian:COMODO_RSA_Certification_Authority.pem 445s Adding debian:Certainly_Root_E1.pem 445s Adding debian:Certainly_Root_R1.pem 445s Adding debian:Certigna.pem 445s Adding debian:Certigna_Root_CA.pem 445s Adding debian:Certum_EC-384_CA.pem 445s Adding debian:Certum_Trusted_Network_CA.pem 445s Adding debian:Certum_Trusted_Network_CA_2.pem 445s Adding debian:Certum_Trusted_Root_CA.pem 445s Adding debian:CommScope_Public_Trust_ECC_Root-01.pem 445s Adding debian:CommScope_Public_Trust_ECC_Root-02.pem 445s Adding debian:CommScope_Public_Trust_RSA_Root-01.pem 445s Adding debian:CommScope_Public_Trust_RSA_Root-02.pem 445s Adding debian:Comodo_AAA_Services_root.pem 445s Adding debian:D-TRUST_BR_Root_CA_1_2020.pem 445s Adding debian:D-TRUST_EV_Root_CA_1_2020.pem 445s Adding debian:D-TRUST_Root_Class_3_CA_2_2009.pem 445s Adding debian:D-TRUST_Root_Class_3_CA_2_EV_2009.pem 445s Adding debian:DigiCert_Assured_ID_Root_CA.pem 445s Adding debian:DigiCert_Assured_ID_Root_G2.pem 445s Adding debian:DigiCert_Assured_ID_Root_G3.pem 445s Adding debian:DigiCert_Global_Root_CA.pem 445s Adding debian:DigiCert_Global_Root_G2.pem 445s Adding debian:DigiCert_Global_Root_G3.pem 445s Adding debian:DigiCert_High_Assurance_EV_Root_CA.pem 445s Adding debian:DigiCert_TLS_ECC_P384_Root_G5.pem 445s Adding debian:DigiCert_TLS_RSA4096_Root_G5.pem 445s Adding debian:DigiCert_Trusted_Root_G4.pem 445s Adding debian:Entrust.net_Premium_2048_Secure_Server_CA.pem 445s Adding debian:Entrust_Root_Certification_Authority.pem 445s Adding debian:Entrust_Root_Certification_Authority_-_EC1.pem 445s Adding debian:Entrust_Root_Certification_Authority_-_G2.pem 445s Adding debian:Entrust_Root_Certification_Authority_-_G4.pem 445s Adding debian:GDCA_TrustAUTH_R5_ROOT.pem 445s Adding debian:GLOBALTRUST_2020.pem 445s Adding debian:GTS_Root_R1.pem 445s Adding debian:GTS_Root_R2.pem 445s Adding debian:GTS_Root_R3.pem 445s Adding debian:GTS_Root_R4.pem 445s Adding debian:GlobalSign_ECC_Root_CA_-_R4.pem 445s Adding debian:GlobalSign_ECC_Root_CA_-_R5.pem 445s Adding debian:GlobalSign_Root_CA.pem 445s Adding debian:GlobalSign_Root_CA_-_R3.pem 445s Adding debian:GlobalSign_Root_CA_-_R6.pem 445s Adding debian:GlobalSign_Root_E46.pem 445s Adding debian:GlobalSign_Root_R46.pem 445s Adding debian:Go_Daddy_Class_2_CA.pem 445s Adding debian:Go_Daddy_Root_Certificate_Authority_-_G2.pem 445s Adding debian:HARICA_TLS_ECC_Root_CA_2021.pem 445s Adding debian:HARICA_TLS_RSA_Root_CA_2021.pem 445s Adding debian:Hellenic_Academic_and_Research_Institutions_ECC_RootCA_2015.pem 445s Adding debian:Hellenic_Academic_and_Research_Institutions_RootCA_2015.pem 445s Adding debian:HiPKI_Root_CA_-_G1.pem 445s Adding debian:Hongkong_Post_Root_CA_3.pem 445s Adding debian:ISRG_Root_X1.pem 445s Adding debian:ISRG_Root_X2.pem 445s Adding debian:IdenTrust_Commercial_Root_CA_1.pem 445s Adding debian:IdenTrust_Public_Sector_Root_CA_1.pem 445s Adding debian:Izenpe.com.pem 445s Adding debian:Microsec_e-Szigno_Root_CA_2009.pem 445s Adding debian:Microsoft_ECC_Root_Certificate_Authority_2017.pem 445s Adding debian:Microsoft_RSA_Root_Certificate_Authority_2017.pem 445s Adding debian:NAVER_Global_Root_Certification_Authority.pem 445s Adding debian:NetLock_Arany_=Class_Gold=_Főtanúsítvány.pem 445s Adding debian:OISTE_WISeKey_Global_Root_GB_CA.pem 445s Adding debian:OISTE_WISeKey_Global_Root_GC_CA.pem 445s Adding debian:QuoVadis_Root_CA_1_G3.pem 445s Adding debian:QuoVadis_Root_CA_2.pem 445s Adding debian:QuoVadis_Root_CA_2_G3.pem 445s Adding debian:QuoVadis_Root_CA_3.pem 445s Adding debian:QuoVadis_Root_CA_3_G3.pem 445s Adding debian:SSL.com_EV_Root_Certification_Authority_ECC.pem 445s Adding debian:SSL.com_EV_Root_Certification_Authority_RSA_R2.pem 445s Adding debian:SSL.com_Root_Certification_Authority_ECC.pem 445s Adding debian:SSL.com_Root_Certification_Authority_RSA.pem 445s Adding debian:SSL.com_TLS_ECC_Root_CA_2022.pem 445s Adding debian:SSL.com_TLS_RSA_Root_CA_2022.pem 445s Adding debian:SZAFIR_ROOT_CA2.pem 445s Adding debian:Sectigo_Public_Server_Authentication_Root_E46.pem 445s Adding debian:Sectigo_Public_Server_Authentication_Root_R46.pem 445s Adding debian:SecureSign_RootCA11.pem 445s Adding debian:SecureTrust_CA.pem 445s Adding debian:Secure_Global_CA.pem 445s Adding debian:Security_Communication_ECC_RootCA1.pem 445s Adding debian:Security_Communication_RootCA2.pem 445s Adding debian:Security_Communication_RootCA3.pem 445s Adding debian:Security_Communication_Root_CA.pem 445s Adding debian:Starfield_Class_2_CA.pem 445s Adding debian:Starfield_Root_Certificate_Authority_-_G2.pem 445s Adding debian:Starfield_Services_Root_Certificate_Authority_-_G2.pem 445s Adding debian:SwissSign_Gold_CA_-_G2.pem 445s Adding debian:SwissSign_Silver_CA_-_G2.pem 445s Adding debian:T-TeleSec_GlobalRoot_Class_2.pem 445s Adding debian:T-TeleSec_GlobalRoot_Class_3.pem 445s Adding debian:TUBITAK_Kamu_SM_SSL_Kok_Sertifikasi_-_Surum_1.pem 445s Adding debian:TWCA_Global_Root_CA.pem 445s Adding debian:TWCA_Root_Certification_Authority.pem 445s Adding debian:TeliaSonera_Root_CA_v1.pem 445s Adding debian:Telia_Root_CA_v2.pem 445s Adding debian:TrustAsia_Global_Root_CA_G3.pem 445s Adding debian:TrustAsia_Global_Root_CA_G4.pem 445s Adding debian:Trustwave_Global_Certification_Authority.pem 445s Adding debian:Trustwave_Global_ECC_P256_Certification_Authority.pem 445s Adding debian:Trustwave_Global_ECC_P384_Certification_Authority.pem 445s Adding debian:TunTrust_Root_CA.pem 445s Adding debian:UCA_Extended_Validation_Root.pem 445s Adding debian:UCA_Global_G2_Root.pem 445s Adding debian:USERTrust_ECC_Certification_Authority.pem 445s Adding debian:USERTrust_RSA_Certification_Authority.pem 445s Adding debian:XRamp_Global_CA_Root.pem 445s Adding debian:certSIGN_ROOT_CA.pem 445s Adding debian:certSIGN_Root_CA_G2.pem 445s Adding debian:e-Szigno_Root_CA_2017.pem 445s Adding debian:ePKI_Root_Certification_Authority.pem 445s Adding debian:emSign_ECC_Root_CA_-_C3.pem 445s Adding debian:emSign_ECC_Root_CA_-_G3.pem 445s Adding debian:emSign_Root_CA_-_C1.pem 445s Adding debian:emSign_Root_CA_-_G1.pem 445s Adding debian:vTrus_ECC_Root_CA.pem 445s Adding debian:vTrus_Root_CA.pem 445s done. 445s Setting up ant (1.10.14-1) ... 445s Setting up junit4 (4.13.2-4) ... 445s Setting up openjdk-21-jdk-headless:arm64 (21.0.2+13-2) ... 445s update-alternatives: using /usr/lib/jvm/java-21-openjdk-arm64/bin/jar to provide /usr/bin/jar (jar) in auto mode 445s update-alternatives: using /usr/lib/jvm/java-21-openjdk-arm64/bin/jarsigner to provide /usr/bin/jarsigner (jarsigner) in auto mode 445s update-alternatives: using /usr/lib/jvm/java-21-openjdk-arm64/bin/javac to provide /usr/bin/javac (javac) in auto mode 445s update-alternatives: using /usr/lib/jvm/java-21-openjdk-arm64/bin/javadoc to provide /usr/bin/javadoc (javadoc) in auto mode 445s update-alternatives: using /usr/lib/jvm/java-21-openjdk-arm64/bin/javap to provide /usr/bin/javap (javap) in auto mode 445s update-alternatives: using /usr/lib/jvm/java-21-openjdk-arm64/bin/jcmd to provide /usr/bin/jcmd (jcmd) in auto mode 445s update-alternatives: using /usr/lib/jvm/java-21-openjdk-arm64/bin/jdb to provide /usr/bin/jdb (jdb) in auto mode 445s update-alternatives: using /usr/lib/jvm/java-21-openjdk-arm64/bin/jdeprscan to provide /usr/bin/jdeprscan (jdeprscan) in auto mode 445s update-alternatives: using /usr/lib/jvm/java-21-openjdk-arm64/bin/jdeps to provide /usr/bin/jdeps (jdeps) in auto mode 445s update-alternatives: using /usr/lib/jvm/java-21-openjdk-arm64/bin/jfr to provide /usr/bin/jfr (jfr) in auto mode 445s update-alternatives: using /usr/lib/jvm/java-21-openjdk-arm64/bin/jimage to provide /usr/bin/jimage (jimage) in auto mode 445s update-alternatives: using /usr/lib/jvm/java-21-openjdk-arm64/bin/jinfo to provide /usr/bin/jinfo (jinfo) in auto mode 445s update-alternatives: using /usr/lib/jvm/java-21-openjdk-arm64/bin/jlink to provide /usr/bin/jlink (jlink) in auto mode 445s update-alternatives: using /usr/lib/jvm/java-21-openjdk-arm64/bin/jmap to provide /usr/bin/jmap (jmap) in auto mode 445s update-alternatives: using /usr/lib/jvm/java-21-openjdk-arm64/bin/jmod to provide /usr/bin/jmod (jmod) in auto mode 445s update-alternatives: using /usr/lib/jvm/java-21-openjdk-arm64/bin/jps to provide /usr/bin/jps (jps) in auto mode 445s update-alternatives: using /usr/lib/jvm/java-21-openjdk-arm64/bin/jrunscript to provide /usr/bin/jrunscript (jrunscript) in auto mode 445s update-alternatives: using /usr/lib/jvm/java-21-openjdk-arm64/bin/jshell to provide /usr/bin/jshell (jshell) in auto mode 445s update-alternatives: using /usr/lib/jvm/java-21-openjdk-arm64/bin/jstack to provide /usr/bin/jstack (jstack) in auto mode 445s update-alternatives: using /usr/lib/jvm/java-21-openjdk-arm64/bin/jstat to provide /usr/bin/jstat (jstat) in auto mode 445s update-alternatives: using /usr/lib/jvm/java-21-openjdk-arm64/bin/jstatd to provide /usr/bin/jstatd (jstatd) in auto mode 445s update-alternatives: using /usr/lib/jvm/java-21-openjdk-arm64/bin/jwebserver to provide /usr/bin/jwebserver (jwebserver) in auto mode 445s update-alternatives: using /usr/lib/jvm/java-21-openjdk-arm64/bin/serialver to provide /usr/bin/serialver (serialver) in auto mode 445s update-alternatives: using /usr/lib/jvm/java-21-openjdk-arm64/bin/jhsdb to provide /usr/bin/jhsdb (jhsdb) in auto mode 445s Setting up default-jre-headless (2:1.21-75+exp1) ... 445s Setting up jruby (9.4.6.0+ds-1ubuntu3) ... 445s Setting up default-jdk-headless (2:1.21-75+exp1) ... 445s Setting up autopkgtest-satdep (0) ... 451s (Reading database ... 87036 files and directories currently installed.) 451s Removing autopkgtest-satdep (0) ... 466s autopkgtest [11:02:29]: test jruby: [----------------------- 467s installing system gems into jruby: 467s * diff-lcs-1.5.0 467s * minitest-5.15.0 467s * power_assert-2.0.1 467s * rake-13.0.6 467s * rexml-3.2.5 467s * rspec-3.12.0 467s * rspec-core-3.12.0 467s * rspec-expectations-3.12.1 467s * rspec-mocks-3.12.1 467s * rspec-support-3.12.0 467s * test-unit-3.5.3 469s Note: test/org/jruby/test/AlternativelyLoaded.java uses or overrides a deprecated API. 469s Note: Recompile with -Xlint:deprecation for details. 469s Note: Some input files use unchecked or unsafe operations. 469s Note: Recompile with -Xlint:unchecked for details. 470s excluded test: ::test_tcp_info 470s excluded test: ::test_tcp_socket_get_keep_cnt 470s excluded test: ::test_tcp_socket_get_keep_idle 470s excluded test: ::test_tcp_socket_get_keep_intvl 477s mkdir -p test/target/test-classes 477s mkdir -p test/target/test-classes-isolated/java_integration/fixtures/isolated 477s mkdir -p test/target/test-interfaces-isolated/java_integration/fixtures/isolated 477s /usr/lib/jvm/java-21-openjdk-arm64/bin/javac -cp lib/jruby.jar:test/target/junit.jar:test/target/annotation-api.jar -d test/target/test-classes spec/java_integration/fixtures/AnArrayList.java spec/java_integration/fixtures/AnotherRunnable.java spec/java_integration/fixtures/ArrayReceiver.java spec/java_integration/fixtures/ArrayReturningInterface.java spec/java_integration/fixtures/ArrayReturningInterfaceConsumer.java spec/java_integration/fixtures/BadStaticInit.java spec/java_integration/fixtures/BeanLikeInterface.java spec/java_integration/fixtures/BeanLikeInterfaceHandler.java spec/java_integration/fixtures/BooleanReturningInterface.java spec/java_integration/fixtures/BooleanReturningInterfaceConsumer.java spec/java_integration/fixtures/CachedInJava.java spec/java_integration/fixtures/ClassWithAbstractMethods.java spec/java_integration/fixtures/ClassWithEnums.java spec/java_integration/fixtures/ClassWithMultipleSignaturesWithPrimitiveArgs.java spec/java_integration/fixtures/ClassWithPrimitiveVarargs.java spec/java_integration/fixtures/ClassWithSimpleMethod.java spec/java_integration/fixtures/ClassWithVarargs.java spec/java_integration/fixtures/CoerceToInterface.java spec/java_integration/fixtures/ComplexPrivateConstructor.java spec/java_integration/fixtures/ConcreteWithVirtualCall.java spec/java_integration/fixtures/ConstantHoldingInterface.java spec/java_integration/fixtures/CoreTypeMethods.java spec/java_integration/fixtures/DescendantOfSingleMethodInterface.java spec/java_integration/fixtures/EveryTypeAnnotations.java spec/java_integration/fixtures/ExceptionRunner.java spec/java_integration/fixtures/FieldAnnotations.java spec/java_integration/fixtures/GenericComparable.java spec/java_integration/fixtures/InnerClasses.java spec/java_integration/fixtures/InterfaceWrapper.java spec/java_integration/fixtures/InternalMap.java spec/java_integration/fixtures/IsEqualClass.java spec/java_integration/fixtures/JavaFields.java spec/java_integration/fixtures/JavaFieldsExt.java spec/java_integration/fixtures/JavaIterable.java spec/java_integration/fixtures/JavaTypeMethods.java spec/java_integration/fixtures/ManyArityMethodClass.java spec/java_integration/fixtures/MethodAnnotations.java spec/java_integration/fixtures/MethodNames.java spec/java_integration/fixtures/PackageConstructor.java spec/java_integration/fixtures/PackageField.java spec/java_integration/fixtures/PackageInstanceMethod.java spec/java_integration/fixtures/PackageStaticMethod.java spec/java_integration/fixtures/ParameterAnnotations.java spec/java_integration/fixtures/PrivateConstructor.java spec/java_integration/fixtures/PrivateField.java spec/java_integration/fixtures/PrivateInstanceMethod.java spec/java_integration/fixtures/PrivateStaticMethod.java spec/java_integration/fixtures/ProtectedConstructor.java spec/java_integration/fixtures/ProtectedField.java spec/java_integration/fixtures/ProtectedInstanceMethod.java spec/java_integration/fixtures/ProtectedStaticMethod.java spec/java_integration/fixtures/PublicConstructor.java spec/java_integration/fixtures/PublicField.java spec/java_integration/fixtures/ReceivesAndReturnsObject.java spec/java_integration/fixtures/ReceivesArrayList.java spec/java_integration/fixtures/Reflector.java spec/java_integration/fixtures/ReturnsInterface.java spec/java_integration/fixtures/ReturnsInterfaceConsumer.java spec/java_integration/fixtures/ScalaOperators.java spec/java_integration/fixtures/ScalaSingleton$.java spec/java_integration/fixtures/ScalaSingleton.java spec/java_integration/fixtures/ScalaSingletonTrait$.java spec/java_integration/fixtures/ScalaSingletonTrait.java spec/java_integration/fixtures/Service.java spec/java_integration/fixtures/ServiceAnnotation.java spec/java_integration/fixtures/SingleMethodInterface.java spec/java_integration/fixtures/StaticMethodSelection.java spec/java_integration/fixtures/SubclassOfClassWithSimpleMethod.java spec/java_integration/fixtures/SuperWithInterface.java spec/java_integration/fixtures/ThrowExceptionInInitializer.java spec/java_integration/fixtures/ThrowExceptionOnCreate.java spec/java_integration/fixtures/UsesDescendantOfSingleMethodInterface.java spec/java_integration/fixtures/UsesSingleMethodInterface.java spec/java_integration/fixtures/ValueReceivingInterface.java spec/java_integration/fixtures/ValueReceivingInterfaceHandler.java spec/java_integration/fixtures/_funky/MyClass.java spec/java_integration/fixtures/coll/CloneableImmutableList.java spec/java_integration/fixtures/coll/NonCloneableImmutableList.java spec/java_integration/fixtures/coll/NonCloneableImmutableList2.java spec/java_integration/fixtures/coll/NonCloneableImmutableList3.java spec/java_integration/fixtures/coll/NonCloneableList.java spec/java_integration/fixtures/iface/SingleMethodInterfaceWith4Args.java spec/java_integration/fixtures/iface/SingleMethodInterfaceWithArg.java spec/java_integration/fixtures/isolated/classes/GH7327Base.java spec/java_integration/fixtures/isolated/interfaces/GH7327Interface.java 479s Note: Some input files use unchecked or unsafe operations. 479s Note: Recompile with -Xlint:unchecked for details. 479s mv -f test/target/test-classes/java_integration/fixtures/isolated/classes test/target/test-classes-isolated/java_integration/fixtures/isolated 479s mv -f test/target/test-classes/java_integration/fixtures/isolated/interfaces test/target/test-interfaces-isolated/java_integration/fixtures/isolated 483s /usr/lib/ruby/gems/3.1.0/gems/power_assert-2.0.1/lib/power_assert.rb:8: warning: tracing (e.g. set_trace_func) will not capture all events without --debug flag 483s /usr/lib/ruby/gems/3.1.0/gems/power_assert-2.0.1/lib/power_assert.rb:8: warning: tracing (e.g. set_trace_func) will not capture all events without --debug flag 484s /tmp/autopkgtest.nFBjtB/autopkgtest_tmp/test/jruby/test_block.rb:123: warning: `&' interpreted as argument prefix 484s /tmp/autopkgtest.nFBjtB/autopkgtest_tmp/test/jruby/test_block.rb:394: warning: assigned but unused variable - results 484s /tmp/autopkgtest.nFBjtB/autopkgtest_tmp/test/jruby/test_block.rb:396: warning: assigned but unused variable - results 484s /tmp/autopkgtest.nFBjtB/autopkgtest_tmp/test/jruby/test_block.rb:398: warning: assigned but unused variable - results 484s /tmp/autopkgtest.nFBjtB/autopkgtest_tmp/test/jruby/test_block.rb:399: warning: assigned but unused variable - results 484s /tmp/autopkgtest.nFBjtB/autopkgtest_tmp/test/jruby/test_block.rb:400: warning: assigned but unused variable - results 484s /tmp/autopkgtest.nFBjtB/autopkgtest_tmp/test/jruby/test_block.rb:401: warning: assigned but unused variable - results 484s /tmp/autopkgtest.nFBjtB/autopkgtest_tmp/test/jruby/test_block.rb:402: warning: assigned but unused variable - results 484s /tmp/autopkgtest.nFBjtB/autopkgtest_tmp/test/jruby/test_block.rb:403: warning: assigned but unused variable - results 484s /tmp/autopkgtest.nFBjtB/autopkgtest_tmp/test/jruby/test_block.rb:404: warning: assigned but unused variable - results 484s /tmp/autopkgtest.nFBjtB/autopkgtest_tmp/test/jruby/test_block.rb:405: warning: assigned but unused variable - results 484s /tmp/autopkgtest.nFBjtB/autopkgtest_tmp/test/jruby/test_block.rb:406: warning: assigned but unused variable - results 484s /tmp/autopkgtest.nFBjtB/autopkgtest_tmp/test/jruby/test_block.rb:407: warning: assigned but unused variable - results 484s /tmp/autopkgtest.nFBjtB/autopkgtest_tmp/test/jruby/test_block.rb:408: warning: assigned but unused variable - results 484s /tmp/autopkgtest.nFBjtB/autopkgtest_tmp/test/jruby/test_block.rb:409: warning: assigned but unused variable - results 484s /tmp/autopkgtest.nFBjtB/autopkgtest_tmp/test/jruby/test_block.rb:525: warning: assigned but unused variable - p2 484s /tmp/autopkgtest.nFBjtB/autopkgtest_tmp/test/jruby/test_block.rb:523: warning: assigned but unused variable - p 484s /usr/share/jruby/lib/ruby/stdlib/rubygems/core_ext/kernel_require.rb:85: warning: parentheses after method name is interpreted as an argument list, not a decomposed argument 484s /usr/share/jruby/lib/ruby/stdlib/rubygems/core_ext/kernel_require.rb:85: warning: parentheses after method name is interpreted as an argument list, not a decomposed argument 484s /usr/share/jruby/lib/ruby/stdlib/rubygems/core_ext/kernel_require.rb:85: warning: parentheses after method name is interpreted as an argument list, not a decomposed argument 484s /usr/share/jruby/lib/ruby/stdlib/rubygems/core_ext/kernel_require.rb:85: warning: parentheses after method name is interpreted as an argument list, not a decomposed argument 484s /usr/share/jruby/lib/ruby/stdlib/rubygems/core_ext/kernel_require.rb:85: warning: parentheses after method name is interpreted as an argument list, not a decomposed argument 484s /tmp/autopkgtest.nFBjtB/autopkgtest_tmp/test/jruby/test_date.rb:951: warning: possibly useless use of == in void context 484s /tmp/autopkgtest.nFBjtB/autopkgtest_tmp/test/jruby/test_date.rb:960: warning: possibly useless use of <=> in void context 484s /tmp/autopkgtest.nFBjtB/autopkgtest_tmp/test/jruby/test_date.rb:985: warning: assigned but unused variable - seconds_to_advance 484s /tmp/autopkgtest.nFBjtB/autopkgtest_tmp/test/jruby/test_defined.rb:194: warning: assigned but unused variable - foo 484s /tmp/autopkgtest.nFBjtB/autopkgtest_tmp/test/jruby/test_defined.rb:197: warning: assigned but unused variable - foo2 484s /tmp/autopkgtest.nFBjtB/autopkgtest_tmp/test/jruby/test_env.rb:57: warning: assigned but unused variable - tmp 484s /tmp/autopkgtest.nFBjtB/autopkgtest_tmp/test/jruby/test_enumerator.rb:126: warning: assigned but unused variable - ex 484s /tmp/autopkgtest.nFBjtB/autopkgtest_tmp/test/jruby/test_file.rb:965: warning: assigned but unused variable - abs_path_linked 484s /tmp/autopkgtest.nFBjtB/autopkgtest_tmp/test/jruby/test_frame_self.rb:24: warning: assigned but unused variable - classnames 484s /tmp/autopkgtest.nFBjtB/autopkgtest_tmp/test/jruby/test_higher_javasupport.rb:645: warning: possibly useless use of :: in void context 484s /tmp/autopkgtest.nFBjtB/autopkgtest_tmp/test/jruby/test_higher_javasupport.rb:963: warning: assigned but unused variable - e 484s /tmp/autopkgtest.nFBjtB/autopkgtest_tmp/test/jruby/test_higher_javasupport.rb:1015: warning: assigned but unused variable - e 484s /tmp/autopkgtest.nFBjtB/autopkgtest_tmp/test/jruby/test_higher_javasupport.rb:1495: warning: possibly useless use of :: in void context 484s /tmp/autopkgtest.nFBjtB/autopkgtest_tmp/test/jruby/test_higher_javasupport.rb:98: warning: method redefined; discarding old to_int 484s /tmp/autopkgtest.nFBjtB/autopkgtest_tmp/test/jruby/test_higher_javasupport.rb:98: warning: method redefined; discarding old to_f 485s /tmp/autopkgtest.nFBjtB/autopkgtest_tmp/test/jruby/test_io.rb:179: warning: assigned but unused variable - io 485s /tmp/autopkgtest.nFBjtB/autopkgtest_tmp/test/jruby/test_io.rb:183: warning: assigned but unused variable - io 485s /tmp/autopkgtest.nFBjtB/autopkgtest_tmp/test/jruby/test_java_extension.rb:105: warning: assigned but unused variable - e 485s /tmp/autopkgtest.nFBjtB/autopkgtest_tmp/test/jruby/test_java_extension.rb:121: warning: assigned but unused variable - e 485s /tmp/autopkgtest.nFBjtB/autopkgtest_tmp/test/jruby/test_java_extension.rb:128: warning: assigned but unused variable - e 485s /tmp/autopkgtest.nFBjtB/autopkgtest_tmp/test/jruby/test_parsing.rb:6: warning: assigned but unused variable - n 485s /tmp/autopkgtest.nFBjtB/autopkgtest_tmp/test/jruby/test_socket.rb:730: warning: assigned but unused variable - delay 485s /tmp/autopkgtest.nFBjtB/autopkgtest_tmp/test/jruby/test_socket.rb:731: warning: assigned but unused variable - tries 485s /tmp/autopkgtest.nFBjtB/autopkgtest_tmp/test/jruby/test_socket.rb:752: warning: assigned but unused variable - s 485s /tmp/autopkgtest.nFBjtB/autopkgtest_tmp/test/jruby/test_string.rb:51: warning: ambiguity between regexp and two divisions: wrap regexp in parentheses or add a space after `/' operator 485s /tmp/autopkgtest.nFBjtB/autopkgtest_tmp/test/jruby/test_string.rb:71: warning: ambiguity between regexp and two divisions: wrap regexp in parentheses or add a space after `/' operator 485s /tmp/autopkgtest.nFBjtB/autopkgtest_tmp/test/jruby/test_string.rb:75: warning: ambiguity between regexp and two divisions: wrap regexp in parentheses or add a space after `/' operator 485s /tmp/autopkgtest.nFBjtB/autopkgtest_tmp/test/jruby/test_thread.rb:34: warning: assigned but unused variable - v 485s /tmp/autopkgtest.nFBjtB/autopkgtest_tmp/test/jruby/test_zlib.rb:327: warning: assigned but unused variable - unzipped 485s /tmp/autopkgtest.nFBjtB/autopkgtest_tmp/test/jruby/test_zlib.rb:482: warning: assigned but unused variable - marker 485s /tmp/autopkgtest.nFBjtB/autopkgtest_tmp/test/jruby/test_zlib.rb:496: warning: assigned but unused variable - data 485s /tmp/autopkgtest.nFBjtB/autopkgtest_tmp/test/jruby/test_zlib.rb:597: warning: assigned but unused variable - s 485s /tmp/autopkgtest.nFBjtB/autopkgtest_tmp/test/jruby/test_zlib.rb:606: warning: assigned but unused variable - s 485s /tmp/autopkgtest.nFBjtB/autopkgtest_tmp/test/jruby/test_zlib.rb:617: warning: assigned but unused variable - s 485s /tmp/autopkgtest.nFBjtB/autopkgtest_tmp/test/jruby/test_kernel.rb:235: warning: assigned but unused variable - b 488s Loaded suite /usr/lib/ruby/gems/3.1.0/gems/rake-13.0.6/lib/rake/rake_test_loader 488s Started 488s ........................warning: thread "Ruby-0-Thread-3: /tmp/autopkgtest.nFBjtB/autopkgtest_tmp/test/jruby/test_socket.rb:676" terminated with exception (report_on_exception is true): 488s IOError: stream closed in another thread 488s accept at org/jruby/ext/socket/RubyTCPServer.java:153 488s test_server_close_interrupts_pending_accepts at /tmp/autopkgtest.nFBjtB/autopkgtest_tmp/test/jruby/test_socket.rb:677 488s ..................O 488s =============================================================================== 488s Omission: skipped for autopkgtest [test_tcp_info(SocketTest)] 488s /tmp/autopkgtest.nFBjtB/autopkgtest_tmp/test/jruby/test_socket.rb:49:in `test_tcp_info' 488s =============================================================================== 488s .warning: thread "Ruby-0-Thread-6: /tmp/autopkgtest.nFBjtB/autopkgtest_tmp/test/jruby/test_socket.rb:305" terminated with exception (report_on_exception is true): 488s IOError: stream closed in another thread 488s accept at org/jruby/ext/socket/RubyTCPServer.java:153 488s test_tcp_socket_errors at /tmp/autopkgtest.nFBjtB/autopkgtest_tmp/test/jruby/test_socket.rb:305 488s .O 488s =============================================================================== 488s Omission: skipped for autopkgtest [test_tcp_socket_get_keep_cnt(SocketTest)] 488s /tmp/autopkgtest.nFBjtB/autopkgtest_tmp/test/jruby/test_socket.rb:195:in `test_tcp_socket_get_keep_cnt' 488s =============================================================================== 488s O 488s =============================================================================== 488s Omission: skipped for autopkgtest [test_tcp_socket_get_keep_idle(SocketTest)] 488s /tmp/autopkgtest.nFBjtB/autopkgtest_tmp/test/jruby/test_socket.rb:183:in `test_tcp_socket_get_keep_idle' 488s =============================================================================== 488s O 488s =============================================================================== 488s Omission: skipped for autopkgtest [test_tcp_socket_get_keep_intvl(SocketTest)] 488s /tmp/autopkgtest.nFBjtB/autopkgtest_tmp/test/jruby/test_socket.rb:189:in `test_tcp_socket_get_keep_intvl' 488s =============================================================================== 498s ................................................/tmp/autopkgtest.nFBjtB/autopkgtest_tmp/test/jruby/test_backtraces.rb:19: warning: constant ::NativeException is deprecated 498s /tmp/autopkgtest.nFBjtB/autopkgtest_tmp/test/jruby/test_backtraces.rb:53: warning: constant ::NativeException is deprecated 498s ............................... 502s ..................................................null:1: warning: possibly useless use of + in void context 502s ............................. 504s ............................................................................... 522s ............................................................................... 540s ............................................................................... 542s ............................................................................... 542s ..P 542s =============================================================================== 542s Pending: test_java_constructor_with_prefered_match(TestHigherJavasupport): [ji] did not select (float,float,float) ctor 542s /tmp/autopkgtest.nFBjtB/autopkgtest_tmp/test/jruby/test_higher_javasupport.rb:1938:in `test_java_constructor_with_prefered_match' 542s 1935: # warning: ambiguous Java methods found, using java.awt.Color(int,int,int) 542s 1936: # TODO should not warn 542s 1937: #assert ! output.index('ambiguous'), output 542s => 1938: pend('[ji] did not select (float,float,float) ctor') if color.getRed != 255 542s 1939: assert_equal 255, color.getRed # assert we called (float,float,float) 542s 1940: end 542s 1941: 542s org/jruby/RubyKernel.java:1414:in `catch' 542s org/jruby/RubyKernel.java:1409:in `catch' 542s org/jruby/RubyKernel.java:1414:in `catch' 542s org/jruby/RubyKernel.java:1409:in `catch' 542s =============================================================================== 542s ...../tmp/autopkgtest.nFBjtB/autopkgtest_tmp/test/jruby/test_higher_javasupport.rb:1714: warning: multiple Java methods found, use -Xjruby.ji.ambiguous.calls.debug for backtrace. Choosing java.lang.Float(double) 542s ......................................O 542s =============================================================================== 542s Omission: omitted. [test_reflected_field(TestHigherJavasupport)] 542s /tmp/autopkgtest.nFBjtB/autopkgtest_tmp/test/jruby/test_higher_javasupport.rb:955:in `test_reflected_field' 542s =============================================================================== 548s ............................................................................... 548s ...../tmp/autopkgtest.nFBjtB/autopkgtest_tmp/test/jruby/test_jruby_core_ext.rb:53: warning: Class#subclasses(opts) is deprecated, please use the supported Class#subclasses() version 548s /tmp/autopkgtest.nFBjtB/autopkgtest_tmp/test/jruby/test_jruby_core_ext.rb:59: warning: Class#subclasses(opts) is deprecated, please use the supported Class#subclasses() version 548s /tmp/autopkgtest.nFBjtB/autopkgtest_tmp/test/jruby/test_jruby_core_ext.rb:61: warning: Class#subclasses(opts) is deprecated, please use the supported Class#subclasses() version 548s /tmp/autopkgtest.nFBjtB/autopkgtest_tmp/test/jruby/test_jruby_core_ext.rb:64: warning: Class#subclasses(opts) is deprecated, please use the supported Class#subclasses() version 561s ............................./tmp/autopkgtest.nFBjtB/autopkgtest_tmp/test/jruby/test_java_extension.rb:126: warning: constant ::NativeException is deprecated 561s .........../tmp/autopkgtest.nFBjtB/autopkgtest_tmp/test/jruby/test_java_extension.rb:325: warning: constant Java::JavaObject is deprecated 561s /tmp/autopkgtest.nFBjtB/autopkgtest_tmp/test/jruby/test_java_extension.rb:326: warning: constant Java::JavaObject is deprecated 561s /tmp/autopkgtest.nFBjtB/autopkgtest_tmp/test/jruby/test_java_extension.rb:329: warning: constant Java::JavaObject is deprecated 561s /tmp/autopkgtest.nFBjtB/autopkgtest_tmp/test/jruby/test_java_extension.rb:333: warning: constant Java::JavaObject is deprecated 561s /tmp/autopkgtest.nFBjtB/autopkgtest_tmp/test/jruby/test_java_extension.rb:344: warning: constant Java::JavaObject is deprecated 561s /tmp/autopkgtest.nFBjtB/autopkgtest_tmp/test/jruby/test_java_extension.rb:345: warning: constant Java::JavaObject is deprecated 561s .................................. 574s .....................................one 583s ............./tmp/autopkgtest.nFBjtB/autopkgtest_tmp/test/jruby/test_load.rb:237: warning: method redefined; discarding old require 583s deps:4: warning: previous definition of require was here 591s ................./usr/share/jruby/lib/ruby/stdlib/ostruct.rb:466: warning: OpenStruct#public_send accesses caller method's state and should not be aliased 591s /usr/share/jruby/lib/ruby/stdlib/ostruct.rb:466: warning: OpenStruct#method accesses caller method's state and should not be aliased 591s ./usr/share/jruby/lib/ruby/stdlib/json/version.rb:4: warning: already initialized constant JSON::VERSION 591s /usr/share/jruby/lib/ruby/stdlib/json/version.rb:5: warning: already initialized constant JSON::VERSION_ARRAY 591s /usr/share/jruby/lib/ruby/stdlib/json/version.rb:6: warning: already initialized constant JSON::VERSION_MAJOR 591s /usr/share/jruby/lib/ruby/stdlib/json/version.rb:7: warning: already initialized constant JSON::VERSION_MINOR 591s /usr/share/jruby/lib/ruby/stdlib/json/version.rb:8: warning: already initialized constant JSON::VERSION_BUILD 591s /usr/share/jruby/lib/ruby/stdlib/ostruct.rb:110: warning: already initialized constant OpenStruct::VERSION 591s /usr/share/jruby/lib/ruby/stdlib/ostruct.rb:371: warning: already initialized constant OpenStruct::InspectKey 591s /usr/share/jruby/lib/ruby/stdlib/json/common.rb:6: warning: already initialized constant JSON::NOT_SET 591s /usr/share/jruby/lib/ruby/stdlib/json/common.rb:114: warning: already initialized constant JSON::DEFAULT_CREATE_ID 591s /usr/share/jruby/lib/ruby/stdlib/json/common.rb:117: warning: already initialized constant JSON::CREATE_ID_TLS_KEY 591s /usr/share/jruby/lib/ruby/stdlib/json/common.rb:133: warning: already initialized constant JSON::NaN 591s ./usr/share/jruby/lib/ruby/stdlib/json/common.rb:135: warning: already initialized constant JSON::Infinity 591s /usr/share/jruby/lib/ruby/stdlib/json/common.rb:137: warning: already initialized constant JSON::MinusInfinity 591s /usr/share/jruby/lib/ruby/stdlib/json/common.rb:162: warning: already initialized constant JSON::UnparserError 602s ["0"] 602s .../usr/share/jruby/lib/ruby/stdlib/subspawn/posix/pty.rb:46: warning: assigned but unused variable - name 603s ......NOTE: Gem::Specification#has_rdoc= is deprecated with no replacement. It will be removed in Rubygems 4 603s Gem::Specification#has_rdoc= called from /tmp/autopkgtest.nFBjtB/autopkgtest_tmp/test/jruby/test_marshal_gemspec.rb:110. 603s . 603s .........................OpenSSL::X509::Request#version= has no effect on certification request 610s ...................................................... 610s /tmp/autopkgtest.nFBjtB/autopkgtest_tmp/test/jruby/gh4091-sample.rb:4: warning: possibly useless use of + in void context 610s ./usr/share/jruby/lib/ruby/stdlib/rubygems/core_ext/kernel_require.rb:85: warning: loading in progress, circular require considered harmful - /tmp/autopkgtest.nFBjtB/autopkgtest_tmp/test/jruby/test_require_once_jruby_3234/all.rb require at org/jruby/RubyKernel.java:1175 610s require at /usr/share/jruby/lib/ruby/stdlib/rubygems/core_ext/kernel_require.rb:85 610s
at /tmp/autopkgtest.nFBjtB/autopkgtest_tmp/test/jruby/test_require_once_jruby_3234/all.rb:1 610s each at org/jruby/RubyArray.java:1983 610s
at /tmp/autopkgtest.nFBjtB/autopkgtest_tmp/test/jruby/test_require_once_jruby_3234/all.rb:1 610s require at org/jruby/RubyKernel.java:1175 610s require at /usr/share/jruby/lib/ruby/stdlib/rubygems/core_ext/kernel_require.rb:85 610s
at /tmp/autopkgtest.nFBjtB/autopkgtest_tmp/test/jruby/test_require_once_jruby_3234/all.rb:1 610s each at org/jruby/RubyArray.java:1983 610s
at /tmp/autopkgtest.nFBjtB/autopkgtest_tmp/test/jruby/test_require_once_jruby_3234/all.rb:1 610s load at org/jruby/RubyKernel.java:1211 610s test_feature_has_full_name at /tmp/autopkgtest.nFBjtB/autopkgtest_tmp/test/jruby/test_require.rb:24 610s run_test at /usr/lib/ruby/gems/3.1.0/gems/test-unit-3.5.3/lib/test/unit/testcase.rb:871 610s run at /usr/lib/ruby/gems/3.1.0/gems/test-unit-3.5.3/lib/test/unit/testcase.rb:566 610s create_fixtures_runner at /usr/lib/ruby/gems/3.1.0/gems/test-unit-3.5.3/lib/test/unit/fixture.rb:276 610s create_fixtures_runner at /usr/lib/ruby/gems/3.1.0/gems/test-unit-3.5.3/lib/test/unit/fixture.rb:276 610s run_fixture at /usr/lib/ruby/gems/3.1.0/gems/test-unit-3.5.3/lib/test/unit/fixture.rb:257 610s run_setup at /usr/lib/ruby/gems/3.1.0/gems/test-unit-3.5.3/lib/test/unit/fixture.rb:292 610s run at /usr/lib/ruby/gems/3.1.0/gems/test-unit-3.5.3/lib/test/unit/testcase.rb:564 610s catch at org/jruby/RubyKernel.java:1414 610s catch at org/jruby/RubyKernel.java:1409 610s run at /usr/lib/ruby/gems/3.1.0/gems/test-unit-3.5.3/lib/test/unit/testcase.rb:563 610s run_test at /usr/lib/ruby/gems/3.1.0/gems/test-unit-3.5.3/lib/test/unit/testsuite.rb:124 610s run at /usr/lib/ruby/gems/3.1.0/gems/test-unit-3.5.3/lib/test/unit/testsuite.rb:53 610s run_test at /usr/lib/ruby/gems/3.1.0/gems/test-unit-3.5.3/lib/test/unit/testsuite.rb:124 610s run at /usr/lib/ruby/gems/3.1.0/gems/test-unit-3.5.3/lib/test/unit/testsuite.rb:53 610s run_suite at /usr/lib/ruby/gems/3.1.0/gems/test-unit-3.5.3/lib/test/unit/ui/testrunnermediator.rb:67 610s run at /usr/lib/ruby/gems/3.1.0/gems/test-unit-3.5.3/lib/test/unit/ui/testrunnermediator.rb:45 610s with_listener at /usr/lib/ruby/gems/3.1.0/gems/test-unit-3.5.3/lib/test/unit/ui/testrunnermediator.rb:102 610s run at /usr/lib/ruby/gems/3.1.0/gems/test-unit-3.5.3/lib/test/unit/ui/testrunnermediator.rb:41 610s catch at org/jruby/RubyKernel.java:1414 610s catch at org/jruby/RubyKernel.java:1409 610s run at /usr/lib/ruby/gems/3.1.0/gems/test-unit-3.5.3/lib/test/unit/ui/testrunnermediator.rb:39 610s start_mediator at /usr/lib/ruby/gems/3.1.0/gems/test-unit-3.5.3/lib/test/unit/ui/testrunner.rb:40 610s start at /usr/lib/ruby/gems/3.1.0/gems/test-unit-3.5.3/lib/test/unit/ui/testrunner.rb:25 610s run at /usr/lib/ruby/gems/3.1.0/gems/test-unit-3.5.3/lib/test/unit/ui/testrunnerutilities.rb:24 610s run at /usr/lib/ruby/gems/3.1.0/gems/test-unit-3.5.3/lib/test/unit/autorunner.rb:458 610s change_work_directory at /usr/lib/ruby/gems/3.1.0/gems/test-unit-3.5.3/lib/test/unit/autorunner.rb:514 610s run at /usr/lib/ruby/gems/3.1.0/gems/test-unit-3.5.3/lib/test/unit/autorunner.rb:457 610s run at /usr/lib/ruby/gems/3.1.0/gems/test-unit-3.5.3/lib/test/unit/autorunner.rb:66 610s
at /usr/lib/ruby/gems/3.1.0/gems/test-unit-3.5.3/lib/test/unit.rb:518 610s 613s ......................................./tmp/autopkgtest.nFBjtB/autopkgtest_tmp/test/jruby/test_string.rb:136: warning: historical binary regexp match /.../n against UTF-8 string 613s /tmp/autopkgtest.nFBjtB/autopkgtest_tmp/test/jruby/test_string.rb:136: warning: historical binary regexp match /.../n against UTF-8 string 613s /tmp/autopkgtest.nFBjtB/autopkgtest_tmp/test/jruby/test_string.rb:136: warning: historical binary regexp match /.../n against UTF-8 string 613s ..........."openjdk version \"21.0.2\" 2024-01-16\nOpenJDK Runtime Environment (build 21.0.2+13-Ubuntu-2)\nOpenJDK 64-Bit Server VM (build 21.0.2+13-Ubuntu-2, mixed mode, sharing)\n" 630s ...****************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************......................... 630s ... /tmp/autopkgtest.nFBjtB/autopkgtest_tmp/test/jruby/test_thread_backtrace.rb:8:in `block in test_simple_backtrace' 632s ............................................................/tmp/autopkgtest.nFBjtB/autopkgtest_tmp/test/jruby/test_zlib.rb:52: warning: Zlib::GzipWriter#write is outdated interface which accepts just one argument 632s ../tmp/autopkgtest.nFBjtB/autopkgtest_tmp/test/jruby/test_zlib.rb:70: warning: Zlib::GzipWriter#write is outdated interface which accepts just one argument 632s /tmp/autopkgtest.nFBjtB/autopkgtest_tmp/test/jruby/test_zlib.rb:71: warning: Zlib::GzipWriter#write is outdated interface which accepts just one argument 632s /tmp/autopkgtest.nFBjtB/autopkgtest_tmp/test/jruby/test_zlib.rb:109: warning: Zlib::GzipWriter#write is outdated interface which accepts just one argument 633s .............. 635s ................................................................ 635s Finished in 146.8741 seconds. 635s ------------------------------------------------------------------------------- 635s 1107 tests, 75461 assertions, 0 failures, 0 errors, 1 pendings, 5 omissions, 0 notifications 635s 99.9093% passed 635s ------------------------------------------------------------------------------- 635s 7.54 tests/s, 513.78 assertions/s 636s autopkgtest [11:05:19]: test jruby: -----------------------] 636s autopkgtest [11:05:19]: test jruby: - - - - - - - - - - results - - - - - - - - - - 636s jruby PASS 637s autopkgtest [11:05:20]: test spec-compiler: preparing testbed 720s autopkgtest [11:06:43]: testbed dpkg architecture: arm64 721s autopkgtest [11:06:44]: testbed apt version: 2.7.12 721s autopkgtest [11:06:44]: @@@@@@@@@@@@@@@@@@@@ test bed setup 721s Get:1 http://ftpmaster.internal/ubuntu noble-proposed InRelease [117 kB] 722s Get:2 http://ftpmaster.internal/ubuntu noble-proposed/restricted Sources [6540 B] 722s Get:3 http://ftpmaster.internal/ubuntu noble-proposed/multiverse Sources [52.7 kB] 722s Get:4 http://ftpmaster.internal/ubuntu noble-proposed/universe Sources [3766 kB] 722s Get:5 http://ftpmaster.internal/ubuntu noble-proposed/main Sources [496 kB] 722s Get:6 http://ftpmaster.internal/ubuntu noble-proposed/main arm64 Packages [670 kB] 722s Get:7 http://ftpmaster.internal/ubuntu noble-proposed/main arm64 c-n-f Metadata [3144 B] 722s Get:8 http://ftpmaster.internal/ubuntu noble-proposed/restricted arm64 Packages [41.7 kB] 722s Get:9 http://ftpmaster.internal/ubuntu noble-proposed/restricted arm64 c-n-f Metadata [116 B] 722s Get:10 http://ftpmaster.internal/ubuntu noble-proposed/universe arm64 Packages [4234 kB] 722s Get:11 http://ftpmaster.internal/ubuntu noble-proposed/universe arm64 c-n-f Metadata [8528 B] 722s Get:12 http://ftpmaster.internal/ubuntu noble-proposed/multiverse arm64 Packages [56.7 kB] 722s Get:13 http://ftpmaster.internal/ubuntu noble-proposed/multiverse arm64 c-n-f Metadata [116 B] 724s Fetched 9452 kB in 2s (4171 kB/s) 725s Reading package lists... 727s Reading package lists... 728s Building dependency tree... 728s Reading state information... 728s Calculating upgrade... 729s 0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded. 729s Reading package lists... 729s Building dependency tree... 729s Reading state information... 730s 0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded. 730s Hit:1 http://ftpmaster.internal/ubuntu noble InRelease 731s Hit:2 http://ftpmaster.internal/ubuntu noble-updates InRelease 731s Hit:3 http://ftpmaster.internal/ubuntu noble-security InRelease 731s Hit:4 http://ftpmaster.internal/ubuntu noble-proposed InRelease 732s Reading package lists... 733s Reading package lists... 733s Building dependency tree... 733s Reading state information... 733s Calculating upgrade... 734s 0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded. 734s Reading package lists... 734s Building dependency tree... 734s Reading state information... 735s 0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded. 745s Reading package lists... 745s Building dependency tree... 745s Reading state information... 746s Starting pkgProblemResolver with broken count: 0 746s Starting 2 pkgProblemResolver with broken count: 0 746s Done 747s The following additional packages will be installed: 747s ant ca-certificates-java default-jre-headless fontconfig-config 747s fonts-dejavu-core fonts-dejavu-mono java-common jruby libasm-java libasound2 747s libasound2-data libavahi-client3 libavahi-common-data libavahi-common3 747s libbackport9-java libcups2 libdirgra-java libfixposix4t64 libfontconfig1 747s libgmp-dev libgmpxx4ldbl libgraphite2-3 libharfbuzz0b 747s libhawtjni-runtime-java libheadius-options-java libinvokebinder-java 747s libjansi-native-java libjansi1-java libjcodings-java libjffi-java 747s libjffi-jni libjitescript-java libjline2-java libjnr-constants-java 747s libjnr-enxio-java libjnr-ffi-java libjnr-netdb-java libjnr-posix-java 747s libjnr-unixsocket-java libjnr-x86asm-java libjoda-time-java libjpeg-turbo8 747s libjpeg8 libjruby-joni-java libjzlib-java liblcms2-2 libpcsclite1 libruby 747s libruby3.1 libruby3.2 libsnakeyaml-engine-java openjdk-21-jre-headless rake 747s ruby ruby-all-dev ruby-diff-lcs ruby-net-telnet ruby-rspec ruby-rspec-core 747s ruby-rspec-expectations ruby-rspec-mocks ruby-rspec-support ruby-rubygems 747s ruby-sdbm ruby-webrick ruby-xmlrpc ruby3.1 ruby3.1-dev ruby3.2 ruby3.2-dev 747s rubygems-integration 747s Suggested packages: 747s ant-doc default-jdk | java-compiler | java-sdk default-jre 747s libasound2-plugins alsa-utils cups-common gmp-doc libgmp10-doc libmpfr-dev 747s libheadius-options-java-doc libinvokebinder-java-doc libjnr-ffi-java-doc 747s libjnr-netdb-java-doc libjnr-posix-java-doc libjoda-convert-java 747s liblcms2-utils pcscd libnss-mdns fonts-dejavu-extra fonts-ipafont-gothic 747s fonts-ipafont-mincho fonts-wqy-microhei | fonts-wqy-zenhei fonts-indic ri 747s ruby-dev bundler 747s Recommended packages: 747s ant-optional fonts-lato alsa-ucm-conf alsa-topology-conf zip libjs-jquery 747s ruby3.1-doc ruby3.2-doc 747s The following NEW packages will be installed: 747s ant autopkgtest-satdep ca-certificates-java default-jre-headless 747s fontconfig-config fonts-dejavu-core fonts-dejavu-mono java-common jruby 747s libasm-java libasound2 libasound2-data libavahi-client3 libavahi-common-data 747s libavahi-common3 libbackport9-java libcups2 libdirgra-java libfixposix4t64 747s libfontconfig1 libgmp-dev libgmpxx4ldbl libgraphite2-3 libharfbuzz0b 747s libhawtjni-runtime-java libheadius-options-java libinvokebinder-java 747s libjansi-native-java libjansi1-java libjcodings-java libjffi-java 747s libjffi-jni libjitescript-java libjline2-java libjnr-constants-java 747s libjnr-enxio-java libjnr-ffi-java libjnr-netdb-java libjnr-posix-java 747s libjnr-unixsocket-java libjnr-x86asm-java libjoda-time-java libjpeg-turbo8 747s libjpeg8 libjruby-joni-java libjzlib-java liblcms2-2 libpcsclite1 libruby 747s libruby3.1 libruby3.2 libsnakeyaml-engine-java openjdk-21-jre-headless rake 747s ruby ruby-all-dev ruby-diff-lcs ruby-net-telnet ruby-rspec ruby-rspec-core 747s ruby-rspec-expectations ruby-rspec-mocks ruby-rspec-support ruby-rubygems 747s ruby-sdbm ruby-webrick ruby-xmlrpc ruby3.1 ruby3.1-dev ruby3.2 ruby3.2-dev 747s rubygems-integration 747s 0 upgraded, 72 newly installed, 0 to remove and 0 not upgraded. 747s Need to get 103 MB/103 MB of archives. 747s After this operation, 343 MB of additional disk space will be used. 747s Get:1 /tmp/autopkgtest.nFBjtB/5-autopkgtest-satdep.deb autopkgtest-satdep arm64 0 [760 B] 747s Get:2 http://ftpmaster.internal/ubuntu noble/main arm64 ca-certificates-java all 20240118 [11.6 kB] 747s Get:3 http://ftpmaster.internal/ubuntu noble/main arm64 java-common all 0.75+exp1 [6798 B] 747s Get:4 http://ftpmaster.internal/ubuntu noble/main arm64 libavahi-common-data arm64 0.8-13ubuntu2 [29.5 kB] 747s Get:5 http://ftpmaster.internal/ubuntu noble/main arm64 libavahi-common3 arm64 0.8-13ubuntu2 [23.2 kB] 747s Get:6 http://ftpmaster.internal/ubuntu noble/main arm64 libavahi-client3 arm64 0.8-13ubuntu2 [27.3 kB] 747s Get:7 http://ftpmaster.internal/ubuntu noble/main arm64 libcups2 arm64 2.4.6-0ubuntu3 [270 kB] 747s Get:8 http://ftpmaster.internal/ubuntu noble/main arm64 liblcms2-2 arm64 2.14-2 [159 kB] 747s Get:9 http://ftpmaster.internal/ubuntu noble/main arm64 libjpeg-turbo8 arm64 2.1.5-2ubuntu1 [160 kB] 748s Get:10 http://ftpmaster.internal/ubuntu noble/main arm64 libjpeg8 arm64 8c-2ubuntu11 [2148 B] 748s Get:11 http://ftpmaster.internal/ubuntu noble/main arm64 fonts-dejavu-mono all 2.37-8 [502 kB] 748s Get:12 http://ftpmaster.internal/ubuntu noble/main arm64 fonts-dejavu-core all 2.37-8 [835 kB] 748s Get:13 http://ftpmaster.internal/ubuntu noble/main arm64 fontconfig-config arm64 2.15.0-1ubuntu1 [37.0 kB] 748s Get:14 http://ftpmaster.internal/ubuntu noble/main arm64 libfontconfig1 arm64 2.15.0-1ubuntu1 [142 kB] 748s Get:15 http://ftpmaster.internal/ubuntu noble/main arm64 libasound2-data all 1.2.10-3build1 [20.7 kB] 748s Get:16 http://ftpmaster.internal/ubuntu noble/main arm64 libasound2 arm64 1.2.10-3build1 [386 kB] 748s Get:17 http://ftpmaster.internal/ubuntu noble/main arm64 libgraphite2-3 arm64 1.3.14-2 [81.5 kB] 748s Get:18 http://ftpmaster.internal/ubuntu noble/main arm64 libharfbuzz0b arm64 8.3.0-2 [463 kB] 748s Get:19 http://ftpmaster.internal/ubuntu noble/main arm64 libpcsclite1 arm64 2.0.0-1 [21.2 kB] 748s Get:20 http://ftpmaster.internal/ubuntu noble/main arm64 openjdk-21-jre-headless arm64 21.0.2+13-2 [45.8 MB] 749s Get:21 http://ftpmaster.internal/ubuntu noble/main arm64 default-jre-headless arm64 2:1.21-75+exp1 [3096 B] 749s Get:22 http://ftpmaster.internal/ubuntu noble/universe arm64 ant all 1.10.14-1 [2147 kB] 749s Get:23 http://ftpmaster.internal/ubuntu noble/universe arm64 libasm-java all 9.6~us1-0ubuntu1 [386 kB] 749s Get:24 http://ftpmaster.internal/ubuntu noble/universe arm64 libbackport9-java all 1.10-2 [13.2 kB] 749s Get:25 http://ftpmaster.internal/ubuntu noble/universe arm64 libdirgra-java all 0.4-2 [21.6 kB] 749s Get:26 http://ftpmaster.internal/ubuntu noble/universe arm64 libfixposix4t64 arm64 1:0.5.1-1+nmu1.1 [16.9 kB] 749s Get:27 http://ftpmaster.internal/ubuntu noble/universe arm64 libheadius-options-java all 1.7-1 [18.2 kB] 749s Get:28 http://ftpmaster.internal/ubuntu noble/universe arm64 libinvokebinder-java all 1.13-1 [51.7 kB] 749s Get:29 http://ftpmaster.internal/ubuntu noble/universe arm64 libhawtjni-runtime-java all 1.18-1 [28.9 kB] 749s Get:30 http://ftpmaster.internal/ubuntu noble/universe arm64 libjansi-native-java all 1.8-2 [24.1 kB] 749s Get:31 http://ftpmaster.internal/ubuntu noble/universe arm64 libjansi1-java all 1.18-3ubuntu1 [56.0 kB] 749s Get:32 http://ftpmaster.internal/ubuntu noble/universe arm64 libjcodings-java all 1.0.58-1 [1474 kB] 749s Get:33 http://ftpmaster.internal/ubuntu noble/universe arm64 libjffi-jni arm64 1.3.13+ds-1 [29.8 kB] 749s Get:34 http://ftpmaster.internal/ubuntu noble/universe arm64 libjffi-java all 1.3.13+ds-1 [112 kB] 749s Get:35 http://ftpmaster.internal/ubuntu noble/universe arm64 libjitescript-java all 0.4.3-1 [24.4 kB] 749s Get:36 http://ftpmaster.internal/ubuntu noble/universe arm64 libjline2-java all 2.14.6-5 [150 kB] 749s Get:37 http://ftpmaster.internal/ubuntu noble/universe arm64 libjnr-constants-java all 0.10.4-2 [1397 kB] 749s Get:38 http://ftpmaster.internal/ubuntu noble/universe arm64 libjnr-x86asm-java all 1.0.2-5.1 [207 kB] 749s Get:39 http://ftpmaster.internal/ubuntu noble/universe arm64 libjnr-ffi-java all 2.2.15-2 [627 kB] 749s Get:40 http://ftpmaster.internal/ubuntu noble/universe arm64 libjnr-enxio-java all 0.32.16-1 [33.7 kB] 749s Get:41 http://ftpmaster.internal/ubuntu noble/universe arm64 libjnr-netdb-java all 1.1.6-1.1 [58.8 kB] 749s Get:42 http://ftpmaster.internal/ubuntu noble/universe arm64 libjnr-posix-java all 3.1.18-1 [267 kB] 749s Get:43 http://ftpmaster.internal/ubuntu noble/universe arm64 libjnr-unixsocket-java all 0.38.21-2 [46.9 kB] 749s Get:44 http://ftpmaster.internal/ubuntu noble/universe arm64 libjoda-time-java all 2.10.14-1 [535 kB] 749s Get:45 http://ftpmaster.internal/ubuntu noble/universe arm64 libjruby-joni-java all 2.2.1-1 [222 kB] 749s Get:46 http://ftpmaster.internal/ubuntu noble/universe arm64 libjzlib-java all 1.1.3-3 [76.8 kB] 749s Get:47 http://ftpmaster.internal/ubuntu noble/universe arm64 libsnakeyaml-engine-java all 2.7+ds-3 [258 kB] 749s Get:48 http://ftpmaster.internal/ubuntu noble-proposed/universe arm64 jruby all 9.4.6.0+ds-1ubuntu3 [33.3 MB] 750s Get:49 http://ftpmaster.internal/ubuntu noble/main arm64 libgmpxx4ldbl arm64 2:6.3.0+dfsg-2ubuntu4 [9950 B] 750s Get:50 http://ftpmaster.internal/ubuntu noble/main arm64 libgmp-dev arm64 2:6.3.0+dfsg-2ubuntu4 [330 kB] 750s Get:51 http://ftpmaster.internal/ubuntu noble/main arm64 rubygems-integration all 1.18 [5336 B] 750s Get:52 http://ftpmaster.internal/ubuntu noble/main arm64 ruby3.1 arm64 3.1.2-7ubuntu4 [49.0 kB] 750s Get:53 http://ftpmaster.internal/ubuntu noble/main arm64 ruby-rubygems all 3.4.20-1 [238 kB] 750s Get:54 http://ftpmaster.internal/ubuntu noble/main arm64 ruby arm64 1:3.1+1 [3464 B] 750s Get:55 http://ftpmaster.internal/ubuntu noble/main arm64 rake all 13.0.6-3 [61.6 kB] 750s Get:56 http://ftpmaster.internal/ubuntu noble/main arm64 ruby-net-telnet all 0.2.0-1 [13.3 kB] 750s Get:57 http://ftpmaster.internal/ubuntu noble/main arm64 ruby-webrick all 1.8.1-1 [52.3 kB] 750s Get:58 http://ftpmaster.internal/ubuntu noble/main arm64 ruby-xmlrpc all 0.3.2-2 [24.8 kB] 750s Get:59 http://ftpmaster.internal/ubuntu noble/main arm64 libruby3.2 arm64 3.2.3-1 [5345 kB] 750s Get:60 http://ftpmaster.internal/ubuntu noble/main arm64 ruby-sdbm arm64 1.0.0-5build3 [17.9 kB] 750s Get:61 http://ftpmaster.internal/ubuntu noble/main arm64 libruby3.1 arm64 3.1.2-7ubuntu4 [5115 kB] 750s Get:62 http://ftpmaster.internal/ubuntu noble/main arm64 libruby arm64 1:3.1+1 [4640 B] 750s Get:63 http://ftpmaster.internal/ubuntu noble/main arm64 ruby3.1-dev arm64 3.1.2-7ubuntu4 [398 kB] 750s Get:64 http://ftpmaster.internal/ubuntu noble/main arm64 ruby3.2 arm64 3.2.3-1 [50.8 kB] 750s Get:65 http://ftpmaster.internal/ubuntu noble/main arm64 ruby3.2-dev arm64 3.2.3-1 [403 kB] 750s Get:66 http://ftpmaster.internal/ubuntu noble/main arm64 ruby-all-dev arm64 1:3.1+1 [5726 B] 750s Get:67 http://ftpmaster.internal/ubuntu noble/universe arm64 ruby-diff-lcs all 1.5.0-1 [23.9 kB] 750s Get:68 http://ftpmaster.internal/ubuntu noble/universe arm64 ruby-rspec-support all 3.12.0c0e1m1s0-1 [28.8 kB] 750s Get:69 http://ftpmaster.internal/ubuntu noble/universe arm64 ruby-rspec-core all 3.12.0c0e1m1s0-1 [163 kB] 750s Get:70 http://ftpmaster.internal/ubuntu noble/universe arm64 ruby-rspec-expectations all 3.12.0c0e1m1s0-1 [89.2 kB] 750s Get:71 http://ftpmaster.internal/ubuntu noble/universe arm64 ruby-rspec-mocks all 3.12.0c0e1m1s0-1 [79.4 kB] 751s Get:72 http://ftpmaster.internal/ubuntu noble/universe arm64 ruby-rspec all 3.12.0c0e1m1s0-1 [3506 B] 751s Fetched 103 MB in 4s (27.8 MB/s) 752s Selecting previously unselected package ca-certificates-java. 752s (Reading database ... (Reading database ... 5% (Reading database ... 10% (Reading database ... 15% (Reading database ... 20% (Reading database ... 25% (Reading database ... 30% (Reading database ... 35% (Reading database ... 40% (Reading database ... 45% (Reading database ... 50% (Reading database ... 55% (Reading database ... 60% (Reading database ... 65% (Reading database ... 70% (Reading database ... 75% (Reading database ... 80% (Reading database ... 85% (Reading database ... 90% (Reading database ... 95% (Reading database ... 100% (Reading database ... 74758 files and directories currently installed.) 752s Preparing to unpack .../00-ca-certificates-java_20240118_all.deb ... 752s Unpacking ca-certificates-java (20240118) ... 752s Selecting previously unselected package java-common. 752s Preparing to unpack .../01-java-common_0.75+exp1_all.deb ... 752s Unpacking java-common (0.75+exp1) ... 752s Selecting previously unselected package libavahi-common-data:arm64. 752s Preparing to unpack .../02-libavahi-common-data_0.8-13ubuntu2_arm64.deb ... 752s Unpacking libavahi-common-data:arm64 (0.8-13ubuntu2) ... 752s Selecting previously unselected package libavahi-common3:arm64. 752s Preparing to unpack .../03-libavahi-common3_0.8-13ubuntu2_arm64.deb ... 752s Unpacking libavahi-common3:arm64 (0.8-13ubuntu2) ... 752s Selecting previously unselected package libavahi-client3:arm64. 752s Preparing to unpack .../04-libavahi-client3_0.8-13ubuntu2_arm64.deb ... 752s Unpacking libavahi-client3:arm64 (0.8-13ubuntu2) ... 752s Selecting previously unselected package libcups2:arm64. 752s Preparing to unpack .../05-libcups2_2.4.6-0ubuntu3_arm64.deb ... 752s Unpacking libcups2:arm64 (2.4.6-0ubuntu3) ... 752s Selecting previously unselected package liblcms2-2:arm64. 752s Preparing to unpack .../06-liblcms2-2_2.14-2_arm64.deb ... 752s Unpacking liblcms2-2:arm64 (2.14-2) ... 752s Selecting previously unselected package libjpeg-turbo8:arm64. 752s Preparing to unpack .../07-libjpeg-turbo8_2.1.5-2ubuntu1_arm64.deb ... 752s Unpacking libjpeg-turbo8:arm64 (2.1.5-2ubuntu1) ... 752s Selecting previously unselected package libjpeg8:arm64. 752s Preparing to unpack .../08-libjpeg8_8c-2ubuntu11_arm64.deb ... 752s Unpacking libjpeg8:arm64 (8c-2ubuntu11) ... 752s Selecting previously unselected package fonts-dejavu-mono. 752s Preparing to unpack .../09-fonts-dejavu-mono_2.37-8_all.deb ... 752s Unpacking fonts-dejavu-mono (2.37-8) ... 752s Selecting previously unselected package fonts-dejavu-core. 752s Preparing to unpack .../10-fonts-dejavu-core_2.37-8_all.deb ... 752s Unpacking fonts-dejavu-core (2.37-8) ... 752s Selecting previously unselected package fontconfig-config. 752s Preparing to unpack .../11-fontconfig-config_2.15.0-1ubuntu1_arm64.deb ... 753s Unpacking fontconfig-config (2.15.0-1ubuntu1) ... 753s Selecting previously unselected package libfontconfig1:arm64. 753s Preparing to unpack .../12-libfontconfig1_2.15.0-1ubuntu1_arm64.deb ... 753s Unpacking libfontconfig1:arm64 (2.15.0-1ubuntu1) ... 753s Selecting previously unselected package libasound2-data. 753s Preparing to unpack .../13-libasound2-data_1.2.10-3build1_all.deb ... 753s Unpacking libasound2-data (1.2.10-3build1) ... 753s Selecting previously unselected package libasound2:arm64. 753s Preparing to unpack .../14-libasound2_1.2.10-3build1_arm64.deb ... 753s Unpacking libasound2:arm64 (1.2.10-3build1) ... 753s Selecting previously unselected package libgraphite2-3:arm64. 753s Preparing to unpack .../15-libgraphite2-3_1.3.14-2_arm64.deb ... 753s Unpacking libgraphite2-3:arm64 (1.3.14-2) ... 753s Selecting previously unselected package libharfbuzz0b:arm64. 753s Preparing to unpack .../16-libharfbuzz0b_8.3.0-2_arm64.deb ... 753s Unpacking libharfbuzz0b:arm64 (8.3.0-2) ... 753s Selecting previously unselected package libpcsclite1:arm64. 753s Preparing to unpack .../17-libpcsclite1_2.0.0-1_arm64.deb ... 753s Unpacking libpcsclite1:arm64 (2.0.0-1) ... 753s Selecting previously unselected package openjdk-21-jre-headless:arm64. 753s Preparing to unpack .../18-openjdk-21-jre-headless_21.0.2+13-2_arm64.deb ... 753s Unpacking openjdk-21-jre-headless:arm64 (21.0.2+13-2) ... 754s Selecting previously unselected package default-jre-headless. 754s Preparing to unpack .../19-default-jre-headless_2%3a1.21-75+exp1_arm64.deb ... 754s Unpacking default-jre-headless (2:1.21-75+exp1) ... 754s Selecting previously unselected package ant. 754s Preparing to unpack .../20-ant_1.10.14-1_all.deb ... 754s Unpacking ant (1.10.14-1) ... 754s Selecting previously unselected package libasm-java. 754s Preparing to unpack .../21-libasm-java_9.6~us1-0ubuntu1_all.deb ... 754s Unpacking libasm-java (9.6~us1-0ubuntu1) ... 754s Selecting previously unselected package libbackport9-java. 754s Preparing to unpack .../22-libbackport9-java_1.10-2_all.deb ... 754s Unpacking libbackport9-java (1.10-2) ... 754s Selecting previously unselected package libdirgra-java. 754s Preparing to unpack .../23-libdirgra-java_0.4-2_all.deb ... 754s Unpacking libdirgra-java (0.4-2) ... 754s Selecting previously unselected package libfixposix4t64:arm64. 754s Preparing to unpack .../24-libfixposix4t64_1%3a0.5.1-1+nmu1.1_arm64.deb ... 754s Unpacking libfixposix4t64:arm64 (1:0.5.1-1+nmu1.1) ... 754s Selecting previously unselected package libheadius-options-java. 754s Preparing to unpack .../25-libheadius-options-java_1.7-1_all.deb ... 754s Unpacking libheadius-options-java (1.7-1) ... 754s Selecting previously unselected package libinvokebinder-java. 754s Preparing to unpack .../26-libinvokebinder-java_1.13-1_all.deb ... 754s Unpacking libinvokebinder-java (1.13-1) ... 754s Selecting previously unselected package libhawtjni-runtime-java. 754s Preparing to unpack .../27-libhawtjni-runtime-java_1.18-1_all.deb ... 754s Unpacking libhawtjni-runtime-java (1.18-1) ... 754s Selecting previously unselected package libjansi-native-java. 754s Preparing to unpack .../28-libjansi-native-java_1.8-2_all.deb ... 754s Unpacking libjansi-native-java (1.8-2) ... 754s Selecting previously unselected package libjansi1-java. 754s Preparing to unpack .../29-libjansi1-java_1.18-3ubuntu1_all.deb ... 754s Unpacking libjansi1-java (1.18-3ubuntu1) ... 754s Selecting previously unselected package libjcodings-java. 754s Preparing to unpack .../30-libjcodings-java_1.0.58-1_all.deb ... 754s Unpacking libjcodings-java (1.0.58-1) ... 754s Selecting previously unselected package libjffi-jni:arm64. 754s Preparing to unpack .../31-libjffi-jni_1.3.13+ds-1_arm64.deb ... 754s Unpacking libjffi-jni:arm64 (1.3.13+ds-1) ... 754s Selecting previously unselected package libjffi-java. 754s Preparing to unpack .../32-libjffi-java_1.3.13+ds-1_all.deb ... 754s Unpacking libjffi-java (1.3.13+ds-1) ... 754s Selecting previously unselected package libjitescript-java. 754s Preparing to unpack .../33-libjitescript-java_0.4.3-1_all.deb ... 754s Unpacking libjitescript-java (0.4.3-1) ... 754s Selecting previously unselected package libjline2-java. 754s Preparing to unpack .../34-libjline2-java_2.14.6-5_all.deb ... 754s Unpacking libjline2-java (2.14.6-5) ... 754s Selecting previously unselected package libjnr-constants-java. 754s Preparing to unpack .../35-libjnr-constants-java_0.10.4-2_all.deb ... 754s Unpacking libjnr-constants-java (0.10.4-2) ... 754s Selecting previously unselected package libjnr-x86asm-java. 754s Preparing to unpack .../36-libjnr-x86asm-java_1.0.2-5.1_all.deb ... 754s Unpacking libjnr-x86asm-java (1.0.2-5.1) ... 754s Selecting previously unselected package libjnr-ffi-java. 754s Preparing to unpack .../37-libjnr-ffi-java_2.2.15-2_all.deb ... 754s Unpacking libjnr-ffi-java (2.2.15-2) ... 754s Selecting previously unselected package libjnr-enxio-java. 754s Preparing to unpack .../38-libjnr-enxio-java_0.32.16-1_all.deb ... 754s Unpacking libjnr-enxio-java (0.32.16-1) ... 755s Selecting previously unselected package libjnr-netdb-java. 755s Preparing to unpack .../39-libjnr-netdb-java_1.1.6-1.1_all.deb ... 755s Unpacking libjnr-netdb-java (1.1.6-1.1) ... 755s Selecting previously unselected package libjnr-posix-java. 755s Preparing to unpack .../40-libjnr-posix-java_3.1.18-1_all.deb ... 755s Unpacking libjnr-posix-java (3.1.18-1) ... 755s Selecting previously unselected package libjnr-unixsocket-java. 755s Preparing to unpack .../41-libjnr-unixsocket-java_0.38.21-2_all.deb ... 755s Unpacking libjnr-unixsocket-java (0.38.21-2) ... 755s Selecting previously unselected package libjoda-time-java. 755s Preparing to unpack .../42-libjoda-time-java_2.10.14-1_all.deb ... 755s Unpacking libjoda-time-java (2.10.14-1) ... 755s Selecting previously unselected package libjruby-joni-java. 755s Preparing to unpack .../43-libjruby-joni-java_2.2.1-1_all.deb ... 755s Unpacking libjruby-joni-java (2.2.1-1) ... 755s Selecting previously unselected package libjzlib-java. 755s Preparing to unpack .../44-libjzlib-java_1.1.3-3_all.deb ... 755s Unpacking libjzlib-java (1.1.3-3) ... 755s Selecting previously unselected package libsnakeyaml-engine-java. 755s Preparing to unpack .../45-libsnakeyaml-engine-java_2.7+ds-3_all.deb ... 755s Unpacking libsnakeyaml-engine-java (2.7+ds-3) ... 755s Selecting previously unselected package jruby. 755s Preparing to unpack .../46-jruby_9.4.6.0+ds-1ubuntu3_all.deb ... 755s Unpacking jruby (9.4.6.0+ds-1ubuntu3) ... 755s Selecting previously unselected package libgmpxx4ldbl:arm64. 755s Preparing to unpack .../47-libgmpxx4ldbl_2%3a6.3.0+dfsg-2ubuntu4_arm64.deb ... 755s Unpacking libgmpxx4ldbl:arm64 (2:6.3.0+dfsg-2ubuntu4) ... 755s Selecting previously unselected package libgmp-dev:arm64. 755s Preparing to unpack .../48-libgmp-dev_2%3a6.3.0+dfsg-2ubuntu4_arm64.deb ... 755s Unpacking libgmp-dev:arm64 (2:6.3.0+dfsg-2ubuntu4) ... 755s Selecting previously unselected package rubygems-integration. 755s Preparing to unpack .../49-rubygems-integration_1.18_all.deb ... 755s Unpacking rubygems-integration (1.18) ... 755s Selecting previously unselected package ruby3.1. 755s Preparing to unpack .../50-ruby3.1_3.1.2-7ubuntu4_arm64.deb ... 755s Unpacking ruby3.1 (3.1.2-7ubuntu4) ... 755s Selecting previously unselected package ruby-rubygems. 755s Preparing to unpack .../51-ruby-rubygems_3.4.20-1_all.deb ... 755s Unpacking ruby-rubygems (3.4.20-1) ... 755s Selecting previously unselected package ruby. 755s Preparing to unpack .../52-ruby_1%3a3.1+1_arm64.deb ... 755s Unpacking ruby (1:3.1+1) ... 755s Selecting previously unselected package rake. 755s Preparing to unpack .../53-rake_13.0.6-3_all.deb ... 755s Unpacking rake (13.0.6-3) ... 755s Selecting previously unselected package ruby-net-telnet. 755s Preparing to unpack .../54-ruby-net-telnet_0.2.0-1_all.deb ... 755s Unpacking ruby-net-telnet (0.2.0-1) ... 755s Selecting previously unselected package ruby-webrick. 755s Preparing to unpack .../55-ruby-webrick_1.8.1-1_all.deb ... 755s Unpacking ruby-webrick (1.8.1-1) ... 755s Selecting previously unselected package ruby-xmlrpc. 755s Preparing to unpack .../56-ruby-xmlrpc_0.3.2-2_all.deb ... 755s Unpacking ruby-xmlrpc (0.3.2-2) ... 755s Selecting previously unselected package libruby3.2:arm64. 755s Preparing to unpack .../57-libruby3.2_3.2.3-1_arm64.deb ... 755s Unpacking libruby3.2:arm64 (3.2.3-1) ... 756s Selecting previously unselected package ruby-sdbm:arm64. 756s Preparing to unpack .../58-ruby-sdbm_1.0.0-5build3_arm64.deb ... 756s Unpacking ruby-sdbm:arm64 (1.0.0-5build3) ... 756s Selecting previously unselected package libruby3.1:arm64. 756s Preparing to unpack .../59-libruby3.1_3.1.2-7ubuntu4_arm64.deb ... 756s Unpacking libruby3.1:arm64 (3.1.2-7ubuntu4) ... 756s Selecting previously unselected package libruby:arm64. 756s Preparing to unpack .../60-libruby_1%3a3.1+1_arm64.deb ... 756s Unpacking libruby:arm64 (1:3.1+1) ... 756s Selecting previously unselected package ruby3.1-dev:arm64. 756s Preparing to unpack .../61-ruby3.1-dev_3.1.2-7ubuntu4_arm64.deb ... 756s Unpacking ruby3.1-dev:arm64 (3.1.2-7ubuntu4) ... 756s Selecting previously unselected package ruby3.2. 756s Preparing to unpack .../62-ruby3.2_3.2.3-1_arm64.deb ... 756s Unpacking ruby3.2 (3.2.3-1) ... 756s Selecting previously unselected package ruby3.2-dev:arm64. 756s Preparing to unpack .../63-ruby3.2-dev_3.2.3-1_arm64.deb ... 756s Unpacking ruby3.2-dev:arm64 (3.2.3-1) ... 756s Selecting previously unselected package ruby-all-dev:arm64. 756s Preparing to unpack .../64-ruby-all-dev_1%3a3.1+1_arm64.deb ... 756s Unpacking ruby-all-dev:arm64 (1:3.1+1) ... 756s Selecting previously unselected package ruby-diff-lcs. 756s Preparing to unpack .../65-ruby-diff-lcs_1.5.0-1_all.deb ... 756s Unpacking ruby-diff-lcs (1.5.0-1) ... 756s Selecting previously unselected package ruby-rspec-support. 756s Preparing to unpack .../66-ruby-rspec-support_3.12.0c0e1m1s0-1_all.deb ... 756s Unpacking ruby-rspec-support (3.12.0c0e1m1s0-1) ... 756s Selecting previously unselected package ruby-rspec-core. 756s Preparing to unpack .../67-ruby-rspec-core_3.12.0c0e1m1s0-1_all.deb ... 756s Unpacking ruby-rspec-core (3.12.0c0e1m1s0-1) ... 756s Selecting previously unselected package ruby-rspec-expectations. 756s Preparing to unpack .../68-ruby-rspec-expectations_3.12.0c0e1m1s0-1_all.deb ... 756s Unpacking ruby-rspec-expectations (3.12.0c0e1m1s0-1) ... 757s Selecting previously unselected package ruby-rspec-mocks. 757s Preparing to unpack .../69-ruby-rspec-mocks_3.12.0c0e1m1s0-1_all.deb ... 757s Unpacking ruby-rspec-mocks (3.12.0c0e1m1s0-1) ... 757s Selecting previously unselected package ruby-rspec. 757s Preparing to unpack .../70-ruby-rspec_3.12.0c0e1m1s0-1_all.deb ... 757s Unpacking ruby-rspec (3.12.0c0e1m1s0-1) ... 757s Selecting previously unselected package autopkgtest-satdep. 757s Preparing to unpack .../71-5-autopkgtest-satdep.deb ... 757s Unpacking autopkgtest-satdep (0) ... 757s Setting up libgraphite2-3:arm64 (1.3.14-2) ... 757s Setting up liblcms2-2:arm64 (2.14-2) ... 757s Setting up libfixposix4t64:arm64 (1:0.5.1-1+nmu1.1) ... 757s Setting up java-common (0.75+exp1) ... 757s Setting up libasm-java (9.6~us1-0ubuntu1) ... 757s Setting up rubygems-integration (1.18) ... 757s Setting up libheadius-options-java (1.7-1) ... 757s Setting up libjnr-x86asm-java (1.0.2-5.1) ... 757s Setting up libjzlib-java (1.1.3-3) ... 757s Setting up libbackport9-java (1.10-2) ... 757s Setting up libasound2-data (1.2.10-3build1) ... 757s Setting up libjitescript-java (0.4.3-1) ... 757s Setting up libsnakeyaml-engine-java (2.7+ds-3) ... 757s Setting up libgmpxx4ldbl:arm64 (2:6.3.0+dfsg-2ubuntu4) ... 757s Setting up libavahi-common-data:arm64 (0.8-13ubuntu2) ... 757s Setting up ruby-net-telnet (0.2.0-1) ... 757s Setting up fonts-dejavu-mono (2.37-8) ... 757s Setting up fonts-dejavu-core (2.37-8) ... 757s Setting up libpcsclite1:arm64 (2.0.0-1) ... 757s Setting up libjpeg-turbo8:arm64 (2.1.5-2ubuntu1) ... 757s Setting up ruby-rspec-support (3.12.0c0e1m1s0-1) ... 757s Setting up libjoda-time-java (2.10.14-1) ... 757s Setting up libjcodings-java (1.0.58-1) ... 757s Setting up ruby-webrick (1.8.1-1) ... 757s Setting up libasound2:arm64 (1.2.10-3build1) ... 757s Setting up libharfbuzz0b:arm64 (8.3.0-2) ... 757s Setting up libinvokebinder-java (1.13-1) ... 757s Setting up libjffi-jni:arm64 (1.3.13+ds-1) ... 757s Setting up ca-certificates-java (20240118) ... 757s No JRE found. Skipping Java certificates setup. 757s Setting up ruby-xmlrpc (0.3.2-2) ... 757s Setting up libhawtjni-runtime-java (1.18-1) ... 757s Setting up libdirgra-java (0.4-2) ... 757s Setting up libjnr-constants-java (0.10.4-2) ... 757s Setting up libjpeg8:arm64 (8c-2ubuntu11) ... 757s Setting up libjffi-java (1.3.13+ds-1) ... 757s Setting up libgmp-dev:arm64 (2:6.3.0+dfsg-2ubuntu4) ... 757s Setting up libjruby-joni-java (2.2.1-1) ... 757s Setting up fontconfig-config (2.15.0-1ubuntu1) ... 757s Setting up libavahi-common3:arm64 (0.8-13ubuntu2) ... 757s Setting up libjansi-native-java (1.8-2) ... 757s Setting up libjansi1-java (1.18-3ubuntu1) ... 757s Setting up libfontconfig1:arm64 (2.15.0-1ubuntu1) ... 757s Setting up libjline2-java (2.14.6-5) ... 757s Setting up libavahi-client3:arm64 (0.8-13ubuntu2) ... 757s Setting up libjnr-ffi-java (2.2.15-2) ... 757s Setting up libjnr-enxio-java (0.32.16-1) ... 757s Setting up libcups2:arm64 (2.4.6-0ubuntu3) ... 757s Setting up libjnr-netdb-java (1.1.6-1.1) ... 757s Setting up libjnr-posix-java (3.1.18-1) ... 757s Setting up openjdk-21-jre-headless:arm64 (21.0.2+13-2) ... 757s update-alternatives: using /usr/lib/jvm/java-21-openjdk-arm64/bin/java to provide /usr/bin/java (java) in auto mode 757s update-alternatives: using /usr/lib/jvm/java-21-openjdk-arm64/bin/jpackage to provide /usr/bin/jpackage (jpackage) in auto mode 757s update-alternatives: using /usr/lib/jvm/java-21-openjdk-arm64/bin/keytool to provide /usr/bin/keytool (keytool) in auto mode 757s update-alternatives: using /usr/lib/jvm/java-21-openjdk-arm64/bin/rmiregistry to provide /usr/bin/rmiregistry (rmiregistry) in auto mode 757s update-alternatives: using /usr/lib/jvm/java-21-openjdk-arm64/lib/jexec to provide /usr/bin/jexec (jexec) in auto mode 757s Setting up libjnr-unixsocket-java (0.38.21-2) ... 757s Setting up ruby-rubygems (3.4.20-1) ... 757s Setting up rake (13.0.6-3) ... 757s Setting up libruby:arm64 (1:3.1+1) ... 757s Setting up libruby3.2:arm64 (3.2.3-1) ... 757s Setting up ruby3.2 (3.2.3-1) ... 757s Setting up ruby3.2-dev:arm64 (3.2.3-1) ... 757s Setting up ruby-sdbm:arm64 (1.0.0-5build3) ... 757s Setting up libruby3.1:arm64 (3.1.2-7ubuntu4) ... 757s Setting up ruby3.1 (3.1.2-7ubuntu4) ... 757s Setting up ruby3.1-dev:arm64 (3.1.2-7ubuntu4) ... 757s Setting up ruby-all-dev:arm64 (1:3.1+1) ... 757s Setting up ruby (1:3.1+1) ... 757s Setting up ruby-rspec-core (3.12.0c0e1m1s0-1) ... 757s Setting up ruby-diff-lcs (1.5.0-1) ... 757s Setting up ruby-rspec-expectations (3.12.0c0e1m1s0-1) ... 757s Setting up ruby-rspec-mocks (3.12.0c0e1m1s0-1) ... 757s Setting up ruby-rspec (3.12.0c0e1m1s0-1) ... 757s Processing triggers for libc-bin (2.39-0ubuntu2) ... 757s Processing triggers for man-db (2.12.0-3) ... 758s Processing triggers for ca-certificates-java (20240118) ... 759s Adding debian:ACCVRAIZ1.pem 759s Adding debian:AC_RAIZ_FNMT-RCM.pem 759s Adding debian:AC_RAIZ_FNMT-RCM_SERVIDORES_SEGUROS.pem 759s Adding debian:ANF_Secure_Server_Root_CA.pem 759s Adding debian:Actalis_Authentication_Root_CA.pem 759s Adding debian:AffirmTrust_Commercial.pem 759s Adding debian:AffirmTrust_Networking.pem 759s Adding debian:AffirmTrust_Premium.pem 759s Adding debian:AffirmTrust_Premium_ECC.pem 759s Adding debian:Amazon_Root_CA_1.pem 759s Adding debian:Amazon_Root_CA_2.pem 759s Adding debian:Amazon_Root_CA_3.pem 759s Adding debian:Amazon_Root_CA_4.pem 759s Adding debian:Atos_TrustedRoot_2011.pem 759s Adding debian:Atos_TrustedRoot_Root_CA_ECC_TLS_2021.pem 759s Adding debian:Atos_TrustedRoot_Root_CA_RSA_TLS_2021.pem 759s Adding debian:Autoridad_de_Certificacion_Firmaprofesional_CIF_A62634068.pem 759s Adding debian:BJCA_Global_Root_CA1.pem 759s Adding debian:BJCA_Global_Root_CA2.pem 759s Adding debian:Baltimore_CyberTrust_Root.pem 759s Adding debian:Buypass_Class_2_Root_CA.pem 759s Adding debian:Buypass_Class_3_Root_CA.pem 759s Adding debian:CA_Disig_Root_R2.pem 759s Adding debian:CFCA_EV_ROOT.pem 759s Adding debian:COMODO_Certification_Authority.pem 759s Adding debian:COMODO_ECC_Certification_Authority.pem 759s Adding debian:COMODO_RSA_Certification_Authority.pem 759s Adding debian:Certainly_Root_E1.pem 759s Adding debian:Certainly_Root_R1.pem 759s Adding debian:Certigna.pem 759s Adding debian:Certigna_Root_CA.pem 759s Adding debian:Certum_EC-384_CA.pem 759s Adding debian:Certum_Trusted_Network_CA.pem 759s Adding debian:Certum_Trusted_Network_CA_2.pem 759s Adding debian:Certum_Trusted_Root_CA.pem 759s Adding debian:CommScope_Public_Trust_ECC_Root-01.pem 759s Adding debian:CommScope_Public_Trust_ECC_Root-02.pem 759s Adding debian:CommScope_Public_Trust_RSA_Root-01.pem 759s Adding debian:CommScope_Public_Trust_RSA_Root-02.pem 759s Adding debian:Comodo_AAA_Services_root.pem 759s Adding debian:D-TRUST_BR_Root_CA_1_2020.pem 759s Adding debian:D-TRUST_EV_Root_CA_1_2020.pem 759s Adding debian:D-TRUST_Root_Class_3_CA_2_2009.pem 759s Adding debian:D-TRUST_Root_Class_3_CA_2_EV_2009.pem 759s Adding debian:DigiCert_Assured_ID_Root_CA.pem 759s Adding debian:DigiCert_Assured_ID_Root_G2.pem 759s Adding debian:DigiCert_Assured_ID_Root_G3.pem 759s Adding debian:DigiCert_Global_Root_CA.pem 759s Adding debian:DigiCert_Global_Root_G2.pem 759s Adding debian:DigiCert_Global_Root_G3.pem 759s Adding debian:DigiCert_High_Assurance_EV_Root_CA.pem 759s Adding debian:DigiCert_TLS_ECC_P384_Root_G5.pem 759s Adding debian:DigiCert_TLS_RSA4096_Root_G5.pem 759s Adding debian:DigiCert_Trusted_Root_G4.pem 759s Adding debian:Entrust.net_Premium_2048_Secure_Server_CA.pem 759s Adding debian:Entrust_Root_Certification_Authority.pem 759s Adding debian:Entrust_Root_Certification_Authority_-_EC1.pem 759s Adding debian:Entrust_Root_Certification_Authority_-_G2.pem 759s Adding debian:Entrust_Root_Certification_Authority_-_G4.pem 759s Adding debian:GDCA_TrustAUTH_R5_ROOT.pem 759s Adding debian:GLOBALTRUST_2020.pem 759s Adding debian:GTS_Root_R1.pem 759s Adding debian:GTS_Root_R2.pem 759s Adding debian:GTS_Root_R3.pem 759s Adding debian:GTS_Root_R4.pem 759s Adding debian:GlobalSign_ECC_Root_CA_-_R4.pem 759s Adding debian:GlobalSign_ECC_Root_CA_-_R5.pem 759s Adding debian:GlobalSign_Root_CA.pem 759s Adding debian:GlobalSign_Root_CA_-_R3.pem 759s Adding debian:GlobalSign_Root_CA_-_R6.pem 759s Adding debian:GlobalSign_Root_E46.pem 759s Adding debian:GlobalSign_Root_R46.pem 759s Adding debian:Go_Daddy_Class_2_CA.pem 759s Adding debian:Go_Daddy_Root_Certificate_Authority_-_G2.pem 759s Adding debian:HARICA_TLS_ECC_Root_CA_2021.pem 759s Adding debian:HARICA_TLS_RSA_Root_CA_2021.pem 759s Adding debian:Hellenic_Academic_and_Research_Institutions_ECC_RootCA_2015.pem 759s Adding debian:Hellenic_Academic_and_Research_Institutions_RootCA_2015.pem 759s Adding debian:HiPKI_Root_CA_-_G1.pem 759s Adding debian:Hongkong_Post_Root_CA_3.pem 759s Adding debian:ISRG_Root_X1.pem 759s Adding debian:ISRG_Root_X2.pem 759s Adding debian:IdenTrust_Commercial_Root_CA_1.pem 759s Adding debian:IdenTrust_Public_Sector_Root_CA_1.pem 759s Adding debian:Izenpe.com.pem 759s Adding debian:Microsec_e-Szigno_Root_CA_2009.pem 759s Adding debian:Microsoft_ECC_Root_Certificate_Authority_2017.pem 759s Adding debian:Microsoft_RSA_Root_Certificate_Authority_2017.pem 759s Adding debian:NAVER_Global_Root_Certification_Authority.pem 759s Adding debian:NetLock_Arany_=Class_Gold=_Főtanúsítvány.pem 759s Adding debian:OISTE_WISeKey_Global_Root_GB_CA.pem 759s Adding debian:OISTE_WISeKey_Global_Root_GC_CA.pem 759s Adding debian:QuoVadis_Root_CA_1_G3.pem 759s Adding debian:QuoVadis_Root_CA_2.pem 759s Adding debian:QuoVadis_Root_CA_2_G3.pem 759s Adding debian:QuoVadis_Root_CA_3.pem 759s Adding debian:QuoVadis_Root_CA_3_G3.pem 759s Adding debian:SSL.com_EV_Root_Certification_Authority_ECC.pem 759s Adding debian:SSL.com_EV_Root_Certification_Authority_RSA_R2.pem 759s Adding debian:SSL.com_Root_Certification_Authority_ECC.pem 759s Adding debian:SSL.com_Root_Certification_Authority_RSA.pem 759s Adding debian:SSL.com_TLS_ECC_Root_CA_2022.pem 759s Adding debian:SSL.com_TLS_RSA_Root_CA_2022.pem 759s Adding debian:SZAFIR_ROOT_CA2.pem 759s Adding debian:Sectigo_Public_Server_Authentication_Root_E46.pem 759s Adding debian:Sectigo_Public_Server_Authentication_Root_R46.pem 759s Adding debian:SecureSign_RootCA11.pem 759s Adding debian:SecureTrust_CA.pem 759s Adding debian:Secure_Global_CA.pem 759s Adding debian:Security_Communication_ECC_RootCA1.pem 759s Adding debian:Security_Communication_RootCA2.pem 759s Adding debian:Security_Communication_RootCA3.pem 759s Adding debian:Security_Communication_Root_CA.pem 759s Adding debian:Starfield_Class_2_CA.pem 759s Adding debian:Starfield_Root_Certificate_Authority_-_G2.pem 759s Adding debian:Starfield_Services_Root_Certificate_Authority_-_G2.pem 759s Adding debian:SwissSign_Gold_CA_-_G2.pem 759s Adding debian:SwissSign_Silver_CA_-_G2.pem 759s Adding debian:T-TeleSec_GlobalRoot_Class_2.pem 759s Adding debian:T-TeleSec_GlobalRoot_Class_3.pem 759s Adding debian:TUBITAK_Kamu_SM_SSL_Kok_Sertifikasi_-_Surum_1.pem 759s Adding debian:TWCA_Global_Root_CA.pem 759s Adding debian:TWCA_Root_Certification_Authority.pem 759s Adding debian:TeliaSonera_Root_CA_v1.pem 759s Adding debian:Telia_Root_CA_v2.pem 759s Adding debian:TrustAsia_Global_Root_CA_G3.pem 759s Adding debian:TrustAsia_Global_Root_CA_G4.pem 759s Adding debian:Trustwave_Global_Certification_Authority.pem 759s Adding debian:Trustwave_Global_ECC_P256_Certification_Authority.pem 759s Adding debian:Trustwave_Global_ECC_P384_Certification_Authority.pem 759s Adding debian:TunTrust_Root_CA.pem 759s Adding debian:UCA_Extended_Validation_Root.pem 759s Adding debian:UCA_Global_G2_Root.pem 759s Adding debian:USERTrust_ECC_Certification_Authority.pem 759s Adding debian:USERTrust_RSA_Certification_Authority.pem 759s Adding debian:XRamp_Global_CA_Root.pem 759s Adding debian:certSIGN_ROOT_CA.pem 759s Adding debian:certSIGN_Root_CA_G2.pem 759s Adding debian:e-Szigno_Root_CA_2017.pem 759s Adding debian:ePKI_Root_Certification_Authority.pem 759s Adding debian:emSign_ECC_Root_CA_-_C3.pem 759s Adding debian:emSign_ECC_Root_CA_-_G3.pem 759s Adding debian:emSign_Root_CA_-_C1.pem 759s Adding debian:emSign_Root_CA_-_G1.pem 759s Adding debian:vTrus_ECC_Root_CA.pem 759s Adding debian:vTrus_Root_CA.pem 759s done. 759s Setting up default-jre-headless (2:1.21-75+exp1) ... 759s Setting up jruby (9.4.6.0+ds-1ubuntu3) ... 759s Setting up ant (1.10.14-1) ... 759s Setting up autopkgtest-satdep (0) ... 765s (Reading database ... 84014 files and directories currently installed.) 765s Removing autopkgtest-satdep (0) ... 782s autopkgtest [11:07:45]: test spec-compiler: [----------------------- 783s installing system gems into jruby: 783s * diff-lcs-1.5.0 783s * minitest-5.15.0 783s * power_assert-2.0.1 783s * rake-13.0.6 783s * rexml-3.2.5 783s * rspec-3.12.0 783s * rspec-core-3.12.0 783s * rspec-expectations-3.12.1 783s * rspec-mocks-3.12.1 783s * rspec-support-3.12.0 783s * test-unit-3.5.3 796s /usr/share/jruby/bin/jruby -X-C -I/tmp/autopkgtest.nFBjtB/autopkgtest_tmp/gem_temp/gems/rspec-support-3.12.0/lib:/tmp/autopkgtest.nFBjtB/autopkgtest_tmp/gem_temp/gems/rspec-core-3.12.0/lib /usr/share/rubygems-integration/all/gems/rspec-core-3.12.0/exe/rspec --pattern spec/compiler/\*\*/\*_spec.rb 803s ......................................................../tmp/autopkgtest.nFBjtB/autopkgtest_tmp/spec/compiler/general_spec.rb:723: warning: unused literal ignored 803s /tmp/autopkgtest.nFBjtB/autopkgtest_tmp/spec/compiler/general_spec.rb:724: warning: unused literal ignored 805s .........*.../tmp/autopkgtest.nFBjtB/autopkgtest_tmp/spec/compiler/general_spec.rb:1125: warning: literal in condition 805s /tmp/autopkgtest.nFBjtB/autopkgtest_tmp/spec/compiler/general_spec.rb:1123: warning: literal in condition 805s *........................................................................................................../tmp/autopkgtest.nFBjtB/autopkgtest_tmp/spec/compiler/general_spec.rb:723: warning: unused literal ignored 805s /tmp/autopkgtest.nFBjtB/autopkgtest_tmp/spec/compiler/general_spec.rb:724: warning: unused literal ignored 805s .........*...*......................../tmp/autopkgtest.nFBjtB/autopkgtest_tmp/spec/compiler/general_spec.rb:1125: warning: literal in condition 805s /tmp/autopkgtest.nFBjtB/autopkgtest_tmp/spec/compiler/general_spec.rb:1123: warning: literal in condition 806s ..................../tmp/autopkgtest.nFBjtB/autopkgtest_tmp/spec/compiler/general_spec.rb:1363: warning: already initialized constant StructTest1 806s /tmp/autopkgtest.nFBjtB/autopkgtest_tmp/spec/compiler/general_spec.rb:1364: warning: already initialized constant StructTest2 808s ............................................................../tmp/autopkgtest.nFBjtB/autopkgtest_tmp/spec/compiler/general_spec.rb:723: warning: unused literal ignored 808s /tmp/autopkgtest.nFBjtB/autopkgtest_tmp/spec/compiler/general_spec.rb:724: warning: unused literal ignored 808s .........*...*......................../tmp/autopkgtest.nFBjtB/autopkgtest_tmp/spec/compiler/general_spec.rb:1125: warning: literal in condition 808s /tmp/autopkgtest.nFBjtB/autopkgtest_tmp/spec/compiler/general_spec.rb:1123: warning: literal in condition 809s ..................../tmp/autopkgtest.nFBjtB/autopkgtest_tmp/spec/compiler/general_spec.rb:1363: warning: already initialized constant StructTest1 809s /tmp/autopkgtest.nFBjtB/autopkgtest_tmp/spec/compiler/general_spec.rb:1364: warning: already initialized constant StructTest2 810s ............................................................../tmp/autopkgtest.nFBjtB/autopkgtest_tmp/spec/compiler/general_spec.rb:723: warning: unused literal ignored 810s /tmp/autopkgtest.nFBjtB/autopkgtest_tmp/spec/compiler/general_spec.rb:724: warning: unused literal ignored 811s .........*...*......................../tmp/autopkgtest.nFBjtB/autopkgtest_tmp/spec/compiler/general_spec.rb:1125: warning: literal in condition 811s /tmp/autopkgtest.nFBjtB/autopkgtest_tmp/spec/compiler/general_spec.rb:1123: warning: literal in condition 811s ..................../tmp/autopkgtest.nFBjtB/autopkgtest_tmp/spec/compiler/general_spec.rb:1363: warning: already initialized constant StructTest1 811s /tmp/autopkgtest.nFBjtB/autopkgtest_tmp/spec/compiler/general_spec.rb:1364: warning: already initialized constant StructTest2 811s ........ 811s 811s Pending: (Failures listed here are expected and do not affect your suite's status) 811s 811s 1) JRuby's interpreter compiles very long code bodies 811s # JRUBY-2246 811s # ./spec/compiler/general_spec.rb:775 811s 811s 2) JRuby's interpreter can compile large literal arrays and hashes 811s # JRUBY-4757 and JRUBY-2621: can't compile large array/hash 811s # ./spec/compiler/general_spec.rb:832 811s 811s 3) JRuby's persistence compiles very long code bodies 811s # JRUBY-2246 811s # ./spec/compiler/general_spec.rb:775 811s 811s 4) JRuby's persistence can compile large literal arrays and hashes 811s # JRUBY-4757 and JRUBY-2621: can't compile large array/hash 811s # ./spec/compiler/general_spec.rb:832 811s 811s 5) JRuby's jit compiles very long code bodies 811s # JRUBY-2246 811s # ./spec/compiler/general_spec.rb:775 811s 811s 6) JRuby's jit can compile large literal arrays and hashes 811s # JRUBY-4757 and JRUBY-2621: can't compile large array/hash 811s # ./spec/compiler/general_spec.rb:832 811s 811s 7) JRuby's aot compiles very long code bodies 811s # JRUBY-2246 811s # ./spec/compiler/general_spec.rb:775 811s 811s 8) JRuby's aot can compile large literal arrays and hashes 811s # JRUBY-4757 and JRUBY-2621: can't compile large array/hash 811s # ./spec/compiler/general_spec.rb:832 811s 811s 2 deprecation warnings total 811s 811s Deprecation Warnings: 811s 811s The implicit block expectation syntax is deprecated, you should pass a block rather than an argument to `expect` to use the provided block expectation matcher or the matcher must implement `supports_value_expectations?`. e.g `expect { value }.to raise SyntaxError` not `expect(value).to raise SyntaxError` 811s 811s Using `should` from rspec-expectations' old `:should` syntax without explicitly enabling the syntax is deprecated. Use the new `:expect` syntax or explicitly enable `:should` with `config.expect_with(:rspec) { |c| c.syntax = :should }` instead. Called from /tmp/autopkgtest.nFBjtB/autopkgtest_tmp/spec/compiler/general_spec.rb:1359:in `block in
'. 811s 811s 811s If you need more of the backtrace for any of these deprecations to 811s identify where to make the necessary changes, you can configure 811s `config.raise_errors_for_deprecations!`, and it will turn the 811s deprecation warnings into errors, giving you the full backtrace. 811s 811s Finished in 9.41 seconds (files took 2.07 seconds to load) 811s 482 examples, 0 failures, 8 pending 811s 813s autopkgtest [11:08:16]: test spec-compiler: -----------------------] 813s spec-compiler PASS 813s autopkgtest [11:08:16]: test spec-compiler: - - - - - - - - - - results - - - - - - - - - - 814s autopkgtest [11:08:17]: test spec-ffi: preparing testbed 821s Reading package lists... 822s Building dependency tree... 822s Reading state information... 822s Starting pkgProblemResolver with broken count: 0 822s Starting 2 pkgProblemResolver with broken count: 0 822s Done 823s The following additional packages will be installed: 823s build-essential cpp cpp-13 cpp-13-aarch64-linux-gnu cpp-aarch64-linux-gnu 823s g++ g++-13 g++-13-aarch64-linux-gnu g++-aarch64-linux-gnu gcc gcc-13 823s gcc-13-aarch64-linux-gnu gcc-aarch64-linux-gnu libasan8 libatomic1 823s libc-dev-bin libc6-dev libcc1-0 libcrypt-dev libgcc-13-dev libgomp1 823s libhwasan0 libisl23 libitm1 liblsan0 libmpc3 libnsl-dev libstdc++-13-dev 823s libtirpc-dev libtsan2 libubsan1 linux-libc-dev rpcsvc-proto 823s Suggested packages: 823s cpp-doc gcc-13-locales cpp-13-doc gcc-13-doc gcc-multilib manpages-dev 823s autoconf automake libtool flex bison gdb gcc-doc gdb-aarch64-linux-gnu 823s glibc-doc libstdc++-13-doc 823s Recommended packages: 823s manpages manpages-dev libc-devtools 823s The following NEW packages will be installed: 823s autopkgtest-satdep build-essential cpp cpp-13 cpp-13-aarch64-linux-gnu 823s cpp-aarch64-linux-gnu g++ g++-13 g++-13-aarch64-linux-gnu 823s g++-aarch64-linux-gnu gcc gcc-13 gcc-13-aarch64-linux-gnu 823s gcc-aarch64-linux-gnu libasan8 libatomic1 libc-dev-bin libc6-dev libcc1-0 823s libcrypt-dev libgcc-13-dev libgomp1 libhwasan0 libisl23 libitm1 liblsan0 823s libmpc3 libnsl-dev libstdc++-13-dev libtirpc-dev libtsan2 libubsan1 823s linux-libc-dev rpcsvc-proto 823s 0 upgraded, 34 newly installed, 0 to remove and 0 not upgraded. 823s Need to get 61.7 MB/61.7 MB of archives. 823s After this operation, 221 MB of additional disk space will be used. 823s Get:1 /tmp/autopkgtest.nFBjtB/6-autopkgtest-satdep.deb autopkgtest-satdep arm64 0 [776 B] 823s Get:2 http://ftpmaster.internal/ubuntu noble/main arm64 libc-dev-bin arm64 2.39-0ubuntu2 [19.7 kB] 823s Get:3 http://ftpmaster.internal/ubuntu noble/main arm64 linux-libc-dev arm64 6.8.0-11.11 [1569 kB] 824s Get:4 http://ftpmaster.internal/ubuntu noble/main arm64 libcrypt-dev arm64 1:4.4.36-4 [136 kB] 824s Get:5 http://ftpmaster.internal/ubuntu noble/main arm64 libtirpc-dev arm64 1.3.4+ds-1build1 [232 kB] 824s Get:6 http://ftpmaster.internal/ubuntu noble/main arm64 libnsl-dev arm64 1.3.0-3 [71.9 kB] 824s Get:7 http://ftpmaster.internal/ubuntu noble/main arm64 rpcsvc-proto arm64 1.4.2-0ubuntu6 [65.4 kB] 824s Get:8 http://ftpmaster.internal/ubuntu noble/main arm64 libc6-dev arm64 2.39-0ubuntu2 [1596 kB] 824s Get:9 http://ftpmaster.internal/ubuntu noble/main arm64 libisl23 arm64 0.26-3 [713 kB] 824s Get:10 http://ftpmaster.internal/ubuntu noble/main arm64 libmpc3 arm64 1.3.1-1 [55.3 kB] 824s Get:11 http://ftpmaster.internal/ubuntu noble/main arm64 cpp-13-aarch64-linux-gnu arm64 13.2.0-17ubuntu2 [10.3 MB] 824s Get:12 http://ftpmaster.internal/ubuntu noble/main arm64 cpp-13 arm64 13.2.0-17ubuntu2 [1028 B] 824s Get:13 http://ftpmaster.internal/ubuntu noble/main arm64 cpp-aarch64-linux-gnu arm64 4:13.2.0-7ubuntu1 [5316 B] 824s Get:14 http://ftpmaster.internal/ubuntu noble/main arm64 cpp arm64 4:13.2.0-7ubuntu1 [22.4 kB] 824s Get:15 http://ftpmaster.internal/ubuntu noble/main arm64 libcc1-0 arm64 14-20240303-1ubuntu1 [44.7 kB] 824s Get:16 http://ftpmaster.internal/ubuntu noble/main arm64 libgomp1 arm64 14-20240303-1ubuntu1 [144 kB] 824s Get:17 http://ftpmaster.internal/ubuntu noble/main arm64 libitm1 arm64 14-20240303-1ubuntu1 [27.7 kB] 824s Get:18 http://ftpmaster.internal/ubuntu noble/main arm64 libatomic1 arm64 14-20240303-1ubuntu1 [11.4 kB] 824s Get:19 http://ftpmaster.internal/ubuntu noble/main arm64 libasan8 arm64 14-20240303-1ubuntu1 [2919 kB] 824s Get:20 http://ftpmaster.internal/ubuntu noble/main arm64 liblsan0 arm64 14-20240303-1ubuntu1 [1282 kB] 824s Get:21 http://ftpmaster.internal/ubuntu noble/main arm64 libtsan2 arm64 14-20240303-1ubuntu1 [2687 kB] 824s Get:22 http://ftpmaster.internal/ubuntu noble/main arm64 libubsan1 arm64 14-20240303-1ubuntu1 [1151 kB] 824s Get:23 http://ftpmaster.internal/ubuntu noble/main arm64 libhwasan0 arm64 14-20240303-1ubuntu1 [1597 kB] 824s Get:24 http://ftpmaster.internal/ubuntu noble/main arm64 libgcc-13-dev arm64 13.2.0-17ubuntu2 [2464 kB] 824s Get:25 http://ftpmaster.internal/ubuntu noble/main arm64 gcc-13-aarch64-linux-gnu arm64 13.2.0-17ubuntu2 [20.1 MB] 825s Get:26 http://ftpmaster.internal/ubuntu noble/main arm64 gcc-13 arm64 13.2.0-17ubuntu2 [467 kB] 825s Get:27 http://ftpmaster.internal/ubuntu noble/main arm64 gcc-aarch64-linux-gnu arm64 4:13.2.0-7ubuntu1 [1198 B] 825s Get:28 http://ftpmaster.internal/ubuntu noble/main arm64 gcc arm64 4:13.2.0-7ubuntu1 [5018 B] 825s Get:29 http://ftpmaster.internal/ubuntu noble/main arm64 libstdc++-13-dev arm64 13.2.0-17ubuntu2 [2322 kB] 825s Get:30 http://ftpmaster.internal/ubuntu noble/main arm64 g++-13-aarch64-linux-gnu arm64 13.2.0-17ubuntu2 [11.7 MB] 825s Get:31 http://ftpmaster.internal/ubuntu noble/main arm64 g++-13 arm64 13.2.0-17ubuntu2 [14.4 kB] 825s Get:32 http://ftpmaster.internal/ubuntu noble/main arm64 g++-aarch64-linux-gnu arm64 4:13.2.0-7ubuntu1 [962 B] 825s Get:33 http://ftpmaster.internal/ubuntu noble/main arm64 g++ arm64 4:13.2.0-7ubuntu1 [1082 B] 825s Get:34 http://ftpmaster.internal/ubuntu noble/main arm64 build-essential arm64 12.10ubuntu1 [4932 B] 826s Fetched 61.7 MB in 2s (27.2 MB/s) 826s Selecting previously unselected package libc-dev-bin. 826s (Reading database ... (Reading database ... 5% (Reading database ... 10% (Reading database ... 15% (Reading database ... 20% (Reading database ... 25% (Reading database ... 30% (Reading database ... 35% (Reading database ... 40% (Reading database ... 45% (Reading database ... 50% (Reading database ... 55% (Reading database ... 60% (Reading database ... 65% (Reading database ... 70% (Reading database ... 75% (Reading database ... 80% (Reading database ... 85% (Reading database ... 90% (Reading database ... 95% (Reading database ... 100% (Reading database ... 84014 files and directories currently installed.) 826s Preparing to unpack .../00-libc-dev-bin_2.39-0ubuntu2_arm64.deb ... 826s Unpacking libc-dev-bin (2.39-0ubuntu2) ... 826s Selecting previously unselected package linux-libc-dev:arm64. 826s Preparing to unpack .../01-linux-libc-dev_6.8.0-11.11_arm64.deb ... 826s Unpacking linux-libc-dev:arm64 (6.8.0-11.11) ... 826s Selecting previously unselected package libcrypt-dev:arm64. 826s Preparing to unpack .../02-libcrypt-dev_1%3a4.4.36-4_arm64.deb ... 826s Unpacking libcrypt-dev:arm64 (1:4.4.36-4) ... 826s Selecting previously unselected package libtirpc-dev:arm64. 826s Preparing to unpack .../03-libtirpc-dev_1.3.4+ds-1build1_arm64.deb ... 826s Unpacking libtirpc-dev:arm64 (1.3.4+ds-1build1) ... 826s Selecting previously unselected package libnsl-dev:arm64. 826s Preparing to unpack .../04-libnsl-dev_1.3.0-3_arm64.deb ... 826s Unpacking libnsl-dev:arm64 (1.3.0-3) ... 826s Selecting previously unselected package rpcsvc-proto. 826s Preparing to unpack .../05-rpcsvc-proto_1.4.2-0ubuntu6_arm64.deb ... 826s Unpacking rpcsvc-proto (1.4.2-0ubuntu6) ... 826s Selecting previously unselected package libc6-dev:arm64. 826s Preparing to unpack .../06-libc6-dev_2.39-0ubuntu2_arm64.deb ... 826s Unpacking libc6-dev:arm64 (2.39-0ubuntu2) ... 827s Selecting previously unselected package libisl23:arm64. 827s Preparing to unpack .../07-libisl23_0.26-3_arm64.deb ... 827s Unpacking libisl23:arm64 (0.26-3) ... 827s Selecting previously unselected package libmpc3:arm64. 827s Preparing to unpack .../08-libmpc3_1.3.1-1_arm64.deb ... 827s Unpacking libmpc3:arm64 (1.3.1-1) ... 827s Selecting previously unselected package cpp-13-aarch64-linux-gnu. 827s Preparing to unpack .../09-cpp-13-aarch64-linux-gnu_13.2.0-17ubuntu2_arm64.deb ... 827s Unpacking cpp-13-aarch64-linux-gnu (13.2.0-17ubuntu2) ... 827s Selecting previously unselected package cpp-13. 827s Preparing to unpack .../10-cpp-13_13.2.0-17ubuntu2_arm64.deb ... 827s Unpacking cpp-13 (13.2.0-17ubuntu2) ... 827s Selecting previously unselected package cpp-aarch64-linux-gnu. 827s Preparing to unpack .../11-cpp-aarch64-linux-gnu_4%3a13.2.0-7ubuntu1_arm64.deb ... 827s Unpacking cpp-aarch64-linux-gnu (4:13.2.0-7ubuntu1) ... 827s Selecting previously unselected package cpp. 827s Preparing to unpack .../12-cpp_4%3a13.2.0-7ubuntu1_arm64.deb ... 827s Unpacking cpp (4:13.2.0-7ubuntu1) ... 827s Selecting previously unselected package libcc1-0:arm64. 827s Preparing to unpack .../13-libcc1-0_14-20240303-1ubuntu1_arm64.deb ... 827s Unpacking libcc1-0:arm64 (14-20240303-1ubuntu1) ... 827s Selecting previously unselected package libgomp1:arm64. 827s Preparing to unpack .../14-libgomp1_14-20240303-1ubuntu1_arm64.deb ... 827s Unpacking libgomp1:arm64 (14-20240303-1ubuntu1) ... 827s Selecting previously unselected package libitm1:arm64. 827s Preparing to unpack .../15-libitm1_14-20240303-1ubuntu1_arm64.deb ... 827s Unpacking libitm1:arm64 (14-20240303-1ubuntu1) ... 827s Selecting previously unselected package libatomic1:arm64. 827s Preparing to unpack .../16-libatomic1_14-20240303-1ubuntu1_arm64.deb ... 827s Unpacking libatomic1:arm64 (14-20240303-1ubuntu1) ... 827s Selecting previously unselected package libasan8:arm64. 827s Preparing to unpack .../17-libasan8_14-20240303-1ubuntu1_arm64.deb ... 827s Unpacking libasan8:arm64 (14-20240303-1ubuntu1) ... 828s Selecting previously unselected package liblsan0:arm64. 828s Preparing to unpack .../18-liblsan0_14-20240303-1ubuntu1_arm64.deb ... 828s Unpacking liblsan0:arm64 (14-20240303-1ubuntu1) ... 828s Selecting previously unselected package libtsan2:arm64. 828s Preparing to unpack .../19-libtsan2_14-20240303-1ubuntu1_arm64.deb ... 828s Unpacking libtsan2:arm64 (14-20240303-1ubuntu1) ... 828s Selecting previously unselected package libubsan1:arm64. 828s Preparing to unpack .../20-libubsan1_14-20240303-1ubuntu1_arm64.deb ... 828s Unpacking libubsan1:arm64 (14-20240303-1ubuntu1) ... 828s Selecting previously unselected package libhwasan0:arm64. 828s Preparing to unpack .../21-libhwasan0_14-20240303-1ubuntu1_arm64.deb ... 828s Unpacking libhwasan0:arm64 (14-20240303-1ubuntu1) ... 828s Selecting previously unselected package libgcc-13-dev:arm64. 828s Preparing to unpack .../22-libgcc-13-dev_13.2.0-17ubuntu2_arm64.deb ... 828s Unpacking libgcc-13-dev:arm64 (13.2.0-17ubuntu2) ... 828s Selecting previously unselected package gcc-13-aarch64-linux-gnu. 828s Preparing to unpack .../23-gcc-13-aarch64-linux-gnu_13.2.0-17ubuntu2_arm64.deb ... 828s Unpacking gcc-13-aarch64-linux-gnu (13.2.0-17ubuntu2) ... 829s Selecting previously unselected package gcc-13. 829s Preparing to unpack .../24-gcc-13_13.2.0-17ubuntu2_arm64.deb ... 829s Unpacking gcc-13 (13.2.0-17ubuntu2) ... 829s Selecting previously unselected package gcc-aarch64-linux-gnu. 829s Preparing to unpack .../25-gcc-aarch64-linux-gnu_4%3a13.2.0-7ubuntu1_arm64.deb ... 829s Unpacking gcc-aarch64-linux-gnu (4:13.2.0-7ubuntu1) ... 829s Selecting previously unselected package gcc. 829s Preparing to unpack .../26-gcc_4%3a13.2.0-7ubuntu1_arm64.deb ... 829s Unpacking gcc (4:13.2.0-7ubuntu1) ... 829s Selecting previously unselected package libstdc++-13-dev:arm64. 829s Preparing to unpack .../27-libstdc++-13-dev_13.2.0-17ubuntu2_arm64.deb ... 829s Unpacking libstdc++-13-dev:arm64 (13.2.0-17ubuntu2) ... 829s Selecting previously unselected package g++-13-aarch64-linux-gnu. 829s Preparing to unpack .../28-g++-13-aarch64-linux-gnu_13.2.0-17ubuntu2_arm64.deb ... 829s Unpacking g++-13-aarch64-linux-gnu (13.2.0-17ubuntu2) ... 829s Selecting previously unselected package g++-13. 829s Preparing to unpack .../29-g++-13_13.2.0-17ubuntu2_arm64.deb ... 829s Unpacking g++-13 (13.2.0-17ubuntu2) ... 829s Selecting previously unselected package g++-aarch64-linux-gnu. 829s Preparing to unpack .../30-g++-aarch64-linux-gnu_4%3a13.2.0-7ubuntu1_arm64.deb ... 829s Unpacking g++-aarch64-linux-gnu (4:13.2.0-7ubuntu1) ... 829s Selecting previously unselected package g++. 829s Preparing to unpack .../31-g++_4%3a13.2.0-7ubuntu1_arm64.deb ... 829s Unpacking g++ (4:13.2.0-7ubuntu1) ... 829s Selecting previously unselected package build-essential. 829s Preparing to unpack .../32-build-essential_12.10ubuntu1_arm64.deb ... 829s Unpacking build-essential (12.10ubuntu1) ... 829s Selecting previously unselected package autopkgtest-satdep. 829s Preparing to unpack .../33-6-autopkgtest-satdep.deb ... 829s Unpacking autopkgtest-satdep (0) ... 829s Setting up linux-libc-dev:arm64 (6.8.0-11.11) ... 829s Setting up libgomp1:arm64 (14-20240303-1ubuntu1) ... 829s Setting up libtirpc-dev:arm64 (1.3.4+ds-1build1) ... 829s Setting up rpcsvc-proto (1.4.2-0ubuntu6) ... 829s Setting up libmpc3:arm64 (1.3.1-1) ... 829s Setting up libatomic1:arm64 (14-20240303-1ubuntu1) ... 829s Setting up libubsan1:arm64 (14-20240303-1ubuntu1) ... 829s Setting up libnsl-dev:arm64 (1.3.0-3) ... 829s Setting up libhwasan0:arm64 (14-20240303-1ubuntu1) ... 829s Setting up libcrypt-dev:arm64 (1:4.4.36-4) ... 829s Setting up libasan8:arm64 (14-20240303-1ubuntu1) ... 829s Setting up libtsan2:arm64 (14-20240303-1ubuntu1) ... 829s Setting up libisl23:arm64 (0.26-3) ... 829s Setting up libc-dev-bin (2.39-0ubuntu2) ... 829s Setting up libcc1-0:arm64 (14-20240303-1ubuntu1) ... 829s Setting up liblsan0:arm64 (14-20240303-1ubuntu1) ... 829s Setting up libitm1:arm64 (14-20240303-1ubuntu1) ... 829s Setting up cpp-13-aarch64-linux-gnu (13.2.0-17ubuntu2) ... 829s Setting up cpp-aarch64-linux-gnu (4:13.2.0-7ubuntu1) ... 829s Setting up libgcc-13-dev:arm64 (13.2.0-17ubuntu2) ... 829s Setting up libc6-dev:arm64 (2.39-0ubuntu2) ... 829s Setting up libstdc++-13-dev:arm64 (13.2.0-17ubuntu2) ... 829s Setting up cpp-13 (13.2.0-17ubuntu2) ... 829s Setting up gcc-13-aarch64-linux-gnu (13.2.0-17ubuntu2) ... 829s Setting up gcc-13 (13.2.0-17ubuntu2) ... 829s Setting up cpp (4:13.2.0-7ubuntu1) ... 829s Setting up g++-13-aarch64-linux-gnu (13.2.0-17ubuntu2) ... 829s Setting up gcc-aarch64-linux-gnu (4:13.2.0-7ubuntu1) ... 829s Setting up g++-13 (13.2.0-17ubuntu2) ... 829s Setting up gcc (4:13.2.0-7ubuntu1) ... 829s Setting up g++-aarch64-linux-gnu (4:13.2.0-7ubuntu1) ... 829s Setting up g++ (4:13.2.0-7ubuntu1) ... 829s update-alternatives: using /usr/bin/g++ to provide /usr/bin/c++ (c++) in auto mode 829s Setting up build-essential (12.10ubuntu1) ... 829s Setting up autopkgtest-satdep (0) ... 829s Processing triggers for man-db (2.12.0-3) ... 830s Processing triggers for libc-bin (2.39-0ubuntu2) ... 833s (Reading database ... 86845 files and directories currently installed.) 833s Removing autopkgtest-satdep (0) ... 833s autopkgtest [11:08:36]: test spec-ffi: [----------------------- 834s installing system gems into jruby: 834s * diff-lcs-1.5.0 834s * minitest-5.15.0 834s * power_assert-2.0.1 834s * rake-13.0.6 834s * rexml-3.2.5 834s * rspec-3.12.0 834s * rspec-core-3.12.0 834s * rspec-expectations-3.12.1 834s * rspec-mocks-3.12.1 834s * rspec-support-3.12.0 834s * test-unit-3.5.3 843s /usr/share/jruby/bin/jruby -X-C -I/tmp/autopkgtest.nFBjtB/autopkgtest_tmp/gem_temp/gems/rspec-support-3.12.0/lib:/tmp/autopkgtest.nFBjtB/autopkgtest_tmp/gem_temp/gems/rspec-core-3.12.0/lib /usr/share/rubygems-integration/all/gems/rspec-core-3.12.0/exe/rspec --pattern spec/ffi/\*\*/\*_spec.rb 848s "gmake CPU=aarch64 OS=linux" 848s cc -O2 -fno-omit-frame-pointer -fno-strict-aliasing -W -Wall -Wno-unused -Wno-unused-parameter -Wno-parentheses -I"." -fPIC -D_REENTRANT -c Benchmark.c -o Benchmark.o 848s cc -O2 -fno-omit-frame-pointer -fno-strict-aliasing -W -Wall -Wno-unused -Wno-unused-parameter -Wno-parentheses -I"." -fPIC -D_REENTRANT -c BitmaskTest.c -o BitmaskTest.o 848s cc -O2 -fno-omit-frame-pointer -fno-strict-aliasing -W -Wall -Wno-unused -Wno-unused-parameter -Wno-parentheses -I"." -fPIC -D_REENTRANT -c BoolTest.c -o BoolTest.o 848s cc -O2 -fno-omit-frame-pointer -fno-strict-aliasing -W -Wall -Wno-unused -Wno-unused-parameter -Wno-parentheses -I"." -fPIC -D_REENTRANT -c BufferTest.c -o BufferTest.o 848s cc -O2 -fno-omit-frame-pointer -fno-strict-aliasing -W -Wall -Wno-unused -Wno-unused-parameter -Wno-parentheses -I"." -fPIC -D_REENTRANT -c ClosureTest.c -o ClosureTest.o 848s cc -O2 -fno-omit-frame-pointer -fno-strict-aliasing -W -Wall -Wno-unused -Wno-unused-parameter -Wno-parentheses -I"." -fPIC -D_REENTRANT -c EnumTest.c -o EnumTest.o 848s cc -O2 -fno-omit-frame-pointer -fno-strict-aliasing -W -Wall -Wno-unused -Wno-unused-parameter -Wno-parentheses -I"." -fPIC -D_REENTRANT -c FunctionTest.c -o FunctionTest.o 849s cc -O2 -fno-omit-frame-pointer -fno-strict-aliasing -W -Wall -Wno-unused -Wno-unused-parameter -Wno-parentheses -I"." -fPIC -D_REENTRANT -c GlobalVariable.c -o GlobalVariable.o 849s cc -O2 -fno-omit-frame-pointer -fno-strict-aliasing -W -Wall -Wno-unused -Wno-unused-parameter -Wno-parentheses -I"." -fPIC -D_REENTRANT -c LastErrorTest.c -o LastErrorTest.o 849s cc -O2 -fno-omit-frame-pointer -fno-strict-aliasing -W -Wall -Wno-unused -Wno-unused-parameter -Wno-parentheses -I"." -fPIC -D_REENTRANT -c NumberTest.c -o NumberTest.o 852s cc -O2 -fno-omit-frame-pointer -fno-strict-aliasing -W -Wall -Wno-unused -Wno-unused-parameter -Wno-parentheses -I"." -fPIC -D_REENTRANT -c PipeHelperPosix.c -o PipeHelperPosix.o 852s cc -O2 -fno-omit-frame-pointer -fno-strict-aliasing -W -Wall -Wno-unused -Wno-unused-parameter -Wno-parentheses -I"." -fPIC -D_REENTRANT -c PipeHelperWindows.c -o PipeHelperWindows.o 852s cc -O2 -fno-omit-frame-pointer -fno-strict-aliasing -W -Wall -Wno-unused -Wno-unused-parameter -Wno-parentheses -I"." -fPIC -D_REENTRANT -c PointerTest.c -o PointerTest.o 852s cc -O2 -fno-omit-frame-pointer -fno-strict-aliasing -W -Wall -Wno-unused -Wno-unused-parameter -Wno-parentheses -I"." -fPIC -D_REENTRANT -c ReferenceTest.c -o ReferenceTest.o 852s cc -O2 -fno-omit-frame-pointer -fno-strict-aliasing -W -Wall -Wno-unused -Wno-unused-parameter -Wno-parentheses -I"." -fPIC -D_REENTRANT -c StringTest.c -o StringTest.o 853s cc -O2 -fno-omit-frame-pointer -fno-strict-aliasing -W -Wall -Wno-unused -Wno-unused-parameter -Wno-parentheses -I"." -fPIC -D_REENTRANT -c StructTest.c -o StructTest.o 853s cc -O2 -fno-omit-frame-pointer -fno-strict-aliasing -W -Wall -Wno-unused -Wno-unused-parameter -Wno-parentheses -I"." -fPIC -D_REENTRANT -c UnionTest.c -o UnionTest.o 853s cc -O2 -fno-omit-frame-pointer -fno-strict-aliasing -W -Wall -Wno-unused -Wno-unused-parameter -Wno-parentheses -I"." -fPIC -D_REENTRANT -c VariadicTest.c -o VariadicTest.o 853s cc -o libtest.so -shared -Wl,-soname,libtest.so ./Benchmark.o ./BitmaskTest.o ./BoolTest.o ./BufferTest.o ./ClosureTest.o ./EnumTest.o ./FunctionTest.o ./GlobalVariable.o ./LastErrorTest.o ./NumberTest.o ./PipeHelperPosix.o ./PipeHelperWindows.o ./PointerTest.o ./ReferenceTest.o ./StringTest.o ./StructTest.o ./UnionTest.o ./VariadicTest.o -lm 860s Run options: exclude {:broken=>true} 866s ..*..................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................*.............................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................. 866s 866s Pending: (Failures listed here are expected and do not affect your suite's status) 866s 866s 1) async callback sets the name of the thread that runs the callback 866s # not yet supported on JRuby 866s # ./spec/ffi/async_callback_spec.rb:43 866s 866s 2) FFI::Function when called with a block creates a thread for dispatching callbacks and sets its name 866s # this is MRI-specific 866s # ./spec/ffi/function_spec.rb:25 866s 866s Finished in 5.98 seconds (files took 14.03 seconds to load) 866s 4932 examples, 0 failures, 2 pending 866s 867s autopkgtest [11:09:10]: test spec-ffi: -----------------------] 868s spec-ffi PASS 868s autopkgtest [11:09:11]: test spec-ffi: - - - - - - - - - - results - - - - - - - - - - 869s autopkgtest [11:09:12]: test spec-ji: preparing testbed 973s autopkgtest [11:10:56]: testbed dpkg architecture: arm64 973s autopkgtest [11:10:56]: testbed apt version: 2.7.12 973s autopkgtest [11:10:56]: @@@@@@@@@@@@@@@@@@@@ test bed setup 973s Get:1 http://ftpmaster.internal/ubuntu noble-proposed InRelease [117 kB] 974s Get:2 http://ftpmaster.internal/ubuntu noble-proposed/main Sources [496 kB] 974s Get:3 http://ftpmaster.internal/ubuntu noble-proposed/universe Sources [3766 kB] 974s Get:4 http://ftpmaster.internal/ubuntu noble-proposed/multiverse Sources [52.7 kB] 974s Get:5 http://ftpmaster.internal/ubuntu noble-proposed/restricted Sources [6540 B] 974s Get:6 http://ftpmaster.internal/ubuntu noble-proposed/main arm64 Packages [670 kB] 974s Get:7 http://ftpmaster.internal/ubuntu noble-proposed/main arm64 c-n-f Metadata [3144 B] 974s Get:8 http://ftpmaster.internal/ubuntu noble-proposed/restricted arm64 Packages [41.7 kB] 974s Get:9 http://ftpmaster.internal/ubuntu noble-proposed/restricted arm64 c-n-f Metadata [116 B] 974s Get:10 http://ftpmaster.internal/ubuntu noble-proposed/universe arm64 Packages [4234 kB] 974s Get:11 http://ftpmaster.internal/ubuntu noble-proposed/universe arm64 c-n-f Metadata [8528 B] 974s Get:12 http://ftpmaster.internal/ubuntu noble-proposed/multiverse arm64 Packages [56.7 kB] 974s Get:13 http://ftpmaster.internal/ubuntu noble-proposed/multiverse arm64 c-n-f Metadata [116 B] 976s Fetched 9452 kB in 2s (5664 kB/s) 976s Reading package lists... 979s Reading package lists... 979s Building dependency tree... 979s Reading state information... 979s Calculating upgrade... 980s 0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded. 980s Reading package lists... 980s Building dependency tree... 980s Reading state information... 981s 0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded. 981s Hit:1 http://ftpmaster.internal/ubuntu noble InRelease 981s Hit:2 http://ftpmaster.internal/ubuntu noble-updates InRelease 981s Hit:3 http://ftpmaster.internal/ubuntu noble-security InRelease 981s Hit:4 http://ftpmaster.internal/ubuntu noble-proposed InRelease 982s Reading package lists... 983s Reading package lists... 983s Building dependency tree... 983s Reading state information... 983s Calculating upgrade... 984s 0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded. 984s Reading package lists... 984s Building dependency tree... 984s Reading state information... 984s 0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded. 990s Reading package lists... 991s Building dependency tree... 991s Reading state information... 991s Starting pkgProblemResolver with broken count: 0 991s Starting 2 pkgProblemResolver with broken count: 0 991s Done 992s The following additional packages will be installed: 992s ant ca-certificates-java default-jdk-headless default-jre-headless 992s fontconfig-config fonts-dejavu-core fonts-dejavu-mono java-common jruby 992s junit4 libasm-java libasound2 libasound2-data libavahi-client3 992s libavahi-common-data libavahi-common3 libbackport9-java libcups2 992s libdirgra-java libfixposix4t64 libfontconfig1 libgmp-dev libgmpxx4ldbl 992s libgraphite2-3 libhamcrest-java libharfbuzz0b libhawtjni-runtime-java 992s libheadius-options-java libinvokebinder-java libjakarta-annotation-api-java 992s libjansi-native-java libjansi1-java libjarjar-java libjcodings-java 992s libjffi-java libjffi-jni libjitescript-java libjline2-java 992s libjnr-constants-java libjnr-enxio-java libjnr-ffi-java libjnr-netdb-java 992s libjnr-posix-java libjnr-unixsocket-java libjnr-x86asm-java 992s libjoda-time-java libjpeg-turbo8 libjpeg8 libjruby-joni-java libjzlib-java 992s liblcms2-2 libpcsclite1 libruby libruby3.1 libruby3.2 992s libsnakeyaml-engine-java openjdk-21-jdk-headless openjdk-21-jre-headless 992s rake ruby ruby-all-dev ruby-diff-lcs ruby-net-telnet ruby-rspec 992s ruby-rspec-core ruby-rspec-expectations ruby-rspec-mocks ruby-rspec-support 992s ruby-rubygems ruby-sdbm ruby-webrick ruby-xmlrpc ruby3.1 ruby3.1-dev ruby3.2 992s ruby3.2-dev rubygems-integration zip 992s Suggested packages: 992s ant-doc default-jre libasound2-plugins alsa-utils cups-common gmp-doc 992s libgmp10-doc libmpfr-dev libheadius-options-java-doc 992s libinvokebinder-java-doc libjnr-ffi-java-doc libjnr-netdb-java-doc 992s libjnr-posix-java-doc libjoda-convert-java liblcms2-utils pcscd 992s openjdk-21-demo openjdk-21-source libnss-mdns fonts-dejavu-extra 992s fonts-ipafont-gothic fonts-ipafont-mincho fonts-wqy-microhei 992s | fonts-wqy-zenhei fonts-indic ri ruby-dev bundler 992s Recommended packages: 992s ant-optional fonts-lato alsa-ucm-conf alsa-topology-conf libjs-jquery 992s ruby3.1-doc ruby3.2-doc unzip 992s The following NEW packages will be installed: 992s ant autopkgtest-satdep ca-certificates-java default-jdk-headless 992s default-jre-headless fontconfig-config fonts-dejavu-core fonts-dejavu-mono 992s java-common jruby junit4 libasm-java libasound2 libasound2-data 992s libavahi-client3 libavahi-common-data libavahi-common3 libbackport9-java 992s libcups2 libdirgra-java libfixposix4t64 libfontconfig1 libgmp-dev 992s libgmpxx4ldbl libgraphite2-3 libhamcrest-java libharfbuzz0b 992s libhawtjni-runtime-java libheadius-options-java libinvokebinder-java 992s libjakarta-annotation-api-java libjansi-native-java libjansi1-java 992s libjarjar-java libjcodings-java libjffi-java libjffi-jni libjitescript-java 992s libjline2-java libjnr-constants-java libjnr-enxio-java libjnr-ffi-java 992s libjnr-netdb-java libjnr-posix-java libjnr-unixsocket-java 992s libjnr-x86asm-java libjoda-time-java libjpeg-turbo8 libjpeg8 992s libjruby-joni-java libjzlib-java liblcms2-2 libpcsclite1 libruby libruby3.1 992s libruby3.2 libsnakeyaml-engine-java openjdk-21-jdk-headless 992s openjdk-21-jre-headless rake ruby ruby-all-dev ruby-diff-lcs ruby-net-telnet 992s ruby-rspec ruby-rspec-core ruby-rspec-expectations ruby-rspec-mocks 992s ruby-rspec-support ruby-rubygems ruby-sdbm ruby-webrick ruby-xmlrpc ruby3.1 992s ruby3.1-dev ruby3.2 ruby3.2-dev rubygems-integration zip 992s 0 upgraded, 79 newly installed, 0 to remove and 0 not upgraded. 992s Need to get 186 MB/186 MB of archives. 992s After this operation, 441 MB of additional disk space will be used. 992s Get:1 /tmp/autopkgtest.nFBjtB/7-autopkgtest-satdep.deb autopkgtest-satdep arm64 0 [812 B] 992s Get:2 http://ftpmaster.internal/ubuntu noble/main arm64 ca-certificates-java all 20240118 [11.6 kB] 992s Get:3 http://ftpmaster.internal/ubuntu noble/main arm64 java-common all 0.75+exp1 [6798 B] 992s Get:4 http://ftpmaster.internal/ubuntu noble/main arm64 libavahi-common-data arm64 0.8-13ubuntu2 [29.5 kB] 992s Get:5 http://ftpmaster.internal/ubuntu noble/main arm64 libavahi-common3 arm64 0.8-13ubuntu2 [23.2 kB] 992s Get:6 http://ftpmaster.internal/ubuntu noble/main arm64 libavahi-client3 arm64 0.8-13ubuntu2 [27.3 kB] 992s Get:7 http://ftpmaster.internal/ubuntu noble/main arm64 libcups2 arm64 2.4.6-0ubuntu3 [270 kB] 992s Get:8 http://ftpmaster.internal/ubuntu noble/main arm64 liblcms2-2 arm64 2.14-2 [159 kB] 992s Get:9 http://ftpmaster.internal/ubuntu noble/main arm64 libjpeg-turbo8 arm64 2.1.5-2ubuntu1 [160 kB] 992s Get:10 http://ftpmaster.internal/ubuntu noble/main arm64 libjpeg8 arm64 8c-2ubuntu11 [2148 B] 992s Get:11 http://ftpmaster.internal/ubuntu noble/main arm64 fonts-dejavu-mono all 2.37-8 [502 kB] 992s Get:12 http://ftpmaster.internal/ubuntu noble/main arm64 fonts-dejavu-core all 2.37-8 [835 kB] 992s Get:13 http://ftpmaster.internal/ubuntu noble/main arm64 fontconfig-config arm64 2.15.0-1ubuntu1 [37.0 kB] 992s Get:14 http://ftpmaster.internal/ubuntu noble/main arm64 libfontconfig1 arm64 2.15.0-1ubuntu1 [142 kB] 992s Get:15 http://ftpmaster.internal/ubuntu noble/main arm64 libasound2-data all 1.2.10-3build1 [20.7 kB] 992s Get:16 http://ftpmaster.internal/ubuntu noble/main arm64 libasound2 arm64 1.2.10-3build1 [386 kB] 992s Get:17 http://ftpmaster.internal/ubuntu noble/main arm64 libgraphite2-3 arm64 1.3.14-2 [81.5 kB] 992s Get:18 http://ftpmaster.internal/ubuntu noble/main arm64 libharfbuzz0b arm64 8.3.0-2 [463 kB] 992s Get:19 http://ftpmaster.internal/ubuntu noble/main arm64 libpcsclite1 arm64 2.0.0-1 [21.2 kB] 992s Get:20 http://ftpmaster.internal/ubuntu noble/main arm64 openjdk-21-jre-headless arm64 21.0.2+13-2 [45.8 MB] 994s Get:21 http://ftpmaster.internal/ubuntu noble/main arm64 default-jre-headless arm64 2:1.21-75+exp1 [3096 B] 994s Get:22 http://ftpmaster.internal/ubuntu noble/universe arm64 ant all 1.10.14-1 [2147 kB] 994s Get:23 http://ftpmaster.internal/ubuntu noble/main arm64 openjdk-21-jdk-headless arm64 21.0.2+13-2 [81.6 MB] 997s Get:24 http://ftpmaster.internal/ubuntu noble/main arm64 default-jdk-headless arm64 2:1.21-75+exp1 [960 B] 997s Get:25 http://ftpmaster.internal/ubuntu noble/universe arm64 libasm-java all 9.6~us1-0ubuntu1 [386 kB] 997s Get:26 http://ftpmaster.internal/ubuntu noble/universe arm64 libbackport9-java all 1.10-2 [13.2 kB] 997s Get:27 http://ftpmaster.internal/ubuntu noble/universe arm64 libdirgra-java all 0.4-2 [21.6 kB] 997s Get:28 http://ftpmaster.internal/ubuntu noble/universe arm64 libfixposix4t64 arm64 1:0.5.1-1+nmu1.1 [16.9 kB] 997s Get:29 http://ftpmaster.internal/ubuntu noble/universe arm64 libheadius-options-java all 1.7-1 [18.2 kB] 997s Get:30 http://ftpmaster.internal/ubuntu noble/universe arm64 libinvokebinder-java all 1.13-1 [51.7 kB] 997s Get:31 http://ftpmaster.internal/ubuntu noble/universe arm64 libhawtjni-runtime-java all 1.18-1 [28.9 kB] 997s Get:32 http://ftpmaster.internal/ubuntu noble/universe arm64 libjansi-native-java all 1.8-2 [24.1 kB] 997s Get:33 http://ftpmaster.internal/ubuntu noble/universe arm64 libjansi1-java all 1.18-3ubuntu1 [56.0 kB] 997s Get:34 http://ftpmaster.internal/ubuntu noble/universe arm64 libjcodings-java all 1.0.58-1 [1474 kB] 997s Get:35 http://ftpmaster.internal/ubuntu noble/universe arm64 libjffi-jni arm64 1.3.13+ds-1 [29.8 kB] 997s Get:36 http://ftpmaster.internal/ubuntu noble/universe arm64 libjffi-java all 1.3.13+ds-1 [112 kB] 997s Get:37 http://ftpmaster.internal/ubuntu noble/universe arm64 libjitescript-java all 0.4.3-1 [24.4 kB] 997s Get:38 http://ftpmaster.internal/ubuntu noble/universe arm64 libjline2-java all 2.14.6-5 [150 kB] 997s Get:39 http://ftpmaster.internal/ubuntu noble/universe arm64 libjnr-constants-java all 0.10.4-2 [1397 kB] 997s Get:40 http://ftpmaster.internal/ubuntu noble/universe arm64 libjnr-x86asm-java all 1.0.2-5.1 [207 kB] 997s Get:41 http://ftpmaster.internal/ubuntu noble/universe arm64 libjnr-ffi-java all 2.2.15-2 [627 kB] 997s Get:42 http://ftpmaster.internal/ubuntu noble/universe arm64 libjnr-enxio-java all 0.32.16-1 [33.7 kB] 997s Get:43 http://ftpmaster.internal/ubuntu noble/universe arm64 libjnr-netdb-java all 1.1.6-1.1 [58.8 kB] 997s Get:44 http://ftpmaster.internal/ubuntu noble/universe arm64 libjnr-posix-java all 3.1.18-1 [267 kB] 997s Get:45 http://ftpmaster.internal/ubuntu noble/universe arm64 libjnr-unixsocket-java all 0.38.21-2 [46.9 kB] 997s Get:46 http://ftpmaster.internal/ubuntu noble/universe arm64 libjoda-time-java all 2.10.14-1 [535 kB] 997s Get:47 http://ftpmaster.internal/ubuntu noble/universe arm64 libjruby-joni-java all 2.2.1-1 [222 kB] 997s Get:48 http://ftpmaster.internal/ubuntu noble/universe arm64 libjzlib-java all 1.1.3-3 [76.8 kB] 997s Get:49 http://ftpmaster.internal/ubuntu noble/universe arm64 libsnakeyaml-engine-java all 2.7+ds-3 [258 kB] 997s Get:50 http://ftpmaster.internal/ubuntu noble-proposed/universe arm64 jruby all 9.4.6.0+ds-1ubuntu3 [33.3 MB] 999s Get:51 http://ftpmaster.internal/ubuntu noble/universe arm64 libhamcrest-java all 2.2-2 [117 kB] 999s Get:52 http://ftpmaster.internal/ubuntu noble/universe arm64 junit4 all 4.13.2-4 [347 kB] 999s Get:53 http://ftpmaster.internal/ubuntu noble/main arm64 libgmpxx4ldbl arm64 2:6.3.0+dfsg-2ubuntu4 [9950 B] 999s Get:54 http://ftpmaster.internal/ubuntu noble/main arm64 libgmp-dev arm64 2:6.3.0+dfsg-2ubuntu4 [330 kB] 999s Get:55 http://ftpmaster.internal/ubuntu noble/universe arm64 libjakarta-annotation-api-java all 2.1.1-1 [30.1 kB] 999s Get:56 http://ftpmaster.internal/ubuntu noble/universe arm64 libjarjar-java all 1.4+svn142-12 [201 kB] 999s Get:57 http://ftpmaster.internal/ubuntu noble/main arm64 rubygems-integration all 1.18 [5336 B] 999s Get:58 http://ftpmaster.internal/ubuntu noble/main arm64 ruby3.1 arm64 3.1.2-7ubuntu4 [49.0 kB] 999s Get:59 http://ftpmaster.internal/ubuntu noble/main arm64 ruby-rubygems all 3.4.20-1 [238 kB] 999s Get:60 http://ftpmaster.internal/ubuntu noble/main arm64 ruby arm64 1:3.1+1 [3464 B] 999s Get:61 http://ftpmaster.internal/ubuntu noble/main arm64 rake all 13.0.6-3 [61.6 kB] 999s Get:62 http://ftpmaster.internal/ubuntu noble/main arm64 ruby-net-telnet all 0.2.0-1 [13.3 kB] 999s Get:63 http://ftpmaster.internal/ubuntu noble/main arm64 ruby-webrick all 1.8.1-1 [52.3 kB] 999s Get:64 http://ftpmaster.internal/ubuntu noble/main arm64 ruby-xmlrpc all 0.3.2-2 [24.8 kB] 999s Get:65 http://ftpmaster.internal/ubuntu noble/main arm64 libruby3.2 arm64 3.2.3-1 [5345 kB] 999s Get:66 http://ftpmaster.internal/ubuntu noble/main arm64 ruby-sdbm arm64 1.0.0-5build3 [17.9 kB] 999s Get:67 http://ftpmaster.internal/ubuntu noble/main arm64 libruby3.1 arm64 3.1.2-7ubuntu4 [5115 kB] 999s Get:68 http://ftpmaster.internal/ubuntu noble/main arm64 libruby arm64 1:3.1+1 [4640 B] 999s Get:69 http://ftpmaster.internal/ubuntu noble/main arm64 ruby3.1-dev arm64 3.1.2-7ubuntu4 [398 kB] 999s Get:70 http://ftpmaster.internal/ubuntu noble/main arm64 ruby3.2 arm64 3.2.3-1 [50.8 kB] 999s Get:71 http://ftpmaster.internal/ubuntu noble/main arm64 ruby3.2-dev arm64 3.2.3-1 [403 kB] 999s Get:72 http://ftpmaster.internal/ubuntu noble/main arm64 ruby-all-dev arm64 1:3.1+1 [5726 B] 999s Get:73 http://ftpmaster.internal/ubuntu noble/universe arm64 ruby-diff-lcs all 1.5.0-1 [23.9 kB] 999s Get:74 http://ftpmaster.internal/ubuntu noble/universe arm64 ruby-rspec-support all 3.12.0c0e1m1s0-1 [28.8 kB] 999s Get:75 http://ftpmaster.internal/ubuntu noble/universe arm64 ruby-rspec-core all 3.12.0c0e1m1s0-1 [163 kB] 999s Get:76 http://ftpmaster.internal/ubuntu noble/universe arm64 ruby-rspec-expectations all 3.12.0c0e1m1s0-1 [89.2 kB] 999s Get:77 http://ftpmaster.internal/ubuntu noble/universe arm64 ruby-rspec-mocks all 3.12.0c0e1m1s0-1 [79.4 kB] 999s Get:78 http://ftpmaster.internal/ubuntu noble/universe arm64 ruby-rspec all 3.12.0c0e1m1s0-1 [3506 B] 999s Get:79 http://ftpmaster.internal/ubuntu noble/main arm64 zip arm64 3.0-13 [172 kB] 1000s Fetched 186 MB in 8s (23.9 MB/s) 1000s Selecting previously unselected package ca-certificates-java. 1000s (Reading database ... (Reading database ... 5% (Reading database ... 10% (Reading database ... 15% (Reading database ... 20% (Reading database ... 25% (Reading database ... 30% (Reading database ... 35% (Reading database ... 40% (Reading database ... 45% (Reading database ... 50% (Reading database ... 55% (Reading database ... 60% (Reading database ... 65% (Reading database ... 70% (Reading database ... 75% (Reading database ... 80% (Reading database ... 85% (Reading database ... 90% (Reading database ... 95% (Reading database ... 100% (Reading database ... 74758 files and directories currently installed.) 1000s Preparing to unpack .../00-ca-certificates-java_20240118_all.deb ... 1000s Unpacking ca-certificates-java (20240118) ... 1001s Selecting previously unselected package java-common. 1001s Preparing to unpack .../01-java-common_0.75+exp1_all.deb ... 1001s Unpacking java-common (0.75+exp1) ... 1001s Selecting previously unselected package libavahi-common-data:arm64. 1001s Preparing to unpack .../02-libavahi-common-data_0.8-13ubuntu2_arm64.deb ... 1001s Unpacking libavahi-common-data:arm64 (0.8-13ubuntu2) ... 1001s Selecting previously unselected package libavahi-common3:arm64. 1001s Preparing to unpack .../03-libavahi-common3_0.8-13ubuntu2_arm64.deb ... 1001s Unpacking libavahi-common3:arm64 (0.8-13ubuntu2) ... 1001s Selecting previously unselected package libavahi-client3:arm64. 1001s Preparing to unpack .../04-libavahi-client3_0.8-13ubuntu2_arm64.deb ... 1001s Unpacking libavahi-client3:arm64 (0.8-13ubuntu2) ... 1001s Selecting previously unselected package libcups2:arm64. 1001s Preparing to unpack .../05-libcups2_2.4.6-0ubuntu3_arm64.deb ... 1001s Unpacking libcups2:arm64 (2.4.6-0ubuntu3) ... 1001s Selecting previously unselected package liblcms2-2:arm64. 1001s Preparing to unpack .../06-liblcms2-2_2.14-2_arm64.deb ... 1001s Unpacking liblcms2-2:arm64 (2.14-2) ... 1001s Selecting previously unselected package libjpeg-turbo8:arm64. 1001s Preparing to unpack .../07-libjpeg-turbo8_2.1.5-2ubuntu1_arm64.deb ... 1001s Unpacking libjpeg-turbo8:arm64 (2.1.5-2ubuntu1) ... 1001s Selecting previously unselected package libjpeg8:arm64. 1001s Preparing to unpack .../08-libjpeg8_8c-2ubuntu11_arm64.deb ... 1001s Unpacking libjpeg8:arm64 (8c-2ubuntu11) ... 1001s Selecting previously unselected package fonts-dejavu-mono. 1001s Preparing to unpack .../09-fonts-dejavu-mono_2.37-8_all.deb ... 1001s Unpacking fonts-dejavu-mono (2.37-8) ... 1001s Selecting previously unselected package fonts-dejavu-core. 1001s Preparing to unpack .../10-fonts-dejavu-core_2.37-8_all.deb ... 1001s Unpacking fonts-dejavu-core (2.37-8) ... 1001s Selecting previously unselected package fontconfig-config. 1001s Preparing to unpack .../11-fontconfig-config_2.15.0-1ubuntu1_arm64.deb ... 1001s Unpacking fontconfig-config (2.15.0-1ubuntu1) ... 1001s Selecting previously unselected package libfontconfig1:arm64. 1001s Preparing to unpack .../12-libfontconfig1_2.15.0-1ubuntu1_arm64.deb ... 1001s Unpacking libfontconfig1:arm64 (2.15.0-1ubuntu1) ... 1001s Selecting previously unselected package libasound2-data. 1001s Preparing to unpack .../13-libasound2-data_1.2.10-3build1_all.deb ... 1001s Unpacking libasound2-data (1.2.10-3build1) ... 1001s Selecting previously unselected package libasound2:arm64. 1001s Preparing to unpack .../14-libasound2_1.2.10-3build1_arm64.deb ... 1001s Unpacking libasound2:arm64 (1.2.10-3build1) ... 1001s Selecting previously unselected package libgraphite2-3:arm64. 1001s Preparing to unpack .../15-libgraphite2-3_1.3.14-2_arm64.deb ... 1001s Unpacking libgraphite2-3:arm64 (1.3.14-2) ... 1001s Selecting previously unselected package libharfbuzz0b:arm64. 1001s Preparing to unpack .../16-libharfbuzz0b_8.3.0-2_arm64.deb ... 1001s Unpacking libharfbuzz0b:arm64 (8.3.0-2) ... 1001s Selecting previously unselected package libpcsclite1:arm64. 1001s Preparing to unpack .../17-libpcsclite1_2.0.0-1_arm64.deb ... 1001s Unpacking libpcsclite1:arm64 (2.0.0-1) ... 1001s Selecting previously unselected package openjdk-21-jre-headless:arm64. 1001s Preparing to unpack .../18-openjdk-21-jre-headless_21.0.2+13-2_arm64.deb ... 1001s Unpacking openjdk-21-jre-headless:arm64 (21.0.2+13-2) ... 1002s Selecting previously unselected package default-jre-headless. 1002s Preparing to unpack .../19-default-jre-headless_2%3a1.21-75+exp1_arm64.deb ... 1002s Unpacking default-jre-headless (2:1.21-75+exp1) ... 1002s Selecting previously unselected package ant. 1003s Preparing to unpack .../20-ant_1.10.14-1_all.deb ... 1003s Unpacking ant (1.10.14-1) ... 1003s Selecting previously unselected package openjdk-21-jdk-headless:arm64. 1003s Preparing to unpack .../21-openjdk-21-jdk-headless_21.0.2+13-2_arm64.deb ... 1003s Unpacking openjdk-21-jdk-headless:arm64 (21.0.2+13-2) ... 1003s Selecting previously unselected package default-jdk-headless. 1003s Preparing to unpack .../22-default-jdk-headless_2%3a1.21-75+exp1_arm64.deb ... 1003s Unpacking default-jdk-headless (2:1.21-75+exp1) ... 1003s Selecting previously unselected package libasm-java. 1003s Preparing to unpack .../23-libasm-java_9.6~us1-0ubuntu1_all.deb ... 1003s Unpacking libasm-java (9.6~us1-0ubuntu1) ... 1003s Selecting previously unselected package libbackport9-java. 1003s Preparing to unpack .../24-libbackport9-java_1.10-2_all.deb ... 1003s Unpacking libbackport9-java (1.10-2) ... 1003s Selecting previously unselected package libdirgra-java. 1003s Preparing to unpack .../25-libdirgra-java_0.4-2_all.deb ... 1003s Unpacking libdirgra-java (0.4-2) ... 1003s Selecting previously unselected package libfixposix4t64:arm64. 1003s Preparing to unpack .../26-libfixposix4t64_1%3a0.5.1-1+nmu1.1_arm64.deb ... 1003s Unpacking libfixposix4t64:arm64 (1:0.5.1-1+nmu1.1) ... 1003s Selecting previously unselected package libheadius-options-java. 1003s Preparing to unpack .../27-libheadius-options-java_1.7-1_all.deb ... 1003s Unpacking libheadius-options-java (1.7-1) ... 1003s Selecting previously unselected package libinvokebinder-java. 1003s Preparing to unpack .../28-libinvokebinder-java_1.13-1_all.deb ... 1003s Unpacking libinvokebinder-java (1.13-1) ... 1003s Selecting previously unselected package libhawtjni-runtime-java. 1003s Preparing to unpack .../29-libhawtjni-runtime-java_1.18-1_all.deb ... 1003s Unpacking libhawtjni-runtime-java (1.18-1) ... 1003s Selecting previously unselected package libjansi-native-java. 1003s Preparing to unpack .../30-libjansi-native-java_1.8-2_all.deb ... 1003s Unpacking libjansi-native-java (1.8-2) ... 1003s Selecting previously unselected package libjansi1-java. 1003s Preparing to unpack .../31-libjansi1-java_1.18-3ubuntu1_all.deb ... 1003s Unpacking libjansi1-java (1.18-3ubuntu1) ... 1003s Selecting previously unselected package libjcodings-java. 1003s Preparing to unpack .../32-libjcodings-java_1.0.58-1_all.deb ... 1003s Unpacking libjcodings-java (1.0.58-1) ... 1003s Selecting previously unselected package libjffi-jni:arm64. 1003s Preparing to unpack .../33-libjffi-jni_1.3.13+ds-1_arm64.deb ... 1003s Unpacking libjffi-jni:arm64 (1.3.13+ds-1) ... 1003s Selecting previously unselected package libjffi-java. 1003s Preparing to unpack .../34-libjffi-java_1.3.13+ds-1_all.deb ... 1003s Unpacking libjffi-java (1.3.13+ds-1) ... 1003s Selecting previously unselected package libjitescript-java. 1003s Preparing to unpack .../35-libjitescript-java_0.4.3-1_all.deb ... 1003s Unpacking libjitescript-java (0.4.3-1) ... 1003s Selecting previously unselected package libjline2-java. 1003s Preparing to unpack .../36-libjline2-java_2.14.6-5_all.deb ... 1003s Unpacking libjline2-java (2.14.6-5) ... 1003s Selecting previously unselected package libjnr-constants-java. 1003s Preparing to unpack .../37-libjnr-constants-java_0.10.4-2_all.deb ... 1003s Unpacking libjnr-constants-java (0.10.4-2) ... 1003s Selecting previously unselected package libjnr-x86asm-java. 1003s Preparing to unpack .../38-libjnr-x86asm-java_1.0.2-5.1_all.deb ... 1003s Unpacking libjnr-x86asm-java (1.0.2-5.1) ... 1003s Selecting previously unselected package libjnr-ffi-java. 1003s Preparing to unpack .../39-libjnr-ffi-java_2.2.15-2_all.deb ... 1003s Unpacking libjnr-ffi-java (2.2.15-2) ... 1004s Selecting previously unselected package libjnr-enxio-java. 1004s Preparing to unpack .../40-libjnr-enxio-java_0.32.16-1_all.deb ... 1004s Unpacking libjnr-enxio-java (0.32.16-1) ... 1004s Selecting previously unselected package libjnr-netdb-java. 1004s Preparing to unpack .../41-libjnr-netdb-java_1.1.6-1.1_all.deb ... 1004s Unpacking libjnr-netdb-java (1.1.6-1.1) ... 1004s Selecting previously unselected package libjnr-posix-java. 1004s Preparing to unpack .../42-libjnr-posix-java_3.1.18-1_all.deb ... 1004s Unpacking libjnr-posix-java (3.1.18-1) ... 1004s Selecting previously unselected package libjnr-unixsocket-java. 1004s Preparing to unpack .../43-libjnr-unixsocket-java_0.38.21-2_all.deb ... 1004s Unpacking libjnr-unixsocket-java (0.38.21-2) ... 1004s Selecting previously unselected package libjoda-time-java. 1004s Preparing to unpack .../44-libjoda-time-java_2.10.14-1_all.deb ... 1004s Unpacking libjoda-time-java (2.10.14-1) ... 1004s Selecting previously unselected package libjruby-joni-java. 1004s Preparing to unpack .../45-libjruby-joni-java_2.2.1-1_all.deb ... 1004s Unpacking libjruby-joni-java (2.2.1-1) ... 1004s Selecting previously unselected package libjzlib-java. 1004s Preparing to unpack .../46-libjzlib-java_1.1.3-3_all.deb ... 1004s Unpacking libjzlib-java (1.1.3-3) ... 1004s Selecting previously unselected package libsnakeyaml-engine-java. 1004s Preparing to unpack .../47-libsnakeyaml-engine-java_2.7+ds-3_all.deb ... 1004s Unpacking libsnakeyaml-engine-java (2.7+ds-3) ... 1004s Selecting previously unselected package jruby. 1004s Preparing to unpack .../48-jruby_9.4.6.0+ds-1ubuntu3_all.deb ... 1004s Unpacking jruby (9.4.6.0+ds-1ubuntu3) ... 1004s Selecting previously unselected package libhamcrest-java. 1004s Preparing to unpack .../49-libhamcrest-java_2.2-2_all.deb ... 1004s Unpacking libhamcrest-java (2.2-2) ... 1004s Selecting previously unselected package junit4. 1004s Preparing to unpack .../50-junit4_4.13.2-4_all.deb ... 1004s Unpacking junit4 (4.13.2-4) ... 1004s Selecting previously unselected package libgmpxx4ldbl:arm64. 1004s Preparing to unpack .../51-libgmpxx4ldbl_2%3a6.3.0+dfsg-2ubuntu4_arm64.deb ... 1004s Unpacking libgmpxx4ldbl:arm64 (2:6.3.0+dfsg-2ubuntu4) ... 1004s Selecting previously unselected package libgmp-dev:arm64. 1004s Preparing to unpack .../52-libgmp-dev_2%3a6.3.0+dfsg-2ubuntu4_arm64.deb ... 1004s Unpacking libgmp-dev:arm64 (2:6.3.0+dfsg-2ubuntu4) ... 1004s Selecting previously unselected package libjakarta-annotation-api-java. 1004s Preparing to unpack .../53-libjakarta-annotation-api-java_2.1.1-1_all.deb ... 1004s Unpacking libjakarta-annotation-api-java (2.1.1-1) ... 1004s Selecting previously unselected package libjarjar-java. 1004s Preparing to unpack .../54-libjarjar-java_1.4+svn142-12_all.deb ... 1004s Unpacking libjarjar-java (1.4+svn142-12) ... 1004s Selecting previously unselected package rubygems-integration. 1004s Preparing to unpack .../55-rubygems-integration_1.18_all.deb ... 1004s Unpacking rubygems-integration (1.18) ... 1004s Selecting previously unselected package ruby3.1. 1004s Preparing to unpack .../56-ruby3.1_3.1.2-7ubuntu4_arm64.deb ... 1004s Unpacking ruby3.1 (3.1.2-7ubuntu4) ... 1004s Selecting previously unselected package ruby-rubygems. 1004s Preparing to unpack .../57-ruby-rubygems_3.4.20-1_all.deb ... 1004s Unpacking ruby-rubygems (3.4.20-1) ... 1004s Selecting previously unselected package ruby. 1004s Preparing to unpack .../58-ruby_1%3a3.1+1_arm64.deb ... 1004s Unpacking ruby (1:3.1+1) ... 1004s Selecting previously unselected package rake. 1004s Preparing to unpack .../59-rake_13.0.6-3_all.deb ... 1004s Unpacking rake (13.0.6-3) ... 1004s Selecting previously unselected package ruby-net-telnet. 1004s Preparing to unpack .../60-ruby-net-telnet_0.2.0-1_all.deb ... 1004s Unpacking ruby-net-telnet (0.2.0-1) ... 1004s Selecting previously unselected package ruby-webrick. 1004s Preparing to unpack .../61-ruby-webrick_1.8.1-1_all.deb ... 1004s Unpacking ruby-webrick (1.8.1-1) ... 1004s Selecting previously unselected package ruby-xmlrpc. 1005s Preparing to unpack .../62-ruby-xmlrpc_0.3.2-2_all.deb ... 1005s Unpacking ruby-xmlrpc (0.3.2-2) ... 1005s Selecting previously unselected package libruby3.2:arm64. 1005s Preparing to unpack .../63-libruby3.2_3.2.3-1_arm64.deb ... 1005s Unpacking libruby3.2:arm64 (3.2.3-1) ... 1005s Selecting previously unselected package ruby-sdbm:arm64. 1005s Preparing to unpack .../64-ruby-sdbm_1.0.0-5build3_arm64.deb ... 1005s Unpacking ruby-sdbm:arm64 (1.0.0-5build3) ... 1005s Selecting previously unselected package libruby3.1:arm64. 1005s Preparing to unpack .../65-libruby3.1_3.1.2-7ubuntu4_arm64.deb ... 1005s Unpacking libruby3.1:arm64 (3.1.2-7ubuntu4) ... 1005s Selecting previously unselected package libruby:arm64. 1005s Preparing to unpack .../66-libruby_1%3a3.1+1_arm64.deb ... 1005s Unpacking libruby:arm64 (1:3.1+1) ... 1005s Selecting previously unselected package ruby3.1-dev:arm64. 1005s Preparing to unpack .../67-ruby3.1-dev_3.1.2-7ubuntu4_arm64.deb ... 1005s Unpacking ruby3.1-dev:arm64 (3.1.2-7ubuntu4) ... 1005s Selecting previously unselected package ruby3.2. 1005s Preparing to unpack .../68-ruby3.2_3.2.3-1_arm64.deb ... 1005s Unpacking ruby3.2 (3.2.3-1) ... 1005s Selecting previously unselected package ruby3.2-dev:arm64. 1005s Preparing to unpack .../69-ruby3.2-dev_3.2.3-1_arm64.deb ... 1005s Unpacking ruby3.2-dev:arm64 (3.2.3-1) ... 1005s Selecting previously unselected package ruby-all-dev:arm64. 1005s Preparing to unpack .../70-ruby-all-dev_1%3a3.1+1_arm64.deb ... 1005s Unpacking ruby-all-dev:arm64 (1:3.1+1) ... 1005s Selecting previously unselected package ruby-diff-lcs. 1005s Preparing to unpack .../71-ruby-diff-lcs_1.5.0-1_all.deb ... 1005s Unpacking ruby-diff-lcs (1.5.0-1) ... 1005s Selecting previously unselected package ruby-rspec-support. 1006s Preparing to unpack .../72-ruby-rspec-support_3.12.0c0e1m1s0-1_all.deb ... 1006s Unpacking ruby-rspec-support (3.12.0c0e1m1s0-1) ... 1006s Selecting previously unselected package ruby-rspec-core. 1006s Preparing to unpack .../73-ruby-rspec-core_3.12.0c0e1m1s0-1_all.deb ... 1006s Unpacking ruby-rspec-core (3.12.0c0e1m1s0-1) ... 1006s Selecting previously unselected package ruby-rspec-expectations. 1006s Preparing to unpack .../74-ruby-rspec-expectations_3.12.0c0e1m1s0-1_all.deb ... 1006s Unpacking ruby-rspec-expectations (3.12.0c0e1m1s0-1) ... 1006s Selecting previously unselected package ruby-rspec-mocks. 1006s Preparing to unpack .../75-ruby-rspec-mocks_3.12.0c0e1m1s0-1_all.deb ... 1006s Unpacking ruby-rspec-mocks (3.12.0c0e1m1s0-1) ... 1006s Selecting previously unselected package ruby-rspec. 1006s Preparing to unpack .../76-ruby-rspec_3.12.0c0e1m1s0-1_all.deb ... 1006s Unpacking ruby-rspec (3.12.0c0e1m1s0-1) ... 1006s Selecting previously unselected package zip. 1006s Preparing to unpack .../77-zip_3.0-13_arm64.deb ... 1006s Unpacking zip (3.0-13) ... 1006s Selecting previously unselected package autopkgtest-satdep. 1006s Preparing to unpack .../78-7-autopkgtest-satdep.deb ... 1006s Unpacking autopkgtest-satdep (0) ... 1006s Setting up libjakarta-annotation-api-java (2.1.1-1) ... 1006s Setting up libgraphite2-3:arm64 (1.3.14-2) ... 1006s Setting up liblcms2-2:arm64 (2.14-2) ... 1006s Setting up libfixposix4t64:arm64 (1:0.5.1-1+nmu1.1) ... 1006s Setting up java-common (0.75+exp1) ... 1006s Setting up libasm-java (9.6~us1-0ubuntu1) ... 1006s Setting up rubygems-integration (1.18) ... 1006s Setting up libheadius-options-java (1.7-1) ... 1006s Setting up libjnr-x86asm-java (1.0.2-5.1) ... 1006s Setting up libjzlib-java (1.1.3-3) ... 1006s Setting up libbackport9-java (1.10-2) ... 1006s Setting up libasound2-data (1.2.10-3build1) ... 1006s Setting up libjitescript-java (0.4.3-1) ... 1006s Setting up zip (3.0-13) ... 1006s Setting up libsnakeyaml-engine-java (2.7+ds-3) ... 1006s Setting up libgmpxx4ldbl:arm64 (2:6.3.0+dfsg-2ubuntu4) ... 1006s Setting up libavahi-common-data:arm64 (0.8-13ubuntu2) ... 1006s Setting up ruby-net-telnet (0.2.0-1) ... 1006s Setting up fonts-dejavu-mono (2.37-8) ... 1006s Setting up fonts-dejavu-core (2.37-8) ... 1006s Setting up libpcsclite1:arm64 (2.0.0-1) ... 1006s Setting up libjpeg-turbo8:arm64 (2.1.5-2ubuntu1) ... 1006s Setting up libhamcrest-java (2.2-2) ... 1006s Setting up ruby-rspec-support (3.12.0c0e1m1s0-1) ... 1006s Setting up libjoda-time-java (2.10.14-1) ... 1006s Setting up libjcodings-java (1.0.58-1) ... 1006s Setting up ruby-webrick (1.8.1-1) ... 1006s Setting up libjarjar-java (1.4+svn142-12) ... 1006s Setting up libasound2:arm64 (1.2.10-3build1) ... 1006s Setting up libharfbuzz0b:arm64 (8.3.0-2) ... 1006s Setting up libinvokebinder-java (1.13-1) ... 1006s Setting up libjffi-jni:arm64 (1.3.13+ds-1) ... 1006s Setting up ca-certificates-java (20240118) ... 1006s No JRE found. Skipping Java certificates setup. 1006s Setting up ruby-xmlrpc (0.3.2-2) ... 1006s Setting up libhawtjni-runtime-java (1.18-1) ... 1006s Setting up libdirgra-java (0.4-2) ... 1006s Setting up libjnr-constants-java (0.10.4-2) ... 1006s Setting up libjpeg8:arm64 (8c-2ubuntu11) ... 1006s Setting up libjffi-java (1.3.13+ds-1) ... 1006s Setting up libgmp-dev:arm64 (2:6.3.0+dfsg-2ubuntu4) ... 1006s Setting up libjruby-joni-java (2.2.1-1) ... 1006s Setting up fontconfig-config (2.15.0-1ubuntu1) ... 1006s Setting up libavahi-common3:arm64 (0.8-13ubuntu2) ... 1006s Setting up libjansi-native-java (1.8-2) ... 1006s Setting up libjansi1-java (1.18-3ubuntu1) ... 1006s Setting up libfontconfig1:arm64 (2.15.0-1ubuntu1) ... 1006s Setting up libjline2-java (2.14.6-5) ... 1006s Setting up libavahi-client3:arm64 (0.8-13ubuntu2) ... 1006s Setting up libjnr-ffi-java (2.2.15-2) ... 1006s Setting up libjnr-enxio-java (0.32.16-1) ... 1006s Setting up libcups2:arm64 (2.4.6-0ubuntu3) ... 1006s Setting up libjnr-netdb-java (1.1.6-1.1) ... 1006s Setting up libjnr-posix-java (3.1.18-1) ... 1006s Setting up openjdk-21-jre-headless:arm64 (21.0.2+13-2) ... 1006s update-alternatives: using /usr/lib/jvm/java-21-openjdk-arm64/bin/java to provide /usr/bin/java (java) in auto mode 1006s update-alternatives: using /usr/lib/jvm/java-21-openjdk-arm64/bin/jpackage to provide /usr/bin/jpackage (jpackage) in auto mode 1006s update-alternatives: using /usr/lib/jvm/java-21-openjdk-arm64/bin/keytool to provide /usr/bin/keytool (keytool) in auto mode 1006s update-alternatives: using /usr/lib/jvm/java-21-openjdk-arm64/bin/rmiregistry to provide /usr/bin/rmiregistry (rmiregistry) in auto mode 1006s update-alternatives: using /usr/lib/jvm/java-21-openjdk-arm64/lib/jexec to provide /usr/bin/jexec (jexec) in auto mode 1006s Setting up libjnr-unixsocket-java (0.38.21-2) ... 1006s Setting up rake (13.0.6-3) ... 1006s Setting up ruby3.1 (3.1.2-7ubuntu4) ... 1006s Setting up libruby:arm64 (1:3.1+1) ... 1006s Setting up libruby3.2:arm64 (3.2.3-1) ... 1006s Setting up ruby (1:3.1+1) ... 1006s Setting up ruby-rspec-core (3.12.0c0e1m1s0-1) ... 1006s Setting up ruby3.2 (3.2.3-1) ... 1006s Setting up ruby3.2-dev:arm64 (3.2.3-1) ... 1006s Setting up ruby-sdbm:arm64 (1.0.0-5build3) ... 1006s Setting up ruby-diff-lcs (1.5.0-1) ... 1006s Setting up libruby3.1:arm64 (3.1.2-7ubuntu4) ... 1006s Setting up ruby-rubygems (3.4.20-1) ... 1006s Setting up ruby-rspec-expectations (3.12.0c0e1m1s0-1) ... 1006s Setting up ruby-rspec-mocks (3.12.0c0e1m1s0-1) ... 1006s Setting up ruby3.1-dev:arm64 (3.1.2-7ubuntu4) ... 1006s Setting up ruby-rspec (3.12.0c0e1m1s0-1) ... 1006s Setting up ruby-all-dev:arm64 (1:3.1+1) ... 1006s Processing triggers for libc-bin (2.39-0ubuntu2) ... 1006s Processing triggers for man-db (2.12.0-3) ... 1007s Processing triggers for ca-certificates-java (20240118) ... 1008s Adding debian:ACCVRAIZ1.pem 1008s Adding debian:AC_RAIZ_FNMT-RCM.pem 1008s Adding debian:AC_RAIZ_FNMT-RCM_SERVIDORES_SEGUROS.pem 1008s Adding debian:ANF_Secure_Server_Root_CA.pem 1008s Adding debian:Actalis_Authentication_Root_CA.pem 1008s Adding debian:AffirmTrust_Commercial.pem 1008s Adding debian:AffirmTrust_Networking.pem 1008s Adding debian:AffirmTrust_Premium.pem 1008s Adding debian:AffirmTrust_Premium_ECC.pem 1008s Adding debian:Amazon_Root_CA_1.pem 1008s Adding debian:Amazon_Root_CA_2.pem 1008s Adding debian:Amazon_Root_CA_3.pem 1008s Adding debian:Amazon_Root_CA_4.pem 1008s Adding debian:Atos_TrustedRoot_2011.pem 1008s Adding debian:Atos_TrustedRoot_Root_CA_ECC_TLS_2021.pem 1008s Adding debian:Atos_TrustedRoot_Root_CA_RSA_TLS_2021.pem 1008s Adding debian:Autoridad_de_Certificacion_Firmaprofesional_CIF_A62634068.pem 1008s Adding debian:BJCA_Global_Root_CA1.pem 1008s Adding debian:BJCA_Global_Root_CA2.pem 1008s Adding debian:Baltimore_CyberTrust_Root.pem 1008s Adding debian:Buypass_Class_2_Root_CA.pem 1008s Adding debian:Buypass_Class_3_Root_CA.pem 1008s Adding debian:CA_Disig_Root_R2.pem 1008s Adding debian:CFCA_EV_ROOT.pem 1008s Adding debian:COMODO_Certification_Authority.pem 1008s Adding debian:COMODO_ECC_Certification_Authority.pem 1008s Adding debian:COMODO_RSA_Certification_Authority.pem 1008s Adding debian:Certainly_Root_E1.pem 1008s Adding debian:Certainly_Root_R1.pem 1008s Adding debian:Certigna.pem 1008s Adding debian:Certigna_Root_CA.pem 1008s Adding debian:Certum_EC-384_CA.pem 1008s Adding debian:Certum_Trusted_Network_CA.pem 1008s Adding debian:Certum_Trusted_Network_CA_2.pem 1008s Adding debian:Certum_Trusted_Root_CA.pem 1008s Adding debian:CommScope_Public_Trust_ECC_Root-01.pem 1008s Adding debian:CommScope_Public_Trust_ECC_Root-02.pem 1008s Adding debian:CommScope_Public_Trust_RSA_Root-01.pem 1008s Adding debian:CommScope_Public_Trust_RSA_Root-02.pem 1008s Adding debian:Comodo_AAA_Services_root.pem 1008s Adding debian:D-TRUST_BR_Root_CA_1_2020.pem 1008s Adding debian:D-TRUST_EV_Root_CA_1_2020.pem 1008s Adding debian:D-TRUST_Root_Class_3_CA_2_2009.pem 1008s Adding debian:D-TRUST_Root_Class_3_CA_2_EV_2009.pem 1008s Adding debian:DigiCert_Assured_ID_Root_CA.pem 1008s Adding debian:DigiCert_Assured_ID_Root_G2.pem 1008s Adding debian:DigiCert_Assured_ID_Root_G3.pem 1008s Adding debian:DigiCert_Global_Root_CA.pem 1008s Adding debian:DigiCert_Global_Root_G2.pem 1008s Adding debian:DigiCert_Global_Root_G3.pem 1008s Adding debian:DigiCert_High_Assurance_EV_Root_CA.pem 1008s Adding debian:DigiCert_TLS_ECC_P384_Root_G5.pem 1008s Adding debian:DigiCert_TLS_RSA4096_Root_G5.pem 1008s Adding debian:DigiCert_Trusted_Root_G4.pem 1008s Adding debian:Entrust.net_Premium_2048_Secure_Server_CA.pem 1008s Adding debian:Entrust_Root_Certification_Authority.pem 1008s Adding debian:Entrust_Root_Certification_Authority_-_EC1.pem 1008s Adding debian:Entrust_Root_Certification_Authority_-_G2.pem 1008s Adding debian:Entrust_Root_Certification_Authority_-_G4.pem 1008s Adding debian:GDCA_TrustAUTH_R5_ROOT.pem 1008s Adding debian:GLOBALTRUST_2020.pem 1008s Adding debian:GTS_Root_R1.pem 1008s Adding debian:GTS_Root_R2.pem 1008s Adding debian:GTS_Root_R3.pem 1008s Adding debian:GTS_Root_R4.pem 1008s Adding debian:GlobalSign_ECC_Root_CA_-_R4.pem 1008s Adding debian:GlobalSign_ECC_Root_CA_-_R5.pem 1008s Adding debian:GlobalSign_Root_CA.pem 1008s Adding debian:GlobalSign_Root_CA_-_R3.pem 1008s Adding debian:GlobalSign_Root_CA_-_R6.pem 1008s Adding debian:GlobalSign_Root_E46.pem 1008s Adding debian:GlobalSign_Root_R46.pem 1008s Adding debian:Go_Daddy_Class_2_CA.pem 1008s Adding debian:Go_Daddy_Root_Certificate_Authority_-_G2.pem 1008s Adding debian:HARICA_TLS_ECC_Root_CA_2021.pem 1008s Adding debian:HARICA_TLS_RSA_Root_CA_2021.pem 1008s Adding debian:Hellenic_Academic_and_Research_Institutions_ECC_RootCA_2015.pem 1008s Adding debian:Hellenic_Academic_and_Research_Institutions_RootCA_2015.pem 1008s Adding debian:HiPKI_Root_CA_-_G1.pem 1008s Adding debian:Hongkong_Post_Root_CA_3.pem 1008s Adding debian:ISRG_Root_X1.pem 1008s Adding debian:ISRG_Root_X2.pem 1008s Adding debian:IdenTrust_Commercial_Root_CA_1.pem 1008s Adding debian:IdenTrust_Public_Sector_Root_CA_1.pem 1008s Adding debian:Izenpe.com.pem 1008s Adding debian:Microsec_e-Szigno_Root_CA_2009.pem 1008s Adding debian:Microsoft_ECC_Root_Certificate_Authority_2017.pem 1008s Adding debian:Microsoft_RSA_Root_Certificate_Authority_2017.pem 1008s Adding debian:NAVER_Global_Root_Certification_Authority.pem 1008s Adding debian:NetLock_Arany_=Class_Gold=_Főtanúsítvány.pem 1008s Adding debian:OISTE_WISeKey_Global_Root_GB_CA.pem 1008s Adding debian:OISTE_WISeKey_Global_Root_GC_CA.pem 1008s Adding debian:QuoVadis_Root_CA_1_G3.pem 1008s Adding debian:QuoVadis_Root_CA_2.pem 1008s Adding debian:QuoVadis_Root_CA_2_G3.pem 1008s Adding debian:QuoVadis_Root_CA_3.pem 1008s Adding debian:QuoVadis_Root_CA_3_G3.pem 1008s Adding debian:SSL.com_EV_Root_Certification_Authority_ECC.pem 1008s Adding debian:SSL.com_EV_Root_Certification_Authority_RSA_R2.pem 1008s Adding debian:SSL.com_Root_Certification_Authority_ECC.pem 1008s Adding debian:SSL.com_Root_Certification_Authority_RSA.pem 1008s Adding debian:SSL.com_TLS_ECC_Root_CA_2022.pem 1008s Adding debian:SSL.com_TLS_RSA_Root_CA_2022.pem 1008s Adding debian:SZAFIR_ROOT_CA2.pem 1008s Adding debian:Sectigo_Public_Server_Authentication_Root_E46.pem 1008s Adding debian:Sectigo_Public_Server_Authentication_Root_R46.pem 1008s Adding debian:SecureSign_RootCA11.pem 1008s Adding debian:SecureTrust_CA.pem 1008s Adding debian:Secure_Global_CA.pem 1008s Adding debian:Security_Communication_ECC_RootCA1.pem 1008s Adding debian:Security_Communication_RootCA2.pem 1008s Adding debian:Security_Communication_RootCA3.pem 1008s Adding debian:Security_Communication_Root_CA.pem 1008s Adding debian:Starfield_Class_2_CA.pem 1008s Adding debian:Starfield_Root_Certificate_Authority_-_G2.pem 1008s Adding debian:Starfield_Services_Root_Certificate_Authority_-_G2.pem 1008s Adding debian:SwissSign_Gold_CA_-_G2.pem 1008s Adding debian:SwissSign_Silver_CA_-_G2.pem 1008s Adding debian:T-TeleSec_GlobalRoot_Class_2.pem 1008s Adding debian:T-TeleSec_GlobalRoot_Class_3.pem 1008s Adding debian:TUBITAK_Kamu_SM_SSL_Kok_Sertifikasi_-_Surum_1.pem 1008s Adding debian:TWCA_Global_Root_CA.pem 1008s Adding debian:TWCA_Root_Certification_Authority.pem 1008s Adding debian:TeliaSonera_Root_CA_v1.pem 1008s Adding debian:Telia_Root_CA_v2.pem 1008s Adding debian:TrustAsia_Global_Root_CA_G3.pem 1008s Adding debian:TrustAsia_Global_Root_CA_G4.pem 1008s Adding debian:Trustwave_Global_Certification_Authority.pem 1008s Adding debian:Trustwave_Global_ECC_P256_Certification_Authority.pem 1008s Adding debian:Trustwave_Global_ECC_P384_Certification_Authority.pem 1008s Adding debian:TunTrust_Root_CA.pem 1008s Adding debian:UCA_Extended_Validation_Root.pem 1008s Adding debian:UCA_Global_G2_Root.pem 1008s Adding debian:USERTrust_ECC_Certification_Authority.pem 1008s Adding debian:USERTrust_RSA_Certification_Authority.pem 1008s Adding debian:XRamp_Global_CA_Root.pem 1008s Adding debian:certSIGN_ROOT_CA.pem 1008s Adding debian:certSIGN_Root_CA_G2.pem 1008s Adding debian:e-Szigno_Root_CA_2017.pem 1008s Adding debian:ePKI_Root_Certification_Authority.pem 1008s Adding debian:emSign_ECC_Root_CA_-_C3.pem 1008s Adding debian:emSign_ECC_Root_CA_-_G3.pem 1008s Adding debian:emSign_Root_CA_-_C1.pem 1008s Adding debian:emSign_Root_CA_-_G1.pem 1008s Adding debian:vTrus_ECC_Root_CA.pem 1008s Adding debian:vTrus_Root_CA.pem 1008s done. 1008s Setting up ant (1.10.14-1) ... 1008s Setting up junit4 (4.13.2-4) ... 1008s Setting up openjdk-21-jdk-headless:arm64 (21.0.2+13-2) ... 1008s update-alternatives: using /usr/lib/jvm/java-21-openjdk-arm64/bin/jar to provide /usr/bin/jar (jar) in auto mode 1008s update-alternatives: using /usr/lib/jvm/java-21-openjdk-arm64/bin/jarsigner to provide /usr/bin/jarsigner (jarsigner) in auto mode 1008s update-alternatives: using /usr/lib/jvm/java-21-openjdk-arm64/bin/javac to provide /usr/bin/javac (javac) in auto mode 1008s update-alternatives: using /usr/lib/jvm/java-21-openjdk-arm64/bin/javadoc to provide /usr/bin/javadoc (javadoc) in auto mode 1008s update-alternatives: using /usr/lib/jvm/java-21-openjdk-arm64/bin/javap to provide /usr/bin/javap (javap) in auto mode 1008s update-alternatives: using /usr/lib/jvm/java-21-openjdk-arm64/bin/jcmd to provide /usr/bin/jcmd (jcmd) in auto mode 1008s update-alternatives: using /usr/lib/jvm/java-21-openjdk-arm64/bin/jdb to provide /usr/bin/jdb (jdb) in auto mode 1008s update-alternatives: using /usr/lib/jvm/java-21-openjdk-arm64/bin/jdeprscan to provide /usr/bin/jdeprscan (jdeprscan) in auto mode 1008s update-alternatives: using /usr/lib/jvm/java-21-openjdk-arm64/bin/jdeps to provide /usr/bin/jdeps (jdeps) in auto mode 1008s update-alternatives: using /usr/lib/jvm/java-21-openjdk-arm64/bin/jfr to provide /usr/bin/jfr (jfr) in auto mode 1008s update-alternatives: using /usr/lib/jvm/java-21-openjdk-arm64/bin/jimage to provide /usr/bin/jimage (jimage) in auto mode 1008s update-alternatives: using /usr/lib/jvm/java-21-openjdk-arm64/bin/jinfo to provide /usr/bin/jinfo (jinfo) in auto mode 1008s update-alternatives: using /usr/lib/jvm/java-21-openjdk-arm64/bin/jlink to provide /usr/bin/jlink (jlink) in auto mode 1008s update-alternatives: using /usr/lib/jvm/java-21-openjdk-arm64/bin/jmap to provide /usr/bin/jmap (jmap) in auto mode 1008s update-alternatives: using /usr/lib/jvm/java-21-openjdk-arm64/bin/jmod to provide /usr/bin/jmod (jmod) in auto mode 1008s update-alternatives: using /usr/lib/jvm/java-21-openjdk-arm64/bin/jps to provide /usr/bin/jps (jps) in auto mode 1008s update-alternatives: using /usr/lib/jvm/java-21-openjdk-arm64/bin/jrunscript to provide /usr/bin/jrunscript (jrunscript) in auto mode 1008s update-alternatives: using /usr/lib/jvm/java-21-openjdk-arm64/bin/jshell to provide /usr/bin/jshell (jshell) in auto mode 1008s update-alternatives: using /usr/lib/jvm/java-21-openjdk-arm64/bin/jstack to provide /usr/bin/jstack (jstack) in auto mode 1008s update-alternatives: using /usr/lib/jvm/java-21-openjdk-arm64/bin/jstat to provide /usr/bin/jstat (jstat) in auto mode 1008s update-alternatives: using /usr/lib/jvm/java-21-openjdk-arm64/bin/jstatd to provide /usr/bin/jstatd (jstatd) in auto mode 1008s update-alternatives: using /usr/lib/jvm/java-21-openjdk-arm64/bin/jwebserver to provide /usr/bin/jwebserver (jwebserver) in auto mode 1008s update-alternatives: using /usr/lib/jvm/java-21-openjdk-arm64/bin/serialver to provide /usr/bin/serialver (serialver) in auto mode 1008s update-alternatives: using /usr/lib/jvm/java-21-openjdk-arm64/bin/jhsdb to provide /usr/bin/jhsdb (jhsdb) in auto mode 1008s Setting up default-jre-headless (2:1.21-75+exp1) ... 1008s Setting up jruby (9.4.6.0+ds-1ubuntu3) ... 1008s Setting up default-jdk-headless (2:1.21-75+exp1) ... 1008s Setting up autopkgtest-satdep (0) ... 1013s (Reading database ... 84233 files and directories currently installed.) 1013s Removing autopkgtest-satdep (0) ... 1018s autopkgtest [11:11:41]: test spec-ji: [----------------------- 1018s installing system gems into jruby: 1018s * diff-lcs-1.5.0 1018s * minitest-5.15.0 1018s * power_assert-2.0.1 1018s * rake-13.0.6 1018s * rexml-3.2.5 1018s * rspec-3.12.0 1018s * rspec-core-3.12.0 1018s * rspec-expectations-3.12.1 1018s * rspec-mocks-3.12.1 1018s * rspec-support-3.12.0 1018s * test-unit-3.5.3 1019s Note: test/DefaultPackageClass.java uses unchecked or unsafe operations. 1019s Note: Recompile with -Xlint:unchecked for details. 1026s /usr/lib/jvm/java-21-openjdk-arm64/bin/javac -cp lib/jruby.jar:test/target/junit.jar:test/target/annotation-api.jar -d test/target/test-classes spec/java_integration/fixtures/AnArrayList.java spec/java_integration/fixtures/AnotherRunnable.java spec/java_integration/fixtures/ArrayReceiver.java spec/java_integration/fixtures/ArrayReturningInterface.java spec/java_integration/fixtures/ArrayReturningInterfaceConsumer.java spec/java_integration/fixtures/BadStaticInit.java spec/java_integration/fixtures/BeanLikeInterface.java spec/java_integration/fixtures/BeanLikeInterfaceHandler.java spec/java_integration/fixtures/BooleanReturningInterface.java spec/java_integration/fixtures/BooleanReturningInterfaceConsumer.java spec/java_integration/fixtures/CachedInJava.java spec/java_integration/fixtures/ClassWithAbstractMethods.java spec/java_integration/fixtures/ClassWithEnums.java spec/java_integration/fixtures/ClassWithMultipleSignaturesWithPrimitiveArgs.java spec/java_integration/fixtures/ClassWithPrimitiveVarargs.java spec/java_integration/fixtures/ClassWithSimpleMethod.java spec/java_integration/fixtures/ClassWithVarargs.java spec/java_integration/fixtures/CoerceToInterface.java spec/java_integration/fixtures/ComplexPrivateConstructor.java spec/java_integration/fixtures/ConcreteWithVirtualCall.java spec/java_integration/fixtures/ConstantHoldingInterface.java spec/java_integration/fixtures/CoreTypeMethods.java spec/java_integration/fixtures/DescendantOfSingleMethodInterface.java spec/java_integration/fixtures/EveryTypeAnnotations.java spec/java_integration/fixtures/ExceptionRunner.java spec/java_integration/fixtures/FieldAnnotations.java spec/java_integration/fixtures/GenericComparable.java spec/java_integration/fixtures/InnerClasses.java spec/java_integration/fixtures/InterfaceWrapper.java spec/java_integration/fixtures/InternalMap.java spec/java_integration/fixtures/IsEqualClass.java spec/java_integration/fixtures/JavaFields.java spec/java_integration/fixtures/JavaFieldsExt.java spec/java_integration/fixtures/JavaIterable.java spec/java_integration/fixtures/JavaTypeMethods.java spec/java_integration/fixtures/ManyArityMethodClass.java spec/java_integration/fixtures/MethodAnnotations.java spec/java_integration/fixtures/MethodNames.java spec/java_integration/fixtures/PackageConstructor.java spec/java_integration/fixtures/PackageField.java spec/java_integration/fixtures/PackageInstanceMethod.java spec/java_integration/fixtures/PackageStaticMethod.java spec/java_integration/fixtures/ParameterAnnotations.java spec/java_integration/fixtures/PrivateConstructor.java spec/java_integration/fixtures/PrivateField.java spec/java_integration/fixtures/PrivateInstanceMethod.java spec/java_integration/fixtures/PrivateStaticMethod.java spec/java_integration/fixtures/ProtectedConstructor.java spec/java_integration/fixtures/ProtectedField.java spec/java_integration/fixtures/ProtectedInstanceMethod.java spec/java_integration/fixtures/ProtectedStaticMethod.java spec/java_integration/fixtures/PublicConstructor.java spec/java_integration/fixtures/PublicField.java spec/java_integration/fixtures/ReceivesAndReturnsObject.java spec/java_integration/fixtures/ReceivesArrayList.java spec/java_integration/fixtures/Reflector.java spec/java_integration/fixtures/ReturnsInterface.java spec/java_integration/fixtures/ReturnsInterfaceConsumer.java spec/java_integration/fixtures/ScalaOperators.java spec/java_integration/fixtures/ScalaSingleton$.java spec/java_integration/fixtures/ScalaSingleton.java spec/java_integration/fixtures/ScalaSingletonTrait$.java spec/java_integration/fixtures/ScalaSingletonTrait.java spec/java_integration/fixtures/Service.java spec/java_integration/fixtures/ServiceAnnotation.java spec/java_integration/fixtures/SingleMethodInterface.java spec/java_integration/fixtures/StaticMethodSelection.java spec/java_integration/fixtures/SubclassOfClassWithSimpleMethod.java spec/java_integration/fixtures/SuperWithInterface.java spec/java_integration/fixtures/ThrowExceptionInInitializer.java spec/java_integration/fixtures/ThrowExceptionOnCreate.java spec/java_integration/fixtures/UsesDescendantOfSingleMethodInterface.java spec/java_integration/fixtures/UsesSingleMethodInterface.java spec/java_integration/fixtures/ValueReceivingInterface.java spec/java_integration/fixtures/ValueReceivingInterfaceHandler.java spec/java_integration/fixtures/_funky/MyClass.java spec/java_integration/fixtures/coll/CloneableImmutableList.java spec/java_integration/fixtures/coll/NonCloneableImmutableList.java spec/java_integration/fixtures/coll/NonCloneableImmutableList2.java spec/java_integration/fixtures/coll/NonCloneableImmutableList3.java spec/java_integration/fixtures/coll/NonCloneableList.java spec/java_integration/fixtures/iface/SingleMethodInterfaceWith4Args.java spec/java_integration/fixtures/iface/SingleMethodInterfaceWithArg.java spec/java_integration/fixtures/isolated/classes/GH7327Base.java spec/java_integration/fixtures/isolated/interfaces/GH7327Interface.java 1026s mkdir -p test/target/test-classes 1026s mkdir -p test/target/test-classes-isolated/java_integration/fixtures/isolated 1026s mkdir -p test/target/test-interfaces-isolated/java_integration/fixtures/isolated 1029s Note: Some input files use unchecked or unsafe operations. 1029s Note: Recompile with -Xlint:unchecked for details. 1029s mv -f test/target/test-classes/java_integration/fixtures/isolated/classes test/target/test-classes-isolated/java_integration/fixtures/isolated 1029s mv -f test/target/test-classes/java_integration/fixtures/isolated/interfaces test/target/test-interfaces-isolated/java_integration/fixtures/isolated 1029s /usr/share/jruby/bin/jruby -I/tmp/autopkgtest.nFBjtB/autopkgtest_tmp/gem_temp/gems/rake-13.0.6/lib -J-cp test/target/annotation-api.jar -I/tmp/autopkgtest.nFBjtB/autopkgtest_tmp/gem_temp/gems/rspec-support-3.12.0/lib:/tmp/autopkgtest.nFBjtB/autopkgtest_tmp/gem_temp/gems/rspec-core-3.12.0/lib /usr/share/rubygems-integration/all/gems/rspec-core-3.12.0/exe/rspec --pattern spec/java_integration/\*\*/\*_spec.rb --options spec/java_integration/spec.quiet.opts 1037s /usr/share/rubygems-integration/all/gems/rspec-core-3.12.0/lib/rspec/core/configuration.rb:2117: warning: regular expression has ']' without escape 1037s /usr/share/rubygems-integration/all/gems/rspec-core-3.12.0/lib/rspec/core/configuration.rb:2117: warning: regular expression has ']' without escape 1041s .................................................................*.....................................=== called: # 1041s ..........warning: thread "Ruby-0-Thread-1: /tmp/autopkgtest.nFBjtB/autopkgtest_tmp/spec/java_integration/exceptions/thread_spec.rb:5" terminated with exception (report_on_exception is true): 1041s .java.lang.NullPointerException 1041s at java.base/jdk.internal.reflect.DirectConstructorHandleAccessor.newInstance(DirectConstructorHandleAccessor.java:62) 1041s at java.base/java.lang.reflect.Constructor.newInstanceWithCaller(Constructor.java:502) 1041s at java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:486) 1041s at org.jruby.dist/org.jruby.javasupport.JavaConstructor.newInstanceDirect(JavaConstructor.java:149) 1041s at org.jruby.dist/org.jruby.java.invokers.ConstructorInvoker.call(ConstructorInvoker.java:72) 1041s at org.jruby.dist/org.jruby.java.invokers.ConstructorInvoker.call(ConstructorInvoker.java:156) 1041s at org.jruby.dist/org.jruby.runtime.callsite.CachingCallSite.cacheAndCall(CachingCallSite.java:461) 1041s at org.jruby.dist/org.jruby.runtime.callsite.CachingCallSite.call(CachingCallSite.java:210) 1041s at org.jruby.dist/org.jruby.java.proxies.ConcreteJavaProxy$InitializeMethod.call(ConcreteJavaProxy.java:89) 1041s at org.jruby.dist/org.jruby.runtime.callsite.CachingCallSite.call(CachingCallSite.java:208) 1041s at org.jruby.dist/org.jruby.RubyClass.newInstance(RubyClass.java:915) 1041s at org.jruby.dist/org.jruby.RubyClass$INVOKER$i$newInstance.call(RubyClass$INVOKER$i$newInstance.gen) 1041s at org.jruby.dist/org.jruby.internal.runtime.methods.JavaMethod$JavaMethodZeroOrNBlock.call(JavaMethod.java:333) 1041s at org.jruby.dist/org.jruby.java.proxies.ConcreteJavaProxy$NewMethod.call(ConcreteJavaProxy.java:183) 1041s at org.jruby.dist/org.jruby.runtime.callsite.CachingCallSite.cacheAndCall(CachingCallSite.java:456) 1041s at org.jruby.dist/org.jruby.runtime.callsite.CachingCallSite.call(CachingCallSite.java:195) 1041s at org.jruby.dist/org.jruby.ir.interpreter.InterpreterEngine.processCall(InterpreterEngine.java:346) 1041s at org.jruby.dist/org.jruby.ir.interpreter.StartupInterpreterEngine.interpret(StartupInterpreterEngine.java:66) 1041s at org.jruby.dist/org.jruby.ir.interpreter.Interpreter.INTERPRET_BLOCK(Interpreter.java:118) 1041s at org.jruby.dist/org.jruby.runtime.MixedModeIRBlockBody.commonYieldPath(MixedModeIRBlockBody.java:136) 1041s at org.jruby.dist/org.jruby.runtime.IRBlockBody.call(IRBlockBody.java:66) 1041s at org.jruby.dist/org.jruby.runtime.IRBlockBody.call(IRBlockBody.java:58) 1041s at org.jruby.dist/org.jruby.runtime.Block.call(Block.java:144) 1041s at org.jruby.dist/org.jruby.RubyProc.call(RubyProc.java:352) 1041s at org.jruby.dist/org.jruby.internal.runtime.RubyRunnable.run(RubyRunnable.java:111) 1041s at java.base/java.lang.Thread.run(Thread.java:1583) 1041s warning: thread "Ruby-0-Thread-2: /tmp/autopkgtest.nFBjtB/autopkgtest_tmp/spec/java_integration/exceptions/thread_spec.rb:15" terminated with exception (report_on_exception is true): 1041s java.lang.NullPointerException 1041s at java.base/jdk.internal.reflect.DirectConstructorHandleAccessor.newInstance(DirectConstructorHandleAccessor.java:62) 1041s at java.base/java.lang.reflect.Constructor.newInstanceWithCaller(Constructor.java:502) 1041s at java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:486) 1041s at org.jruby.dist/org.jruby.javasupport.JavaConstructor.newInstanceDirect(JavaConstructor.java:149) 1041s at org.jruby.dist/org.jruby.java.invokers.ConstructorInvoker.call(ConstructorInvoker.java:72) 1041s at org.jruby.dist/org.jruby.java.invokers.ConstructorInvoker.call(ConstructorInvoker.java:156) 1041s at org.jruby.dist/org.jruby.runtime.callsite.CachingCallSite.call(CachingCallSite.java:208) 1041s at org.jruby.dist/org.jruby.java.proxies.ConcreteJavaProxy$InitializeMethod.call(ConcreteJavaProxy.java:89) 1041s at org.jruby.dist/org.jruby.runtime.callsite.CachingCallSite.call(CachingCallSite.java:208) 1041s at org.jruby.dist/org.jruby.RubyClass.newInstance(RubyClass.java:915) 1041s at org.jruby.dist/org.jruby.RubyClass$INVOKER$i$newInstance.call(RubyClass$INVOKER$i$newInstance.gen) 1041s at org.jruby.dist/org.jruby.internal.runtime.methods.JavaMethod$JavaMethodZeroOrNBlock.call(JavaMethod.java:333) 1041s at org.jruby.dist/org.jruby.java.proxies.ConcreteJavaProxy$NewMethod.call(ConcreteJavaProxy.java:183) 1041s at org.jruby.dist/org.jruby.runtime.callsite.CachingCallSite.cacheAndCall(CachingCallSite.java:456) 1041s at org.jruby.dist/org.jruby.runtime.callsite.CachingCallSite.call(CachingCallSite.java:195) 1041s at org.jruby.dist/org.jruby.ir.interpreter.InterpreterEngine.processCall(InterpreterEngine.java:346) 1041s at org.jruby.dist/org.jruby.ir.interpreter.StartupInterpreterEngine.interpret(StartupInterpreterEngine.java:66) 1041s at org.jruby.dist/org.jruby.ir.interpreter.Interpreter.INTERPRET_BLOCK(Interpreter.java:118) 1041s at org.jruby.dist/org.jruby.runtime.MixedModeIRBlockBody.commonYieldPath(MixedModeIRBlockBody.java:136) 1041s at org.jruby.dist/org.jruby.runtime.IRBlockBody.call(IRBlockBody.java:66) 1041s at org.jruby.dist/org.jruby.runtime.IRBlockBody.call(IRBlockBody.java:58) 1041s at org.jruby.dist/org.jruby.runtime.Block.call(Block.java:144) 1041s at org.jruby.dist/org.jruby.RubyProc.call(RubyProc.java:352) 1041s at org.jruby.dist/org.jruby.internal.runtime.RubyRunnable.run(RubyRunnable.java:111) 1041s at java.base/java.lang.Thread.run(Thread.java:1583) 1043s .................*............................................................................................../tmp/autopkgtest.nFBjtB/autopkgtest_tmp/spec/java_integration/interfaces/implementation_spec.rb:284: warning: multiple Java methods found, use -Xjruby.ji.ambiguous.calls.debug for backtrace. Choosing listFiles(java.io.FilenameFilter) 1043s /tmp/autopkgtest.nFBjtB/autopkgtest_tmp/spec/java_integration/interfaces/implementation_spec.rb:295: warning: multiple Java methods found, use -Xjruby.ji.ambiguous.calls.debug for backtrace. Choosing listFiles(java.io.FilenameFilter) 1046s .............................................................................................................................*........................................................................................................................................**........................*.*....................................................................................................../tmp/autopkgtest.nFBjtB/autopkgtest_tmp/spec/java_integration/types/array_spec.rb:1040: warning: regular expression has ']' without escape 1046s ......../tmp/autopkgtest.nFBjtB/autopkgtest_tmp/spec/java_integration/types/array_spec.rb:1142: warning: regular expression has ']' without escape 1048s .............................................................................................................................................................................................................*..*..................*...........................................2024-03-20 11:12:11 +0000 1051s 2024-03-20 11:12:13 +0000 1052s ........................... 1054s 1054s Deprecation Warnings: 1054s 1054s Using `should` from rspec-expectations' old `:should` syntax without explicitly enabling the syntax is deprecated. Use the new `:expect` syntax or explicitly enable `:should` with `config.expect_with(:rspec) { |c| c.syntax = :should }` instead. Called from /tmp/autopkgtest.nFBjtB/autopkgtest_tmp/spec/java_integration/methods/equals_spec.rb:15:in `block in
'. 1054s 1054s 1054s If you need more of the backtrace for any of these deprecations to 1054s identify where to make the necessary changes, you can configure 1054s `config.raise_errors_for_deprecations!`, and it will turn the 1054s deprecation warnings into errors, giving you the full backtrace. 1054s 1054s Pending: (Failures listed here are expected and do not affect your suite's status) 1054s 1054s 1) Rake::Ant.ant prefers $ANT_HOME to $PATH 1054s # $ANT_HOME is not set 1054s # ./spec/java_integration/ant/ant_spec.rb:138 1054s 1054s 2) Collection Ruby extensions #include? (specific) 1054s # due Java numeric conversion can not add to_java(:xxx) to collection 1054s Failure/Error: expect( set.include? 1.to_java ).to be true 1054s 1054s expected true 1054s got false 1054s # /usr/share/rubygems-integration/all/gems/rspec-support-3.12.0/lib/rspec/support.rb:102:in `block in Support' 1054s # /usr/share/rubygems-integration/all/gems/rspec-support-3.12.0/lib/rspec/support.rb:111:in `notify_failure' 1054s # /usr/share/rubygems-integration/all/gems/rspec-expectations-3.12.1/lib/rspec/expectations/fail_with.rb:35:in `fail_with' 1054s # /usr/share/rubygems-integration/all/gems/rspec-expectations-3.12.1/lib/rspec/expectations/handler.rb:40:in `handle_failure' 1054s # /usr/share/rubygems-integration/all/gems/rspec-expectations-3.12.1/lib/rspec/expectations/handler.rb:56:in `block in handle_matcher' 1054s # /usr/share/rubygems-integration/all/gems/rspec-expectations-3.12.1/lib/rspec/expectations/handler.rb:27:in `with_matcher' 1054s # /usr/share/rubygems-integration/all/gems/rspec-expectations-3.12.1/lib/rspec/expectations/handler.rb:48:in `handle_matcher' 1054s # /usr/share/rubygems-integration/all/gems/rspec-expectations-3.12.1/lib/rspec/expectations/expectation_target.rb:65:in `to' 1054s # /usr/share/rubygems-integration/all/gems/rspec-expectations-3.12.1/lib/rspec/expectations/expectation_target.rb:101:in `to' 1054s # ./spec/java_integration/extensions/collection_spec.rb:223:in `block in
' 1054s # org/jruby/RubyBasicObject.java:2620:in `instance_exec' 1054s # /usr/share/rubygems-integration/all/gems/rspec-core-3.12.0/lib/rspec/core/example.rb:263:in `block in run' 1054s # /usr/share/rubygems-integration/all/gems/rspec-core-3.12.0/lib/rspec/core/example.rb:511:in `block in with_around_and_singleton_context_hooks' 1054s # /usr/share/rubygems-integration/all/gems/rspec-core-3.12.0/lib/rspec/core/example.rb:468:in `block in with_around_example_hooks' 1054s # /usr/share/rubygems-integration/all/gems/rspec-core-3.12.0/lib/rspec/core/hooks.rb:486:in `block in run' 1054s # /usr/share/rubygems-integration/all/gems/rspec-core-3.12.0/lib/rspec/core/hooks.rb:624:in `run_around_example_hooks_for' 1054s # /usr/share/rubygems-integration/all/gems/rspec-core-3.12.0/lib/rspec/core/hooks.rb:486:in `run' 1054s # /usr/share/rubygems-integration/all/gems/rspec-core-3.12.0/lib/rspec/core/example.rb:468:in `with_around_example_hooks' 1054s # /usr/share/rubygems-integration/all/gems/rspec-core-3.12.0/lib/rspec/core/example.rb:511:in `with_around_and_singleton_context_hooks' 1054s # /usr/share/rubygems-integration/all/gems/rspec-core-3.12.0/lib/rspec/core/example.rb:259:in `run' 1054s # /usr/share/rubygems-integration/all/gems/rspec-core-3.12.0/lib/rspec/core/example_group.rb:646:in `block in run_examples' 1054s # org/jruby/RubyArray.java:2805:in `map' 1054s # /usr/share/rubygems-integration/all/gems/rspec-core-3.12.0/lib/rspec/core/example_group.rb:651:in `run_examples' 1054s # /usr/share/rubygems-integration/all/gems/rspec-core-3.12.0/lib/rspec/core/example_group.rb:607:in `run' 1054s # /usr/share/rubygems-integration/all/gems/rspec-core-3.12.0/lib/rspec/core/runner.rb:121:in `block in run_specs' 1054s # org/jruby/RubyArray.java:2805:in `map' 1054s # /usr/share/rubygems-integration/all/gems/rspec-core-3.12.0/lib/rspec/core/runner.rb:121:in `block in run_specs' 1054s # /usr/share/rubygems-integration/all/gems/rspec-core-3.12.0/lib/rspec/core/configuration.rb:2070:in `with_suite_hooks' 1054s # /usr/share/rubygems-integration/all/gems/rspec-core-3.12.0/lib/rspec/core/runner.rb:116:in `block in run_specs' 1054s # /usr/share/rubygems-integration/all/gems/rspec-core-3.12.0/lib/rspec/core/reporter.rb:74:in `report' 1054s # /usr/share/rubygems-integration/all/gems/rspec-core-3.12.0/lib/rspec/core/runner.rb:115:in `run_specs' 1054s # /usr/share/rubygems-integration/all/gems/rspec-core-3.12.0/lib/rspec/core/runner.rb:89:in `run' 1054s # /usr/share/rubygems-integration/all/gems/rspec-core-3.12.0/lib/rspec/core/runner.rb:71:in `run' 1054s # /usr/share/rubygems-integration/all/gems/rspec-core-3.12.0/lib/rspec/core/runner.rb:45:in `invoke' 1054s # /usr/share/rubygems-integration/all/gems/rspec-core-3.12.0/exe/rspec:4:in `
' 1054s 1054s 3) Java static method names should not overwrite critical core Ruby methods 1054s # need a better way to separate class and instance methods in the java code 1054s # ./spec/java_integration/methods/naming_spec.rb:65 1054s 1054s 4) JRuby class reification supports reification of java classes with interfaces 1054s # GH#6479 + reification not yet hooked up 1054s Failure/Error: expect(gotten).to eql([:success]) 1054s 1054s expected: [:success] 1054s got: [:failSO, :fail1, "fail3"] 1054s 1054s (compared using eql?) 1054s 1054s Diff: 1054s @@ -1 +1 @@ 1054s -[:success] 1054s +[:failSO, :fail1, "fail3"] 1054s # /usr/share/rubygems-integration/all/gems/rspec-support-3.12.0/lib/rspec/support.rb:102:in `block in Support' 1054s # /usr/share/rubygems-integration/all/gems/rspec-support-3.12.0/lib/rspec/support.rb:111:in `notify_failure' 1054s # /usr/share/rubygems-integration/all/gems/rspec-expectations-3.12.1/lib/rspec/expectations/fail_with.rb:35:in `fail_with' 1054s # /usr/share/rubygems-integration/all/gems/rspec-expectations-3.12.1/lib/rspec/expectations/handler.rb:38:in `handle_failure' 1054s # /usr/share/rubygems-integration/all/gems/rspec-expectations-3.12.1/lib/rspec/expectations/handler.rb:56:in `block in handle_matcher' 1054s # /usr/share/rubygems-integration/all/gems/rspec-expectations-3.12.1/lib/rspec/expectations/handler.rb:27:in `with_matcher' 1054s # /usr/share/rubygems-integration/all/gems/rspec-expectations-3.12.1/lib/rspec/expectations/handler.rb:48:in `handle_matcher' 1054s # /usr/share/rubygems-integration/all/gems/rspec-expectations-3.12.1/lib/rspec/expectations/expectation_target.rb:65:in `to' 1054s # /usr/share/rubygems-integration/all/gems/rspec-expectations-3.12.1/lib/rspec/expectations/expectation_target.rb:101:in `to' 1054s # ./spec/java_integration/reify/become_java_spec.rb:206:in `block in
' 1054s # org/jruby/RubyBasicObject.java:2620:in `instance_exec' 1054s # /usr/share/rubygems-integration/all/gems/rspec-core-3.12.0/lib/rspec/core/example.rb:263:in `block in run' 1054s # /usr/share/rubygems-integration/all/gems/rspec-core-3.12.0/lib/rspec/core/example.rb:511:in `block in with_around_and_singleton_context_hooks' 1054s # /usr/share/rubygems-integration/all/gems/rspec-core-3.12.0/lib/rspec/core/example.rb:468:in `block in with_around_example_hooks' 1054s # /usr/share/rubygems-integration/all/gems/rspec-core-3.12.0/lib/rspec/core/hooks.rb:486:in `block in run' 1054s # /usr/share/rubygems-integration/all/gems/rspec-core-3.12.0/lib/rspec/core/hooks.rb:624:in `run_around_example_hooks_for' 1054s # /usr/share/rubygems-integration/all/gems/rspec-core-3.12.0/lib/rspec/core/hooks.rb:486:in `run' 1054s # /usr/share/rubygems-integration/all/gems/rspec-core-3.12.0/lib/rspec/core/example.rb:468:in `with_around_example_hooks' 1054s # /usr/share/rubygems-integration/all/gems/rspec-core-3.12.0/lib/rspec/core/example.rb:511:in `with_around_and_singleton_context_hooks' 1054s # /usr/share/rubygems-integration/all/gems/rspec-core-3.12.0/lib/rspec/core/example.rb:259:in `run' 1054s # /usr/share/rubygems-integration/all/gems/rspec-core-3.12.0/lib/rspec/core/example_group.rb:646:in `block in run_examples' 1054s # org/jruby/RubyArray.java:2805:in `map' 1054s # /usr/share/rubygems-integration/all/gems/rspec-core-3.12.0/lib/rspec/core/example_group.rb:651:in `run_examples' 1054s # /usr/share/rubygems-integration/all/gems/rspec-core-3.12.0/lib/rspec/core/example_group.rb:607:in `run' 1054s # /usr/share/rubygems-integration/all/gems/rspec-core-3.12.0/lib/rspec/core/runner.rb:121:in `block in run_specs' 1054s # org/jruby/RubyArray.java:2805:in `map' 1054s # /usr/share/rubygems-integration/all/gems/rspec-core-3.12.0/lib/rspec/core/runner.rb:121:in `block in run_specs' 1054s # /usr/share/rubygems-integration/all/gems/rspec-core-3.12.0/lib/rspec/core/configuration.rb:2070:in `with_suite_hooks' 1054s # /usr/share/rubygems-integration/all/gems/rspec-core-3.12.0/lib/rspec/core/runner.rb:116:in `block in run_specs' 1054s # /usr/share/rubygems-integration/all/gems/rspec-core-3.12.0/lib/rspec/core/reporter.rb:74:in `report' 1054s # /usr/share/rubygems-integration/all/gems/rspec-core-3.12.0/lib/rspec/core/runner.rb:115:in `run_specs' 1054s # /usr/share/rubygems-integration/all/gems/rspec-core-3.12.0/lib/rspec/core/runner.rb:89:in `run' 1054s # /usr/share/rubygems-integration/all/gems/rspec-core-3.12.0/lib/rspec/core/runner.rb:71:in `run' 1054s # /usr/share/rubygems-integration/all/gems/rspec-core-3.12.0/lib/rspec/core/runner.rb:45:in `invoke' 1054s # /usr/share/rubygems-integration/all/gems/rspec-core-3.12.0/exe/rspec:4:in `
' 1054s 1054s 5) JRuby class reification supports reification of ruby classes with interfaces 1054s # GH#6479 + reification not yet hooked up 1054s Failure/Error: expect(gotten).to eql([:success]) 1054s 1054s expected: [:success] 1054s got: [:failSO, :fail1, "fail3"] 1054s 1054s (compared using eql?) 1054s 1054s Diff: 1054s @@ -1 +1 @@ 1054s -[:success] 1054s +[:failSO, :fail1, "fail3"] 1054s # /usr/share/rubygems-integration/all/gems/rspec-support-3.12.0/lib/rspec/support.rb:102:in `block in Support' 1054s # /usr/share/rubygems-integration/all/gems/rspec-support-3.12.0/lib/rspec/support.rb:111:in `notify_failure' 1054s # /usr/share/rubygems-integration/all/gems/rspec-expectations-3.12.1/lib/rspec/expectations/fail_with.rb:35:in `fail_with' 1054s # /usr/share/rubygems-integration/all/gems/rspec-expectations-3.12.1/lib/rspec/expectations/handler.rb:38:in `handle_failure' 1054s # /usr/share/rubygems-integration/all/gems/rspec-expectations-3.12.1/lib/rspec/expectations/handler.rb:56:in `block in handle_matcher' 1054s # /usr/share/rubygems-integration/all/gems/rspec-expectations-3.12.1/lib/rspec/expectations/handler.rb:27:in `with_matcher' 1054s # /usr/share/rubygems-integration/all/gems/rspec-expectations-3.12.1/lib/rspec/expectations/handler.rb:48:in `handle_matcher' 1054s # /usr/share/rubygems-integration/all/gems/rspec-expectations-3.12.1/lib/rspec/expectations/expectation_target.rb:65:in `to' 1054s # /usr/share/rubygems-integration/all/gems/rspec-expectations-3.12.1/lib/rspec/expectations/expectation_target.rb:101:in `to' 1054s # ./spec/java_integration/reify/become_java_spec.rb:247:in `block in
' 1054s # org/jruby/RubyBasicObject.java:2620:in `instance_exec' 1054s # /usr/share/rubygems-integration/all/gems/rspec-core-3.12.0/lib/rspec/core/example.rb:263:in `block in run' 1054s # /usr/share/rubygems-integration/all/gems/rspec-core-3.12.0/lib/rspec/core/example.rb:511:in `block in with_around_and_singleton_context_hooks' 1054s # /usr/share/rubygems-integration/all/gems/rspec-core-3.12.0/lib/rspec/core/example.rb:468:in `block in with_around_example_hooks' 1054s # /usr/share/rubygems-integration/all/gems/rspec-core-3.12.0/lib/rspec/core/hooks.rb:486:in `block in run' 1054s # /usr/share/rubygems-integration/all/gems/rspec-core-3.12.0/lib/rspec/core/hooks.rb:624:in `run_around_example_hooks_for' 1054s # /usr/share/rubygems-integration/all/gems/rspec-core-3.12.0/lib/rspec/core/hooks.rb:486:in `run' 1054s # /usr/share/rubygems-integration/all/gems/rspec-core-3.12.0/lib/rspec/core/example.rb:468:in `with_around_example_hooks' 1054s # /usr/share/rubygems-integration/all/gems/rspec-core-3.12.0/lib/rspec/core/example.rb:511:in `with_around_and_singleton_context_hooks' 1054s # /usr/share/rubygems-integration/all/gems/rspec-core-3.12.0/lib/rspec/core/example.rb:259:in `run' 1054s # /usr/share/rubygems-integration/all/gems/rspec-core-3.12.0/lib/rspec/core/example_group.rb:646:in `block in run_examples' 1054s # org/jruby/RubyArray.java:2805:in `map' 1054s # /usr/share/rubygems-integration/all/gems/rspec-core-3.12.0/lib/rspec/core/example_group.rb:651:in `run_examples' 1054s # /usr/share/rubygems-integration/all/gems/rspec-core-3.12.0/lib/rspec/core/example_group.rb:607:in `run' 1054s # /usr/share/rubygems-integration/all/gems/rspec-core-3.12.0/lib/rspec/core/runner.rb:121:in `block in run_specs' 1054s # org/jruby/RubyArray.java:2805:in `map' 1054s # /usr/share/rubygems-integration/all/gems/rspec-core-3.12.0/lib/rspec/core/runner.rb:121:in `block in run_specs' 1054s # /usr/share/rubygems-integration/all/gems/rspec-core-3.12.0/lib/rspec/core/configuration.rb:2070:in `with_suite_hooks' 1054s # /usr/share/rubygems-integration/all/gems/rspec-core-3.12.0/lib/rspec/core/runner.rb:116:in `block in run_specs' 1054s # /usr/share/rubygems-integration/all/gems/rspec-core-3.12.0/lib/rspec/core/reporter.rb:74:in `report' 1054s # /usr/share/rubygems-integration/all/gems/rspec-core-3.12.0/lib/rspec/core/runner.rb:115:in `run_specs' 1054s # /usr/share/rubygems-integration/all/gems/rspec-core-3.12.0/lib/rspec/core/runner.rb:89:in `run' 1054s # /usr/share/rubygems-integration/all/gems/rspec-core-3.12.0/lib/rspec/core/runner.rb:71:in `run' 1054s # /usr/share/rubygems-integration/all/gems/rspec-core-3.12.0/lib/rspec/core/runner.rb:45:in `invoke' 1054s # /usr/share/rubygems-integration/all/gems/rspec-core-3.12.0/exe/rspec:4:in `
' 1054s 1054s 6) A Scala singleton shadowed by a Scala class defines class methods from the singleton 1054s # No reason given 1054s Failure/Error: expect(ScalaSingleton.hello).to eq("Hello") 1054s 1054s NoMethodError: 1054s undefined method `hello' for Java::Java_integrationFixtures::ScalaSingleton:Class 1054s # ./spec/java_integration/scala/singleton_spec.rb:9:in `block in
' 1054s # org/jruby/RubyBasicObject.java:2620:in `instance_exec' 1054s # /usr/share/rubygems-integration/all/gems/rspec-core-3.12.0/lib/rspec/core/example.rb:263:in `block in run' 1054s # /usr/share/rubygems-integration/all/gems/rspec-core-3.12.0/lib/rspec/core/example.rb:511:in `block in with_around_and_singleton_context_hooks' 1054s # /usr/share/rubygems-integration/all/gems/rspec-core-3.12.0/lib/rspec/core/example.rb:468:in `block in with_around_example_hooks' 1054s # /usr/share/rubygems-integration/all/gems/rspec-core-3.12.0/lib/rspec/core/hooks.rb:486:in `block in run' 1054s # /usr/share/rubygems-integration/all/gems/rspec-core-3.12.0/lib/rspec/core/hooks.rb:624:in `run_around_example_hooks_for' 1054s # /usr/share/rubygems-integration/all/gems/rspec-core-3.12.0/lib/rspec/core/hooks.rb:486:in `run' 1054s # /usr/share/rubygems-integration/all/gems/rspec-core-3.12.0/lib/rspec/core/example.rb:468:in `with_around_example_hooks' 1054s # /usr/share/rubygems-integration/all/gems/rspec-core-3.12.0/lib/rspec/core/example.rb:511:in `with_around_and_singleton_context_hooks' 1054s # /usr/share/rubygems-integration/all/gems/rspec-core-3.12.0/lib/rspec/core/example.rb:259:in `run' 1054s # /usr/share/rubygems-integration/all/gems/rspec-core-3.12.0/lib/rspec/core/example_group.rb:646:in `block in run_examples' 1054s # org/jruby/RubyArray.java:2805:in `map' 1054s # /usr/share/rubygems-integration/all/gems/rspec-core-3.12.0/lib/rspec/core/example_group.rb:651:in `run_examples' 1054s # /usr/share/rubygems-integration/all/gems/rspec-core-3.12.0/lib/rspec/core/example_group.rb:607:in `run' 1054s # /usr/share/rubygems-integration/all/gems/rspec-core-3.12.0/lib/rspec/core/example_group.rb:608:in `block in run' 1054s # org/jruby/RubyArray.java:2805:in `map' 1054s # /usr/share/rubygems-integration/all/gems/rspec-core-3.12.0/lib/rspec/core/example_group.rb:608:in `run' 1054s # /usr/share/rubygems-integration/all/gems/rspec-core-3.12.0/lib/rspec/core/runner.rb:121:in `block in run_specs' 1054s # org/jruby/RubyArray.java:2805:in `map' 1054s # /usr/share/rubygems-integration/all/gems/rspec-core-3.12.0/lib/rspec/core/runner.rb:121:in `block in run_specs' 1054s # /usr/share/rubygems-integration/all/gems/rspec-core-3.12.0/lib/rspec/core/configuration.rb:2070:in `with_suite_hooks' 1054s # /usr/share/rubygems-integration/all/gems/rspec-core-3.12.0/lib/rspec/core/runner.rb:116:in `block in run_specs' 1054s # /usr/share/rubygems-integration/all/gems/rspec-core-3.12.0/lib/rspec/core/reporter.rb:74:in `report' 1054s # /usr/share/rubygems-integration/all/gems/rspec-core-3.12.0/lib/rspec/core/runner.rb:115:in `run_specs' 1054s # /usr/share/rubygems-integration/all/gems/rspec-core-3.12.0/lib/rspec/core/runner.rb:89:in `run' 1054s # /usr/share/rubygems-integration/all/gems/rspec-core-3.12.0/lib/rspec/core/runner.rb:71:in `run' 1054s # /usr/share/rubygems-integration/all/gems/rspec-core-3.12.0/lib/rspec/core/runner.rb:45:in `invoke' 1054s # /usr/share/rubygems-integration/all/gems/rspec-core-3.12.0/exe/rspec:4:in `
' 1054s 1054s 7) A Scala singleton shadowed by a Scala trait defines class methods from the singleton 1054s # No reason given 1054s Failure/Error: expect(ScalaSingletonTrait.hello).to eq("Hello") 1054s 1054s NoMethodError: 1054s undefined method `hello' for Java::Java_integrationFixtures::ScalaSingletonTrait:Module 1054s # ./spec/java_integration/scala/singleton_spec.rb:19:in `block in
' 1054s # org/jruby/RubyBasicObject.java:2620:in `instance_exec' 1054s # /usr/share/rubygems-integration/all/gems/rspec-core-3.12.0/lib/rspec/core/example.rb:263:in `block in run' 1054s # /usr/share/rubygems-integration/all/gems/rspec-core-3.12.0/lib/rspec/core/example.rb:511:in `block in with_around_and_singleton_context_hooks' 1054s # /usr/share/rubygems-integration/all/gems/rspec-core-3.12.0/lib/rspec/core/example.rb:468:in `block in with_around_example_hooks' 1054s # /usr/share/rubygems-integration/all/gems/rspec-core-3.12.0/lib/rspec/core/hooks.rb:486:in `block in run' 1054s # /usr/share/rubygems-integration/all/gems/rspec-core-3.12.0/lib/rspec/core/hooks.rb:624:in `run_around_example_hooks_for' 1054s # /usr/share/rubygems-integration/all/gems/rspec-core-3.12.0/lib/rspec/core/hooks.rb:486:in `run' 1054s # /usr/share/rubygems-integration/all/gems/rspec-core-3.12.0/lib/rspec/core/example.rb:468:in `with_around_example_hooks' 1054s # /usr/share/rubygems-integration/all/gems/rspec-core-3.12.0/lib/rspec/core/example.rb:511:in `with_around_and_singleton_context_hooks' 1054s # /usr/share/rubygems-integration/all/gems/rspec-core-3.12.0/lib/rspec/core/example.rb:259:in `run' 1054s # /usr/share/rubygems-integration/all/gems/rspec-core-3.12.0/lib/rspec/core/example_group.rb:646:in `block in run_examples' 1054s # org/jruby/RubyArray.java:2805:in `map' 1054s # /usr/share/rubygems-integration/all/gems/rspec-core-3.12.0/lib/rspec/core/example_group.rb:651:in `run_examples' 1054s # /usr/share/rubygems-integration/all/gems/rspec-core-3.12.0/lib/rspec/core/example_group.rb:607:in `run' 1054s # /usr/share/rubygems-integration/all/gems/rspec-core-3.12.0/lib/rspec/core/example_group.rb:608:in `block in run' 1054s # org/jruby/RubyArray.java:2805:in `map' 1054s # /usr/share/rubygems-integration/all/gems/rspec-core-3.12.0/lib/rspec/core/example_group.rb:608:in `run' 1054s # /usr/share/rubygems-integration/all/gems/rspec-core-3.12.0/lib/rspec/core/runner.rb:121:in `block in run_specs' 1054s # org/jruby/RubyArray.java:2805:in `map' 1054s # /usr/share/rubygems-integration/all/gems/rspec-core-3.12.0/lib/rspec/core/runner.rb:121:in `block in run_specs' 1054s # /usr/share/rubygems-integration/all/gems/rspec-core-3.12.0/lib/rspec/core/configuration.rb:2070:in `with_suite_hooks' 1054s # /usr/share/rubygems-integration/all/gems/rspec-core-3.12.0/lib/rspec/core/runner.rb:116:in `block in run_specs' 1054s # /usr/share/rubygems-integration/all/gems/rspec-core-3.12.0/lib/rspec/core/reporter.rb:74:in `report' 1054s # /usr/share/rubygems-integration/all/gems/rspec-core-3.12.0/lib/rspec/core/runner.rb:115:in `run_specs' 1054s # /usr/share/rubygems-integration/all/gems/rspec-core-3.12.0/lib/rspec/core/runner.rb:89:in `run' 1054s # /usr/share/rubygems-integration/all/gems/rspec-core-3.12.0/lib/rspec/core/runner.rb:71:in `run' 1054s # /usr/share/rubygems-integration/all/gems/rspec-core-3.12.0/lib/rspec/core/runner.rb:45:in `invoke' 1054s # /usr/share/rubygems-integration/all/gems/rspec-core-3.12.0/exe/rspec:4:in `
' 1054s 1054s 8) A Ruby subclass of a Java concrete class can not invoke package-visible methods of the superclass 1054s # these should raise NoMethodError 1054s # ./spec/java_integration/types/extension_spec.rb:39 1054s 1054s 9) A Ruby subclass of a Java concrete class can not invoke private methods of the superclass 1054s # this should raise NoMethodError 1054s Failure/Error: expect {subtype.new.go}.to raise_error(NoMethodError) 1054s expected NoMethodError but nothing was raised 1054s # /usr/share/rubygems-integration/all/gems/rspec-support-3.12.0/lib/rspec/support.rb:102:in `block in Support' 1054s # /usr/share/rubygems-integration/all/gems/rspec-support-3.12.0/lib/rspec/support.rb:111:in `notify_failure' 1054s # /usr/share/rubygems-integration/all/gems/rspec-expectations-3.12.1/lib/rspec/expectations/fail_with.rb:35:in `fail_with' 1054s # /usr/share/rubygems-integration/all/gems/rspec-expectations-3.12.1/lib/rspec/expectations/handler.rb:40:in `handle_failure' 1054s # /usr/share/rubygems-integration/all/gems/rspec-expectations-3.12.1/lib/rspec/expectations/handler.rb:56:in `block in handle_matcher' 1054s # /usr/share/rubygems-integration/all/gems/rspec-expectations-3.12.1/lib/rspec/expectations/handler.rb:27:in `with_matcher' 1054s # /usr/share/rubygems-integration/all/gems/rspec-expectations-3.12.1/lib/rspec/expectations/handler.rb:48:in `handle_matcher' 1054s # /usr/share/rubygems-integration/all/gems/rspec-expectations-3.12.1/lib/rspec/expectations/expectation_target.rb:65:in `to' 1054s # /usr/share/rubygems-integration/all/gems/rspec-expectations-3.12.1/lib/rspec/expectations/expectation_target.rb:139:in `to' 1054s # ./spec/java_integration/types/extension_spec.rb:78:in `block in
' 1054s # org/jruby/RubyBasicObject.java:2620:in `instance_exec' 1054s # /usr/share/rubygems-integration/all/gems/rspec-core-3.12.0/lib/rspec/core/example.rb:263:in `block in run' 1054s # /usr/share/rubygems-integration/all/gems/rspec-core-3.12.0/lib/rspec/core/example.rb:511:in `block in with_around_and_singleton_context_hooks' 1054s # /usr/share/rubygems-integration/all/gems/rspec-core-3.12.0/lib/rspec/core/example.rb:468:in `block in with_around_example_hooks' 1054s # /usr/share/rubygems-integration/all/gems/rspec-core-3.12.0/lib/rspec/core/hooks.rb:486:in `block in run' 1054s # /usr/share/rubygems-integration/all/gems/rspec-core-3.12.0/lib/rspec/core/hooks.rb:624:in `run_around_example_hooks_for' 1054s # /usr/share/rubygems-integration/all/gems/rspec-core-3.12.0/lib/rspec/core/hooks.rb:486:in `run' 1054s # /usr/share/rubygems-integration/all/gems/rspec-core-3.12.0/lib/rspec/core/example.rb:468:in `with_around_example_hooks' 1054s # /usr/share/rubygems-integration/all/gems/rspec-core-3.12.0/lib/rspec/core/example.rb:511:in `with_around_and_singleton_context_hooks' 1054s # /usr/share/rubygems-integration/all/gems/rspec-core-3.12.0/lib/rspec/core/example.rb:259:in `run' 1054s # /usr/share/rubygems-integration/all/gems/rspec-core-3.12.0/lib/rspec/core/example_group.rb:646:in `block in run_examples' 1054s # org/jruby/RubyArray.java:2805:in `map' 1054s # /usr/share/rubygems-integration/all/gems/rspec-core-3.12.0/lib/rspec/core/example_group.rb:651:in `run_examples' 1054s # /usr/share/rubygems-integration/all/gems/rspec-core-3.12.0/lib/rspec/core/example_group.rb:607:in `run' 1054s # /usr/share/rubygems-integration/all/gems/rspec-core-3.12.0/lib/rspec/core/runner.rb:121:in `block in run_specs' 1054s # org/jruby/RubyArray.java:2805:in `map' 1054s # /usr/share/rubygems-integration/all/gems/rspec-core-3.12.0/lib/rspec/core/runner.rb:121:in `block in run_specs' 1054s # /usr/share/rubygems-integration/all/gems/rspec-core-3.12.0/lib/rspec/core/configuration.rb:2070:in `with_suite_hooks' 1054s # /usr/share/rubygems-integration/all/gems/rspec-core-3.12.0/lib/rspec/core/runner.rb:116:in `block in run_specs' 1054s # /usr/share/rubygems-integration/all/gems/rspec-core-3.12.0/lib/rspec/core/reporter.rb:74:in `report' 1054s # /usr/share/rubygems-integration/all/gems/rspec-core-3.12.0/lib/rspec/core/runner.rb:115:in `run_specs' 1054s # /usr/share/rubygems-integration/all/gems/rspec-core-3.12.0/lib/rspec/core/runner.rb:89:in `run' 1054s # /usr/share/rubygems-integration/all/gems/rspec-core-3.12.0/lib/rspec/core/runner.rb:71:in `run' 1054s # /usr/share/rubygems-integration/all/gems/rspec-core-3.12.0/lib/rspec/core/runner.rb:45:in `invoke' 1054s # /usr/share/rubygems-integration/all/gems/rspec-core-3.12.0/exe/rspec:4:in `
' 1054s 1054s 10) a java.util.Map instance compares with a Hash 1054s # TODO need more handling to compare Map-s with Hash-es (as expected) 1054s Failure/Error: expect( m2 > m1 ).to be true 1054s 1054s expected true 1054s got false 1054s # /usr/share/rubygems-integration/all/gems/rspec-support-3.12.0/lib/rspec/support.rb:102:in `block in Support' 1054s # /usr/share/rubygems-integration/all/gems/rspec-support-3.12.0/lib/rspec/support.rb:111:in `notify_failure' 1054s # /usr/share/rubygems-integration/all/gems/rspec-expectations-3.12.1/lib/rspec/expectations/fail_with.rb:35:in `fail_with' 1054s # /usr/share/rubygems-integration/all/gems/rspec-expectations-3.12.1/lib/rspec/expectations/handler.rb:40:in `handle_failure' 1054s # /usr/share/rubygems-integration/all/gems/rspec-expectations-3.12.1/lib/rspec/expectations/handler.rb:56:in `block in handle_matcher' 1054s # /usr/share/rubygems-integration/all/gems/rspec-expectations-3.12.1/lib/rspec/expectations/handler.rb:27:in `with_matcher' 1054s # /usr/share/rubygems-integration/all/gems/rspec-expectations-3.12.1/lib/rspec/expectations/handler.rb:48:in `handle_matcher' 1054s # /usr/share/rubygems-integration/all/gems/rspec-expectations-3.12.1/lib/rspec/expectations/expectation_target.rb:65:in `to' 1054s # /usr/share/rubygems-integration/all/gems/rspec-expectations-3.12.1/lib/rspec/expectations/expectation_target.rb:101:in `to' 1054s # ./spec/java_integration/types/map_spec.rb:44:in `block in
' 1054s # org/jruby/RubyBasicObject.java:2620:in `instance_exec' 1054s # /usr/share/rubygems-integration/all/gems/rspec-core-3.12.0/lib/rspec/core/example.rb:263:in `block in run' 1054s # /usr/share/rubygems-integration/all/gems/rspec-core-3.12.0/lib/rspec/core/example.rb:511:in `block in with_around_and_singleton_context_hooks' 1054s # /usr/share/rubygems-integration/all/gems/rspec-core-3.12.0/lib/rspec/core/example.rb:468:in `block in with_around_example_hooks' 1054s # /usr/share/rubygems-integration/all/gems/rspec-core-3.12.0/lib/rspec/core/hooks.rb:486:in `block in run' 1054s # /usr/share/rubygems-integration/all/gems/rspec-core-3.12.0/lib/rspec/core/hooks.rb:624:in `run_around_example_hooks_for' 1054s # /usr/share/rubygems-integration/all/gems/rspec-core-3.12.0/lib/rspec/core/hooks.rb:486:in `run' 1054s # /usr/share/rubygems-integration/all/gems/rspec-core-3.12.0/lib/rspec/core/example.rb:468:in `with_around_example_hooks' 1054s # /usr/share/rubygems-integration/all/gems/rspec-core-3.12.0/lib/rspec/core/example.rb:511:in `with_around_and_singleton_context_hooks' 1054s # /usr/share/rubygems-integration/all/gems/rspec-core-3.12.0/lib/rspec/core/example.rb:259:in `run' 1054s # /usr/share/rubygems-integration/all/gems/rspec-core-3.12.0/lib/rspec/core/example_group.rb:646:in `block in run_examples' 1054s # org/jruby/RubyArray.java:2805:in `map' 1054s # /usr/share/rubygems-integration/all/gems/rspec-core-3.12.0/lib/rspec/core/example_group.rb:651:in `run_examples' 1054s # /usr/share/rubygems-integration/all/gems/rspec-core-3.12.0/lib/rspec/core/example_group.rb:607:in `run' 1054s # /usr/share/rubygems-integration/all/gems/rspec-core-3.12.0/lib/rspec/core/runner.rb:121:in `block in run_specs' 1054s # org/jruby/RubyArray.java:2805:in `map' 1054s # /usr/share/rubygems-integration/all/gems/rspec-core-3.12.0/lib/rspec/core/runner.rb:121:in `block in run_specs' 1054s # /usr/share/rubygems-integration/all/gems/rspec-core-3.12.0/lib/rspec/core/configuration.rb:2070:in `with_suite_hooks' 1054s # /usr/share/rubygems-integration/all/gems/rspec-core-3.12.0/lib/rspec/core/runner.rb:116:in `block in run_specs' 1054s # /usr/share/rubygems-integration/all/gems/rspec-core-3.12.0/lib/rspec/core/reporter.rb:74:in `report' 1054s # /usr/share/rubygems-integration/all/gems/rspec-core-3.12.0/lib/rspec/core/runner.rb:115:in `run_specs' 1054s # /usr/share/rubygems-integration/all/gems/rspec-core-3.12.0/lib/rspec/core/runner.rb:89:in `run' 1054s # /usr/share/rubygems-integration/all/gems/rspec-core-3.12.0/lib/rspec/core/runner.rb:71:in `run' 1054s # /usr/share/rubygems-integration/all/gems/rspec-core-3.12.0/lib/rspec/core/runner.rb:45:in `invoke' 1054s # /usr/share/rubygems-integration/all/gems/rspec-core-3.12.0/exe/rspec:4:in `
' 1054s 1054s 1 deprecation warning total 1054s 1054s Finished in 14.32 seconds (files took 6.34 seconds to load) 1054s 925 examples, 0 failures, 10 pending 1054s 1055s autopkgtest [11:12:18]: test spec-ji: -----------------------] 1055s spec-ji PASS 1055s autopkgtest [11:12:18]: test spec-ji: - - - - - - - - - - results - - - - - - - - - - 1056s autopkgtest [11:12:19]: test spec-jruby: preparing testbed 1131s autopkgtest [11:13:34]: testbed dpkg architecture: arm64 1131s autopkgtest [11:13:34]: testbed apt version: 2.7.12 1131s autopkgtest [11:13:34]: @@@@@@@@@@@@@@@@@@@@ test bed setup 1131s Get:1 http://ftpmaster.internal/ubuntu noble-proposed InRelease [117 kB] 1132s Get:2 http://ftpmaster.internal/ubuntu noble-proposed/universe Sources [3766 kB] 1132s Get:3 http://ftpmaster.internal/ubuntu noble-proposed/main Sources [496 kB] 1132s Get:4 http://ftpmaster.internal/ubuntu noble-proposed/restricted Sources [6540 B] 1132s Get:5 http://ftpmaster.internal/ubuntu noble-proposed/multiverse Sources [52.7 kB] 1132s Get:6 http://ftpmaster.internal/ubuntu noble-proposed/main arm64 Packages [670 kB] 1132s Get:7 http://ftpmaster.internal/ubuntu noble-proposed/main arm64 c-n-f Metadata [3144 B] 1132s Get:8 http://ftpmaster.internal/ubuntu noble-proposed/restricted arm64 Packages [41.7 kB] 1132s Get:9 http://ftpmaster.internal/ubuntu noble-proposed/restricted arm64 c-n-f Metadata [116 B] 1132s Get:10 http://ftpmaster.internal/ubuntu noble-proposed/universe arm64 Packages [4234 kB] 1132s Get:11 http://ftpmaster.internal/ubuntu noble-proposed/universe arm64 c-n-f Metadata [8528 B] 1132s Get:12 http://ftpmaster.internal/ubuntu noble-proposed/multiverse arm64 Packages [56.7 kB] 1132s Get:13 http://ftpmaster.internal/ubuntu noble-proposed/multiverse arm64 c-n-f Metadata [116 B] 1134s Fetched 9452 kB in 2s (5375 kB/s) 1134s Reading package lists... 1137s Reading package lists... 1137s Building dependency tree... 1137s Reading state information... 1138s Calculating upgrade... 1138s 0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded. 1138s Reading package lists... 1139s Building dependency tree... 1139s Reading state information... 1139s 0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded. 1140s Hit:1 http://ftpmaster.internal/ubuntu noble InRelease 1140s Hit:2 http://ftpmaster.internal/ubuntu noble-updates InRelease 1140s Hit:3 http://ftpmaster.internal/ubuntu noble-security InRelease 1140s Hit:4 http://ftpmaster.internal/ubuntu noble-proposed InRelease 1141s Reading package lists... 1141s Reading package lists... 1142s Building dependency tree... 1142s Reading state information... 1142s Calculating upgrade... 1142s 0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded. 1142s Reading package lists... 1143s Building dependency tree... 1143s Reading state information... 1143s 0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded. 1150s Reading package lists... 1150s Building dependency tree... 1150s Reading state information... 1151s Starting pkgProblemResolver with broken count: 0 1151s Starting 2 pkgProblemResolver with broken count: 0 1151s Done 1151s The following additional packages will be installed: 1151s ant ca-certificates-java default-jre-headless fontconfig-config 1151s fonts-dejavu-core fonts-dejavu-mono java-common jruby libasm-java libasound2 1151s libasound2-data libavahi-client3 libavahi-common-data libavahi-common3 1151s libbackport9-java libcups2 libdirgra-java libfixposix4t64 libfontconfig1 1151s libgmp-dev libgmpxx4ldbl libgraphite2-3 libharfbuzz0b 1151s libhawtjni-runtime-java libheadius-options-java libinvokebinder-java 1151s libjansi-native-java libjansi1-java libjcodings-java libjffi-java 1151s libjffi-jni libjitescript-java libjline2-java libjnr-constants-java 1151s libjnr-enxio-java libjnr-ffi-java libjnr-netdb-java libjnr-posix-java 1151s libjnr-unixsocket-java libjnr-x86asm-java libjoda-time-java libjpeg-turbo8 1151s libjpeg8 libjruby-joni-java libjzlib-java liblcms2-2 libpcsclite1 libruby 1151s libruby3.1 libruby3.2 libsnakeyaml-engine-java openjdk-21-jre-headless rake 1151s ruby ruby-all-dev ruby-diff-lcs ruby-net-telnet ruby-rspec ruby-rspec-core 1151s ruby-rspec-expectations ruby-rspec-mocks ruby-rspec-support ruby-rubygems 1151s ruby-sdbm ruby-webrick ruby-xmlrpc ruby3.1 ruby3.1-dev ruby3.2 ruby3.2-dev 1151s rubygems-integration 1151s Suggested packages: 1151s ant-doc default-jdk | java-compiler | java-sdk default-jre 1151s libasound2-plugins alsa-utils cups-common gmp-doc libgmp10-doc libmpfr-dev 1151s libheadius-options-java-doc libinvokebinder-java-doc libjnr-ffi-java-doc 1151s libjnr-netdb-java-doc libjnr-posix-java-doc libjoda-convert-java 1151s liblcms2-utils pcscd libnss-mdns fonts-dejavu-extra fonts-ipafont-gothic 1151s fonts-ipafont-mincho fonts-wqy-microhei | fonts-wqy-zenhei fonts-indic ri 1151s ruby-dev bundler 1151s Recommended packages: 1151s ant-optional fonts-lato alsa-ucm-conf alsa-topology-conf zip libjs-jquery 1151s ruby3.1-doc ruby3.2-doc 1151s The following NEW packages will be installed: 1151s ant autopkgtest-satdep ca-certificates-java default-jre-headless 1151s fontconfig-config fonts-dejavu-core fonts-dejavu-mono java-common jruby 1151s libasm-java libasound2 libasound2-data libavahi-client3 libavahi-common-data 1151s libavahi-common3 libbackport9-java libcups2 libdirgra-java libfixposix4t64 1151s libfontconfig1 libgmp-dev libgmpxx4ldbl libgraphite2-3 libharfbuzz0b 1151s libhawtjni-runtime-java libheadius-options-java libinvokebinder-java 1151s libjansi-native-java libjansi1-java libjcodings-java libjffi-java 1151s libjffi-jni libjitescript-java libjline2-java libjnr-constants-java 1151s libjnr-enxio-java libjnr-ffi-java libjnr-netdb-java libjnr-posix-java 1151s libjnr-unixsocket-java libjnr-x86asm-java libjoda-time-java libjpeg-turbo8 1151s libjpeg8 libjruby-joni-java libjzlib-java liblcms2-2 libpcsclite1 libruby 1151s libruby3.1 libruby3.2 libsnakeyaml-engine-java openjdk-21-jre-headless rake 1151s ruby ruby-all-dev ruby-diff-lcs ruby-net-telnet ruby-rspec ruby-rspec-core 1151s ruby-rspec-expectations ruby-rspec-mocks ruby-rspec-support ruby-rubygems 1151s ruby-sdbm ruby-webrick ruby-xmlrpc ruby3.1 ruby3.1-dev ruby3.2 ruby3.2-dev 1151s rubygems-integration 1151s 0 upgraded, 72 newly installed, 0 to remove and 0 not upgraded. 1151s Need to get 103 MB/103 MB of archives. 1151s After this operation, 343 MB of additional disk space will be used. 1151s Get:1 /tmp/autopkgtest.nFBjtB/8-autopkgtest-satdep.deb autopkgtest-satdep arm64 0 [760 B] 1151s Get:2 http://ftpmaster.internal/ubuntu noble/main arm64 ca-certificates-java all 20240118 [11.6 kB] 1151s Get:3 http://ftpmaster.internal/ubuntu noble/main arm64 java-common all 0.75+exp1 [6798 B] 1151s Get:4 http://ftpmaster.internal/ubuntu noble/main arm64 libavahi-common-data arm64 0.8-13ubuntu2 [29.5 kB] 1152s Get:5 http://ftpmaster.internal/ubuntu noble/main arm64 libavahi-common3 arm64 0.8-13ubuntu2 [23.2 kB] 1152s Get:6 http://ftpmaster.internal/ubuntu noble/main arm64 libavahi-client3 arm64 0.8-13ubuntu2 [27.3 kB] 1152s Get:7 http://ftpmaster.internal/ubuntu noble/main arm64 libcups2 arm64 2.4.6-0ubuntu3 [270 kB] 1152s Get:8 http://ftpmaster.internal/ubuntu noble/main arm64 liblcms2-2 arm64 2.14-2 [159 kB] 1152s Get:9 http://ftpmaster.internal/ubuntu noble/main arm64 libjpeg-turbo8 arm64 2.1.5-2ubuntu1 [160 kB] 1152s Get:10 http://ftpmaster.internal/ubuntu noble/main arm64 libjpeg8 arm64 8c-2ubuntu11 [2148 B] 1152s Get:11 http://ftpmaster.internal/ubuntu noble/main arm64 fonts-dejavu-mono all 2.37-8 [502 kB] 1152s Get:12 http://ftpmaster.internal/ubuntu noble/main arm64 fonts-dejavu-core all 2.37-8 [835 kB] 1152s Get:13 http://ftpmaster.internal/ubuntu noble/main arm64 fontconfig-config arm64 2.15.0-1ubuntu1 [37.0 kB] 1152s Get:14 http://ftpmaster.internal/ubuntu noble/main arm64 libfontconfig1 arm64 2.15.0-1ubuntu1 [142 kB] 1152s Get:15 http://ftpmaster.internal/ubuntu noble/main arm64 libasound2-data all 1.2.10-3build1 [20.7 kB] 1152s Get:16 http://ftpmaster.internal/ubuntu noble/main arm64 libasound2 arm64 1.2.10-3build1 [386 kB] 1152s Get:17 http://ftpmaster.internal/ubuntu noble/main arm64 libgraphite2-3 arm64 1.3.14-2 [81.5 kB] 1152s Get:18 http://ftpmaster.internal/ubuntu noble/main arm64 libharfbuzz0b arm64 8.3.0-2 [463 kB] 1152s Get:19 http://ftpmaster.internal/ubuntu noble/main arm64 libpcsclite1 arm64 2.0.0-1 [21.2 kB] 1152s Get:20 http://ftpmaster.internal/ubuntu noble/main arm64 openjdk-21-jre-headless arm64 21.0.2+13-2 [45.8 MB] 1154s Get:21 http://ftpmaster.internal/ubuntu noble/main arm64 default-jre-headless arm64 2:1.21-75+exp1 [3096 B] 1154s Get:22 http://ftpmaster.internal/ubuntu noble/universe arm64 ant all 1.10.14-1 [2147 kB] 1154s Get:23 http://ftpmaster.internal/ubuntu noble/universe arm64 libasm-java all 9.6~us1-0ubuntu1 [386 kB] 1154s Get:24 http://ftpmaster.internal/ubuntu noble/universe arm64 libbackport9-java all 1.10-2 [13.2 kB] 1154s Get:25 http://ftpmaster.internal/ubuntu noble/universe arm64 libdirgra-java all 0.4-2 [21.6 kB] 1154s Get:26 http://ftpmaster.internal/ubuntu noble/universe arm64 libfixposix4t64 arm64 1:0.5.1-1+nmu1.1 [16.9 kB] 1154s Get:27 http://ftpmaster.internal/ubuntu noble/universe arm64 libheadius-options-java all 1.7-1 [18.2 kB] 1154s Get:28 http://ftpmaster.internal/ubuntu noble/universe arm64 libinvokebinder-java all 1.13-1 [51.7 kB] 1154s Get:29 http://ftpmaster.internal/ubuntu noble/universe arm64 libhawtjni-runtime-java all 1.18-1 [28.9 kB] 1154s Get:30 http://ftpmaster.internal/ubuntu noble/universe arm64 libjansi-native-java all 1.8-2 [24.1 kB] 1154s Get:31 http://ftpmaster.internal/ubuntu noble/universe arm64 libjansi1-java all 1.18-3ubuntu1 [56.0 kB] 1154s Get:32 http://ftpmaster.internal/ubuntu noble/universe arm64 libjcodings-java all 1.0.58-1 [1474 kB] 1154s Get:33 http://ftpmaster.internal/ubuntu noble/universe arm64 libjffi-jni arm64 1.3.13+ds-1 [29.8 kB] 1154s Get:34 http://ftpmaster.internal/ubuntu noble/universe arm64 libjffi-java all 1.3.13+ds-1 [112 kB] 1154s Get:35 http://ftpmaster.internal/ubuntu noble/universe arm64 libjitescript-java all 0.4.3-1 [24.4 kB] 1154s Get:36 http://ftpmaster.internal/ubuntu noble/universe arm64 libjline2-java all 2.14.6-5 [150 kB] 1154s Get:37 http://ftpmaster.internal/ubuntu noble/universe arm64 libjnr-constants-java all 0.10.4-2 [1397 kB] 1154s Get:38 http://ftpmaster.internal/ubuntu noble/universe arm64 libjnr-x86asm-java all 1.0.2-5.1 [207 kB] 1154s Get:39 http://ftpmaster.internal/ubuntu noble/universe arm64 libjnr-ffi-java all 2.2.15-2 [627 kB] 1154s Get:40 http://ftpmaster.internal/ubuntu noble/universe arm64 libjnr-enxio-java all 0.32.16-1 [33.7 kB] 1154s Get:41 http://ftpmaster.internal/ubuntu noble/universe arm64 libjnr-netdb-java all 1.1.6-1.1 [58.8 kB] 1154s Get:42 http://ftpmaster.internal/ubuntu noble/universe arm64 libjnr-posix-java all 3.1.18-1 [267 kB] 1154s Get:43 http://ftpmaster.internal/ubuntu noble/universe arm64 libjnr-unixsocket-java all 0.38.21-2 [46.9 kB] 1154s Get:44 http://ftpmaster.internal/ubuntu noble/universe arm64 libjoda-time-java all 2.10.14-1 [535 kB] 1154s Get:45 http://ftpmaster.internal/ubuntu noble/universe arm64 libjruby-joni-java all 2.2.1-1 [222 kB] 1154s Get:46 http://ftpmaster.internal/ubuntu noble/universe arm64 libjzlib-java all 1.1.3-3 [76.8 kB] 1154s Get:47 http://ftpmaster.internal/ubuntu noble/universe arm64 libsnakeyaml-engine-java all 2.7+ds-3 [258 kB] 1154s Get:48 http://ftpmaster.internal/ubuntu noble-proposed/universe arm64 jruby all 9.4.6.0+ds-1ubuntu3 [33.3 MB] 1155s Get:49 http://ftpmaster.internal/ubuntu noble/main arm64 libgmpxx4ldbl arm64 2:6.3.0+dfsg-2ubuntu4 [9950 B] 1155s Get:50 http://ftpmaster.internal/ubuntu noble/main arm64 libgmp-dev arm64 2:6.3.0+dfsg-2ubuntu4 [330 kB] 1155s Get:51 http://ftpmaster.internal/ubuntu noble/main arm64 rubygems-integration all 1.18 [5336 B] 1155s Get:52 http://ftpmaster.internal/ubuntu noble/main arm64 ruby3.1 arm64 3.1.2-7ubuntu4 [49.0 kB] 1155s Get:53 http://ftpmaster.internal/ubuntu noble/main arm64 ruby-rubygems all 3.4.20-1 [238 kB] 1155s Get:54 http://ftpmaster.internal/ubuntu noble/main arm64 ruby arm64 1:3.1+1 [3464 B] 1155s Get:55 http://ftpmaster.internal/ubuntu noble/main arm64 rake all 13.0.6-3 [61.6 kB] 1155s Get:56 http://ftpmaster.internal/ubuntu noble/main arm64 ruby-net-telnet all 0.2.0-1 [13.3 kB] 1155s Get:57 http://ftpmaster.internal/ubuntu noble/main arm64 ruby-webrick all 1.8.1-1 [52.3 kB] 1155s Get:58 http://ftpmaster.internal/ubuntu noble/main arm64 ruby-xmlrpc all 0.3.2-2 [24.8 kB] 1155s Get:59 http://ftpmaster.internal/ubuntu noble/main arm64 libruby3.2 arm64 3.2.3-1 [5345 kB] 1155s Get:60 http://ftpmaster.internal/ubuntu noble/main arm64 ruby-sdbm arm64 1.0.0-5build3 [17.9 kB] 1155s Get:61 http://ftpmaster.internal/ubuntu noble/main arm64 libruby3.1 arm64 3.1.2-7ubuntu4 [5115 kB] 1156s Get:62 http://ftpmaster.internal/ubuntu noble/main arm64 libruby arm64 1:3.1+1 [4640 B] 1156s Get:63 http://ftpmaster.internal/ubuntu noble/main arm64 ruby3.1-dev arm64 3.1.2-7ubuntu4 [398 kB] 1156s Get:64 http://ftpmaster.internal/ubuntu noble/main arm64 ruby3.2 arm64 3.2.3-1 [50.8 kB] 1156s Get:65 http://ftpmaster.internal/ubuntu noble/main arm64 ruby3.2-dev arm64 3.2.3-1 [403 kB] 1156s Get:66 http://ftpmaster.internal/ubuntu noble/main arm64 ruby-all-dev arm64 1:3.1+1 [5726 B] 1156s Get:67 http://ftpmaster.internal/ubuntu noble/universe arm64 ruby-diff-lcs all 1.5.0-1 [23.9 kB] 1156s Get:68 http://ftpmaster.internal/ubuntu noble/universe arm64 ruby-rspec-support all 3.12.0c0e1m1s0-1 [28.8 kB] 1156s Get:69 http://ftpmaster.internal/ubuntu noble/universe arm64 ruby-rspec-core all 3.12.0c0e1m1s0-1 [163 kB] 1156s Get:70 http://ftpmaster.internal/ubuntu noble/universe arm64 ruby-rspec-expectations all 3.12.0c0e1m1s0-1 [89.2 kB] 1156s Get:71 http://ftpmaster.internal/ubuntu noble/universe arm64 ruby-rspec-mocks all 3.12.0c0e1m1s0-1 [79.4 kB] 1156s Get:72 http://ftpmaster.internal/ubuntu noble/universe arm64 ruby-rspec all 3.12.0c0e1m1s0-1 [3506 B] 1156s Fetched 103 MB in 5s (22.7 MB/s) 1156s Selecting previously unselected package ca-certificates-java. 1157s (Reading database ... (Reading database ... 5% (Reading database ... 10% (Reading database ... 15% (Reading database ... 20% (Reading database ... 25% (Reading database ... 30% (Reading database ... 35% (Reading database ... 40% (Reading database ... 45% (Reading database ... 50% (Reading database ... 55% (Reading database ... 60% (Reading database ... 65% (Reading database ... 70% (Reading database ... 75% (Reading database ... 80% (Reading database ... 85% (Reading database ... 90% (Reading database ... 95% (Reading database ... 100% (Reading database ... 74758 files and directories currently installed.) 1157s Preparing to unpack .../00-ca-certificates-java_20240118_all.deb ... 1157s Unpacking ca-certificates-java (20240118) ... 1157s Selecting previously unselected package java-common. 1157s Preparing to unpack .../01-java-common_0.75+exp1_all.deb ... 1157s Unpacking java-common (0.75+exp1) ... 1157s Selecting previously unselected package libavahi-common-data:arm64. 1157s Preparing to unpack .../02-libavahi-common-data_0.8-13ubuntu2_arm64.deb ... 1157s Unpacking libavahi-common-data:arm64 (0.8-13ubuntu2) ... 1157s Selecting previously unselected package libavahi-common3:arm64. 1157s Preparing to unpack .../03-libavahi-common3_0.8-13ubuntu2_arm64.deb ... 1157s Unpacking libavahi-common3:arm64 (0.8-13ubuntu2) ... 1157s Selecting previously unselected package libavahi-client3:arm64. 1157s Preparing to unpack .../04-libavahi-client3_0.8-13ubuntu2_arm64.deb ... 1157s Unpacking libavahi-client3:arm64 (0.8-13ubuntu2) ... 1157s Selecting previously unselected package libcups2:arm64. 1157s Preparing to unpack .../05-libcups2_2.4.6-0ubuntu3_arm64.deb ... 1157s Unpacking libcups2:arm64 (2.4.6-0ubuntu3) ... 1157s Selecting previously unselected package liblcms2-2:arm64. 1157s Preparing to unpack .../06-liblcms2-2_2.14-2_arm64.deb ... 1157s Unpacking liblcms2-2:arm64 (2.14-2) ... 1157s Selecting previously unselected package libjpeg-turbo8:arm64. 1157s Preparing to unpack .../07-libjpeg-turbo8_2.1.5-2ubuntu1_arm64.deb ... 1157s Unpacking libjpeg-turbo8:arm64 (2.1.5-2ubuntu1) ... 1157s Selecting previously unselected package libjpeg8:arm64. 1157s Preparing to unpack .../08-libjpeg8_8c-2ubuntu11_arm64.deb ... 1157s Unpacking libjpeg8:arm64 (8c-2ubuntu11) ... 1157s Selecting previously unselected package fonts-dejavu-mono. 1157s Preparing to unpack .../09-fonts-dejavu-mono_2.37-8_all.deb ... 1157s Unpacking fonts-dejavu-mono (2.37-8) ... 1157s Selecting previously unselected package fonts-dejavu-core. 1157s Preparing to unpack .../10-fonts-dejavu-core_2.37-8_all.deb ... 1157s Unpacking fonts-dejavu-core (2.37-8) ... 1157s Selecting previously unselected package fontconfig-config. 1157s Preparing to unpack .../11-fontconfig-config_2.15.0-1ubuntu1_arm64.deb ... 1157s Unpacking fontconfig-config (2.15.0-1ubuntu1) ... 1157s Selecting previously unselected package libfontconfig1:arm64. 1157s Preparing to unpack .../12-libfontconfig1_2.15.0-1ubuntu1_arm64.deb ... 1157s Unpacking libfontconfig1:arm64 (2.15.0-1ubuntu1) ... 1157s Selecting previously unselected package libasound2-data. 1157s Preparing to unpack .../13-libasound2-data_1.2.10-3build1_all.deb ... 1157s Unpacking libasound2-data (1.2.10-3build1) ... 1157s Selecting previously unselected package libasound2:arm64. 1157s Preparing to unpack .../14-libasound2_1.2.10-3build1_arm64.deb ... 1157s Unpacking libasound2:arm64 (1.2.10-3build1) ... 1157s Selecting previously unselected package libgraphite2-3:arm64. 1157s Preparing to unpack .../15-libgraphite2-3_1.3.14-2_arm64.deb ... 1157s Unpacking libgraphite2-3:arm64 (1.3.14-2) ... 1157s Selecting previously unselected package libharfbuzz0b:arm64. 1157s Preparing to unpack .../16-libharfbuzz0b_8.3.0-2_arm64.deb ... 1157s Unpacking libharfbuzz0b:arm64 (8.3.0-2) ... 1157s Selecting previously unselected package libpcsclite1:arm64. 1157s Preparing to unpack .../17-libpcsclite1_2.0.0-1_arm64.deb ... 1157s Unpacking libpcsclite1:arm64 (2.0.0-1) ... 1157s Selecting previously unselected package openjdk-21-jre-headless:arm64. 1157s Preparing to unpack .../18-openjdk-21-jre-headless_21.0.2+13-2_arm64.deb ... 1157s Unpacking openjdk-21-jre-headless:arm64 (21.0.2+13-2) ... 1158s Selecting previously unselected package default-jre-headless. 1159s Preparing to unpack .../19-default-jre-headless_2%3a1.21-75+exp1_arm64.deb ... 1159s Unpacking default-jre-headless (2:1.21-75+exp1) ... 1159s Selecting previously unselected package ant. 1159s Preparing to unpack .../20-ant_1.10.14-1_all.deb ... 1159s Unpacking ant (1.10.14-1) ... 1159s Selecting previously unselected package libasm-java. 1159s Preparing to unpack .../21-libasm-java_9.6~us1-0ubuntu1_all.deb ... 1159s Unpacking libasm-java (9.6~us1-0ubuntu1) ... 1159s Selecting previously unselected package libbackport9-java. 1159s Preparing to unpack .../22-libbackport9-java_1.10-2_all.deb ... 1159s Unpacking libbackport9-java (1.10-2) ... 1159s Selecting previously unselected package libdirgra-java. 1159s Preparing to unpack .../23-libdirgra-java_0.4-2_all.deb ... 1159s Unpacking libdirgra-java (0.4-2) ... 1159s Selecting previously unselected package libfixposix4t64:arm64. 1159s Preparing to unpack .../24-libfixposix4t64_1%3a0.5.1-1+nmu1.1_arm64.deb ... 1159s Unpacking libfixposix4t64:arm64 (1:0.5.1-1+nmu1.1) ... 1159s Selecting previously unselected package libheadius-options-java. 1159s Preparing to unpack .../25-libheadius-options-java_1.7-1_all.deb ... 1159s Unpacking libheadius-options-java (1.7-1) ... 1159s Selecting previously unselected package libinvokebinder-java. 1159s Preparing to unpack .../26-libinvokebinder-java_1.13-1_all.deb ... 1159s Unpacking libinvokebinder-java (1.13-1) ... 1159s Selecting previously unselected package libhawtjni-runtime-java. 1159s Preparing to unpack .../27-libhawtjni-runtime-java_1.18-1_all.deb ... 1159s Unpacking libhawtjni-runtime-java (1.18-1) ... 1159s Selecting previously unselected package libjansi-native-java. 1159s Preparing to unpack .../28-libjansi-native-java_1.8-2_all.deb ... 1159s Unpacking libjansi-native-java (1.8-2) ... 1159s Selecting previously unselected package libjansi1-java. 1159s Preparing to unpack .../29-libjansi1-java_1.18-3ubuntu1_all.deb ... 1159s Unpacking libjansi1-java (1.18-3ubuntu1) ... 1159s Selecting previously unselected package libjcodings-java. 1159s Preparing to unpack .../30-libjcodings-java_1.0.58-1_all.deb ... 1159s Unpacking libjcodings-java (1.0.58-1) ... 1159s Selecting previously unselected package libjffi-jni:arm64. 1159s Preparing to unpack .../31-libjffi-jni_1.3.13+ds-1_arm64.deb ... 1159s Unpacking libjffi-jni:arm64 (1.3.13+ds-1) ... 1159s Selecting previously unselected package libjffi-java. 1159s Preparing to unpack .../32-libjffi-java_1.3.13+ds-1_all.deb ... 1159s Unpacking libjffi-java (1.3.13+ds-1) ... 1159s Selecting previously unselected package libjitescript-java. 1159s Preparing to unpack .../33-libjitescript-java_0.4.3-1_all.deb ... 1159s Unpacking libjitescript-java (0.4.3-1) ... 1159s Selecting previously unselected package libjline2-java. 1159s Preparing to unpack .../34-libjline2-java_2.14.6-5_all.deb ... 1159s Unpacking libjline2-java (2.14.6-5) ... 1159s Selecting previously unselected package libjnr-constants-java. 1159s Preparing to unpack .../35-libjnr-constants-java_0.10.4-2_all.deb ... 1159s Unpacking libjnr-constants-java (0.10.4-2) ... 1159s Selecting previously unselected package libjnr-x86asm-java. 1159s Preparing to unpack .../36-libjnr-x86asm-java_1.0.2-5.1_all.deb ... 1159s Unpacking libjnr-x86asm-java (1.0.2-5.1) ... 1159s Selecting previously unselected package libjnr-ffi-java. 1159s Preparing to unpack .../37-libjnr-ffi-java_2.2.15-2_all.deb ... 1159s Unpacking libjnr-ffi-java (2.2.15-2) ... 1159s Selecting previously unselected package libjnr-enxio-java. 1159s Preparing to unpack .../38-libjnr-enxio-java_0.32.16-1_all.deb ... 1159s Unpacking libjnr-enxio-java (0.32.16-1) ... 1159s Selecting previously unselected package libjnr-netdb-java. 1159s Preparing to unpack .../39-libjnr-netdb-java_1.1.6-1.1_all.deb ... 1159s Unpacking libjnr-netdb-java (1.1.6-1.1) ... 1159s Selecting previously unselected package libjnr-posix-java. 1159s Preparing to unpack .../40-libjnr-posix-java_3.1.18-1_all.deb ... 1159s Unpacking libjnr-posix-java (3.1.18-1) ... 1159s Selecting previously unselected package libjnr-unixsocket-java. 1159s Preparing to unpack .../41-libjnr-unixsocket-java_0.38.21-2_all.deb ... 1159s Unpacking libjnr-unixsocket-java (0.38.21-2) ... 1159s Selecting previously unselected package libjoda-time-java. 1159s Preparing to unpack .../42-libjoda-time-java_2.10.14-1_all.deb ... 1159s Unpacking libjoda-time-java (2.10.14-1) ... 1159s Selecting previously unselected package libjruby-joni-java. 1159s Preparing to unpack .../43-libjruby-joni-java_2.2.1-1_all.deb ... 1159s Unpacking libjruby-joni-java (2.2.1-1) ... 1159s Selecting previously unselected package libjzlib-java. 1159s Preparing to unpack .../44-libjzlib-java_1.1.3-3_all.deb ... 1159s Unpacking libjzlib-java (1.1.3-3) ... 1159s Selecting previously unselected package libsnakeyaml-engine-java. 1159s Preparing to unpack .../45-libsnakeyaml-engine-java_2.7+ds-3_all.deb ... 1159s Unpacking libsnakeyaml-engine-java (2.7+ds-3) ... 1159s Selecting previously unselected package jruby. 1159s Preparing to unpack .../46-jruby_9.4.6.0+ds-1ubuntu3_all.deb ... 1159s Unpacking jruby (9.4.6.0+ds-1ubuntu3) ... 1160s Selecting previously unselected package libgmpxx4ldbl:arm64. 1160s Preparing to unpack .../47-libgmpxx4ldbl_2%3a6.3.0+dfsg-2ubuntu4_arm64.deb ... 1160s Unpacking libgmpxx4ldbl:arm64 (2:6.3.0+dfsg-2ubuntu4) ... 1160s Selecting previously unselected package libgmp-dev:arm64. 1160s Preparing to unpack .../48-libgmp-dev_2%3a6.3.0+dfsg-2ubuntu4_arm64.deb ... 1160s Unpacking libgmp-dev:arm64 (2:6.3.0+dfsg-2ubuntu4) ... 1160s Selecting previously unselected package rubygems-integration. 1160s Preparing to unpack .../49-rubygems-integration_1.18_all.deb ... 1160s Unpacking rubygems-integration (1.18) ... 1160s Selecting previously unselected package ruby3.1. 1160s Preparing to unpack .../50-ruby3.1_3.1.2-7ubuntu4_arm64.deb ... 1160s Unpacking ruby3.1 (3.1.2-7ubuntu4) ... 1160s Selecting previously unselected package ruby-rubygems. 1160s Preparing to unpack .../51-ruby-rubygems_3.4.20-1_all.deb ... 1160s Unpacking ruby-rubygems (3.4.20-1) ... 1160s Selecting previously unselected package ruby. 1160s Preparing to unpack .../52-ruby_1%3a3.1+1_arm64.deb ... 1160s Unpacking ruby (1:3.1+1) ... 1160s Selecting previously unselected package rake. 1160s Preparing to unpack .../53-rake_13.0.6-3_all.deb ... 1160s Unpacking rake (13.0.6-3) ... 1160s Selecting previously unselected package ruby-net-telnet. 1160s Preparing to unpack .../54-ruby-net-telnet_0.2.0-1_all.deb ... 1160s Unpacking ruby-net-telnet (0.2.0-1) ... 1160s Selecting previously unselected package ruby-webrick. 1160s Preparing to unpack .../55-ruby-webrick_1.8.1-1_all.deb ... 1160s Unpacking ruby-webrick (1.8.1-1) ... 1160s Selecting previously unselected package ruby-xmlrpc. 1160s Preparing to unpack .../56-ruby-xmlrpc_0.3.2-2_all.deb ... 1160s Unpacking ruby-xmlrpc (0.3.2-2) ... 1160s Selecting previously unselected package libruby3.2:arm64. 1160s Preparing to unpack .../57-libruby3.2_3.2.3-1_arm64.deb ... 1160s Unpacking libruby3.2:arm64 (3.2.3-1) ... 1160s Selecting previously unselected package ruby-sdbm:arm64. 1160s Preparing to unpack .../58-ruby-sdbm_1.0.0-5build3_arm64.deb ... 1160s Unpacking ruby-sdbm:arm64 (1.0.0-5build3) ... 1160s Selecting previously unselected package libruby3.1:arm64. 1160s Preparing to unpack .../59-libruby3.1_3.1.2-7ubuntu4_arm64.deb ... 1160s Unpacking libruby3.1:arm64 (3.1.2-7ubuntu4) ... 1161s Selecting previously unselected package libruby:arm64. 1161s Preparing to unpack .../60-libruby_1%3a3.1+1_arm64.deb ... 1161s Unpacking libruby:arm64 (1:3.1+1) ... 1161s Selecting previously unselected package ruby3.1-dev:arm64. 1161s Preparing to unpack .../61-ruby3.1-dev_3.1.2-7ubuntu4_arm64.deb ... 1161s Unpacking ruby3.1-dev:arm64 (3.1.2-7ubuntu4) ... 1161s Selecting previously unselected package ruby3.2. 1161s Preparing to unpack .../62-ruby3.2_3.2.3-1_arm64.deb ... 1161s Unpacking ruby3.2 (3.2.3-1) ... 1161s Selecting previously unselected package ruby3.2-dev:arm64. 1161s Preparing to unpack .../63-ruby3.2-dev_3.2.3-1_arm64.deb ... 1161s Unpacking ruby3.2-dev:arm64 (3.2.3-1) ... 1161s Selecting previously unselected package ruby-all-dev:arm64. 1161s Preparing to unpack .../64-ruby-all-dev_1%3a3.1+1_arm64.deb ... 1161s Unpacking ruby-all-dev:arm64 (1:3.1+1) ... 1161s Selecting previously unselected package ruby-diff-lcs. 1161s Preparing to unpack .../65-ruby-diff-lcs_1.5.0-1_all.deb ... 1161s Unpacking ruby-diff-lcs (1.5.0-1) ... 1161s Selecting previously unselected package ruby-rspec-support. 1161s Preparing to unpack .../66-ruby-rspec-support_3.12.0c0e1m1s0-1_all.deb ... 1161s Unpacking ruby-rspec-support (3.12.0c0e1m1s0-1) ... 1161s Selecting previously unselected package ruby-rspec-core. 1161s Preparing to unpack .../67-ruby-rspec-core_3.12.0c0e1m1s0-1_all.deb ... 1161s Unpacking ruby-rspec-core (3.12.0c0e1m1s0-1) ... 1161s Selecting previously unselected package ruby-rspec-expectations. 1161s Preparing to unpack .../68-ruby-rspec-expectations_3.12.0c0e1m1s0-1_all.deb ... 1161s Unpacking ruby-rspec-expectations (3.12.0c0e1m1s0-1) ... 1161s Selecting previously unselected package ruby-rspec-mocks. 1161s Preparing to unpack .../69-ruby-rspec-mocks_3.12.0c0e1m1s0-1_all.deb ... 1161s Unpacking ruby-rspec-mocks (3.12.0c0e1m1s0-1) ... 1161s Selecting previously unselected package ruby-rspec. 1161s Preparing to unpack .../70-ruby-rspec_3.12.0c0e1m1s0-1_all.deb ... 1161s Unpacking ruby-rspec (3.12.0c0e1m1s0-1) ... 1161s Selecting previously unselected package autopkgtest-satdep. 1161s Preparing to unpack .../71-8-autopkgtest-satdep.deb ... 1161s Unpacking autopkgtest-satdep (0) ... 1161s Setting up libgraphite2-3:arm64 (1.3.14-2) ... 1161s Setting up liblcms2-2:arm64 (2.14-2) ... 1161s Setting up libfixposix4t64:arm64 (1:0.5.1-1+nmu1.1) ... 1161s Setting up java-common (0.75+exp1) ... 1161s Setting up libasm-java (9.6~us1-0ubuntu1) ... 1161s Setting up rubygems-integration (1.18) ... 1161s Setting up libheadius-options-java (1.7-1) ... 1161s Setting up libjnr-x86asm-java (1.0.2-5.1) ... 1161s Setting up libjzlib-java (1.1.3-3) ... 1161s Setting up libbackport9-java (1.10-2) ... 1161s Setting up libasound2-data (1.2.10-3build1) ... 1161s Setting up libjitescript-java (0.4.3-1) ... 1161s Setting up libsnakeyaml-engine-java (2.7+ds-3) ... 1161s Setting up libgmpxx4ldbl:arm64 (2:6.3.0+dfsg-2ubuntu4) ... 1161s Setting up libavahi-common-data:arm64 (0.8-13ubuntu2) ... 1161s Setting up ruby-net-telnet (0.2.0-1) ... 1161s Setting up fonts-dejavu-mono (2.37-8) ... 1161s Setting up fonts-dejavu-core (2.37-8) ... 1161s Setting up libpcsclite1:arm64 (2.0.0-1) ... 1161s Setting up libjpeg-turbo8:arm64 (2.1.5-2ubuntu1) ... 1161s Setting up ruby-rspec-support (3.12.0c0e1m1s0-1) ... 1161s Setting up libjoda-time-java (2.10.14-1) ... 1161s Setting up libjcodings-java (1.0.58-1) ... 1161s Setting up ruby-webrick (1.8.1-1) ... 1161s Setting up libasound2:arm64 (1.2.10-3build1) ... 1161s Setting up libharfbuzz0b:arm64 (8.3.0-2) ... 1161s Setting up libinvokebinder-java (1.13-1) ... 1161s Setting up libjffi-jni:arm64 (1.3.13+ds-1) ... 1161s Setting up ca-certificates-java (20240118) ... 1161s No JRE found. Skipping Java certificates setup. 1161s Setting up ruby-xmlrpc (0.3.2-2) ... 1161s Setting up libhawtjni-runtime-java (1.18-1) ... 1161s Setting up libdirgra-java (0.4-2) ... 1161s Setting up libjnr-constants-java (0.10.4-2) ... 1161s Setting up libjpeg8:arm64 (8c-2ubuntu11) ... 1161s Setting up libjffi-java (1.3.13+ds-1) ... 1161s Setting up libgmp-dev:arm64 (2:6.3.0+dfsg-2ubuntu4) ... 1161s Setting up libjruby-joni-java (2.2.1-1) ... 1161s Setting up fontconfig-config (2.15.0-1ubuntu1) ... 1161s Setting up libavahi-common3:arm64 (0.8-13ubuntu2) ... 1161s Setting up libjansi-native-java (1.8-2) ... 1161s Setting up libjansi1-java (1.18-3ubuntu1) ... 1161s Setting up libfontconfig1:arm64 (2.15.0-1ubuntu1) ... 1161s Setting up libjline2-java (2.14.6-5) ... 1161s Setting up libavahi-client3:arm64 (0.8-13ubuntu2) ... 1161s Setting up libjnr-ffi-java (2.2.15-2) ... 1161s Setting up libjnr-enxio-java (0.32.16-1) ... 1161s Setting up libcups2:arm64 (2.4.6-0ubuntu3) ... 1161s Setting up libjnr-netdb-java (1.1.6-1.1) ... 1161s Setting up libjnr-posix-java (3.1.18-1) ... 1161s Setting up openjdk-21-jre-headless:arm64 (21.0.2+13-2) ... 1161s update-alternatives: using /usr/lib/jvm/java-21-openjdk-arm64/bin/java to provide /usr/bin/java (java) in auto mode 1161s update-alternatives: using /usr/lib/jvm/java-21-openjdk-arm64/bin/jpackage to provide /usr/bin/jpackage (jpackage) in auto mode 1161s update-alternatives: using /usr/lib/jvm/java-21-openjdk-arm64/bin/keytool to provide /usr/bin/keytool (keytool) in auto mode 1161s update-alternatives: using /usr/lib/jvm/java-21-openjdk-arm64/bin/rmiregistry to provide /usr/bin/rmiregistry (rmiregistry) in auto mode 1161s update-alternatives: using /usr/lib/jvm/java-21-openjdk-arm64/lib/jexec to provide /usr/bin/jexec (jexec) in auto mode 1161s Setting up libjnr-unixsocket-java (0.38.21-2) ... 1161s Setting up ruby-rubygems (3.4.20-1) ... 1161s Setting up rake (13.0.6-3) ... 1161s Setting up libruby:arm64 (1:3.1+1) ... 1161s Setting up libruby3.2:arm64 (3.2.3-1) ... 1161s Setting up ruby3.2 (3.2.3-1) ... 1161s Setting up ruby3.2-dev:arm64 (3.2.3-1) ... 1161s Setting up ruby-sdbm:arm64 (1.0.0-5build3) ... 1161s Setting up libruby3.1:arm64 (3.1.2-7ubuntu4) ... 1161s Setting up ruby3.1 (3.1.2-7ubuntu4) ... 1161s Setting up ruby3.1-dev:arm64 (3.1.2-7ubuntu4) ... 1161s Setting up ruby-all-dev:arm64 (1:3.1+1) ... 1161s Setting up ruby (1:3.1+1) ... 1161s Setting up ruby-rspec-core (3.12.0c0e1m1s0-1) ... 1161s Setting up ruby-diff-lcs (1.5.0-1) ... 1161s Setting up ruby-rspec-expectations (3.12.0c0e1m1s0-1) ... 1161s Setting up ruby-rspec-mocks (3.12.0c0e1m1s0-1) ... 1161s Setting up ruby-rspec (3.12.0c0e1m1s0-1) ... 1161s Processing triggers for libc-bin (2.39-0ubuntu2) ... 1161s Processing triggers for man-db (2.12.0-3) ... 1162s Processing triggers for ca-certificates-java (20240118) ... 1163s Adding debian:ACCVRAIZ1.pem 1163s Adding debian:AC_RAIZ_FNMT-RCM.pem 1163s Adding debian:AC_RAIZ_FNMT-RCM_SERVIDORES_SEGUROS.pem 1163s Adding debian:ANF_Secure_Server_Root_CA.pem 1163s Adding debian:Actalis_Authentication_Root_CA.pem 1163s Adding debian:AffirmTrust_Commercial.pem 1163s Adding debian:AffirmTrust_Networking.pem 1163s Adding debian:AffirmTrust_Premium.pem 1163s Adding debian:AffirmTrust_Premium_ECC.pem 1163s Adding debian:Amazon_Root_CA_1.pem 1163s Adding debian:Amazon_Root_CA_2.pem 1163s Adding debian:Amazon_Root_CA_3.pem 1163s Adding debian:Amazon_Root_CA_4.pem 1163s Adding debian:Atos_TrustedRoot_2011.pem 1163s Adding debian:Atos_TrustedRoot_Root_CA_ECC_TLS_2021.pem 1163s Adding debian:Atos_TrustedRoot_Root_CA_RSA_TLS_2021.pem 1163s Adding debian:Autoridad_de_Certificacion_Firmaprofesional_CIF_A62634068.pem 1163s Adding debian:BJCA_Global_Root_CA1.pem 1163s Adding debian:BJCA_Global_Root_CA2.pem 1163s Adding debian:Baltimore_CyberTrust_Root.pem 1163s Adding debian:Buypass_Class_2_Root_CA.pem 1163s Adding debian:Buypass_Class_3_Root_CA.pem 1163s Adding debian:CA_Disig_Root_R2.pem 1163s Adding debian:CFCA_EV_ROOT.pem 1163s Adding debian:COMODO_Certification_Authority.pem 1163s Adding debian:COMODO_ECC_Certification_Authority.pem 1163s Adding debian:COMODO_RSA_Certification_Authority.pem 1163s Adding debian:Certainly_Root_E1.pem 1163s Adding debian:Certainly_Root_R1.pem 1163s Adding debian:Certigna.pem 1163s Adding debian:Certigna_Root_CA.pem 1163s Adding debian:Certum_EC-384_CA.pem 1163s Adding debian:Certum_Trusted_Network_CA.pem 1163s Adding debian:Certum_Trusted_Network_CA_2.pem 1163s Adding debian:Certum_Trusted_Root_CA.pem 1163s Adding debian:CommScope_Public_Trust_ECC_Root-01.pem 1163s Adding debian:CommScope_Public_Trust_ECC_Root-02.pem 1163s Adding debian:CommScope_Public_Trust_RSA_Root-01.pem 1163s Adding debian:CommScope_Public_Trust_RSA_Root-02.pem 1163s Adding debian:Comodo_AAA_Services_root.pem 1163s Adding debian:D-TRUST_BR_Root_CA_1_2020.pem 1163s Adding debian:D-TRUST_EV_Root_CA_1_2020.pem 1163s Adding debian:D-TRUST_Root_Class_3_CA_2_2009.pem 1163s Adding debian:D-TRUST_Root_Class_3_CA_2_EV_2009.pem 1163s Adding debian:DigiCert_Assured_ID_Root_CA.pem 1163s Adding debian:DigiCert_Assured_ID_Root_G2.pem 1163s Adding debian:DigiCert_Assured_ID_Root_G3.pem 1163s Adding debian:DigiCert_Global_Root_CA.pem 1163s Adding debian:DigiCert_Global_Root_G2.pem 1163s Adding debian:DigiCert_Global_Root_G3.pem 1163s Adding debian:DigiCert_High_Assurance_EV_Root_CA.pem 1163s Adding debian:DigiCert_TLS_ECC_P384_Root_G5.pem 1163s Adding debian:DigiCert_TLS_RSA4096_Root_G5.pem 1163s Adding debian:DigiCert_Trusted_Root_G4.pem 1163s Adding debian:Entrust.net_Premium_2048_Secure_Server_CA.pem 1163s Adding debian:Entrust_Root_Certification_Authority.pem 1163s Adding debian:Entrust_Root_Certification_Authority_-_EC1.pem 1163s Adding debian:Entrust_Root_Certification_Authority_-_G2.pem 1163s Adding debian:Entrust_Root_Certification_Authority_-_G4.pem 1163s Adding debian:GDCA_TrustAUTH_R5_ROOT.pem 1163s Adding debian:GLOBALTRUST_2020.pem 1163s Adding debian:GTS_Root_R1.pem 1163s Adding debian:GTS_Root_R2.pem 1163s Adding debian:GTS_Root_R3.pem 1163s Adding debian:GTS_Root_R4.pem 1163s Adding debian:GlobalSign_ECC_Root_CA_-_R4.pem 1163s Adding debian:GlobalSign_ECC_Root_CA_-_R5.pem 1163s Adding debian:GlobalSign_Root_CA.pem 1163s Adding debian:GlobalSign_Root_CA_-_R3.pem 1163s Adding debian:GlobalSign_Root_CA_-_R6.pem 1163s Adding debian:GlobalSign_Root_E46.pem 1163s Adding debian:GlobalSign_Root_R46.pem 1163s Adding debian:Go_Daddy_Class_2_CA.pem 1163s Adding debian:Go_Daddy_Root_Certificate_Authority_-_G2.pem 1163s Adding debian:HARICA_TLS_ECC_Root_CA_2021.pem 1163s Adding debian:HARICA_TLS_RSA_Root_CA_2021.pem 1163s Adding debian:Hellenic_Academic_and_Research_Institutions_ECC_RootCA_2015.pem 1163s Adding debian:Hellenic_Academic_and_Research_Institutions_RootCA_2015.pem 1163s Adding debian:HiPKI_Root_CA_-_G1.pem 1163s Adding debian:Hongkong_Post_Root_CA_3.pem 1163s Adding debian:ISRG_Root_X1.pem 1163s Adding debian:ISRG_Root_X2.pem 1163s Adding debian:IdenTrust_Commercial_Root_CA_1.pem 1163s Adding debian:IdenTrust_Public_Sector_Root_CA_1.pem 1163s Adding debian:Izenpe.com.pem 1163s Adding debian:Microsec_e-Szigno_Root_CA_2009.pem 1163s Adding debian:Microsoft_ECC_Root_Certificate_Authority_2017.pem 1163s Adding debian:Microsoft_RSA_Root_Certificate_Authority_2017.pem 1163s Adding debian:NAVER_Global_Root_Certification_Authority.pem 1163s Adding debian:NetLock_Arany_=Class_Gold=_Főtanúsítvány.pem 1163s Adding debian:OISTE_WISeKey_Global_Root_GB_CA.pem 1163s Adding debian:OISTE_WISeKey_Global_Root_GC_CA.pem 1163s Adding debian:QuoVadis_Root_CA_1_G3.pem 1163s Adding debian:QuoVadis_Root_CA_2.pem 1163s Adding debian:QuoVadis_Root_CA_2_G3.pem 1163s Adding debian:QuoVadis_Root_CA_3.pem 1163s Adding debian:QuoVadis_Root_CA_3_G3.pem 1163s Adding debian:SSL.com_EV_Root_Certification_Authority_ECC.pem 1163s Adding debian:SSL.com_EV_Root_Certification_Authority_RSA_R2.pem 1163s Adding debian:SSL.com_Root_Certification_Authority_ECC.pem 1163s Adding debian:SSL.com_Root_Certification_Authority_RSA.pem 1163s Adding debian:SSL.com_TLS_ECC_Root_CA_2022.pem 1163s Adding debian:SSL.com_TLS_RSA_Root_CA_2022.pem 1163s Adding debian:SZAFIR_ROOT_CA2.pem 1163s Adding debian:Sectigo_Public_Server_Authentication_Root_E46.pem 1163s Adding debian:Sectigo_Public_Server_Authentication_Root_R46.pem 1163s Adding debian:SecureSign_RootCA11.pem 1163s Adding debian:SecureTrust_CA.pem 1163s Adding debian:Secure_Global_CA.pem 1163s Adding debian:Security_Communication_ECC_RootCA1.pem 1163s Adding debian:Security_Communication_RootCA2.pem 1163s Adding debian:Security_Communication_RootCA3.pem 1163s Adding debian:Security_Communication_Root_CA.pem 1163s Adding debian:Starfield_Class_2_CA.pem 1163s Adding debian:Starfield_Root_Certificate_Authority_-_G2.pem 1163s Adding debian:Starfield_Services_Root_Certificate_Authority_-_G2.pem 1163s Adding debian:SwissSign_Gold_CA_-_G2.pem 1163s Adding debian:SwissSign_Silver_CA_-_G2.pem 1163s Adding debian:T-TeleSec_GlobalRoot_Class_2.pem 1163s Adding debian:T-TeleSec_GlobalRoot_Class_3.pem 1163s Adding debian:TUBITAK_Kamu_SM_SSL_Kok_Sertifikasi_-_Surum_1.pem 1163s Adding debian:TWCA_Global_Root_CA.pem 1163s Adding debian:TWCA_Root_Certification_Authority.pem 1163s Adding debian:TeliaSonera_Root_CA_v1.pem 1163s Adding debian:Telia_Root_CA_v2.pem 1163s Adding debian:TrustAsia_Global_Root_CA_G3.pem 1163s Adding debian:TrustAsia_Global_Root_CA_G4.pem 1163s Adding debian:Trustwave_Global_Certification_Authority.pem 1163s Adding debian:Trustwave_Global_ECC_P256_Certification_Authority.pem 1163s Adding debian:Trustwave_Global_ECC_P384_Certification_Authority.pem 1163s Adding debian:TunTrust_Root_CA.pem 1163s Adding debian:UCA_Extended_Validation_Root.pem 1163s Adding debian:UCA_Global_G2_Root.pem 1163s Adding debian:USERTrust_ECC_Certification_Authority.pem 1163s Adding debian:USERTrust_RSA_Certification_Authority.pem 1163s Adding debian:XRamp_Global_CA_Root.pem 1163s Adding debian:certSIGN_ROOT_CA.pem 1163s Adding debian:certSIGN_Root_CA_G2.pem 1163s Adding debian:e-Szigno_Root_CA_2017.pem 1163s Adding debian:ePKI_Root_Certification_Authority.pem 1163s Adding debian:emSign_ECC_Root_CA_-_C3.pem 1163s Adding debian:emSign_ECC_Root_CA_-_G3.pem 1163s Adding debian:emSign_Root_CA_-_C1.pem 1163s Adding debian:emSign_Root_CA_-_G1.pem 1163s Adding debian:vTrus_ECC_Root_CA.pem 1163s Adding debian:vTrus_Root_CA.pem 1163s done. 1163s Setting up default-jre-headless (2:1.21-75+exp1) ... 1163s Setting up jruby (9.4.6.0+ds-1ubuntu3) ... 1163s Setting up ant (1.10.14-1) ... 1163s Setting up autopkgtest-satdep (0) ... 1168s (Reading database ... 84014 files and directories currently installed.) 1168s Removing autopkgtest-satdep (0) ... 1172s autopkgtest [11:14:15]: test spec-jruby: [----------------------- 1173s installing system gems into jruby: 1173s * diff-lcs-1.5.0 1173s * minitest-5.15.0 1173s * power_assert-2.0.1 1173s * rake-13.0.6 1173s * rexml-3.2.5 1173s * rspec-3.12.0 1173s * rspec-core-3.12.0 1173s * rspec-expectations-3.12.1 1173s * rspec-mocks-3.12.1 1173s * rspec-support-3.12.0 1173s * test-unit-3.5.3 1181s /usr/share/jruby/bin/jruby -X-C -I/tmp/autopkgtest.nFBjtB/autopkgtest_tmp/gem_temp/gems/rspec-support-3.12.0/lib:/tmp/autopkgtest.nFBjtB/autopkgtest_tmp/gem_temp/gems/rspec-core-3.12.0/lib /usr/share/rubygems-integration/all/gems/rspec-core-3.12.0/exe/rspec --pattern spec/jruby/\*\*/\*_spec.rb 1189s .........*.................................................. 1190s 1190s Pending: (Failures listed here are expected and do not affect your suite's status) 1190s 1190s 1) File#absolute_path should not do something special for non-root URI 1190s # Very inconsistent behavior (consistently through all versions of JRuby) 1190s Failure/Error: expect(File.absolute_path(path)).to eq path 1190s 1190s expected: "http://10.1.1.1:32/" 1190s got: "http:/" 1190s 1190s (compared using ==) 1190s # ./spec/jruby/core/file/absolute_path_spec.rb:12:in `block in
' 1190s # ./spec/jruby/core/file/absolute_path_spec.rb:11:in `block in
' 1190s 1190s Finished in 1.94 seconds (files took 1.42 seconds to load) 1190s 60 examples, 0 failures, 1 pending 1190s 1191s autopkgtest [11:14:34]: test spec-jruby: -----------------------] 1192s spec-jruby PASS 1192s autopkgtest [11:14:35]: test spec-jruby: - - - - - - - - - - results - - - - - - - - - - 1192s autopkgtest [11:14:35]: test spec-ruby: preparing testbed 1200s Reading package lists... 1200s Building dependency tree... 1200s Reading state information... 1200s Starting pkgProblemResolver with broken count: 0 1200s Starting 2 pkgProblemResolver with broken count: 0 1200s Done 1201s The following NEW packages will be installed: 1201s autopkgtest-satdep 1201s 0 upgraded, 1 newly installed, 0 to remove and 0 not upgraded. 1201s Need to get 0 B/756 B of archives. 1201s After this operation, 0 B of additional disk space will be used. 1201s Get:1 /tmp/autopkgtest.nFBjtB/9-autopkgtest-satdep.deb autopkgtest-satdep arm64 0 [756 B] 1201s Selecting previously unselected package autopkgtest-satdep. 1201s (Reading database ... (Reading database ... 5% (Reading database ... 10% (Reading database ... 15% (Reading database ... 20% (Reading database ... 25% (Reading database ... 30% (Reading database ... 35% (Reading database ... 40% (Reading database ... 45% (Reading database ... 50% (Reading database ... 55% (Reading database ... 60% (Reading database ... 65% (Reading database ... 70% (Reading database ... 75% (Reading database ... 80% (Reading database ... 85% (Reading database ... 90% (Reading database ... 95% (Reading database ... 100% (Reading database ... 84014 files and directories currently installed.) 1201s Preparing to unpack .../9-autopkgtest-satdep.deb ... 1201s Unpacking autopkgtest-satdep (0) ... 1201s Setting up autopkgtest-satdep (0) ... 1204s (Reading database ... 84014 files and directories currently installed.) 1204s Removing autopkgtest-satdep (0) ... 1205s autopkgtest [11:14:48]: test spec-ruby: [----------------------- 1205s installing system gems into jruby: 1205s * diff-lcs-1.5.0 1205s * minitest-5.15.0 1205s * power_assert-2.0.1 1205s * rake-13.0.6 1205s * rexml-3.2.5 1205s * rspec-3.12.0 1205s * rspec-core-3.12.0 1205s * rspec-expectations-3.12.1 1205s * rspec-mocks-3.12.1 1205s * rspec-support-3.12.0 1206s * test-unit-3.5.3 1212s MSPEC: {:compile_mode=>"OFF", :format=>"s", :spec_target=>":fast", :jruby_opts=>"--dev", :spec_config=>"spec/jruby.mspec", :command=>"ci", :jit_threshold=>20, :jit_max=>-1, :objectspace_enabled=>true, :thread_pooling=>false, :reflection=>false, :timeout=>120} 1212s rm -rf rubyspec_temp 1213s JAVA options: {:dir=>"/tmp/autopkgtest.nFBjtB/autopkgtest_tmp", :maxmemory=>"1024M", :resultproperty=>"spec.status.OFF", :fork=>"true", :failonerror=>"true", :classname=>"org.jruby.Main"} 1217s $ /tmp/autopkgtest.nFBjtB/autopkgtest_tmp/bin/jruby -Xbacktrace.style=mri -J-ea -J-Djruby.launch.inproc=false -J-Djruby.compile.mode=OFF -J-Djruby.jit.threshold=20 -J-Djruby.jit.max=-1 -J-Djruby.objectspace.enabled=true -J-Djruby.thread.pool.enabled=false -J-Djruby.reflection=false -J-Demma.coverage.out.file=target/test-results/coverage.emma -J-Demma.coverage.out.merge=true -J-Demma.verbosity.level=silent -J-XX:MaxMetaspaceSize=768M /tmp/autopkgtest.nFBjtB/autopkgtest_tmp/spec/mspec/bin/mspec-ci -f s --timeout 120 -B spec/jruby.mspec :fast 1217s /tmp/autopkgtest.nFBjtB/autopkgtest_tmp/spec/mspec/lib/mspec/commands/mspec.rb:112: warning: unsupported exec option: close_others 1221s jruby 9.4.6.0 (3.1.4) 2024-03-20 9.4.6.0+ds OpenJDK 64-Bit Server VM 21.0.2+13-Ubuntu-2 on 21.0.2+13-Ubuntu-2 [aarch64-linux] 1221s 1221s The BEGIN keyword 1221s - runs in a shared scope 1221s - accesses variables outside the eval scope 1221s - must appear in a top-level context 1221s - uses top-level for self 1221s - runs first in a given code unit 1221s - runs multiple begins in FIFO order 1224s - returns the top-level script's filename for __FILE__ 1224s 1224s The END keyword 1228s - runs after all other code 1231s - runs in reverse order of registration 1234s - allows calling exit inside a handler 1237s - gives access to the last raised exception - global variables $! and $@ 1240s - both exceptions in a handler and in the main script are printed 1243s - decides the exit status if both at_exit and the main script raise SystemExit 1246s - runs all handlers even if some raise exceptions 1249s - runs handlers even if the main script fails to parse 1252s - calls the nested handler right after the outer one if a handler is nested into another handler 1255s - runs only once for multiple calls 1258s - warns when END is used in a method 1258s 1258s The END keyword END blocks and at_exit callbacks are mixed 1261s - runs them all in reverse order of registration 1261s 1261s The alias keyword 1261s - creates a new name for an existing method 1261s - works with a simple symbol on the left-hand side 1261s - works with a single quoted symbol on the left-hand side 1261s - works with a double quoted symbol on the left-hand side 1261s - works with an interpolated symbol on the left-hand side 1261s - works with an interpolated symbol with non-literal embedded expression on the left-hand side 1261s - works with a simple symbol on the right-hand side 1261s - works with a single quoted symbol on the right-hand side 1261s - works with a double quoted symbol on the right-hand side 1261s - works with an interpolated symbol on the right-hand side 1261s - works with an interpolated symbol with non-literal embedded expression on the right-hand side 1261s - adds the new method to the list of methods 1261s - adds the new method to the list of public methods 1261s - overwrites an existing method with the target name 1261s - is reversible 1261s - operates on the object's metaclass when used in instance_eval 1261s - operates on the class/module metaclass when used in instance_eval 1261s - operates on the class/module metaclass when used in instance_exec 1261s - operates on methods defined via attr, attr_reader, and attr_accessor 1261s - operates on methods with splat arguments 1261s - operates on methods with splat arguments on eigenclasses 1261s - operates on methods with splat arguments defined in a superclass 1261s - operates on methods with splat arguments defined in a superclass using text block for class eval 1261s - is not allowed against Integer or String instances 1263s - on top level defines the alias on Object 1263s - raises a NameError when passed a missing name 1263s - defines the method on the aliased class when the original method is from a parent class 1263s 1263s The alias keyword 1266s - can create a new global variable, synonym of the original 1269s - can override an existing global variable and make them synonyms 1272s - supports aliasing twice the same global variables 1272s 1272s The '&&' statement 1272s - short-circuits evaluation at the first condition to be false 1272s - evaluates to the first condition not to be true 1272s - evaluates to the last condition if all are true 1272s - evaluates the full set of chained conditions during assignment 1272s - treats empty expressions as nil 1272s 1272s The 'and' statement 1272s - short-circuits evaluation at the first condition to be false 1272s - evaluates to the first condition not to be true 1272s - evaluates to the last condition if all are true 1272s - when used in assignment, evaluates and assigns expressions individually 1272s - treats empty expressions as nil 1272s 1272s Array literals 1272s - [] should return a new array populated with the given elements 1272s - [] treats empty expressions as nil elements 1272s - [] accepts a literal hash without curly braces as its only parameter 1272s - [] accepts a literal hash without curly braces as its last parameter 1272s - [] treats splatted nil as no element 1272s - evaluates each argument exactly once 1272s 1272s Bareword array literal 1272s - %w() transforms unquoted barewords into an array 1272s - %W() transforms unquoted barewords into an array, supporting interpolation 1272s - %W() always treats interpolated expressions as a single word 1272s - treats consecutive whitespace characters the same as one 1272s - treats whitespace as literals characters when escaped by a backslash 1272s 1272s The unpacking splat operator (*) 1272s - when applied to a literal nested array, unpacks its elements into the containing array 1272s - when applied to a nested referenced array, unpacks its elements into the containing array 1272s - returns a new array containing the same values when applied to an array inside an empty array 1272s - unpacks the start and count arguments in an array slice assignment 1272s - unpacks arguments as if they were listed statically 1272s - unpacks a literal array into arguments in a method call 1272s - unpacks a referenced array into arguments in a method call 1272s - when applied to a non-Array value attempts to coerce it to Array if the object respond_to?(:to_a) 1272s - when applied to a non-Array value uses it unchanged if it does not respond_to?(:to_a) 1272s - when applied to a BasicObject coerces it to Array if it respond_to?(:to_a) 1272s - can be used before other non-splat elements 1272s - can be used multiple times in the same containing array 1272s /tmp/autopkgtest.nFBjtB/autopkgtest_tmp/spec/ruby/language/assignments_spec.rb:83: warning: unused literal ignored 1272s /tmp/autopkgtest.nFBjtB/autopkgtest_tmp/spec/ruby/language/assignments_spec.rb:87: warning: unused literal ignored 1272s 1272s Assignments using += using an accessor 1272s - does evaluate receiver only once when assigns 1272s - ignores method visibility when receiver is self 1272s 1272s Assignments using += using a #[] 1272s - evaluates receiver only once when assigns 1272s - ignores method visibility when receiver is self 1272s 1272s Assignments using += using a #[] splatted argument 1272s - correctly handles it 1272s - calls #to_a only once 1272s - correctly handles a nested splatted argument 1272s - correctly handles multiple nested splatted arguments 1272s 1272s A block yielded a single Array 1272s - assigns the Array to a single argument 1272s - receives the identical Array object 1272s - assigns the Array to a single rest argument 1272s - assigns the first element to a single argument with trailing comma 1272s - assigns elements to required arguments 1272s - assigns nil to unassigned required arguments 1272s - assigns elements to optional arguments 1272s - assigns elements to post arguments 1272s - assigns elements to pre arguments 1272s - assigns elements to pre and post arguments 1272s - assigns elements to pre and post arguments when *rest is present 1272s - autosplats single argument to required arguments when a keyword rest argument is present 1272s - autosplats single argument to required arguments when optional keyword arguments are present 1272s - assigns elements to mixed argument types 1272s - does not treat final Hash as keyword arguments and does not autosplat 1272s - does not call #to_hash on final argument to get keyword arguments and does not autosplat 1272s - does not call #to_hash on the argument when optional argument and keyword argument accepted and does not autosplat 1272s - does not treat hashes with string keys as keyword arguments and does not autosplat 1272s - does not call #to_hash on the last element if keyword arguments are present 1272s - does not call #to_hash on the last element when there are more arguments than parameters 1272s - does not call #to_ary on the Array 1272s 1272s A block yielded a single Array when non-symbol keys are in a keyword arguments Hash 1272s - does not separate non-symbol keys and symbol keys and does not autosplat 1272s 1272s A block yielded a single Object 1272s - calls #to_ary on the object when taking multiple arguments 1272s - does not call #to_ary when not taking any arguments 1272s - does not call #to_ary on the object when taking a single argument 1272s - does not call #to_ary on the object when taking a single rest argument 1272s - receives the object if #to_ary returns nil 1272s - receives the object if it does not respond to #to_ary 1272s - calls #respond_to? to check if object has method #to_ary 1272s - receives the object if it does not respond to #respond_to? 1272s - calls #to_ary on the object when it is defined dynamically 1272s - raises a TypeError if #to_ary does not return an Array 1272s - raises error transparently if #to_ary raises error on its own 1272s 1272s A block 1272s - captures locals from the surrounding scope 1272s - allows for a leading space before the arguments 1272s - allows to define a block variable with the same name as the enclosing block 1272s - does not capture a local when an argument has the same name 1272s - does not capture a local when the block argument has the same name 1272s 1272s A block taking zero arguments 1272s - does not raise an exception when no values are yielded 1272s - does not raise an exception when values are yielded 1272s - may include a rescue clause 1272s 1272s A block taking || arguments 1272s - does not raise an exception when no values are yielded 1272s - does not raise an exception when values are yielded 1272s - may include a rescue clause 1272s 1272s A block taking |a| arguments 1272s - assigns nil to the argument when no values are yielded 1272s - assigns the value yielded to the argument 1272s - does not call #to_ary to convert a single yielded object to an Array 1272s - assigns the first value yielded to the argument 1272s - does not destructure a single Array value 1272s - may include a rescue clause 1272s 1272s A block taking |a, b| arguments 1272s - assigns nil to the arguments when no values are yielded 1272s - assigns one value yielded to the first argument 1272s - assigns the first two values yielded to the arguments 1272s - does not destructure an Array value as one of several values yielded 1272s - assigns 'nil' and 'nil' to the arguments when a single, empty Array is yielded 1272s - assigns the element of a single element Array to the first argument 1272s - destructures a single Array value yielded 1272s - destructures a splatted Array 1272s - calls #to_ary to convert a single yielded object to an Array 1272s - does not call #to_ary if the single yielded object is an Array 1272s - does not call #to_ary if the object does not respond to #to_ary 1272s - raises a TypeError if #to_ary does not return an Array 1272s - raises the original exception if #to_ary raises an exception 1272s 1272s A block taking |a, *b| arguments 1272s - assigns 'nil' and '[]' to the arguments when no values are yielded 1272s - assigns all yielded values after the first to the rest argument 1272s - assigns 'nil' and '[]' to the arguments when a single, empty Array is yielded 1272s - assigns the element of a single element Array to the first argument 1272s - destructures a splatted Array 1272s - destructures a single Array value assigning the remaining values to the rest argument 1272s - calls #to_ary to convert a single yielded object to an Array 1272s - does not call #to_ary if the single yielded object is an Array 1272s - does not call #to_ary if the object does not respond to #to_ary 1272s - raises a TypeError if #to_ary does not return an Array 1272s 1272s A block taking |*| arguments 1272s - does not raise an exception when no values are yielded 1272s - does not raise an exception when values are yielded 1272s - does not call #to_ary if the single yielded object is an Array 1272s - does not call #to_ary if the object does not respond to #to_ary 1272s - does not call #to_ary to convert a single yielded object to an Array 1272s 1272s A block taking |*a| arguments 1272s - assigns '[]' to the argument when no values are yielded 1272s - assigns a single value yielded to the argument as an Array 1272s - assigns all the values passed to the argument as an Array 1272s - assigns '[[]]' to the argument when passed an empty Array 1272s - assigns a single Array value passed to the argument by wrapping it in an Array 1272s - does not call #to_ary if the single yielded object is an Array 1272s - does not call #to_ary if the object does not respond to #to_ary 1272s - does not call #to_ary to convert a single yielded object to an Array 1272s 1272s A block taking |a, | arguments 1272s - assigns nil to the argument when no values are yielded 1272s - assigns the argument a single value yielded 1272s - assigns the argument the first value yielded 1272s - assigns the argument the first of several values yielded when it is an Array 1272s - assigns nil to the argument when passed an empty Array 1272s - assigns the argument the first element of the Array when passed a single Array 1272s - calls #to_ary to convert a single yielded object to an Array 1272s - does not call #to_ary if the single yielded object is an Array 1272s - does not call #to_ary if the object does not respond to #to_ary 1272s - raises a TypeError if #to_ary does not return an Array 1272s 1272s A block taking |(a, b)| arguments 1272s - assigns nil to the arguments when yielded no values 1272s - destructures a single Array value yielded 1272s - destructures a single Array value yielded when shadowing an outer variable 1272s - calls #to_ary to convert a single yielded object to an Array 1272s - does not call #to_ary if the single yielded object is an Array 1272s - does not call #to_ary if the object does not respond to #to_ary 1272s - raises a TypeError if #to_ary does not return an Array 1272s 1272s A block taking |(a, b), c| arguments 1272s - assigns nil to the arguments when yielded no values 1272s - destructures a single one-level Array value yielded 1272s - destructures a single multi-level Array value yielded 1272s - calls #to_ary to convert a single yielded object to an Array 1272s - does not call #to_ary if the single yielded object is an Array 1272s - does not call #to_ary if the object does not respond to #to_ary 1272s - raises a TypeError if #to_ary does not return an Array 1272s 1272s A block taking nested |a, (b, (c, d))| 1272s - assigns nil to the arguments when yielded no values 1272s - destructures separate yielded values 1272s - destructures a nested Array value yielded 1272s - destructures a single multi-level Array value yielded 1272s 1272s A block taking nested |a, ((b, c), d)| 1272s - assigns nil to the arguments when yielded no values 1272s - destructures separate yielded values 1272s - destructures a nested value yielded 1272s - destructures a single multi-level Array value yielded 1272s 1272s A block taking |*a, b:| 1272s - merges the hash into the splatted array 1272s 1272s A block arguments with _ 1272s - extracts arguments with _ 1272s - assigns the first variable named 1272s 1272s A block taking identically-named arguments 1272s - raises a SyntaxError for standard arguments 1272s - accepts unnamed arguments 1272s 1272s A block pre and post parameters 1272s - assigns nil to unassigned required arguments 1272s - assigns elements to optional arguments 1272s - assigns elements to post arguments 1272s - assigns elements to pre arguments 1272s - assigns elements to pre and post arguments 1272s - assigns elements to pre and post arguments when *rest is present 1272s 1272s Block-local variables 1272s - are introduced with a semi-colon in the parameter list 1272s - can be specified in a comma-separated list after the semi-colon 1272s - can not have the same name as one of the standard parameters 1273s - can not be prefixed with an asterisk 1273s - can not be prefixed with an ampersand 1273s - can not be assigned default values 1273s - need not be preceded by standard parameters 1273s - only allow a single semi-colon in the parameter list 1273s - override shadowed variables from the outer scope 1273s - are not automatically instantiated in the outer scope 1273s - are automatically instantiated in the block 1273s - are visible in deeper scopes before initialization 1273s 1273s Post-args 1273s - appear after a splat 1273s - are required for a lambda 1273s - are assigned to nil when not enough arguments are given to a proc 1273s 1273s Post-args with required args 1273s - gathers remaining args in the splat 1273s - has an empty splat when there are no remaining args 1273s 1273s Post-args with optional args 1273s - gathers remaining args in the splat 1273s - overrides the optional arg before gathering in the splat 1273s - uses the required arg before the optional and the splat 1273s - overrides the optional args from left to right before gathering the splat 1273s 1273s Post-args with optional args with a circular argument reference 1273s - raises a SyntaxError if using an existing local with the same name as the argument 1273s - raises a SyntaxError if there is an existing method with the same name as the argument 1273s - calls an existing method with the same name as the argument if explicitly using () 1273s 1273s Post-args with pattern matching 1273s - extracts matched blocks with post arguments 1273s - allows empty splats 1273s 1273s Anonymous block forwarding 1273s - forwards blocks to other method that formally declares anonymous block 1273s - requires the anonymous block parameter to be declared if directly passing a block 1273s - works when it's the only declared parameter 1273s - works alongside positional parameters 1273s - works alongside positional arguments and splatted keyword arguments 1273s - works alongside positional arguments and disallowed keyword arguments 1273s 1273s The break statement in a block 1273s - returns nil to method invoking the method yielding to the block when not passed an argument 1273s - returns a value to the method invoking the method yielding to the block 1273s 1273s The break statement in a block yielded inside a while 1273s - breaks out of the block 1273s 1273s The break statement in a block captured and delegated to another method repeatedly 1273s - breaks out of the block 1273s 1273s The break statement in a captured block when the invocation of the scope creating the block is still active 1273s - raises a LocalJumpError when invoking the block from the scope creating the block 1273s - raises a LocalJumpError when invoking the block from a method 1273s - raises a LocalJumpError when yielding to the block 1273s 1273s The break statement in a captured block from a scope that has returned 1273s - raises a LocalJumpError when calling the block from a method 1273s - raises a LocalJumpError when yielding to the block 1273s 1273s The break statement in a captured block from another thread 1273s - raises a LocalJumpError when getting the value from another thread 1273s 1273s The break statement in a lambda 1273s - returns from the lambda 1273s - returns from the call site if the lambda is passed as a block 1273s 1273s The break statement in a lambda when the invocation of the scope creating the lambda is still active 1273s - returns nil when not passed an argument 1273s - returns a value to the scope creating and calling the lambda 1273s - returns a value to the method scope below invoking the lambda 1273s - returns a value to a block scope invoking the lambda in a method below 1273s - returns from the lambda 1273s 1273s The break statement in a lambda created at the toplevel 1275s - returns a value when invoking from the toplevel 1279s - returns a value when invoking from a method 1281s - returns a value when invoking from a block 1281s 1281s The break statement in a lambda from a scope that has returned 1281s - returns a value to the method scope invoking the lambda 1281s - returns a value to the block scope invoking the lambda in a method 1281s - raises a LocalJumpError when yielding to a lambda passed as a block argument 1281s 1281s Break inside a while loop 1281s - stops a while loop when run 1281s - causes a call with a block to return when run 1281s 1281s Break inside a while loop with a value 1281s - exits the loop and returns the value 1281s - passes the value returned by a method with omitted parenthesis and passed block 1281s 1281s Break inside a while loop with a splat 1281s - exits the loop and makes the splat an Array 1281s - treats nil as an empty array 1281s - preserves an array as is 1281s - wraps a non-Array in an Array 1281s 1281s Executing break from within a block 1281s - returns from the original invoking method even in case of chained calls 1281s - runs ensures when continuing upward 1281s - runs ensures when breaking from a loop 1281s - doesn't run ensures in the destination method 1281s - works when passing through a super call 1281s - raises LocalJumpError when converted into a proc during a a super call 1281s 1281s The 'case'-construct 1281s - evaluates the body of the when clause matching the case target expression 1281s - evaluates the body of the when clause whose array expression includes the case target expression 1281s - evaluates the body of the when clause in left-to-right order if it's an array expression 1281s - evaluates the body of the when clause whose range expression includes the case target expression 1281s - returns nil when no 'then'-bodies are given 1281s - evaluates the 'else'-body when no other expression matches 1281s - returns nil when no expression matches and 'else'-body is empty 1281s - returns 2 when a then body is empty 1281s - returns the statement following 'then' 1281s - tests classes with case equality 1281s - tests with matching regexps 1281s - tests with matching regexps and sets $~ and captures 1281s - tests with a string interpolated in a regexp 1281s - tests with a regexp interpolated within another regexp 1281s - does not test with equality when given classes 1281s - takes lists of values 1281s - tests an empty array 1281s - expands arrays to lists of values 1281s - takes an expanded array in addition to a list of values 1281s - takes an expanded array before additional listed values 1281s - expands arrays from variables before additional listed values 1281s - expands arrays from variables before a single additional listed value 1281s - expands multiple arrays from variables before additional listed values 1281s - concats arrays before expanding them 1281s - never matches when clauses with no values 1281s - lets you define a method after the case statement 1281s - raises a SyntaxError when 'else' is used when no 'when' is given 1281s - raises a SyntaxError when 'else' is used before a 'when' was given 1281s - supports nested case statements 1281s - supports nested case statements followed by a when with a splatted array 1281s - supports nested case statements followed by a when with a splatted non-array 1281s - works even if there's only one when statement 1281s - evaluates true as only 'true' when true is the first clause 1281s - evaluates false as only 'false' when false is the first clause 1281s /tmp/autopkgtest.nFBjtB/autopkgtest_tmp/spec/ruby/language/case_spec.rb:396: warning: unused literal ignored 1281s /tmp/autopkgtest.nFBjtB/autopkgtest_tmp/spec/ruby/language/case_spec.rb:398: warning: unused literal ignored 1281s - treats a literal array as its own when argument, rather than a list of arguments 1281s - takes multiple expanded arrays 1281s - calls === even when private 1281s - accepts complex expressions within () 1281s - only matches last value in complex expressions within () 1281s - supports declaring variables in the case target expression 1281s 1281s The 'case'-construct with no target expression 1281s - evaluates the body of the first clause when at least one of its condition expressions is true 1281s - evaluates the body of the first when clause that is not false/nil 1281s - evaluates the body of the else clause if all when clauses are false/nil 1281s - evaluates multiple conditional expressions as a boolean disjunction 1281s - handles homogeneous cases 1281s - expands arrays to lists of values 1281s 1281s The class keyword 1281s - creates a new class with semicolon 1281s - does not raise a SyntaxError when opening a class without a semicolon 1281s - can redefine a class when called from a block 1281s 1281s A class definition 1281s - creates a new class 1281s - has no class variables 1281s - raises TypeError if constant given as class name exists and is not a Module 1281s - raises TypeError if the constant qualifying the class is nil 1281s - raises TypeError if any constant qualifying the class is not a Module 1281s - inherits from Object by default 1281s - raises an error when trying to change the superclass 1281s - raises an error when reopening a class with BasicObject as superclass 1281s - raises an error when reopening a class with Object as superclass 1281s - allows reopening a class without specifying the superclass 1281s - does not allow to set the superclass even if it was not specified by the first declaration 1281s - allows using self as the superclass if self is a class 1281s - first evaluates the superclass before checking if the class already exists 1281s - raises a TypeError if inheriting from a metaclass 1281s - allows the declaration of class variables in the body 1281s - stores instance variables defined in the class body in the class object 1281s - allows the declaration of class variables in a class method 1281s - allows the definition of class-level instance variables in a class method 1281s - allows the declaration of class variables in an instance method 1281s - allows the definition of instance methods 1281s - allows the definition of class methods 1281s - allows the definition of class methods using class << self 1281s - allows the definition of Constants 1281s - returns the value of the last statement in the body 1281s 1281s A class definition within a block creates a new class in the lexical scope 1281s - for named classes at the toplevel 1281s - for named classes in a module 1281s - for anonymous classes 1281s - for anonymous classes assigned to a constant 1281s 1281s An outer class definition 1281s - contains the inner classes 1281s 1281s A class definition extending an object (sclass) 1281s - allows adding methods 1281s - raises a TypeError when trying to extend numbers 1281s - raises a TypeError when trying to extend non-Class 1281s - does not allow accessing the block of the original scope 1281s - can use return to cause the enclosing method to return 1281s 1281s Reopening a class 1281s - extends the previous definitions 1281s - overwrites existing methods 1281s - raises a TypeError when superclasses mismatch 1281s - adds new methods to subclasses 1281s 1281s class provides hooks 1281s - calls inherited when a class is created 1281s 1281s A class variable 1281s - can be accessed from a subclass 1281s - is set in the superclass 1281s 1281s A class variable defined in a module 1281s - can be accessed from classes that extend the module 1281s - is not defined in these classes 1281s - is only updated in the module a method defined in the module is used 1281s - is updated in the class when a Method defined in the class is used 1281s - can be accessed inside the class using the module methods 1281s - can be accessed from modules that extend the module 1281s - is defined in the extended module 1281s - is not defined in the extending module 1281s 1281s A class variable definition 1281s - is created in a module if any of the parents do not define it 1281s 1281s Accessing a class variable 1281s - raises a RuntimeError when accessed from the toplevel scope (not in some module or class) 1281s - does not raise an error when checking if defined from the toplevel scope 1281s 1281s The comment 1281s - can be placed between fluent dot now 1281s 1281s Literal (A::X) constant resolution 1281s - raises a NameError if no constant is defined in the search path 1281s - uses the module or class #name to craft the error message 1281s - uses the module or class #inspect to craft the error message if they are anonymous 1281s - sends #const_missing to the original class or module scope 1281s - evaluates the qualifier 1281s - raises a TypeError if a non-class or non-module qualifier is given 1281s 1281s Literal (A::X) constant resolution with statically assigned constants 1281s - searches the immediate class or module scope first 1281s - searches a module included in the immediate class before the superclass 1281s - searches the superclass before a module included in the superclass 1281s - searches a module included in the superclass 1281s - searches the superclass chain 1281s - searches Object if no class or module qualifier is given 1281s - searches Object after searching other scopes 1281s - searches Object if a toplevel qualifier (::X) is given 1281s - does not search the singleton class of the class or module 1281s 1281s Literal (A::X) constant resolution with dynamically assigned constants 1281s - searches the immediate class or module scope first 1281s - searches a module included in the immediate class before the superclass 1281s - searches the superclass before a module included in the superclass 1281s - searches a module included in the superclass 1281s - searches the superclass chain 1281s - searches Object if no class or module qualifier is given 1281s - searches Object if a toplevel qualifier (::X) is given 1281s - does not search the singleton class of the class or module 1281s - returns the updated value when a constant is reassigned 1281s - evaluates the right hand side before evaluating a constant path 1281s 1281s Constant resolution within methods 1281s - raises a NameError if no constant is defined in the search path 1281s - sends #const_missing to the original class or module scope 1281s 1281s Constant resolution within methods with statically assigned constants 1281s - searches the immediate class or module scope first 1281s - searches a module included in the immediate class before the superclass 1281s - searches the superclass before a module included in the superclass 1281s - searches a module included in the superclass 1281s - searches the superclass chain 1281s - searches the lexical scope of the method not the receiver's immediate class 1281s - searches the lexical scope of a singleton method 1281s - does not search the lexical scope of the caller 1281s - searches the lexical scope of a block 1281s - searches Object as a lexical scope only if Object is explicitly opened 1281s - does not search the lexical scope of qualifying modules 1281s 1281s Constant resolution within methods with dynamically assigned constants 1281s - searches the immediate class or module scope first 1281s - searches a module included in the immediate class before the superclass 1281s - searches the superclass before a module included in the superclass 1281s - searches a module included in the superclass 1281s - searches the superclass chain 1281s - searches the lexical scope of the method not the receiver's immediate class 1281s - searches the lexical scope of a singleton method 1281s - does not search the lexical scope of the caller 1281s - searches the lexical scope of a block 1281s - searches Object as a lexical scope only if Object is explicitly opened 1281s - returns the updated value when a constant is reassigned 1281s - does not search the lexical scope of qualifying modules 1281s 1281s Constant resolution within a singleton class (class << obj) 1281s - works like normal classes or modules 1281s 1281s top-level constant lookup 1281s - searches Object unsuccessfully when searches on a module 1281s 1281s top-level constant lookup on a class 1281s - does not search Object after searching other scopes 1281s 1281s Module#private_constant marked constants 1281s - remain private even when updated 1281s - sends #const_missing to the original class or module 1281s 1281s Module#private_constant marked constants in a module 1281s - cannot be accessed from outside the module 1281s - can be reopened as a module where constant is not private 1281s - can be reopened as a class where constant is not private 1281s - is not defined? with A::B form 1281s - can be accessed from the module itself 1281s - is defined? from the module itself 1281s - can be accessed from lexical scope 1281s - is defined? from lexical scope 1281s - can be accessed from classes that include the module 1281s - can be accessed from modules that include the module 1281s - raises a NameError when accessed directly from modules that include the module 1281s - is defined? from classes that include the module 1281s 1281s Module#private_constant marked constants in a class 1281s - cannot be accessed from outside the class 1281s - can be reopened as a module where constant is not private 1281s - can be reopened as a class where constant is not private 1281s - is not defined? with A::B form 1281s - can be accessed from the class itself 1281s - is defined? from the class itself 1281s - can be accessed from lexical scope 1281s - is defined? from lexical scope 1281s - can be accessed from subclasses 1281s - is defined? from subclasses 1281s 1281s Module#private_constant marked constants in Object 1281s - cannot be accessed using ::Const form 1281s - is not defined? using ::Const form 1281s - can be accessed through the normal search 1281s - is defined? through the normal search 1281s 1281s Module#private_constant marked constants NameError by #private_constant 1281s - has :receiver and :name attributes 1281s - has the defined class as the :name attribute 1281s 1281s Module#public_constant marked constants in a module 1281s - can be accessed from outside the module 1281s - is defined? with A::B form 1281s 1281s Module#public_constant marked constants in a class 1281s - can be accessed from outside the class 1281s - is defined? with A::B form 1281s 1281s Module#public_constant marked constants in Object 1281s - can be accessed using ::Const form 1281s - is defined? using ::Const form 1281s 1281s Allowed characters 1281s - allows not ASCII characters in the middle of a name 1281s - does not allow not ASCII characters that cannot be upcased or lowercased at the beginning 1281s - allows not ASCII upcased characters at the beginning 1281s 1281s Assignment dynamic assignment 1281s - raises SyntaxError 1281s 1281s Redefining a method 1281s - replaces the original method 1281s 1281s Defining a method at the top-level 1281s - defines it on Object with private visibility by default 1281s - defines it on Object with public visibility after calling public 1281s 1281s Defining an 'initialize' method 1281s - sets the method's visibility to private 1281s 1281s Defining an 'initialize_copy' method 1281s - sets the method's visibility to private 1281s 1281s Defining an 'initialize_dup' method 1281s - sets the method's visibility to private 1281s 1281s Defining an 'initialize_clone' method 1281s - sets the method's visibility to private 1281s 1281s Defining a 'respond_to_missing?' method 1281s - sets the method's visibility to private 1281s 1281s Defining a method 1281s - returns a symbol of the method name 1281s 1281s An instance method 1281s - raises an error with too few arguments 1281s - raises an error with too many arguments 1281s - raises FrozenError with the correct class name 1281s 1281s An instance method definition with a splat 1281s - accepts an unnamed '*' argument 1281s - accepts a named * argument 1281s - accepts non-* arguments before the * argument 1281s - allows only a single * argument 1281s - requires the presence of any arguments that precede the * 1281s 1281s An instance method with a default argument 1281s - evaluates the default when no arguments are passed 1281s - evaluates the default empty expression when no arguments are passed 1281s - assigns an empty Array to an unused splat argument 1281s - evaluates the default when required arguments precede it 1281s - prefers to assign to a default argument before a splat argument 1281s - prefers to assign to a default argument when there are no required arguments 1281s - does not evaluate the default when passed a value and a * argument 1281s - raises a SyntaxError when there is an existing method with the same name as the local variable 1281s - calls a method with the same name as the local when explicitly using () 1281s 1281s A singleton method definition 1281s - can be declared for a local variable 1281s - can be declared for an instance variable 1281s - can be declared for a global variable 1281s - can be declared with an empty method body 1281s - can be redefined 1281s - raises FrozenError if frozen 1281s - raises FrozenError with the correct class name 1281s 1281s Redefining a singleton method 1281s - does not inherit a previously set visibility 1281s 1281s Redefining a singleton method 1281s - does not inherit a previously set visibility 1281s 1281s A method defined with extreme default arguments 1281s - can redefine itself when the default is evaluated 1281s - may use an fcall as a default 1281s - evaluates the defaults in the method's scope 1281s - may use preceding arguments as defaults 1281s - may use a lambda as a default 1281s 1281s A singleton method defined with extreme default arguments 1281s - may use a method definition as a default 1281s - may use an fcall as a default 1281s - evaluates the defaults in the singleton scope 1281s - may use preceding arguments as defaults 1281s - may use a lambda as a default 1281s 1281s A method definition inside a metaclass scope 1281s - can create a class method 1281s - can create a singleton method 1281s - raises FrozenError if frozen 1281s 1281s A nested method definition 1281s - creates an instance method when evaluated in an instance method 1281s - creates a class method when evaluated in a class method 1281s - creates a singleton method when evaluated in the metaclass of an instance 1281s - creates a method in the surrounding context when evaluated in a def expr.method 1281s - inside an instance_eval creates a singleton method 1281s - creates an instance method inside Class.new 1281s 1281s A method definition always resets the visibility to public for nested definitions 1281s - in Class.new 1281s 1281s A method definition inside an instance_eval 1281s - creates a singleton method 1281s - creates a singleton method when evaluated inside a metaclass 1281s - creates a class method when the receiver is a class 1281s - creates a class method when the receiver is an anonymous class 1281s - creates a class method when instance_eval is within class 1281s 1281s A method definition inside an instance_exec 1281s - creates a class method when the receiver is a class 1281s - creates a class method when the receiver is an anonymous class 1281s - creates a class method when instance_exec is within class 1281s 1281s A method definition in an eval 1281s - creates an instance method 1281s - creates a class method 1281s - creates a singleton method 1281s 1281s a method definition that sets more than one default parameter all to the same value 1282s - assigns them all the same object by default 1282s - allows the first argument to be given, and sets the rest to null 1282s - assigns the parameters different objects across different default calls 1282s - only allows overriding the default value of the first such parameter in each set 1282s - treats the argument after the multi-parameter normally 1282s 1282s The def keyword within a closure 1282s - looks outside the closure for the visibility 1282s 1282s The defined? keyword for literals 1282s - returns 'self' for self 1282s - returns 'nil' for nil 1282s - returns 'true' for true 1282s - returns 'false' for false 1282s 1282s The defined? keyword for literals for a literal Array 1282s - returns 'expression' if each element is defined 1282s - returns nil if one element is not defined 1282s - returns nil if all elements are not defined 1282s 1282s The defined? keyword when called with a method name 1282s - does not call the method 1282s - does not execute the arguments 1282s 1282s The defined? keyword when called with a method name without a receiver 1282s - returns 'method' if the method is defined 1282s - returns nil if the method is not defined 1282s - returns 'method' if the method is defined and private 1282s - returns 'method' if the predicate method is defined and private 1282s 1282s The defined? keyword when called with a method name having a module as receiver 1282s - returns 'method' if the method is defined 1282s - returns nil if the method is private 1282s - returns nil if the method is protected 1282s - returns nil if the method is not defined 1282s - returns nil if the class is not defined 1282s - returns nil if the subclass is not defined 1282s 1282s The defined? keyword when called with a method name having a local variable as receiver 1282s - returns 'method' if the method is defined 1282s - returns 'method' for []= 1282s - returns nil if the method is not defined 1282s - returns nil if the variable does not exist 1282s - calls #respond_to_missing? 1282s 1282s The defined? keyword when called with a method name having an instance variable as receiver 1282s - returns 'method' if the method is defined 1282s - returns nil if the method is not defined 1282s - returns nil if the variable does not exist 1282s 1282s The defined? keyword when called with a method name having a global variable as receiver 1282s - returns 'method' if the method is defined 1282s - returns nil if the method is not defined 1282s - returns nil if the variable does not exist 1282s 1282s The defined? keyword when called with a method name having a method call as a receiver 1282s - returns nil if evaluating the receiver raises an exception 1282s - returns nil if the method is not defined on the object the receiver returns 1282s - returns 'method' if the method is defined on the object the receiver returns 1282s 1282s The defined? keyword when called with a method name having a throw in the receiver 1282s - escapes defined? and performs the throw semantics as normal 1282s 1282s The defined? keyword when called with a method name in a void context 1282s - warns about the void context when parsing it 1282s 1282s The defined? keyword for an expression 1282s - returns 'assignment' for assigning a local variable 1282s - returns 'assignment' for assigning an instance variable 1282s - returns 'assignment' for assigning a global variable 1282s - returns 'assignment' for assigning a class variable 1282s - returns 'assignment' for assigning a constant 1282s - returns 'assignment' for assigning a fully qualified constant 1282s - returns 'assignment' for assigning multiple variables 1282s - returns 'assignment' for an expression with '%=' 1282s - returns 'assignment' for an expression with '/=' 1282s - returns 'assignment' for an expression with '-=' 1282s - returns 'assignment' for an expression with '+=' 1282s - returns 'expression' for an assigning a fully qualified constant with '+=' 1282s - returns 'assignment' for an expression with '*=' 1282s - returns 'assignment' for an expression with '|=' 1282s - returns 'assignment' for an expression with '&=' 1282s - returns 'assignment' for an expression with '^=' 1282s - returns 'assignment' for an expression with '~=' 1282s - returns 'assignment' for an expression with '<<=' 1282s - returns 'assignment' for an expression with '>>=' 1282s - returns 'assignment' for an expression with '**=' 1282s - returns nil for an expression with == and an undefined method 1282s - returns nil for an expression with != and an undefined method 1282s - returns nil for an expression with !~ and an undefined method 1282s - returns 'method' for an expression with '==' 1282s - returns 'method' for an expression with '!=' 1282s - returns 'method' for an expression with '!~' 1282s - returns 'expression' when passed a String 1282s - returns 'expression' when passed a Fixnum literal 1282s - returns 'expression' when passed a Bignum literal 1282s - returns 'expression' when passed a Float literal 1282s - returns 'expression' when passed a Range literal 1282s - returns 'expression' when passed a Regexp literal 1282s - returns 'expression' when passed an Array literal 1282s - returns 'expression' when passed a Hash literal 1282s - returns 'expression' when passed a Symbol literal 1282s 1282s The defined? keyword for an expression ||= 1282s - returns 'assignment' for assigning a local variable with '||=' 1282s - returns 'assignment' for assigning an instance variable with '||=' 1282s - returns 'assignment' for assigning a class variable with '||=' 1282s - returns 'assignment' for assigning a global variable with '||=' 1282s - returns 'assignment' for assigning a constant with '||=' 1282s - returns 'expression' for assigning a fully qualified constant with '||=' 1282s - returns 'assignment' for assigning an attribute with '||=' 1282s - returns 'assignment' for assigning a referenced element with '||=' 1282s 1282s The defined? keyword for an expression &&= 1282s - returns 'assignment' for assigning a local variable with '&&=' 1282s - returns 'assignment' for assigning an instance variable with '&&=' 1282s - returns 'assignment' for assigning a class variable with '&&=' 1282s - returns 'assignment' for assigning a global variable with '&&=' 1282s - returns 'assignment' for assigning a constant with '&&=' 1282s - returns 'expression' for assigning a fully qualified constant with '&&=' 1282s - returns 'assignment' for assigning an attribute with '&&=' 1282s - returns 'assignment' for assigning a referenced element with '&&=' 1282s 1282s The defined? keyword for an expression with logical connectives 1282s - returns nil for an expression with '!' and an undefined method 1282s - returns nil for an expression with '!' and an unset class variable 1282s - returns nil for an expression with 'not' and an undefined method 1282s - returns nil for an expression with 'not' and an unset class variable 1282s - does not propagate an exception raised by a method in a 'not' expression 1282s - returns 'expression' for an expression with '&&/and' and an unset global variable 1282s - returns 'expression' for an expression with '&&/and' and an unset instance variable 1282s - returns 'expression' for an expression '&&/and' regardless of its truth value 1282s - returns 'expression' for an expression with '||/or' and an unset global variable 1282s - returns 'expression' for an expression with '||/or' and an unset instance variable 1282s - returns 'expression' for an expression '||/or' regardless of its truth value 1282s - returns nil for an expression with '!' and an unset global variable 1282s - returns nil for an expression with '!' and an unset instance variable 1282s - returns 'method' for a 'not' expression with a method 1282s - calls a method in a 'not' expression and returns 'method' 1282s - returns nil for an expression with 'not' and an unset global variable 1282s - returns nil for an expression with 'not' and an unset instance variable 1282s - returns 'expression' for an expression with '&&/and' and an undefined method 1282s - returns 'expression' for an expression with '&&/and' and an unset class variable 1282s - does not call a method in an '&&' expression and returns 'expression' 1282s - does not call a method in an 'and' expression and returns 'expression' 1282s - returns 'expression' for an expression with '||/or' and an undefined method 1282s - returns 'expression' for an expression with '||/or' and an unset class variable 1282s - does not call a method in an '||' expression and returns 'expression' 1282s - does not call a method in an 'or' expression and returns 'expression' 1282s 1282s The defined? keyword for an expression with a dynamic String 1282s - returns 'expression' when the String contains a literal 1282s - returns 'expression' when the String contains a call to a defined method 1282s - returns 'expression' when the String contains a call to an undefined method 1282s - does not call the method in the String 1282s 1282s The defined? keyword for an expression with a dynamic Regexp 1282s - returns 'expression' when the Regexp contains a literal 1282s - returns 'expression' when the Regexp contains a call to a defined method 1282s - returns 'expression' when the Regexp contains a call to an undefined method 1282s - does not call the method in the Regexp 1282s 1282s The defined? keyword for variables 1282s - returns 'local-variable' when called with the name of a local variable 1282s - returns 'local-variable' when called with the name of a local variable assigned to nil 1282s - returns nil for an instance variable that has not been read 1282s - returns nil for an instance variable that has been read but not assigned to 1282s - returns 'instance-variable' for an instance variable that has been assigned 1282s - returns 'instance-variable' for an instance variable that has been assigned to nil 1282s - returns nil for a global variable that has not been read 1282s - returns nil for a global variable that has been read but not assigned to 1282s - returns 'global-variable' for a global variable that has been assigned nil 1282s - returns 'global-variable' for $! 1282s - returns 'global-variable for $~ 1282s - returns 'global-variable' for a global variable that has been assigned 1282s - returns nil for a class variable that has not been read 1282s - returns 'class variable' when called with the name of a class variable 1282s - returns 'local-variable' when called with the name of a block local 1282s 1282s The defined? keyword for variables when a String does not match a Regexp 1282s - returns 'global-variable' for $~ 1282s - returns nil for $& 1282s - returns nil for $` 1282s - returns nil for $' 1282s - returns nil for $+ 1282s - returns nil for any last match global 1282s 1282s The defined? keyword for variables when a String matches a Regexp 1282s - returns 'global-variable' for $~ 1282s - returns 'global-variable' for $& 1282s - returns 'global-variable' for $` 1282s - returns 'global-variable' for $' 1282s - returns 'global-variable' for $+ 1282s - returns 'global-variable' for the capture references 1282s - returns nil for non-captures 1282s 1282s The defined? keyword for variables when a Regexp does not match a String 1282s - returns 'global-variable' for $~ 1282s - returns nil for $& 1282s - returns nil for $` 1282s - returns nil for $' 1282s - returns nil for $+ 1282s - returns nil for any last match global 1282s 1282s The defined? keyword for variables when a Regexp matches a String 1282s - returns 'global-variable' for $~ 1282s - returns 'global-variable' for $& 1282s - returns 'global-variable' for $` 1282s - returns 'global-variable' for $' 1282s - returns 'global-variable' for $+ 1282s - returns 'global-variable' for the capture references 1282s - returns nil for non-captures 1282s 1282s The defined? keyword for a simple constant 1282s - returns 'constant' when the constant is defined 1282s - returns nil when the constant is not defined 1282s - does not call Object.const_missing if the constant is not defined 1282s - returns 'constant' for an included module 1282s - returns 'constant' for a constant defined in an included module 1282s 1282s The defined? keyword for a top-level constant 1282s - returns 'constant' when passed the name of a top-level constant 1282s - returns nil if the constant is not defined 1282s - does not call Object.const_missing if the constant is not defined 1282s 1282s The defined? keyword for a scoped constant 1282s - returns 'constant' when the scoped constant is defined 1282s - returns nil when the scoped constant is not defined 1282s - does not call .const_missing if the constant is not defined 1282s - returns nil when an undefined constant is scoped to a defined constant 1282s - returns nil when a constant is scoped to an undefined constant 1282s - returns nil when the undefined constant is scoped to an undefined constant 1282s - returns nil when a constant is defined on top-level but not on the module 1282s - returns nil when a constant is defined on top-level but not on the class 1282s - returns 'constant' if the scoped-scoped constant is defined 1282s 1282s The defined? keyword for a top-level scoped constant 1282s - returns 'constant' when the scoped constant is defined 1282s - returns nil when the scoped constant is not defined 1282s - returns nil when an undefined constant is scoped to a defined constant 1282s - returns nil when the undefined constant is scoped to an undefined constant 1282s - returns 'constant' if the scoped-scoped constant is defined 1282s 1282s The defined? keyword for a self-send method call scoped constant 1282s - returns nil if the constant is not defined in the scope of the method's value 1282s - returns 'constant' if the constant is defined in the scope of the method's value 1282s - returns nil if the last constant is not defined in the scope chain 1282s - returns nil if the middle constant is not defined in the scope chain 1282s - returns 'constant' if all the constants in the scope chain are defined 1282s 1282s The defined? keyword for a receiver method call scoped constant 1282s - returns nil if the constant is not defined in the scope of the method's value 1282s - returns 'constant' if the constant is defined in the scope of the method's value 1282s - returns nil if the last constant is not defined in the scope chain 1282s - returns nil if the middle constant is not defined in the scope chain 1282s - returns 'constant' if all the constants in the scope chain are defined 1282s 1282s The defined? keyword for a module method call scoped constant 1282s - returns nil if the constant is not defined in the scope of the method's value 1282s - returns 'constant' if the constant scoped by the method's value is defined 1282s - returns nil if the last constant in the scope chain is not defined 1282s - returns nil if the middle constant in the scope chain is not defined 1282s - returns 'constant' if all the constants in the scope chain are defined 1282s - returns nil if the outer scope constant in the receiver is not defined 1282s - returns nil if the scoped constant in the receiver is not defined 1282s - returns 'constant' if all the constants in the receiver are defined 1282s - returns 'constant' if all the constants in the receiver and scope chain are defined 1282s 1282s The defined? keyword for a variable scoped constant 1282s - returns nil if the instance scoped constant is not defined 1282s - returns 'constant' if the constant is defined in the scope of the instance variable 1282s - returns nil if the global scoped constant is not defined 1282s - returns 'constant' if the constant is defined in the scope of the global variable 1282s - returns nil if the class scoped constant is not defined 1282s - returns 'constant' if the constant is defined in the scope of the class variable 1282s - returns nil if the local scoped constant is not defined 1282s - returns 'constant' if the constant is defined in the scope of the local variable 1282s 1282s The defined? keyword for a self:: scoped constant 1282s - returns 'constant' for a constant explicitly scoped to self:: when set 1282s - returns 'constant' for a constant explicitly scoped to self:: in subclass's metaclass 1282s 1282s The defined? keyword for yield 1282s - returns nil if no block is passed to a method not taking a block parameter 1282s - returns nil if no block is passed to a method taking a block parameter 1282s - returns 'yield' if a block is passed to a method not taking a block parameter 1282s - returns 'yield' if a block is passed to a method taking a block parameter 1282s - returns 'yield' when called within a block 1282s 1282s The defined? keyword for super 1282s - returns nil when a superclass undef's the method 1282s 1282s The defined? keyword for super for a method taking no arguments 1282s - returns nil when no superclass method exists 1282s - returns nil from a block when no superclass method exists 1282s - returns nil from a #define_method when no superclass method exists 1282s - returns nil from a block in a #define_method when no superclass method exists 1282s - returns 'super' when a superclass method exists 1282s - returns 'super' from a block when a superclass method exists 1282s - returns 'super' from a #define_method when a superclass method exists 1282s - returns 'super' from a block in a #define_method when a superclass method exists 1282s - returns 'super' when the method exists in a supermodule 1282s 1282s The defined? keyword for super for a method taking arguments 1282s - returns nil when no superclass method exists 1282s - returns nil from a block when no superclass method exists 1282s - returns nil from a #define_method when no superclass method exists 1282s - returns nil from a block in a #define_method when no superclass method exists 1282s - returns 'super' when a superclass method exists 1282s - returns 'super' from a block when a superclass method exists 1282s - returns 'super' from a #define_method when a superclass method exists 1282s - returns 'super' from a block in a #define_method when a superclass method exists 1282s 1282s The defined? keyword for super within an included module's method 1282s - returns 'super' when a superclass method exists in the including hierarchy 1282s 1282s The defined? keyword for instance variables 1282s - returns 'instance-variable' if assigned 1282s - returns nil if not assigned 1282s 1282s The defined? keyword for pseudo-variables 1282s - returns 'expression' for __FILE__ 1282s - returns 'expression' for __LINE__ 1282s - returns 'expression' for __ENCODING__ 1282s 1282s The defined? keyword for conditional expressions 1282s - returns 'expression' for an 'if' conditional 1282s - returns 'expression' for an 'unless' conditional 1282s - returns 'expression' for ternary expressions 1282s 1282s The defined? keyword for case expressions 1282s - returns 'expression' 1282s 1282s The defined? keyword for loop expressions 1282s - returns 'expression' for a 'for' expression 1282s - returns 'expression' for a 'while' expression 1282s - returns 'expression' for an 'until' expression 1282s - returns 'expression' for a 'break' expression 1282s - returns 'expression' for a 'next' expression 1282s - returns 'expression' for a 'redo' expression 1282s - returns 'expression' for a 'retry' expression 1282s 1282s The defined? keyword for return expressions 1282s - returns 'expression' 1282s 1282s The defined? keyword for exception expressions 1282s - returns 'expression' 1282s 1282s delegation with def(...) 1282s - delegates rest and kwargs 1282s - delegates block 1282s - parses as open endless Range when brackets are omitted 1282s 1282s delegation with def(x, ...) 1282s - delegates rest and kwargs 1282s - delegates block 1282s 1282s The __ENCODING__ pseudo-variable 1282s - is an instance of Encoding 1282s - is US-ASCII by default 1282s - is the evaluated strings's one inside an eval 1282s - is the encoding specified by a magic comment inside an eval 1282s - is the encoding specified by a magic comment in the file 1282s - raises a SyntaxError if assigned to 1282s 1282s An ensure block inside a begin block 1282s - is executed when an exception is raised in it's corresponding begin block 1282s - is executed when an exception is raised and rescued in it's corresponding begin block 1282s - is executed even when a symbol is thrown in it's corresponding begin block 1282s - is executed when nothing is raised or thrown in it's corresponding begin block 1282s - has no return value 1282s - sets exception cause if raises exception in block and in ensure 1282s 1282s The value of an ensure expression, 1282s - in no-exception scenarios, is the value of the last statement of the protected body 1282s - when an exception is rescued, is the value of the rescuing block 1282s 1282s An ensure block inside a method 1282s - is executed when an exception is raised in the method 1282s - is executed when an exception is raised and rescued in the method 1282s - is executed even when a symbol is thrown in the method 1282s - has no impact on the method's implicit return value 1282s - has an impact on the method's explicit return value 1282s - has an impact on the method's explicit return value from rescue if returns explicitly 1282s - has no impact on the method's explicit return value from rescue if returns implicitly 1282s - suppresses exception raised in method if returns value explicitly 1282s - suppresses exception raised in rescue if returns value explicitly 1282s - overrides exception raised in rescue if raises exception itself 1282s - suppresses exception raised in method if raises exception itself 1282s 1282s An ensure block inside a class 1282s - is executed when an exception is raised 1282s - is executed when an exception is raised and rescued 1282s - is executed even when a symbol is thrown 1282s - is executed when nothing is raised or thrown 1282s - has no return value 1282s 1282s An ensure block inside {} block 1282s - is not allowed 1282s 1282s An ensure block inside 'do end' block 1282s - is executed when an exception is raised in it's corresponding begin block 1282s - is executed when an exception is raised and rescued in it's corresponding begin block 1282s - is executed even when a symbol is thrown in it's corresponding begin block 1282s - is executed when nothing is raised or thrown in it's corresponding begin block 1282s - has no return value 1282s 1282s `` 1282s - returns the output of the executed sub-process 1282s 1282s %x 1282s - is the same as `` 1282s 1282s The __FILE__ pseudo-variable 1282s - raises a SyntaxError if assigned to 1282s - equals (eval) inside an eval 1282s 1282s The __FILE__ pseudo-variable with require 1282s - equals the absolute path of a file loaded by an absolute path 1282s - equals the absolute path of a file loaded by a relative path 1282s 1282s The __FILE__ pseudo-variable with load 1282s - equals the absolute path of a file loaded by an absolute path 1282s - equals the absolute path of a file loaded by a relative path 1282s 1282s The for expression 1282s - iterates over an Enumerable passing each element to the block 1282s - iterates over a list of arrays and destructures with empty comma 1282s - iterates over an Hash passing each key-value pair to the block 1282s - iterates over any object responding to 'each' 1282s - allows an instance variable as an iterator name 1282s - allows a class variable as an iterator name 1282s - allows a constant as an iterator name 1282s - yields only as many values as there are arguments 1282s - optionally takes a 'do' after the expression 1282s - allows body begin on the same line if do is used 1282s - executes code in containing variable scope 1282s - executes code in containing variable scope with 'do' 1282s - does not try to access variables outside the method 1282s - returns expr 1282s - breaks out of a loop upon 'break', returning nil 1282s - allows 'break' to have an argument which becomes the value of the for expression 1282s - starts the next iteration with 'next' 1282s - repeats current iteration with 'redo' 1282s 1282s Hash literal 1282s - {} should return an empty hash 1282s - {} should return a new hash populated with the given elements 1282s - treats empty expressions as nils 1282s - freezes string keys on initialization 1282s - checks duplicated keys on initialization 1282s - checks duplicated float keys on initialization 1282s - accepts a hanging comma 1282s - recognizes '=' at the end of the key 1282s - with '==>' in the middle raises SyntaxError 1282s - constructs a new hash with the given elements 1282s - ignores a hanging comma 1282s - accepts mixed 'key: value' and 'key => value' syntax 1282s - accepts mixed 'key: value', 'key => value' and '"key"': value' syntax 1282s - expands an '**{}' element into the containing Hash literal initialization 1282s - expands an '**obj' element into the containing Hash literal initialization 1282s - expands a BasicObject using ** into the containing Hash literal initialization 1282s /tmp/autopkgtest.nFBjtB/autopkgtest_tmp/spec/ruby/language/if_spec.rb:74: warning: unused literal ignored 1282s /tmp/autopkgtest.nFBjtB/autopkgtest_tmp/spec/ruby/language/if_spec.rb:75: warning: unused literal ignored 1282s /tmp/autopkgtest.nFBjtB/autopkgtest_tmp/spec/ruby/language/if_spec.rb:143: warning: literal in condition 1282s - expands an '**{}' or '**obj' element with the last key/value pair taking precedence 1282s - expands an '**{}' and warns when finding an additional duplicate key afterwards 1282s - merges multiple nested '**obj' in Hash literals 1282s - calls #to_hash to expand an '**obj' element 1282s - allows splatted elements keys that are not symbols 1282s - raises a TypeError if #to_hash does not return a Hash 1282s - raises a TypeError if the object does not respond to #to_hash 1282s - does not change encoding of literal string keys during creation 1282s - raises an EncodingError at parse time when Symbol key with invalid bytes 1282s - raises an EncodingError at parse time when Symbol key with invalid bytes and 'key: value' syntax used 1282s 1282s The ** operator 1282s - makes a copy when calling a method taking a keyword rest argument 1282s 1282s The ** operator hash with omitted value 1282s - accepts short notation 'key' for 'key: value' syntax 1282s - ignores hanging comma on short notation 1282s - accepts mixed syntax 1282s - works with methods and local vars 1282s 1282s Heredoc string 1282s - allows HEREDOC with < (*args, **kwargs) {} 1282s - works with (...) 1282s - works with call(*ruby2_keyword_args) 1282s - works with super(*ruby2_keyword_args) 1282s - works with zsuper 1282s - works with yield(*ruby2_keyword_args) 1282s - does not work with (*args) 1282s - works with call(*ruby2_keyword_args) with missing ruby2_keywords in between due to CRuby bug #18625 1282s 1282s Keyword arguments delegation omitted values 1282s - accepts short notation 'key' for 'key: value' syntax 1282s 1282s A lambda literal -> () { } 1282s - returns a Proc object when used in a BasicObject method 1282s - does not execute the block 1282s - returns a lambda 1282s - may include a rescue clause 1282s - may include a ensure clause 1282s - has its own scope for local variables 1282s 1282s A lambda literal -> () { } assigns no local variables 1282s - for definition 1282s @a = -> { } 1282s @b = ->() { } 1282s @c = -> () { } 1282s @d = -> do end 1282s 1282s A lambda literal -> () { } assigns variables from parameters 1282s - for definition '@a = -> (a) { a }' 1282s - for definition '@a = -> ((a)) { a }' 1282s - for definition '@a = -> ((*a, b)) { [a, b] }' 1282s - for definition '@a = -> (a={}) { a }' 1282s - for definition '@a = -> (*) { }' 1282s - for definition '@a = -> (*a) { a }' 1282s - for definition '@a = -> (a:) { a }' 1282s - for definition '@a = -> (a: 1) { a }' 1282s - for definition '@a = -> (**) { }' 1282s - for definition '@a = -> (**k) { k }' 1282s - for definition '@a = -> (&b) { b }' 1282s - for definition '@a = -> (a, b) { [a, b] }' 1282s - for definition 1282s @a = -> ((a, b, *c, d), (*e, f, g), (*h)) do 1282s [a, b, c, d, e, f, g, h] 1282s end 1282s - for definition 1282s @a = -> (a, (b, (c, *d, (e, (*f)), g), (h, (i, j)))) do 1282s [a, b, c, d, e, f, g, h, i, j] 1282s end 1282s - for definition '@a = -> (*, **k) { k }' 1282s - for definition '@a = -> (*, &b) { b }' 1282s - for definition '@a = -> (a:, b:) { [a, b] }' 1282s - for definition '@a = -> (a:, b: 1) { [a, b] }' 1282s - for definition '@a = -> (a: 1, b:) { [a, b] }' 1282s - for definition 1282s @a = -> (a: @a = -> (a: 1) { a }, b:) do 1282s [a, b] 1282s end 1282s - for definition '@a = -> (a: 1, b: 2) { [a, b] }' 1282s - for definition 1282s @a = -> (a, b=1, *c, (*d, (e)), f: 2, g:, h:, **k, &l) do 1282s [a, b, c, d, e, f, g, h, k, l] 1282s end 1282s - for definition 1282s @a = -> a, b=1, *c, d, e:, f: 2, g:, **k, &l do 1282s [a, b, c, d, e, f, g, k, l] 1282s end 1282s 1282s A lambda literal -> () { } assigns variables from parameters with circular optional argument reference 1282s - raises a SyntaxError if using an existing local with the same name as the argument 1282s - raises a SyntaxError if there is an existing method with the same name as the argument 1282s - calls an existing method with the same name as the argument if explicitly using () 1282s 1282s A lambda expression 'lambda { ... }' 1282s - calls the #lambda method 1282s - does not execute the block 1282s - returns a lambda 1282s - requires a block 1282s - may include a rescue clause 1282s 1282s A lambda expression 'lambda { ... }' with an implicit block 1282s - raises ArgumentError 1282s 1282s A lambda expression 'lambda { ... }' assigns no local variables 1282s - for definition 1282s @a = lambda { } 1282s @b = lambda { || } 1282s 1282s A lambda expression 'lambda { ... }' assigns variables from parameters 1282s - for definition '@a = lambda { |a| a }' 1282s - for definition 1282s def m(*a) yield(*a) end 1282s @a = lambda { |a| a } 1282s - for definition '@a = lambda { |a, | a }' 1282s - for definition 1282s def m(a) yield a end 1282s def m2() yield end 1282s @a = lambda { |a, | a } 1282s - for definition '@a = lambda { |(a)| a }' 1282s - for definition '@a = lambda { |(*a, b)| [a, b] }' 1282s - for definition '@a = lambda { |a={}| a }' 1282s - for definition '@a = lambda { |*| }' 1282s - for definition '@a = lambda { |*a| a }' 1282s - for definition '@a = lambda { |a:| a }' 1282s - for definition '@a = lambda { |a: 1| a }' 1282s - for definition '@a = lambda { |**| }' 1282s - for definition '@a = lambda { |**k| k }' 1282s - for definition '@a = lambda { |&b| b }' 1282s - for definition '@a = lambda { |a, b| [a, b] }' 1282s - for definition 1282s @a = lambda do |(a, b, *c, d), (*e, f, g), (*h)| 1282s [a, b, c, d, e, f, g, h] 1282s end 1282s - for definition 1282s @a = lambda do |a, (b, (c, *d, (e, (*f)), g), (h, (i, j)))| 1282s [a, b, c, d, e, f, g, h, i, j] 1282s end 1282s - for definition '@a = lambda { |*, **k| k }' 1282s - for definition '@a = lambda { |*, &b| b }' 1282s - for definition '@a = lambda { |a:, b:| [a, b] }' 1282s - for definition '@a = lambda { |a:, b: 1| [a, b] }' 1282s - for definition '@a = lambda { |a: 1, b:| [a, b] }' 1282s - for definition 1282s @a = lambda do |a: (@a = -> (a: 1) { a }), b:| 1282s [a, b] 1282s end 1282s - for definition '@a = lambda { |a: 1, b: 2| [a, b] }' 1282s - for definition 1282s @a = lambda do |a, b=1, *c, (*d, (e)), f: 2, g:, h:, **k, &l| 1282s [a, b, c, d, e, f, g, h, k, l] 1282s end 1282s - for definition 1282s @a = lambda do |a, b=1, *c, d, e:, f: 2, g:, **k, &l| 1282s [a, b, c, d, e, f, g, k, l] 1282s end 1282s 1282s The __LINE__ pseudo-variable 1282s - raises a SyntaxError if assigned to 1282s - equals the line number of the text inside an eval 1282s 1282s The __LINE__ pseudo-variable 1282s - equals the line number of the text in a loaded file 1282s 1282s The __LINE__ pseudo-variable 1282s - equals the line number of the text in a loaded file 1282s 1282s The __LINE__ pseudo-variable 1282s - equals the line number of the text in a loaded file 1282s 1282s The __LINE__ pseudo-variable 1282s - equals the line number of the text in a loaded file 1282s 1282s The loop expression 1282s - repeats the given block until a break is called 1282s - executes code in its own scope 1282s - returns the value passed to break if interrupted by break 1282s - returns nil if interrupted by break with no arguments 1282s - skips to end of body with next 1282s - restarts the current iteration with redo 1282s - uses a spaghetti nightmare of redo, next and break 1282s 1282s Magic comments in stdin 1285s - are optional 1288s - are case-insensitive 1291s - must be at the first line 1293s - must be the first token of the line 1297s - can be after the shebang 1300s - can take Emacs style 1303s - can take vim style 1305s - determine __ENCODING__ 1308s - do not cause bytes to be mangled by passing them through the wrong encoding 1308s 1308s Magic comments in an -e argument 1311s - are optional 1314s - are case-insensitive 1317s - must be at the first line 1319s - must be the first token of the line 1322s - can be after the shebang 1325s - can take Emacs style 1328s - can take vim style 1331s - determine __ENCODING__ 1331s 1331s Magic comments in the main file 1334s - are optional 1337s - are case-insensitive 1340s - must be at the first line 1342s - must be the first token of the line 1346s - can be after the shebang 1349s - can take Emacs style 1352s - can take vim style 1355s - determine __ENCODING__ 1358s - do not cause bytes to be mangled by passing them through the wrong encoding 1358s 1358s Magic comments in a loaded file 1358s - are optional 1358s - are case-insensitive 1358s - must be at the first line 1358s - must be the first token of the line 1358s - can be after the shebang 1358s - can take Emacs style 1358s - can take vim style 1358s - determine __ENCODING__ 1358s - do not cause bytes to be mangled by passing them through the wrong encoding 1358s 1358s Magic comments in a required file 1358s - are optional 1358s - are case-insensitive 1358s - must be at the first line 1358s - must be the first token of the line 1358s - can be after the shebang 1358s - can take Emacs style 1358s - can take vim style 1358s - determine __ENCODING__ 1358s - do not cause bytes to be mangled by passing them through the wrong encoding 1358s 1358s Magic comments in an eval 1358s - are optional 1358s - are case-insensitive 1358s - must be at the first line 1358s - must be the first token of the line 1358s - can be after the shebang 1358s - can take Emacs style 1358s - can take vim style 1358s - determine __ENCODING__ 1358s - do not cause bytes to be mangled by passing them through the wrong encoding 1358s 1358s The !~ operator 1358s - evaluates as a call to !~ 1358s 1358s The =~ operator 1358s - calls the =~ method 1358s 1358s The =~ operator with named captures on syntax of /regexp/ =~ string_variable 1358s - sets local variables by the captured pairs 1358s 1358s The =~ operator with named captures on syntax of 'string_literal' =~ /regexp/ 1358s - does not set local variables 1358s 1358s The =~ operator with named captures on syntax of string_variable =~ /regexp/ 1358s - does not set local variables 1358s 1358s The =~ operator with named captures on syntax of regexp_variable =~ string_variable 1358s - does not set local variables 1358s 1358s The =~ operator with named captures on the method calling 1358s - does not set local variables 1358s 1358s self in a metaclass body (class << obj) 1358s - is TrueClass for true 1358s - is FalseClass for false 1358s - is NilClass for nil 1358s - raises a TypeError for numbers 1358s - raises a TypeError for symbols 1358s - is a singleton Class instance 1358s 1358s A constant on a metaclass 1358s - can be accessed after the metaclass body is reopened 1358s - can be accessed via self::CONST 1358s - can be accessed via const_get 1358s - is not defined on the object's class 1358s - is not defined in the metaclass opener's scope 1358s - cannot be accessed via object::CONST 1358s - raises a NameError for anonymous_module::CONST 1358s - appears in the metaclass constant list 1358s - does not appear in the object's class constant list 1358s - is not preserved when the object is duped 1358s - is preserved when the object is cloned 1358s 1358s calling methods on the metaclass 1358s - calls a method on the metaclass 1358s - calls a method on the instance's metaclass 1358s - calls a method in deeper chains of metaclasses 1358s 1358s A method send 1358s - for definition 'def m(a) a end' 1358s 1358s A method send with a single splatted Object argument 1358s - does not call #to_ary 1358s - calls #to_a 1358s - wraps the argument in an Array if #to_a returns nil 1358s - raises a TypeError if #to_a does not return an Array 1358s 1358s A method send with a leading splatted Object argument 1358s - does not call #to_ary 1358s - calls #to_a 1358s - wraps the argument in an Array if #to_a returns nil 1358s - raises a TypeError if #to_a does not return an Array 1358s 1358s A method send with a middle splatted Object argument 1358s - does not call #to_ary 1358s - calls #to_a 1358s - wraps the argument in an Array if #to_a returns nil 1358s - raises a TypeError if #to_a does not return an Array 1358s - copies the splatted array 1358s - allows an array being splatted to be modified by another argument 1358s /tmp/autopkgtest.nFBjtB/autopkgtest_tmp/spec/ruby/language/method_spec.rb:1192: warning: empty expression 1358s /tmp/autopkgtest.nFBjtB/autopkgtest_tmp/spec/ruby/language/method_spec.rb:1203: warning: unused literal ignored 1358s /tmp/autopkgtest.nFBjtB/autopkgtest_tmp/spec/ruby/language/method_spec.rb:1226: warning: unused literal ignored 1358s /tmp/autopkgtest.nFBjtB/autopkgtest_tmp/spec/ruby/language/method_spec.rb:1226: warning: unused literal ignored 1358s /tmp/autopkgtest.nFBjtB/autopkgtest_tmp/spec/ruby/language/method_spec.rb:1244: warning: empty expression 1358s /tmp/autopkgtest.nFBjtB/autopkgtest_tmp/spec/ruby/language/method_spec.rb:1252: warning: empty expression 1358s 1358s A method send with a trailing splatted Object argument 1358s - does not call #to_ary 1358s - calls #to_a 1358s - wraps the argument in an Array if #to_a returns nil 1358s - raises a TypeError if #to_a does not return an Array 1358s 1358s A method send with a block argument 1358s - that refers to a proc passes the proc as the block 1358s - that is nil passes no block 1358s 1358s An element assignment method send with a single splatted Object argument 1358s - does not call #to_ary 1358s - calls #to_a 1358s - wraps the argument in an Array if #to_a returns nil 1358s - raises a TypeError if #to_a does not return an Array 1358s 1358s An element assignment method send with a leading splatted Object argument 1358s - does not call #to_ary 1358s - calls #to_a 1358s - wraps the argument in an Array if #to_a returns nil 1358s - raises a TypeError if #to_a does not return an Array 1358s 1358s An element assignment method send with a middle splatted Object argument 1358s - does not call #to_ary 1358s - calls #to_a 1358s - wraps the argument in an Array if #to_a returns nil 1358s - raises a TypeError if #to_a does not return an Array 1358s 1358s An element assignment method send with a trailing splatted Object argument 1358s - does not call #to_ary 1358s - calls #to_a 1358s - wraps the argument in an Array if #to_a returns nil 1358s - raises a TypeError if #to_a does not return an Array 1358s 1358s An attribute assignment method send with a single splatted Object argument 1358s - does not call #to_ary 1358s - calls #to_a 1358s - wraps the argument in an Array if #to_a returns nil 1358s - raises a TypeError if #to_a does not return an Array 1358s 1358s An attribute assignment method send with a leading splatted Object argument 1358s - does not call #to_ary 1358s - calls #to_a 1358s - wraps the argument in an Array if #to_a returns nil 1358s - raises a TypeError if #to_a does not return an Array 1358s 1358s An attribute assignment method send with a middle splatted Object argument 1358s - does not call #to_ary 1358s - calls #to_a 1358s - wraps the argument in an Array if #to_a returns nil 1358s - raises a TypeError if #to_a does not return an Array 1358s 1358s An attribute assignment method send with a trailing splatted Object argument 1358s - does not call #to_ary 1358s - calls #to_a 1358s - wraps the argument in an Array if #to_a returns nil 1358s - raises a TypeError if #to_a does not return an Array 1358s 1358s A method 1358s - assigns the last Hash to the last optional argument if the Hash contains non-Symbol keys and is not passed as keywords 1358s 1358s A method assigns no local variables 1358s - for definition 1358s def m 1358s end 1358s - for definition 1358s def m() 1358s end 1358s 1358s A method assigns local variables from method parameters 1358s - for definition 'def m(a) a end' 1358s - for definition 'def m((a)) a end' 1358s - for definition 'def m((*a, b)) [a, b] end' 1358s - for definition 'def m(a=1) a end' 1358s - for definition 'def m() end' 1358s - for definition 'def m(*) end' 1358s - for definition 'def m(*a) a end' 1358s - for definition 'def m(a:) a end' 1358s - for definition 'def m(a:, **kw) [a, kw] end' 1358s - for definition 'def m(a: 1) a end' 1358s - for definition 'def m(**) end' 1358s - for definition 'def m(**k) k end' 1358s - for definition 'def m(**k); k end;' 1358s - for definition 'def m(&b) b end' 1358s - for definition 'def m(a, b) [a, b] end' 1358s - for definition 'def m(a, (b, c)) [a, b, c] end' 1358s - for definition 'def m((a), (b)) [a, b] end' 1358s - for definition 'def m((*), (*)) end' 1358s - for definition 'def m((*a), (*b)) [a, b] end' 1358s - for definition 1358s def m((a, b), (c, d)) 1358s [a, b, c, d] 1358s end 1358s - for definition 1358s def m((a, *b), (*c, d)) 1358s [a, b, c, d] 1358s end 1358s - for definition 1358s def m((a, b, *c, d), (*e, f, g), (*h)) 1358s [a, b, c, d, e, f, g, h] 1358s end 1358s - for definition 1358s def m(a, (b, (c, *d), *e)) 1358s [a, b, c, d, e] 1358s end 1358s - for definition 1358s def m(a, (b, (c, *d, (e, (*f)), g), (h, (i, j)))) 1358s [a, b, c, d, e, f, g, h, i, j] 1358s end 1358s - for definition 'def m(a, b=1) [a, b] end' 1358s - for definition 'def m(a, *) a end' 1358s - for definition 'def m(a, *b) [a, b] end' 1358s - for definition 'def m(a, b:) [a, b] end' 1358s - for definition 'def m(a, b: 1) [a, b] end' 1358s - for definition 'def m(a, **) a end' 1358s - for definition 'def m(a, **k) [a, k] end' 1358s - for definition 'def m(a, &b) [a, b] end' 1358s - for definition 'def m(a=1, b) [a, b] end' 1358s - for definition 'def m(a=1, *) a end' 1358s - for definition 'def m(a=1, *b) [a, b] end' 1358s - for definition 'def m(a=1, (b, c)) [a, b, c] end' 1358s - for definition 'def m(a=1, (b, (c, *d))) [a, b, c, d] end' 1358s - for definition 'def m(a=1, (b, (c, *d), *e)) [a, b, c, d, e] end' 1358s - for definition 'def m(a=1, (b), (c)) [a, b, c] end' 1358s - for definition 'def m(a=1, (*b), (*c)) [a, b, c] end' 1358s - for definition 'def m(a=1, (b, c), (d, e)) [a, b, c, d, e] end' 1358s - for definition 1358s def m(a=1, (b, *c), (*d, e)) 1358s [a, b, c, d, e] 1358s end 1358s - for definition 1358s def m(a=1, (b, *c), (d, (*e, f))) 1358s [a, b, c, d, e, f] 1358s end 1358s - for definition 'def m(a=1, b:) [a, b] end' 1358s - for definition 'def m(a=1, b: 2) [a, b] end' 1358s - for definition 'def m(a=1, **) a end' 1359s - for definition 'def m(a=1, **k) [a, k] end' 1359s - for definition 'def m(a=1, &b) [a, b] end' 1359s - for definition 'def m(*, a) a end' 1359s - for definition 'def m(*a, b) [a, b] end' 1359s - for definition 'def m(*, &b) b end' 1359s - for definition 'def m(*a, &b) [a, b] end' 1359s - for definition 'def m(a:, b:) [a, b] end' 1359s - for definition 'def m(a:, b: 1) [a, b] end' 1359s - for definition 'def m(a:, **) a end' 1359s - for definition 'def m(a:, **k) [a, k] end' 1359s - for definition 'def m(a:, &b) [a, b] end' 1359s - for definition 'def m(a: 1, b:) [a, b] end' 1359s - for definition 1359s def m(a: def m(a: 1) a end, b:) 1359s [a, b] 1359s end 1359s - for definition 'def m(a: 1, b: 2) [a, b] end' 1359s - for definition 'def m(a: 1, **) a end' 1359s - for definition 'def m(a: 1, **k) [a, k] end' 1359s - for definition 'def m(a: 1, &b) [a, b] end' 1359s - for definition 'def m(**, &b) b end' 1359s - for definition 'def m(**k, &b) [k, b] end' 1359s - for definition 1359s def m(a, b=1, *c, (*d, (e)), f: 2, g:, h:, **k, &l) 1359s [a, b, c, d, e, f, g, h, k, l] 1359s end 1359s - for definition 1359s def m(a, b=1, *c, d, e:, f: 2, g:, **k, &l) 1359s [a, b, c, d, e, f, g, k, l] 1359s end 1359s - for definition 'def m(a, **nil); a end;' 1359s - for definition 1359s def m(a, b = nil, c = nil, d, e: nil, **f) 1359s [a, b, c, d, e, f] 1359s end 1359s 1359s A method when passing an empty keyword splat to a method that does not accept keywords 1359s - for definition 'def m(*a); a; end' 1359s 1359s A method when passing an empty keyword splat to a method that does not accept keywords 1359s - for definition 'def m(a); a; end' 1359s 1359s A method raises ArgumentError if passing hash as keyword arguments 1359s - for definition 'def m(a: nil); a; end' 1359s 1359s A method call with a space between method name and parentheses 1359s - allows to pass a block with curly braces 1359s - allows to pass a block with do/end 1359s 1359s A method call with a space between method name and parentheses when no arguments provided 1359s - assigns nil 1359s 1359s A method call with a space between method name and parentheses when a single argument is provided 1359s - assigns a simple expression 1359s - assigns an expression consisting of multiple statements 1359s - assigns one single statement, without the need of parentheses 1359s 1359s A method call with a space between method name and parentheses when multiple arguments are provided 1359s - assigns simple expressions 1359s - assigns expressions consisting of multiple statements 1359s 1359s A method call with a space between method name and parentheses when the argument looks like an argument list 1359s - raises a syntax error 1359s 1359s An array-dereference method ([]) received the passed-in block 1359s - for definition 1359s def [](*, &b) 1359s b.call 1359s end 1359s - for definition 1359s def [](*) 1359s yield 1359s end 1359s 1359s An endless method definition without arguments 1359s - for definition 'def m() = 42' 1359s 1359s An endless method definition without arguments without parenthesis 1359s - for definition 'def m = 42' 1359s 1359s An endless method definition with arguments 1359s - for definition 'def m(a, b) = a + b' 1359s 1359s An endless method definition with multiline body 1359s - for definition 1359s def m(n) = 1359s if n > 2 1359s m(n - 2) + m(n - 1) 1359s else 1359s 1 1359s end 1359s 1359s An endless method definition with args forwarding 1359s - for definition 1359s def mm(word, num:) 1359s word * num 1359s end 1359s def m(...) = mm(...) + mm(...) 1359s 1359s Keyword arguments are now separated from positional arguments when the method has only positional parameters 1359s - treats incoming keyword arguments as positional for compatibility 1359s 1359s Keyword arguments are now separated from positional arguments when the method takes a ** parameter 1359s - captures the passed literal keyword arguments 1359s - captures the passed ** keyword arguments 1359s - does not convert a positional Hash to keyword arguments 1359s 1359s Keyword arguments are now separated from positional arguments when the method takes a key: parameter when it's called with a positional Hash and no ** 1359s - raises ArgumentError 1359s 1359s Keyword arguments are now separated from positional arguments when the method takes a key: parameter when it's called with ** 1359s - captures the passed keyword arguments 1359s 1359s kwarg with omitted value in a method call accepts short notation 'kwarg' in method call 1359s - for definition 'def call(*args, **kwargs) = [args, kwargs]' 1359s 1359s kwarg with omitted value in a method call with methods and local variables 1359s - for definition 1359s def call(*args, **kwargs) = [args, kwargs] 1359s def bar 1359s "baz" 1359s end 1359s def foo(val) 1359s call bar:, val: 1359s end 1359s 1359s Inside 'endless' method definitions 1359s - allows method calls without parenthesis 1359s 1359s The module keyword 1359s - creates a new module without semicolon 1359s - creates a new module with a non-qualified constant name 1359s - creates a new module with a qualified constant name 1359s - creates a new module with a variable qualified constant name 1359s - reopens an existing module 1359s - reopens a module included in Object 1359s - raises a TypeError if the constant is a Class 1359s - raises a TypeError if the constant is a String 1359s - raises a TypeError if the constant is an Integer 1359s - raises a TypeError if the constant is nil 1359s - raises a TypeError if the constant is true 1359s - raises a TypeError if the constant is false 1359s 1359s Assigning an anonymous module to a constant 1359s - sets the name of the module 1359s - sets the name of a module scoped by an anonymous module 1359s - sets the name of contained modules when assigning a toplevel anonymous module 1359s 1359s The next statement from within the block 1359s - ends block execution 1359s - causes block to return nil if invoked without arguments 1359s - causes block to return nil if invoked with an empty expression 1359s - returns the argument passed 1359s - returns to the invoking method 1359s - returns to the invoking method, with the specified value 1359s - returns to the currently yielding method in case of chained calls 1359s - causes ensure blocks to run 1359s - skips following code outside an exception block 1359s - passes the value returned by a method with omitted parenthesis and passed block 1359s 1359s The next statement in a method 1359s - is invalid and raises a SyntaxError 1359s 1359s The next statement in a while loop 1359s - causes nested ensure blocks to run 1359s - causes ensure blocks to run when mixed with break 1359s 1359s The next statement in a while loop when not passed an argument 1359s - causes ensure blocks to run 1359s - causes ensure blocks to run when nested in an block 1359s 1359s The next statement in a while loop when passed an argument 1359s - causes ensure blocks to run 1359s - causes ensure blocks to run when nested in an block 1359s 1359s The next statement in an until loop 1359s - causes nested ensure blocks to run 1359s - causes ensure blocks to run when mixed with break 1359s 1359s The next statement in an until loop when not passed an argument 1359s - causes ensure blocks to run 1359s - causes ensure blocks to run when nested in an block 1359s 1359s The next statement in an until loop when passed an argument 1359s - causes ensure blocks to run 1359s - causes ensure blocks to run when nested in an block 1359s 1359s The next statement in a loop 1359s - causes nested ensure blocks to run 1359s - causes ensure blocks to run when mixed with break 1359s 1359s The next statement in a loop when not passed an argument 1359s - causes ensure blocks to run 1359s - causes ensure blocks to run when nested in an block 1359s 1359s The next statement in a loop when passed an argument 1359s - causes ensure blocks to run 1359s - causes ensure blocks to run when nested in an block 1359s 1359s Assignment via next 1359s - assigns objects 1359s - assigns splatted objects 1359s - assigns objects to a splatted reference 1359s - assigns splatted objects to a splatted reference via a splatted yield 1359s - assigns objects to multiple variables 1359s - assigns splatted objects to multiple variables 1359s 1359s The not keyword 1359s - negates a `true' value 1359s - negates a `false' value 1359s - accepts an argument 1359s - returns false if the argument is true 1359s - returns true if the argument is false 1359s - returns true if the argument is nil 1359s 1359s The `!' keyword 1359s - negates a `true' value 1359s - negates a `false' value 1359s - doubled turns a truthful object into `true' 1359s - doubled turns a not truthful object into `false' 1359s 1359s Numbered parameters 1359s - provides default parameters _1, _2, ... in a block 1359s - assigns nil to not passed parameters 1359s - supports variables _1-_9 only for the first 9 passed parameters 1359s - does not support more than 9 parameters 1359s - can not be used in both outer and nested blocks at the same time 1359s - cannot be overwritten with local variable 1359s - errors when numbered parameter is overwritten with local variable 1359s /tmp/autopkgtest.nFBjtB/autopkgtest_tmp/spec/ruby/language/next_spec.rb:20: warning: unused literal ignored 1359s /tmp/autopkgtest.nFBjtB/autopkgtest_tmp/spec/ruby/language/next_spec.rb:28: warning: unused literal ignored 1359s - raises SyntaxError when block parameters are specified explicitly 1359s - affects block arity 1359s - affects block parameters 1359s - affects binding local variables 1359s - does not work in methods 1359s 1359s Numbered parameters assigning to a numbered parameter 1359s - raises SyntaxError 1359s 1359s A number literal 1359s - can be a sequence of decimal digits 1359s - can have '_' characters between digits 1359s - cannot have a leading underscore 1359s - can have a decimal point 1359s - must have a digit before the decimal point 1359s - can have an exponent 1359s - can be a sequence of hexadecimal digits with a leading '0x' 1359s - can be a sequence of binary digits with a leading '0x' 1359s - can be a sequence of octal digits with a leading '0' 1359s - can be an integer literal with trailing 'r' to represent a Rational 1359s - can be an float literal with trailing 'r' to represent a Rational in a canonical form 1359s - can be a float literal with trailing 'r' to represent a Rational 1359s - can be a bignum literal with trailing 'r' to represent a Rational 1359s - can be a decimal literal with trailing 'r' to represent a Rational 1359s - can be a hexadecimal literal with trailing 'r' to represent a Rational 1359s - can be an octal literal with trailing 'r' to represent a Rational 1359s - can be a binary literal with trailing 'r' to represent a Rational 1359s - can be an integer literal with trailing 'i' to represent a Complex 1359s - can be a decimal literal with trailing 'i' to represent a Complex 1359s - can be a hexadecimal literal with trailing 'i' to represent a Complex 1359s - can be a octal literal with trailing 'i' to represent a Complex 1359s - can be a binary literal with trailing 'i' to represent a Complex 1359s 1359s Optional variable assignments using ||= using a single variable 1359s - assigns a new variable 1359s - re-assigns an existing variable set to false 1359s - re-assigns an existing variable set to nil 1359s - does not re-assign a variable with a truthy value 1359s - does not evaluate the right side when not needed 1359s - does not re-assign a variable with a truthy value when using an inline rescue 1359s - returns the new value if set to false 1359s - returns the original value if truthy 1359s 1359s Optional variable assignments using ||= using an accessor 1359s - assigns a new variable 1359s - re-assigns an existing variable set to false 1359s - re-assigns an existing variable set to nil 1359s - does not re-assign a variable with a truthy value 1359s - does not evaluate the right side when not needed 1359s - does not re-assign a variable with a truthy value when using an inline rescue 1359s - does evaluate receiver only once when assigns 1359s - returns the new value if set to false 1359s - returns the original value if truthy 1359s - ignores method visibility when receiver is self 1359s 1359s Optional variable assignments using ||= using a #[] 1359s - returns the assigned value, not the result of the []= method with ||= 1359s - evaluates the index precisely once 1359s - evaluates the index arguments in the correct order 1359s - evaluates receiver only once when assigns 1359s - ignores method visibility when receiver is self 1359s 1359s Optional variable assignments using ||= using a #[] splatted argument 1359s - correctly handles it 1359s - calls #to_a only once 1359s - correctly handles a nested splatted argument 1359s - correctly handles multiple nested splatted arguments 1359s 1359s Optional variable assignments using &&= using a single variable 1359s - leaves new variable unassigned 1359s - leaves false 1359s - leaves nil 1359s - does not evaluate the right side when not needed 1359s - does re-assign a variable with a truthy value 1359s - does re-assign a variable with a truthy value when using an inline rescue 1359s 1359s Optional variable assignments using &&= using an accessor 1359s - leaves new variable unassigned 1359s - leaves false 1359s - leaves nil 1359s - does not evaluate the right side when not needed 1359s - does re-assign a variable with a truthy value 1359s - does re-assign a variable with a truthy value when using an inline rescue 1359s - does evaluate receiver only once when assigns 1359s - ignores method visibility when receiver is self 1359s 1359s Optional variable assignments using &&= using a #[] 1359s - leaves new variable unassigned 1359s - leaves false 1359s - leaves nil 1359s - does not evaluate the right side when not needed 1359s - does re-assign a variable with a truthy value 1359s - does re-assign a variable with a truthy value when using an inline rescue 1359s - returns the assigned value, not the result of the []= method with ||= 1359s - evaluates the index precisely once 1359s - evaluates the index arguments in the correct order 1359s - evaluates receiver only once when assigns 1359s - returns the assigned value, not the result of the []= method with += 1359s - ignores method visibility when receiver is self 1359s 1359s Optional variable assignments using &&= using a #[] splatted argument 1359s - correctly handles it 1359s - calls #to_a only once 1359s - correctly handles a nested splatted argument 1359s - correctly handles multiple nested splatted arguments 1359s 1359s Optional variable assignments using compounded constants 1359s - with ||= assignments 1359s - with ||= do not reassign 1359s - with &&= assignments 1359s - with &&= assignments will fail with non-existent constants 1359s - with operator assignments 1359s - with operator assignments will fail with non-existent constants 1359s 1359s Optional constant assignment with ||= 1359s - assigns a scoped constant if previously undefined 1359s - assigns a global constant if previously undefined 1359s - correctly defines non-existing constants 1359s - correctly overwrites nil constants 1359s - causes side-effects of the module part to be applied only once (for undefined constant) 1359s - causes side-effects of the module part to be applied only once (for nil constant) 1359s - does not evaluate the right-hand side if the module part raises an exception (for undefined constant) 1359s - does not evaluate the right-hand side if the module part raises an exception (for nil constant) 1359s 1359s Optional constant assignment with &&= 1359s - re-assigns a scoped constant if already true 1359s - leaves scoped constant if not true 1359s - causes side-effects of the module part to be applied only once (when assigns) 1359s 1359s The || operator 1359s - evaluates to true if any of its operands are true 1359s - evaluated to false if all of its operands are false 1359s - is evaluated before assignment operators 1359s - has a lower precedence than the && operator 1359s - treats empty expressions as nil 1359s - has a higher precedence than 'break' in 'break true || false' 1359s - has a higher precedence than 'next' in 'next true || false' 1359s - has a higher precedence than 'return' in 'return true || false' 1359s 1359s The or operator 1359s - evaluates to true if any of its operands are true 1359s - is evaluated after variables are assigned 1359s - has a lower precedence than the || operator 1359s - treats empty expressions as nil 1359s - has a lower precedence than 'break' in 'break true or false' 1359s - has a lower precedence than 'next' in 'next true or false' 1359s - has a lower precedence than 'return' in 'return true or false' 1359s /tmp/autopkgtest.nFBjtB/autopkgtest_tmp/spec/ruby/language/optional_assignments_spec.rb:233: warning: unused literal ignored 1359s /tmp/autopkgtest.nFBjtB/autopkgtest_tmp/spec/ruby/language/optional_assignments_spec.rb:236: warning: unused literal ignored 1359s /tmp/autopkgtest.nFBjtB/autopkgtest_tmp/spec/ruby/language/optional_assignments_spec.rb:526: warning: unused literal ignored 1359s /tmp/autopkgtest.nFBjtB/autopkgtest_tmp/spec/ruby/language/optional_assignments_spec.rb:530: warning: unused literal ignored 1359s 1359s A method call 1359s - evaluates the receiver first 1359s - evaluates arguments after receiver 1359s - evaluates arguments left-to-right 1359s - evaluates block pass after arguments 1359s - evaluates block pass after receiver 1359s 1359s Pattern matching 1359s - extends case expression with case/in construction 1359s - allows using then operator 1359s - binds variables 1359s - cannot mix in and when operators 1359s - checks patterns until the first matching 1359s - executes else clause if no pattern matches 1359s - raises NoMatchingPatternError if no pattern matches and no else clause 1359s - raises NoMatchingPatternError if no pattern matches and evaluates the expression only once 1359s - does not allow calculation or method calls in a pattern 1359s - evaluates the case expression once for multiple patterns, caching the result 1359s 1359s Pattern matching can be standalone assoc operator that 1359s - deconstructs value 1359s - deconstructs value and properly scopes variables 1359s 1359s Pattern matching find pattern 1359s - captures preceding elements to the pattern 1359s - captures following elements to the pattern 1359s - captures both preceding and following elements to the pattern 1359s - can capture the entirety of the pattern 1359s - will match an empty Array-like structure 1359s - can be nested 1359s - can be nested with an array pattern 1359s - can be nested within a hash pattern 1359s - can nest hash and array patterns 1359s 1359s Pattern matching warning when regular form 1359s - does not warn about pattern matching is experimental feature 1359s 1359s Pattern matching warning when one-line form 1359s - does not warn about pattern matching is experimental feature 1359s 1359s Pattern matching guards 1359s - supports if guard 1359s - supports unless guard 1359s - makes bound variables visible in guard 1359s - does not evaluate guard if pattern does not match 1359s - takes guards into account when there are several matching patterns 1359s - executes else clause if no guarded pattern matches 1359s - raises NoMatchingPatternError if no guarded pattern matches and no else clause 1359s 1359s Pattern matching value pattern 1359s - matches an object such that pattern === object 1359s - allows string literal with interpolation 1359s 1359s Pattern matching variable pattern 1359s - matches a value and binds variable name to this value 1359s - makes bounded variable visible outside a case statement scope 1359s - create local variables even if a pattern doesn't match 1359s - allow using _ name to drop values 1359s - supports using _ in a pattern several times 1359s - supports using any name with _ at the beginning in a pattern several times 1359s - does not support using variable name (except _) several times 1359s - supports existing variables in a pattern specified with ^ operator 1359s - allows applying ^ operator to bound variables 1359s - requires bound variable to be specified in a pattern before ^ operator when it relies on a bound variable 1359s 1359s Pattern matching alternative pattern 1359s - matches if any of patterns matches 1359s - does not support variable binding 1359s - support underscore prefixed variables in alternation 1359s - can be used as a nested pattern 1359s 1359s Pattern matching AS pattern 1359s - binds a variable to a value if pattern matches 1359s - can be used as a nested pattern 1359s 1359s Pattern matching Array pattern 1359s - supports form Constant(pat, pat, ...) 1359s - supports form Constant[pat, pat, ...] 1359s - supports form [pat, pat, ...] 1359s - supports form pat, pat, ... 1359s - matches an object with #deconstruct method which returns an array and each element in array matches element in pattern 1359s - calls #deconstruct once for multiple patterns, caching the result 1359s - calls #deconstruct even on objects that are already an array 1359s - does not match object if Constant === object returns false 1359s - checks Constant === object before calling #deconstruct 1359s - does not match object without #deconstruct method 1359s - raises TypeError if #deconstruct method does not return array 1359s - accepts a subclass of Array from #deconstruct 1359s - does not match object if elements of array returned by #deconstruct method does not match elements in pattern 1359s - binds variables 1359s - supports splat operator *rest 1359s - does not match partially by default 1359s - does match partially from the array beginning if list + , syntax used 1359s - matches [] with [] 1359s - matches anything with * 1359s - can be used as a nested pattern 1359s 1359s Pattern matching Hash pattern 1359s - supports form Constant(id: pat, id: pat, ...) 1359s - supports form Constant[id: pat, id: pat, ...] 1359s - supports form {id: pat, id: pat, ...} 1359s - supports form id: pat, id: pat, ... 1359s - supports a: which means a: a 1359s - can mix key (a:) and key-value (a: b) declarations 1359s - supports 'string': key literal 1359s - does not support non-symbol keys 1359s - does not support string interpolation in keys 1359s - raise SyntaxError when keys duplicate in pattern 1359s - matches an object with #deconstruct_keys method which returns a Hash with equal keys and each value in Hash matches value in pattern 1359s - calls #deconstruct_keys per pattern 1359s - does not match object if Constant === object returns false 1359s - checks Constant === object before calling #deconstruct_keys 1359s - does not match object without #deconstruct_keys method 1359s - does not match object if #deconstruct_keys method does not return Hash 1359s - does not match object if #deconstruct_keys method returns Hash with non-symbol keys 1359s - does not match object if elements of Hash returned by #deconstruct_keys method does not match values in pattern 1359s - passes keys specified in pattern as arguments to #deconstruct_keys method 1359s - passes keys specified in pattern to #deconstruct_keys method if pattern contains double splat operator ** 1359s - passes nil to #deconstruct_keys method if pattern contains double splat operator **rest 1359s - binds variables 1359s - supports double splat operator **rest 1359s - treats **nil like there should not be any other keys in a matched Hash 1359s - can match partially 1359s - matches {} with {} 1359s - in {} only matches empty hashes 1359s - in {**nil} only matches empty hashes 1359s - matches anything with ** 1359s - can be used as a nested pattern 1359s 1359s Pattern matching refinements 1359s - are used for #deconstruct 1359s - are used for #deconstruct_keys 1359s - are used for #=== in constant pattern 1359s 1359s Pattern matching Ruby 3.1 improvements 1359s - can omit parentheses in one line pattern matching 1359s - supports pinning instance variables 1359s - supports pinning class variables 1359s - supports pinning global variables 1359s - supports pinning expressions 1359s - supports pinning expressions in array pattern 1359s - supports pinning expressions in hash pattern 1359s 1359s Pattern matching value in pattern 1359s - returns true if the pattern matches 1359s - returns false if the pattern does not match 1359s 1359s Operators 1359s - ! ~ + is right-associative 1359s - ** is right-associative 1359s - ** has higher precedence than unary minus 1359s - unary minus is right-associative 1359s - unary minus has higher precedence than * / % 1359s - treats +/- as a regular send if the arguments are known locals or block locals 1359s - * / % are left-associative 1359s - * / % have higher precedence than + - 1359s - + - are left-associative 1359s - + - have higher precedence than >> << 1359s - >> << are left-associative 1359s - >> << have higher precedence than & 1359s - & is left-associative 1359s - & has higher precedence than ^ | 1359s - ^ | are left-associative 1359s - ^ | have higher precedence than <= < > >= 1359s - <= < > >= are left-associative 1359s - <=> == === != =~ !~ are non-associative 1359s - <=> == === != =~ !~ have higher precedence than && 1359s - && is left-associative 1359s - && has higher precedence than || 1359s - || is left-associative 1359s - || has higher precedence than .. ... 1359s - .. ... are non-associative 1359s - .. ... have higher precedence than ? : 1359s - ? : is right-associative 1359s - ? : has higher precedence than rescue 1359s - rescue is left-associative 1359s - rescue has higher precedence than = 1359s - = %= /= -= += |= &= >>= <<= *= &&= ||= **= are right-associative 1359s - = %= /= -= += |= &= >>= <<= *= &&= ||= **= have higher precedence than defined? operator 1359s - defined? is non-associative 1359s - defined? has higher precedence than not 1359s - not is right-associative 1359s - not has higher precedence than or/and 1359s - or/and are left-associative 1359s - or/and have higher precedence than if unless while until modifiers 1359s - if unless while until are non-associative 1359s 1359s The TOPLEVEL_BINDING constant 1359s /tmp/autopkgtest.nFBjtB/autopkgtest_tmp/spec/ruby/language/precedence_spec.rb:240: warning: comparison '<=' after comparison 1359s /tmp/autopkgtest.nFBjtB/autopkgtest_tmp/spec/ruby/language/precedence_spec.rb:241: warning: comparison '<=' after comparison 1359s /tmp/autopkgtest.nFBjtB/autopkgtest_tmp/spec/ruby/language/precedence_spec.rb:243: warning: comparison '<' after comparison 1359s /tmp/autopkgtest.nFBjtB/autopkgtest_tmp/spec/ruby/language/precedence_spec.rb:244: warning: comparison '<' after comparison 1359s /tmp/autopkgtest.nFBjtB/autopkgtest_tmp/spec/ruby/language/precedence_spec.rb:246: warning: comparison '>=' after comparison 1359s /tmp/autopkgtest.nFBjtB/autopkgtest_tmp/spec/ruby/language/precedence_spec.rb:247: warning: comparison '>=' after comparison 1359s /tmp/autopkgtest.nFBjtB/autopkgtest_tmp/spec/ruby/language/precedence_spec.rb:249: warning: comparison '>' after comparison 1359s /tmp/autopkgtest.nFBjtB/autopkgtest_tmp/spec/ruby/language/precedence_spec.rb:250: warning: comparison '>' after comparison 1359s /tmp/autopkgtest.nFBjtB/autopkgtest_tmp/spec/ruby/language/precedence_spec.rb:307: warning: literal in condition 1359s /tmp/autopkgtest.nFBjtB/autopkgtest_tmp/spec/ruby/language/precedence_spec.rb:430: warning: literal in condition 1359s /tmp/autopkgtest.nFBjtB/autopkgtest_tmp/spec/ruby/language/precedence_spec.rb:430: warning: literal in condition 1359s /tmp/autopkgtest.nFBjtB/autopkgtest_tmp/spec/ruby/language/precedence_spec.rb:431: warning: literal in condition 1359s /tmp/autopkgtest.nFBjtB/autopkgtest_tmp/spec/ruby/language/precedence_spec.rb:431: warning: literal in condition 1363s - only includes local variables defined in the main script, not in required files or eval 1366s - has no local variables in files required before the main script 1369s - merges local variables of the main script with dynamically-defined Binding variables 1372s - gets updated variables values as they are defined and set 1375s - is always the same object for all top levels 1375s 1375s The private keyword 1375s - marks following methods as being private 1375s - has no effect on def expr.meth() methods 1375s - is overridden when a new class is opened 1375s - is no longer in effect when the class is closed 1375s - changes visibility of previously called method 1375s - changes visibility of previously called methods with same send/call site 1375s - changes the visibility of the existing method in the subclass 1375s 1375s A Proc 1375s - captures locals from the surrounding scope 1375s - does not capture a local when an argument has the same name 1375s 1375s A Proc taking zero arguments 1375s - does not raise an exception if no values are passed 1375s - raises an ArgumentError if a value is passed 1375s 1375s A Proc taking || arguments 1375s - does not raise an exception when passed no values 1375s - raises an ArgumentError if a value is passed 1375s 1375s A Proc taking |a| arguments 1375s - assigns the value passed to the argument 1375s - does not destructure a single Array value 1375s - does not call #to_ary to convert a single passed object to an Array 1375s - raises an ArgumentError if no value is passed 1375s 1375s A Proc taking |a, b| arguments 1375s - raises an ArgumentError if passed no values 1375s - raises an ArgumentError if passed one value 1375s - assigns the values passed to the arguments 1375s - does not call #to_ary to convert a single passed object to an Array 1375s 1375s A Proc taking |a, *b| arguments 1375s - raises an ArgumentError if passed no values 1375s - does not destructure a single Array value yielded 1375s - assigns all passed values after the first to the rest argument 1375s - does not call #to_ary to convert a single passed object to an Array 1375s 1375s A Proc taking |*| arguments 1375s - does not raise an exception when passed no values 1375s - does not raise an exception when passed multiple values 1375s - does not call #to_ary to convert a single passed object to an Array 1375s 1375s A Proc taking |*a| arguments 1375s - assigns [] to the argument when passed no values 1375s - assigns the argument an Array wrapping one passed value 1375s - assigns the argument an Array wrapping all values passed 1375s - does not call #to_ary to convert a single passed object to an Array 1375s 1375s A Proc taking |*a, b| arguments 1375s - assigns [] to the argument when passed no values 1375s 1375s A Proc taking |a, *b, c| arguments 1375s - assigns [] to the argument when passed no values 1375s 1375s A Proc taking |a, | arguments 1375s - raises an ArgumentError when passed no values 1375s - raises an ArgumentError when passed more than one value 1375s - assigns the argument the value passed 1375s - does not destructure when passed a single Array 1375s - does not call #to_ary to convert a single passed object to an Array 1375s 1375s A Proc taking |(a, b)| arguments 1375s - raises an ArgumentError when passed no values 1375s - destructures a single Array value yielded 1375s - calls #to_ary to convert a single passed object to an Array 1375s - raises a TypeError if #to_ary does not return an Array 1375s 1375s A Proc taking |*a, **kw| arguments 1375s - does not autosplat keyword arguments 1375s 1375s A Proc taking |required keyword arguments, **kw| arguments 1375s - raises ArgumentError for missing required argument 1375s 1375s Literal Ranges 1375s - creates range object 1375s - creates range with excluded right boundary 1375s - creates endless ranges 1375s - creates beginless ranges 1375s 1375s The redo statement 1375s - restarts block execution if used within block 1375s - re-executes the closest loop 1375s - re-executes the last step in enumeration 1375s - triggers ensure block when re-executing a block 1375s 1375s Regexps with anchors 1375s - supports ^ (line start anchor) 1375s - does not match ^ after trailing \n 1375s - supports $ (line end anchor) 1375s - supports \A (string start anchor) 1375s - supports \Z (string end anchor, including before trailing \n) 1375s - supports \z (string end anchor) 1375s - supports \b (word boundary) 1375s - supports \B (non-word-boundary) 1375s - supports (?= ) (positive lookahead) 1375s - supports (?! ) (negative lookahead) 1375s - supports (?!<) (negative lookbehind) 1375s - supports (?<=) (positive lookbehind) 1375s - supports (?<=\b) (positive lookbehind with word boundary) 1375s - supports (?!<\b) (negative lookbehind with word boundary) 1375s 1375s Regexps with back-references 1375s - saves match data in the $~ pseudo-global variable 1375s - saves captures in numbered $[1-N] variables 1375s - will not clobber capture variables across threads 1375s - supports (backreference to previous group match) 1375s - resets nested backreference before match of outer subexpression 1375s - does not reset enclosed capture groups 1375s - can match an optional quote, followed by content, followed by a matching quote, as the whole string 1375s - allows forward references 1375s - disallows forward references >= 10 1375s - fails when trying to match a backreference to an unmatched capture group 1375s - ignores backreferences > 1000 1375s - 0 is not a valid backreference 1375s - allows numeric conditional backreferences 1375s - allows either <> or '' in named conditional backreferences 1375s - allows negative numeric backreferences 1375s - delimited numeric backreferences can start with 0 1375s - regular numeric backreferences cannot start with 0 1375s - named capture groups invalidate numeric backreferences 1375s - treats + or - as the beginning of a level specifier in \k<> backreferences and (?(...)...|...) conditional backreferences 1375s 1375s Regexp with character classes 1375s - supports \w (word character) 1375s - supports \W (non-word character) 1375s - supports \s (space character) 1375s - supports \S (non-space character) 1375s - supports \d (numeric digit) 1375s - supports \D (non-digit) 1375s - supports [] (character class) 1375s - supports [[:alpha:][:digit:][:etc:]] (predefined character classes) 1375s - matches ASCII characters with [[:ascii:]] 1375s - doesn't match non-ASCII characters with [[:ascii:]] 1375s - matches Unicode letter characters with [[:alnum:]] 1375s - matches Unicode digits with [[:alnum:]] 1375s - doesn't matches Unicode marks with [[:alnum:]] 1375s - doesn't match Unicode control characters with [[:alnum:]] 1375s - doesn't match Unicode punctuation characters with [[:alnum:]] 1375s - matches Unicode letter characters with [[:alpha:]] 1375s - doesn't match Unicode digits with [[:alpha:]] 1375s - doesn't matches Unicode marks with [[:alpha:]] 1375s - doesn't match Unicode control characters with [[:alpha:]] 1375s - doesn't match Unicode punctuation characters with [[:alpha:]] 1375s - matches Unicode space characters with [[:blank:]] 1375s - doesn't match Unicode control characters with [[:blank:]] 1375s - doesn't match Unicode punctuation characters with [[:blank:]] 1375s - doesn't match Unicode letter characters with [[:blank:]] 1375s - doesn't match Unicode digits with [[:blank:]] 1375s - doesn't match Unicode marks with [[:blank:]] 1375s - doesn't Unicode letter characters with [[:cntrl:]] 1375s - doesn't match Unicode digits with [[:cntrl:]] 1375s - doesn't match Unicode marks with [[:cntrl:]] 1375s - doesn't match Unicode punctuation characters with [[:cntrl:]] 1375s - matches Unicode control characters with [[:cntrl:]] 1375s - doesn't match Unicode format characters with [[:cntrl:]] 1375s - doesn't match Unicode private-use characters with [[:cntrl:]] 1375s - doesn't match Unicode letter characters with [[:digit:]] 1375s - matches Unicode digits with [[:digit:]] 1375s - doesn't match Unicode marks with [[:digit:]] 1375s - doesn't match Unicode punctuation characters with [[:digit:]] 1375s - doesn't match Unicode control characters with [[:digit:]] 1375s - doesn't match Unicode format characters with [[:digit:]] 1375s - doesn't match Unicode private-use characters with [[:digit:]] 1375s - matches Unicode letter characters with [[:graph:]] 1375s - matches Unicode digits with [[:graph:]] 1375s - matches Unicode marks with [[:graph:]] 1375s - matches Unicode punctuation characters with [[:graph:]] 1375s - doesn't match Unicode control characters with [[:graph:]] 1375s - match Unicode format characters with [[:graph:]] 1375s - match Unicode private-use characters with [[:graph:]] 1375s - matches Unicode lowercase letter characters with [[:lower:]] 1375s - doesn't match Unicode uppercase letter characters with [[:lower:]] 1375s - doesn't match Unicode title-case characters with [[:lower:]] 1375s - doesn't match Unicode digits with [[:lower:]] 1375s - doesn't match Unicode marks with [[:lower:]] 1375s - doesn't match Unicode punctuation characters with [[:lower:]] 1375s - doesn't match Unicode control characters with [[:lower:]] 1375s - doesn't match Unicode format characters with [[:lower:]] 1375s - doesn't match Unicode private-use characters with [[:lower:]] 1375s - matches Unicode lowercase letter characters with [[:print:]] 1375s - matches Unicode uppercase letter characters with [[:print:]] 1375s - matches Unicode title-case characters with [[:print:]] 1375s - matches Unicode digits with [[:print:]] 1375s - matches Unicode marks with [[:print:]] 1375s - matches Unicode punctuation characters with [[:print:]] 1375s - doesn't match Unicode control characters with [[:print:]] 1375s - match Unicode format characters with [[:print:]] 1375s - match Unicode private-use characters with [[:print:]] 1375s - doesn't match Unicode lowercase letter characters with [[:punct:]] 1375s - doesn't match Unicode uppercase letter characters with [[:punct:]] 1375s - doesn't match Unicode title-case characters with [[:punct:]] 1375s - doesn't match Unicode digits with [[:punct:]] 1375s - doesn't match Unicode marks with [[:punct:]] 1375s - matches Unicode Pc characters with [[:punct:]] 1375s - matches Unicode Pd characters with [[:punct:]] 1375s - matches Unicode Ps characters with [[:punct:]] 1375s - matches Unicode Pe characters with [[:punct:]] 1375s - matches Unicode Pi characters with [[:punct:]] 1375s - matches Unicode Pf characters with [[:punct:]] 1375s - matches Unicode Po characters with [[:punct:]] 1375s - doesn't match Unicode format characters with [[:punct:]] 1375s - doesn't match Unicode private-use characters with [[:punct:]] 1375s - doesn't match Unicode lowercase letter characters with [[:space:]] 1375s - doesn't match Unicode uppercase letter characters with [[:space:]] 1375s - doesn't match Unicode title-case characters with [[:space:]] 1375s - doesn't match Unicode digits with [[:space:]] 1375s - doesn't match Unicode marks with [[:space:]] 1375s - matches Unicode Zs characters with [[:space:]] 1375s - matches Unicode Zl characters with [[:space:]] 1375s - matches Unicode Zp characters with [[:space:]] 1375s - doesn't match Unicode format characters with [[:space:]] 1375s - doesn't match Unicode private-use characters with [[:space:]] 1375s - doesn't match Unicode lowercase characters with [[:upper:]] 1375s - matches Unicode uppercase characters with [[:upper:]] 1375s - doesn't match Unicode title-case characters with [[:upper:]] 1375s - doesn't match Unicode digits with [[:upper:]] 1375s - doesn't match Unicode marks with [[:upper:]] 1375s - doesn't match Unicode punctuation characters with [[:upper:]] 1375s - doesn't match Unicode control characters with [[:upper:]] 1375s - doesn't match Unicode format characters with [[:upper:]] 1375s - doesn't match Unicode private-use characters with [[:upper:]] 1375s - doesn't match Unicode letter characters [^a-fA-F] with [[:xdigit:]] 1375s - matches Unicode letter characters [a-fA-F] with [[:xdigit:]] 1375s - doesn't match Unicode digits [^0-9] with [[:xdigit:]] 1375s - doesn't match Unicode marks with [[:xdigit:]] 1375s - doesn't match Unicode punctuation characters with [[:xdigit:]] 1375s - doesn't match Unicode control characters with [[:xdigit:]] 1375s - doesn't match Unicode format characters with [[:xdigit:]] 1375s - doesn't match Unicode private-use characters with [[:xdigit:]] 1375s - matches Unicode lowercase characters with [[:word:]] 1375s - matches Unicode uppercase characters with [[:word:]] 1375s - matches Unicode title-case characters with [[:word:]] 1375s - matches Unicode decimal digits with [[:word:]] 1375s - matches Unicode marks with [[:word:]] 1375s - match Unicode Nl characters with [[:word:]] 1375s - doesn't match Unicode No characters with [[:word:]] 1375s - doesn't match Unicode punctuation characters with [[:word:]] 1375s - doesn't match Unicode control characters with [[:word:]] 1375s - doesn't match Unicode format characters with [[:word:]] 1375s - doesn't match Unicode private-use characters with [[:word:]] 1375s - matches unicode named character properties 1375s - matches unicode abbreviated character properties 1375s - matches unicode script properties 1375s - matches unicode Han properties 1375s - matches unicode Hiragana properties 1375s - matches unicode Katakana properties 1375s - matches unicode Hangul properties 1375s - supports negated property condition 1375s - raises a RegexpError for an unterminated unicode property 1375s - supports \X (unicode 9.0 with UTR #51 workarounds) 1375s 1375s empty checks in Regexps 1375s - allow extra empty iterations 1375s - allow empty iterations in the middle of a loop 1375s - make the Regexp proceed past the quantified expression on failure 1375s - shouldn't cause the Regexp parser to get stuck in a loop 1375s 1375s Regexps with encoding modifiers 1375s - supports /e (EUC encoding) 1375s - supports /e (EUC encoding) with interpolation 1375s - supports /e (EUC encoding) with interpolation /o 1375s - uses EUC-JP as /e encoding 1375s - preserves EUC-JP as /e encoding through interpolation 1375s - supports /n (No encoding) 1375s - supports /n (No encoding) with interpolation 1375s - supports /n (No encoding) with interpolation /o 1375s - warns when using /n with a match string with non-ASCII characters and an encoding other than ASCII-8BIT 1375s - uses US-ASCII as /n encoding if all chars are 7-bit 1375s - uses BINARY when is not initialized 1375s - uses BINARY as /n encoding if not all chars are 7-bit 1375s - preserves US-ASCII as /n encoding through interpolation if all chars are 7-bit 1375s - preserves BINARY as /n encoding through interpolation if all chars are 7-bit 1375s - supports /s (Windows_31J encoding) 1375s - supports /s (Windows_31J encoding) with interpolation 1375s - supports /s (Windows_31J encoding) with interpolation and /o 1375s - uses Windows-31J as /s encoding 1375s - preserves Windows-31J as /s encoding through interpolation 1375s - supports /u (UTF8 encoding) 1375s - supports /u (UTF8 encoding) with interpolation 1375s - supports /u (UTF8 encoding) with interpolation and /o 1375s - uses UTF-8 as /u encoding 1375s - preserves UTF-8 as /u encoding through interpolation 1375s - selects last of multiple encoding specifiers 1375s - raises Encoding::CompatibilityError when trying match against different encodings 1375s - raises Encoding::CompatibilityError when trying match? against different encodings 1375s - raises Encoding::CompatibilityError when trying =~ against different encodings 1375s - raises Encoding::CompatibilityError when the regexp has a fixed, non-ASCII-compatible encoding 1375s - raises Encoding::CompatibilityError when the regexp has a fixed encoding and the match string has non-ASCII characters 1376s /tmp/autopkgtest.nFBjtB/autopkgtest_tmp/spec/mspec/lib/mspec/runner/mspec.rb:100: warning: Unknown escape \y is ignored 1376s - raises ArgumentError when trying to match a broken String 1376s - computes the Regexp Encoding for each interpolated Regexp instance 1376s 1376s Regexps with escape characters 1376s - supports escape sequences 1376s - supports quoting meta-characters via escape sequence 1376s - supports quoting meta-characters via escape sequence when used as a terminator 1376s - supports quoting non-meta-characters via escape sequence when used as a terminator 1376s - does not change semantics of escaped non-meta-character when used as a terminator 1376s - does not change semantics of escaped meta-character when used as a terminator 1376s - allows any character to be escaped 1376s - supports \x (hex characters) 1376s - supports \c (control characters) 1376s - handles three digit octal escapes starting with 0 1376s - handles control escapes with \C-x syntax 1376s - supports the \K keep operator 1376s - supports the \R line break escape 1376s 1376s Regexps with grouping 1376s - support () 1376s - allows groups to be nested 1376s - raises a SyntaxError when parentheses aren't balanced 1376s - supports (?: ) (non-capturing group) 1376s - group names cannot start with digits or minus 1376s - ignore capture groups in line comments 1376s - does not consider # inside a character class as a comment 1376s 1376s Regexps with interpolation 1376s - allows interpolation of strings 1376s - allows interpolation of literal regexps 1376s - allows interpolation of any object that responds to to_s 1376s - allows interpolation which mixes modifiers 1376s - allows interpolation to interact with other Regexp constructs 1376s - gives precedence to escape sequences over substitution 1376s - throws RegexpError for malformed interpolation 1376s - allows interpolation in extended mode 1376s - allows escape sequences in interpolated regexps 1376s 1376s Regexps with modifiers 1376s - supports /i (case-insensitive) 1376s - supports /m (multiline) 1376s - supports /x (extended syntax) 1376s - supports /o (once) 1376s - invokes substitutions for /o only once 1376s - supports modifier combinations 1376s - supports (?~) (absent operator) 1376s - supports (?imx-imx) (inline modifiers) 1376s - supports (?imx-imx:expr) (scoped inline modifiers) 1376s - supports . with /m 1376s - supports ASCII/Unicode modifiers 1376s 1376s Regexps with repetition 1376s - supports * (0 or more of previous subexpression) 1376s - supports *? (0 or more of previous subexpression - lazy) 1376s - supports + (1 or more of previous subexpression) 1376s - supports +? (0 or more of previous subexpression - lazy) 1376s - supports {m,n} (m to n of previous subexpression) 1376s - supports {m,n}? (m to n of previous subexpression) - lazy) 1376s - does not treat {m,n}+ as possessive 1376s - supports ? (0 or 1 of previous subexpression) 1376s - handles incomplete range quantifiers 1376s - lets us use quantifiers on assertions 1376s - does not delete optional assertions 1376s - supports nested quantifiers 1376s - treats ? after {n} quantifier as another quantifier, not as non-greedy marker 1376s - matches zero-width capture groups in optional iterations of loops 1376s 1376s Regexps with subexpression calls 1376s - allows numeric subexpression calls 1376s - treats subexpression calls as distinct from simple back-references 1376s - allows recursive subexpression calls 1376s - allows access to back-references from the current level 1376s - allows + and - in group names and referential constructs that don't use levels, i.e. subexpression calls 1376s 1376s Literal Regexps 1376s - matches against $_ (last input) in a conditional if no explicit matchee provided 1376s - yields a Regexp 1376s - is frozen 1376s - caches the Regexp object 1376s - throws SyntaxError for malformed literals 1376s - supports paired delimiters with %r 1376s - supports grouping constructs that are also paired delimiters 1376s - allows second part of paired delimiters to be used as non-paired delimiters 1376s - disallows first part of paired delimiters to be used as non-paired delimiters 1376s - supports non-paired delimiters delimiters with %r 1376s - disallows alphabets as non-paired delimiter with %r 1376s - disallows spaces after %r and delimiter 1376s - allows unescaped / to be used with %r 1376s - supports . (any character except line terminator) 1376s - supports | (alternations) 1376s - supports (?> ) (embedded subexpression) 1376s - supports (?# ) 1376s - supports (?<= ) (positive lookbehind) 1376s - supports (? 1444s - calls <=> left to right and return first non-0 result 1444s - returns 0 if the arrays are equal 1444s - returns -1 if the array is shorter than the other array 1444s - returns +1 if the array is longer than the other array 1444s - returns -1 if the arrays have same length and a pair of corresponding elements returns -1 for <=> 1444s - returns +1 if the arrays have same length and a pair of corresponding elements returns +1 for <=> 1444s - properly handles recursive arrays 1444s - tries to convert the passed argument to an Array using #to_ary 1444s - does not call #to_ary on Array subclasses 1444s - returns nil when the argument is not array-like 1444s 1444s Array#concat 1444s - returns the array itself 1444s - appends the elements in the other array 1444s - does not loop endlessly when argument is self 1444s - tries to convert the passed argument to an Array using #to_ary 1444s - does not call #to_ary on Array subclasses 1444s - raises a FrozenError when Array is frozen and modification occurs 1444s - raises a FrozenError when Array is frozen and no modification occurs 1444s - appends elements to an Array with enough capacity that has been shifted 1444s - appends elements to an Array without enough capacity that has been shifted 1444s - takes multiple arguments 1444s - concatenates the initial value when given arguments contain 2 self 1444s - returns self when given no arguments 1444s 1444s Array.[] 1444s - returns a new array populated with the given elements 1444s 1444s Array[] 1444s - is a synonym for .[] 1444s 1444s Array#count 1444s - returns the number of elements 1444s - returns the number of elements that equal the argument 1444s - returns the number of element for which the block evaluates to true 1444s - ignores the block if there is an argument 1444s 1444s Array#count when a block argument given 1444s - tolerates increasing an array size during iteration 1444s 1444s Array#cycle 1444s - does not yield and returns nil when the array is empty and passed value is an integer 1444s - does not yield and returns nil when the array is empty and passed value is nil 1444s - does not yield and returns nil when passed 0 1444s - iterates the array 'count' times yielding each item to the block 1444s - iterates indefinitely when not passed a count 1444s - iterates indefinitely when passed nil 1444s - does not rescue StopIteration when not passed a count 1444s - does not rescue StopIteration when passed a count 1444s - iterates the array Integer(count) times when passed a Float count 1444s - calls #to_int to convert count to an Integer 1444s - raises a TypeError if #to_int does not return an Integer 1444s - raises a TypeError if passed a String 1444s - raises a TypeError if passed an Object 1444s - raises a TypeError if passed true 1444s - raises a TypeError if passed false 1444s 1444s Array#cycle when no block is given returned Enumerator size 1444s - should be the result of multiplying the enumerable size by the argument passed 1444s - should be zero when the argument passed is 0 or less 1444s - should be Float::INFINITY when no argument is passed 1444s 1444s Array#deconstruct 1444s - returns self 1444s 1444s Array#delete_at 1444s - removes the element at the specified index 1444s - returns the removed element at the specified index 1444s - returns nil and makes no modification if the index is out of range 1444s - tries to convert the passed argument to an Integer using #to_int 1444s - accepts negative indices 1444s - raises a FrozenError on a frozen array 1444s 1444s Array#delete_if 1444s - removes each element for which block returns true 1444s - returns self 1444s - returns an Enumerator if no block given 1444s - returns self when called on an Array emptied with #shift 1444s - returns an Enumerator if no block given, and the enumerator can modify the original array 1444s - returns an Enumerator if no block given, and the array is frozen 1444s - raises a FrozenError on a frozen array 1444s - raises a FrozenError on an empty frozen array 1444s - does not truncate the array is the block raises an exception 1444s - only removes elements for which the block returns true, keeping the element which raised an error. 1444s - updates the receiver after all blocks 1444s - tolerates increasing an array size during iteration 1444s 1444s Array#delete_if when no block is given returned Enumerator 1444s - size returns the enumerable size 1444s 1444s Array#delete 1444s - removes elements that are #== to object 1444s - calculates equality correctly for reference values 1444s - returns object or nil if no elements match object 1444s - may be given a block that is executed if no element matches object 1444s - returns nil if the array is empty due to a shift 1444s - returns nil on a frozen array if a modification does not take place 1444s - raises a FrozenError on a frozen array 1444s 1444s Array#difference 1444s - creates an array minus any items from other array 1444s - removes multiple items on the lhs equal to one on the rhs 1444s - properly handles recursive arrays 1444s - tries to convert the passed arguments to Arrays using #to_ary 1444s - raises a TypeError if the argument cannot be coerced to an Array by calling #to_ary 1444s - does not return subclass instance for Array subclasses 1444s - does not call to_ary on array subclasses 1444s - removes an item identified as equivalent via #hash and #eql? 1444s - doesn't remove an item with the same hash but not #eql? 1444s - removes an identical item even when its #eql? isn't reflexive 1444s - is not destructive 1444s - returns a copy when called without any parameter 1444s - does not return subclass instances for Array subclasses 1444s - accepts multiple arguments 1444s 1444s Array#dig 1444s - returns #at with one arg 1444s - recurses array elements 1444s - returns the nested value specified if the sequence includes a key 1444s - raises a TypeError for a non-numeric index 1444s - raises a TypeError if any intermediate step does not respond to #dig 1444s - raises an ArgumentError if no arguments provided 1444s - returns nil if any intermediate step is nil 1444s - calls #dig on the result of #at with the remaining arguments 1444s 1444s Array#drop 1444s - removes the specified number of elements from the start of the array 1444s - raises an ArgumentError if the number of elements specified is negative 1444s - returns an empty Array if all elements are dropped 1444s - returns an empty Array when called on an empty Array 1444s - does not remove any elements when passed zero 1444s - returns an empty Array if more elements than exist are dropped 1444s - acts correctly after a shift 1444s - tries to convert the passed argument to an Integer using #to_int 1444s - raises a TypeError when the passed argument can't be coerced to Integer 1444s - raises a TypeError when the passed argument isn't an integer and #to_int returns non-Integer 1444s - returns a Array instance for Array subclasses 1444s 1444s Array#drop_while 1444s - tolerates increasing an array size during iteration 1444s - removes elements from the start of the array while the block evaluates to true 1444s - removes elements from the start of the array until the block returns nil 1444s - removes elements from the start of the array until the block returns false 1444s - returns a Array instance for Array subclasses 1444s 1444s Array#dup 1444s - returns an Array or a subclass instance 1444s - produces a shallow copy where the references are directly copied 1444s - creates a new array containing all elements or the original 1444s - does not copy frozen status from the original 1444s - does not copy singleton methods 1444s 1444s Array#each_index 1444s - passes the index of each element to the block 1444s - returns self 1444s - is not confused by removing elements from the front 1444s - returns an Enumerator if no block given 1444s 1444s Array#each_index when no block is given returned Enumerator 1444s - size returns the enumerable size 1444s 1444s Array#each_index 1444s - tolerates increasing an array size during iteration 1444s 1444s Array#each 1444s - yields each element to the block 1444s - yields each element to the block even if the array is changed during iteration 1444s - yields only elements that are still in the array 1444s - yields elements based on an internal index 1444s - yields the same element multiple times if inserting while iterating 1444s - yields each element to a block that takes multiple arguments 1444s - yields elements added to the end of the array by the block 1444s - does not yield elements deleted from the end of the array 1444s - returns an Enumerator if no block given 1444s 1444s Array#each when no block is given returned Enumerator 1444s - size returns the enumerable size 1444s 1444s Array#each 1444s - tolerates increasing an array size during iteration 1444s 1444s Array#[] 1444s - returns the element at index with [index] 1444s - returns the element at index from the end of the array with [-index] 1444s - returns count elements starting from index with [index, count] 1444s - returns count elements starting at index from the end of array with [-index, count] 1444s - returns the first count elements with [0, count] 1444s - returns the subarray which is independent to self with [index,count] 1444s - tries to convert the passed argument to an Integer using #to_int 1444s - raises TypeError if to_int returns non-integer 1444s - returns the elements specified by Range indexes with [m..n] 1444s - returns elements specified by Range indexes except the element at index n with [m...n] 1444s - returns elements that exist if range start is in the array but range end is not with [m..n] 1444s - accepts Range instances having a negative m and both signs for n with [m..n] and [m...n] 1444s - returns the subarray which is independent to self with [m..n] 1444s - tries to convert Range elements to Integers using #to_int with [m..n] and [m...n] 1444s - returns the same elements as [m..n] and [m...n] with Range subclasses 1444s - returns nil for a requested index not in the array with [index] 1444s - returns [] if the index is valid but length is zero with [index, length] 1444s - returns nil if length is zero but index is invalid with [index, length] 1444s - returns [] if index == array.size with [index, length] 1444s - returns nil if index > array.size with [index, length] 1444s - returns nil if length is negative with [index, length] 1444s - returns nil if no requested index is in the array with [m..n] 1444s - returns nil if range start is not in the array with [m..n] 1444s - returns an empty array when m == n with [m...n] 1444s - returns an empty array with [0...0] 1444s - returns a subarray where m, n negatives and m < n with [m..n] 1444s - returns an array containing the first element with [0..0] 1444s - returns the entire array with [0..-1] 1444s - returns all but the last element with [0...-1] 1444s - returns [3] for [2..-1] out of [1, 2, 3] 1444s - returns an empty array when m > n and m, n are positive with [m..n] 1444s - returns an empty array when m > n and m, n are negative with [m..n] 1444s - does not expand array when the indices are outside of the array bounds 1444s - raises a RangeError when the length is out of range of Fixnum 1444s - raises a type error if a range is passed with a length 1444s - raises a RangeError if passed a range with a bound that is too large 1444s - can accept endless ranges 1444s - can accept beginless ranges 1444s - can accept nil...nil ranges 1444s 1444s Array#[] with a subclass of Array 1444s - returns a Array instance with [n, m] 1444s - returns a Array instance with [-n, m] 1444s - returns a Array instance with [n..m] 1444s - returns a Array instance with [n...m] 1444s - returns a Array instance with [-n..-m] 1444s - returns a Array instance with [-n...-m] 1444s - returns an empty array when m == n with [m...n] 1444s - returns an empty array with [0...0] 1444s - returns an empty array when m > n and m, n are positive with [m..n] 1444s - returns an empty array when m > n and m, n are negative with [m..n] 1444s - returns [] if index == array.size with [index, length] 1444s - returns [] if the index is valid but length is zero with [index, length] 1444s - does not call #initialize on the subclass instance 1444s 1444s Array#[] can be sliced with Enumerator::ArithmeticSequence 1444s - has endless range and positive steps 1444s - has beginless range and positive steps 1444s - has endless range and negative steps 1444s - has closed range and positive steps 1444s - has closed range and negative steps 1444s - has inverted closed range and positive steps 1444s - has range with bounds outside of array 1444s - has endless range with start outside of array's bounds 1444s 1444s Array.[] 1444s - [] should return a new array populated with the given elements 1444s - when applied to a literal nested array, unpacks its elements into the containing array 1444s - when applied to a nested referenced array, unpacks its elements into the containing array 1444s - can unpack 2 or more nested referenced array 1444s - constructs a nested Hash for tailing key-value pairs 1444s 1444s Array.[] with a subclass of Array 1444s - returns an instance of the subclass 1444s - does not call #initialize on the subclass instance 1444s 1444s Array#[]= 1444s - sets the value of the element at index 1444s - sets the section defined by [start,length] to other 1444s - replaces the section defined by [start,length] with the given values 1444s - just sets the section defined by [start,length] to other even if other is nil 1444s - returns nil if the rhs is nil 1444s - sets the section defined by range to other 1444s - replaces the section defined by range with the given values 1444s - just sets the section defined by range to other even if other is nil 1444s - expands and nil-pads the array if section assigned by range is outside array boundaries 1444s - calls to_int on its start and length arguments 1444s - checks frozen before attempting to coerce arguments 1444s - sets elements in the range arguments when passed ranges 1444s - inserts the given elements with [range] which the range is zero-width 1444s - inserts the given elements with [start, length] which length is zero 1444s - inserts the given elements with [range] which the range has negative width 1444s - just inserts nil if the section defined by range is zero-width and the rhs is nil 1444s - just inserts nil if the section defined by range has negative width and the rhs is nil 1444s - does nothing if the section defined by range is zero-width and the rhs is an empty array 1444s - does nothing if the section defined by range has negative width and the rhs is an empty array 1444s - tries to convert Range elements to Integers using #to_int with [m..n] and [m...n] 1444s - raises an IndexError when passed indexes out of bounds 1444s - calls to_ary on its rhs argument for multi-element sets 1444s - does not call to_ary on rhs array subclasses for multi-element sets 1444s - raises a FrozenError on a frozen array 1444s 1444s Array#[]= with [index] 1444s - returns value assigned if idx is inside array 1444s - returns value assigned if idx is right beyond right array boundary 1444s - returns value assigned if idx far beyond right array boundary 1444s - sets the value of the element at index 1444s - sets the value of the element if it is right beyond the array boundary 1444s 1444s Array#[]= with [index, count] 1444s - returns non-array value if non-array value assigned 1444s - returns array if array assigned 1444s - accepts a frozen String literal as RHS 1444s - just sets the section defined by [start,length] to nil even if the rhs is nil 1444s - just sets the section defined by [start,length] to nil if negative index within bounds, cnt > 0 and the rhs is nil 1444s - replaces the section defined by [start,length] to other 1444s - replaces the section to other if idx < 0 and cnt > 0 1444s - replaces the section to other even if cnt spanning beyond the array boundary 1444s - pads the Array with nils if the span is past the end 1444s - inserts other section in place defined by idx 1444s - raises an IndexError when passed start and negative length 1444s 1444s Array#[]= with [m..n] 1444s - returns non-array value if non-array value assigned 1444s - returns array if array assigned 1444s - just sets the section defined by range to nil even if the rhs is nil 1444s - just sets the section defined by range to nil if m and n < 0 and the rhs is nil 1444s - replaces the section defined by range 1444s - replaces the section if m and n < 0 1444s - replaces the section if m < 0 and n > 0 1444s - inserts the other section at m if m > n 1444s - inserts at the end if m > the array size 1444s 1444s Array#[]= with [m..n] Range subclasses 1444s - accepts Range subclasses 1444s - returns non-array value if non-array value assigned 1444s - returns array if array assigned 1444s 1444s Array#[]= with [m..] 1444s - just sets the section defined by range to nil even if the rhs is nil 1444s - just sets the section defined by range to nil if m and n < 0 and the rhs is nil 1444s - replaces the section defined by range 1444s - replaces the section if m and n < 0 1444s - inserts at the end if m > the array size 1444s 1444s Array#[]= with [..n] and [...n] 1444s - just sets the section defined by range to nil even if the rhs is nil 1444s - just sets the section defined by range to nil if n < 0 and the rhs is nil 1444s - replaces the section defined by range 1444s - replaces the section if n < 0 1444s - replaces everything if n > the array size 1444s - inserts at the beginning if n < negative the array size 1444s 1444s Array#[] after a shift 1444s - works for insertion 1444s 1444s Array#empty? 1444s - returns true if the array has no elements 1444s 1444s Array#eql? 1444s - returns true if other is the same array 1444s - returns true if corresponding elements are #eql? 1444s - returns false if other is shorter than self 1444s - returns false if other is longer than self 1444s - returns false immediately when sizes of the arrays differ 1444s - handles well recursive arrays 1444s - does not call #to_ary on its argument 1444s - does not call #to_ary on Array subclasses 1444s - ignores array class differences 1444s - returns false if any corresponding elements are not #eql? 1444s - returns false if other is not a kind of Array 1444s 1444s Array#== 1444s - returns true if other is the same array 1444s - returns true if corresponding elements are #eql? 1444s - returns false if other is shorter than self 1444s - returns false if other is longer than self 1444s - returns false immediately when sizes of the arrays differ 1444s - handles well recursive arrays 1444s - does not call #to_ary on its argument 1444s - does not call #to_ary on Array subclasses 1444s - ignores array class differences 1444s - compares with an equivalent Array-like object using #to_ary 1444s - returns false if any corresponding elements are not #== 1444s - returns true if corresponding elements are #== 1444s - returns true for [NaN] == [NaN] because Array#== first checks with #equal? and NaN.equal?(NaN) is true 1444s 1444s Array#fetch 1444s - returns the element at the passed index 1444s - counts negative indices backwards from end 1444s - raises an IndexError if there is no element at index 1444s - returns default if there is no element at index if passed a default value 1444s - returns the value of block if there is no element at index if passed a block 1444s - passes the original index argument object to the block, not the converted Integer 1444s - gives precedence to the default block over the default argument 1444s - tries to convert the passed argument to an Integer using #to_int 1444s - raises a TypeError when the passed argument can't be coerced to Integer 1445s 1445s Array#fill 1445s - returns self 1445s - is destructive 1445s - does not replicate the filler 1445s - replaces all elements in the array with the filler if not given a index nor a length 1445s - replaces all elements with the value of block (index given to block) 1445s - raises a FrozenError on a frozen array 1445s - raises a FrozenError on an empty frozen array 1445s - raises an ArgumentError if 4 or more arguments are passed when no block given 1445s - raises an ArgumentError if no argument passed and no block given 1445s - raises an ArgumentError if 3 or more arguments are passed when a block given 1445s - does not truncate the array is the block raises an exception 1445s - only changes elements before error is raised, keeping the element which raised an error. 1445s - tolerates increasing an array size during iteration 1445s 1445s Array#fill with (filler, index, length) 1445s - replaces length elements beginning with the index with the filler if given an index and a length 1445s - replaces length elements beginning with the index with the value of block 1445s - replaces all elements after the index if given an index and no length 1445s - replaces all elements after the index if given an index and nil as a length 1445s - replaces the last (-n) elements if given an index n which is negative and no length 1445s - replaces the last (-n) elements if given an index n which is negative and nil as a length 1445s - makes no modifications if given an index greater than end and no length 1445s - makes no modifications if given an index greater than end and nil as a length 1445s - replaces length elements beginning with start index if given an index >= 0 and a length >= 0 1445s - increases the Array size when necessary 1445s - pads between the last element and the index with nil if given an index which is greater than size of the array 1445s - replaces length elements beginning with the (-n)th if given an index n < 0 and a length > 0 1445s - starts at 0 if the negative index is before the start of the array 1445s - makes no modifications if the given length <= 0 1445s - does not raise an exception if the given length is negative and its absolute value does not exceed the index 1445s - does not raise an exception even if the given length is negative and its absolute value exceeds the index 1445s - tries to convert the second and third arguments to Integers using #to_int 1445s - raises a TypeError if the index is not numeric 1445s - raises a TypeError when the length is not numeric 1445s - raises an ArgumentError or RangeError for too-large sizes 1445s 1445s Array#fill with (filler, range) 1445s - replaces elements in range with object 1445s - replaces all elements in range with the value of block 1445s - increases the Array size when necessary 1445s - raises a TypeError with range and length argument 1445s - replaces elements between the (-m)th to the last and the (n+1)th from the first if given an range m..n where m < 0 and n >= 0 1445s - replaces elements between the (-m)th and (-n)th to the last if given an range m..n where m < 0 and n < 0 1445s - replaces elements between the (m+1)th from the first and (-n)th to the last if given an range m..n where m >= 0 and n < 0 1445s - makes no modifications if given an range which implies a section of zero width 1445s - makes no modifications if given an range which implies a section of negative width 1445s - raises an exception if some of the given range lies before the first of the array 1445s - tries to convert the start and end of the passed range to Integers using #to_int 1445s - raises a TypeError if the start or end of the passed range is not numeric 1445s - works with endless ranges 1445s - works with beginless ranges 1445s 1445s Array#filter 1445s - returns an Enumerator if no block given 1445s - tolerates increasing an array size during iteration 1445s - returns a new array of elements for which block is true 1445s - does not return subclass instance on Array subclasses 1445s - properly handles recursive arrays 1445s 1445s Array#filter when no block is given returned Enumerator 1445s - size returns the enumerable size 1445s 1445s Array#filter! 1445s - returns nil if no changes were made in the array 1445s - deletes elements for which the block returns a false value 1445s - returns an enumerator if no block is given 1445s - updates the receiver after all blocks 1445s - does not truncate the array is the block raises an exception 1445s - only changes elements before error is raised, keeping the element which raised an error. 1445s - tolerates increasing an array size during iteration 1445s 1445s Array#filter! when no block is given returned Enumerator 1445s - size returns the enumerable size 1445s 1445s Array#filter! on frozen objects 1445s - returns an Enumerator if no block is given 1445s - raises a FrozenError on a frozen array only during iteration if called without a block 1445s 1445s Array#filter! on frozen objects with truthy block 1445s - keeps elements after any exception 1445s - raises a FrozenError 1445s 1445s Array#filter! on frozen objects with falsy block 1445s - keeps elements after any exception 1445s - raises a FrozenError 1445s 1445s Array#find_index 1445s - returns the index of the first element == to object 1445s - returns 0 if first element == to object 1445s - returns size-1 if only last element == to object 1445s - returns nil if no element == to object 1445s - accepts a block instead of an argument 1445s - ignores the block if there is an argument 1445s - tolerates increasing an array size during iteration 1445s 1445s Array#find_index given no argument and no block 1445s - produces an Enumerator 1445s 1445s Array#first 1445s - returns the first element 1445s - returns nil if self is empty 1445s - returns the first count elements if given a count 1445s - returns an empty array when passed count on an empty array 1445s - returns an empty array when passed count == 0 1445s - returns an array containing the first element when passed count == 1 1445s - raises an ArgumentError when count is negative 1445s - raises a RangeError when count is a Bignum 1445s - returns the entire array when count > length 1445s - returns an array which is independent to the original when passed count 1445s - properly handles recursive arrays 1445s - tries to convert the passed argument to an Integer using #to_int 1445s - raises a TypeError if the passed argument is not numeric 1445s - does not return subclass instance when passed count on Array subclasses 1445s - is not destructive 1445s 1445s Array#flatten 1445s - returns a one-dimensional flattening recursively 1445s - takes an optional argument that determines the level of recursion 1445s - returns dup when the level of recursion is 0 1445s - ignores negative levels 1445s - tries to convert passed Objects to Integers using #to_int 1445s - raises a TypeError when the passed Object can't be converted to an Integer 1445s - does not call flatten on elements 1445s - raises an ArgumentError on recursive arrays 1445s - flattens any element which responds to #to_ary, using the return value of said method 1445s - does not call #to_ary on elements beyond the given level 1445s - returns Array instance for Array subclasses 1445s - is not destructive 1445s - performs respond_to? and method_missing-aware checks when coercing elements to array 1445s 1445s Array#flatten with a non-Array object in the Array 1445s - does not call #to_ary if the method is not defined 1445s - does not raise an exception if #to_ary returns nil 1445s - raises a TypeError if #to_ary does not return an Array 1445s - calls respond_to_missing?(:to_ary, true) to try coercing 1445s - does not call #to_ary if not defined when #respond_to_missing? returns false 1445s - calls #method_missing if defined 1445s 1445s Array#flatten! 1445s - modifies array to produce a one-dimensional flattening recursively 1445s - returns self if made some modifications 1445s - returns nil if no modifications took place 1445s - should not check modification by size 1445s - takes an optional argument that determines the level of recursion 1445s - returns nil when the level of recursion is 0 1445s - treats negative levels as no arguments 1445s - tries to convert passed Objects to Integers using #to_int 1445s - raises a TypeError when the passed Object can't be converted to an Integer 1445s - does not call flatten! on elements 1445s - raises an ArgumentError on recursive arrays 1445s - flattens any elements which responds to #to_ary, using the return value of said method 1445s - raises a FrozenError on frozen arrays when the array is modified 1445s - raises a FrozenError on frozen arrays when the array would not be modified 1445s 1445s Array#frozen? 1445s - returns true if array is frozen 1445s - returns false for an array being sorted by #sort 1445s 1445s Array#hash 1445s - returns the same fixnum for arrays with the same content 1445s - properly handles recursive arrays 1445s - returns the same hash for equal recursive arrays 1445s - returns the same hash for equal recursive arrays through hashes 1445s - calls to_int on result of calling hash on each element 1445s - ignores array class differences 1445s - returns same hash code for arrays with the same content 1445s - returns the same value if arrays are #eql? 1445s - produces different hashes for nested arrays with different values and empty terminator 1445s 1445s Array#include? 1445s - returns true if object is present, false otherwise 1445s - determines presence by using element == obj 1445s - calls == on elements from left to right until success 1445s 1445s Array#index 1445s - returns the index of the first element == to object 1445s - returns 0 if first element == to object 1445s - returns size-1 if only last element == to object 1445s - returns nil if no element == to object 1445s - accepts a block instead of an argument 1445s - ignores the block if there is an argument 1445s - tolerates increasing an array size during iteration 1445s 1445s Array#index given no argument and no block 1445s - produces an Enumerator 1445s 1445s Array#initialize 1445s - is private 1445s - is called on subclasses 1445s - preserves the object's identity even when changing its value 1445s - raises an ArgumentError if passed 3 or more arguments 1445s - raises a FrozenError on frozen arrays 1445s - calls #to_ary to convert the value to an array, even if it's private 1445s 1445s Array#initialize with no arguments 1445s - makes the array empty 1445s - does not use the given block 1445s 1445s Array#initialize with (array) 1445s - replaces self with the other array 1445s - does not use the given block 1445s - calls #to_ary to convert the value to an array 1445s - does not call #to_ary on instances of Array or subclasses of Array 1445s - raises a TypeError if an Array type argument and a default object 1445s 1445s Array#initialize with (size, object=nil) 1445s - sets the array to size and fills with the object 1445s - sets the array to size and fills with nil when object is omitted 1445s - raises an ArgumentError if size is negative 1445s - calls #to_int to convert the size argument to an Integer when object is given 1445s - calls #to_int to convert the size argument to an Integer when object is not given 1445s - raises a TypeError if the size argument is not an Integer type 1445s - yields the index of the element and sets the element to the value of the block 1445s - uses the block value instead of using the default value 1445s - returns the value passed to break 1445s - sets the array to the values returned by the block before break is executed 1445s 1445s Array#insert 1445s - returns self 1445s - inserts objects before the element at index for non-negative index 1445s - appends objects to the end of the array for index == -1 1445s - inserts objects after the element at index with negative index 1445s - pads with nils if the index to be inserted to is past the end 1445s - can insert before the first element with a negative index 1445s - raises an IndexError if the negative index is out of bounds 1445s - does nothing of no object is passed 1445s - tries to convert the passed position argument to an Integer using #to_int 1445s - raises an ArgumentError if no argument passed 1445s - raises a FrozenError on frozen arrays when the array is modified 1445s - raises a FrozenError on frozen arrays when the array would not be modified 1445s 1445s Array#inspect 1445s - returns a string 1445s - returns '[]' for an empty Array 1445s - calls inspect on its elements and joins the results with commas 1445s - does not call #to_s on a String returned from #inspect 1445s - calls #to_s on the object returned from #inspect if the Object isn't a String 1445s - does not call #to_str on the object returned from #inspect when it is not a String 1445s - does not call #to_str on the object returned from #to_s when it is not a String 1445s - does not swallow exceptions raised by #to_s 1445s - represents a recursive element with '[...]' 1445s 1445s Array#inspect with encoding 1445s - returns a US-ASCII string for an empty Array 1445s - use the default external encoding if it is ascii compatible 1445s - use US-ASCII encoding if the default external encoding is not ascii compatible 1445s - does not raise if inspected result is not default external encoding 1445s 1445s Array#intersect? 1445s - tries to convert the passed argument to an Array using #to_ary 1445s - determines equivalence between elements in the sense of eql? 1445s - does not call to_ary on array subclasses 1445s - properly handles an identical item even when its #eql? isn't reflexive 1445s - has semantic of !(a & b).empty? 1445s 1445s Array#intersect? when at least one element in two Arrays is the same 1445s - returns true 1445s 1445s Array#intersect? when there are no elements in common between two Arrays 1445s - returns false 1445s 1445s Array#& 1445s - creates an array with elements common to both arrays (intersection) 1445s - creates an array with no duplicates 1445s - creates an array with elements in order they are first encountered 1445s - does not modify the original Array 1445s - properly handles recursive arrays 1445s - tries to convert the passed argument to an Array using #to_ary 1445s - determines equivalence between elements in the sense of eql? 1445s - does return subclass instances for Array subclasses 1445s - does not call to_ary on array subclasses 1445s - properly handles an identical item even when its #eql? isn't reflexive 1445s 1445s Array#intersection 1445s - creates an array with elements common to both arrays (intersection) 1445s - creates an array with no duplicates 1445s - creates an array with elements in order they are first encountered 1445s - does not modify the original Array 1445s - properly handles recursive arrays 1445s - tries to convert the passed argument to an Array using #to_ary 1445s - determines equivalence between elements in the sense of eql? 1445s - does return subclass instances for Array subclasses 1445s - does not call to_ary on array subclasses 1445s - properly handles an identical item even when its #eql? isn't reflexive 1445s - accepts multiple arguments 1445s - preserves elements order from original array 1445s 1445s Array#join 1445s - returns a string formed by concatenating each element.to_str separated by separator 1445s - uses the same separator with nested arrays 1445s - returns an empty string if the Array is empty 1445s - returns a US-ASCII string for an empty Array 1445s - returns a string formed by concatenating each String element separated by $, 1445s - attempts coercion via #to_str first 1445s - attempts coercion via #to_ary second 1445s - attempts coercion via #to_s third 1445s - raises a NoMethodError if an element does not respond to #to_str, #to_ary, or #to_s 1445s - raises an ArgumentError when the Array is recursive 1445s - uses the first encoding when other strings are compatible 1445s - uses the widest common encoding when other strings are incompatible 1445s - fails for arrays with incompatibly-encoded strings 1445s - does not separate elements when the passed separator is nil 1445s - calls #to_str to convert the separator to a String 1445s - does not call #to_str on the separator if the array is empty 1445s - raises a TypeError if the separator cannot be coerced to a String by calling #to_str 1445s - raises a TypeError if passed false as the separator 1445s 1445s Array#join when $, is not nil 1445s - warns 1445s 1445s Array#join with $, 1445s - separates elements with default separator when the passed separator is nil 1445s 1445s Array#keep_if 1445s - returns the same array if no changes were made 1445s - deletes elements for which the block returns a false value 1445s - returns an enumerator if no block is given 1445s - updates the receiver after all blocks 1445s - does not truncate the array is the block raises an exception 1445s - only changes elements before error is raised, keeping the element which raised an error. 1445s - tolerates increasing an array size during iteration 1445s 1445s Array#keep_if when no block is given returned Enumerator 1445s - size returns the enumerable size 1445s 1445s Array#keep_if on frozen objects 1445s - returns an Enumerator if no block is given 1445s - raises a FrozenError on a frozen array only during iteration if called without a block 1445s 1445s Array#keep_if on frozen objects with truthy block 1445s - keeps elements after any exception 1445s - raises a FrozenError 1445s 1445s Array#keep_if on frozen objects with falsy block 1445s - keeps elements after any exception 1445s - raises a FrozenError 1445s 1445s Array#last 1445s - returns the last element 1445s - returns nil if self is empty 1445s - returns the last count elements if given a count 1445s - returns an empty array when passed a count on an empty array 1445s - returns an empty array when count == 0 1445s - returns an array containing the last element when passed count == 1 1445s - raises an ArgumentError when count is negative 1445s - returns the entire array when count > length 1445s - returns an array which is independent to the original when passed count 1445s - properly handles recursive arrays 1445s - tries to convert the passed argument to an Integer using #to_int 1445s - raises a TypeError if the passed argument is not numeric 1445s - does not return subclass instance on Array subclasses 1445s - is not destructive 1445s 1445s Array#length 1445s - returns the number of elements 1445s - properly handles recursive arrays 1445s 1445s Array#map 1445s - returns a copy of array with each element replaced by the value returned by block 1445s - does not return subclass instance 1445s - does not change self 1445s - returns the evaluated value of block if it broke in the block 1445s - returns an Enumerator when no block given 1445s - raises an ArgumentError when no block and with arguments 1445s - tolerates increasing an array size during iteration 1445s 1445s Array#map when no block is given returned Enumerator 1445s - size returns the enumerable size 1445s 1445s Array#map! 1445s - replaces each element with the value returned by block 1445s - returns self 1445s - returns the evaluated value of block but its contents is partially modified, if it broke in the block 1445s - returns an Enumerator when no block given, and the enumerator can modify the original array 1445s - does not truncate the array is the block raises an exception 1445s - only changes elements before error is raised, keeping the element which raised an error. 1445s - tolerates increasing an array size during iteration 1445s 1445s Array#map! when frozen 1445s - raises a FrozenError 1445s - raises a FrozenError when empty 1445s - raises a FrozenError when calling #each on the returned Enumerator 1445s - raises a FrozenError when calling #each on the returned Enumerator when empty 1445s 1445s Array#map! when no block is given returned Enumerator 1445s - size returns the enumerable size 1445s 1445s Array#max 1445s - is defined on Array 1445s - returns nil with no values 1445s - returns only element in one element array 1445s - returns largest value with multiple elements 1445s 1445s Array#max given a block with one argument 1445s - yields in turn the last length-1 values from the array 1445s 1445s Array#max 1445s - max should return the maximum element 1445s - returns the maximum element (basics cases) 1445s - returns nil for an empty Enumerable 1445s - raises a NoMethodError for elements without #<=> 1445s - raises an ArgumentError for incomparable elements 1445s - returns the maximum element (with block) 1445s - returns the minimum for enumerables that contain nils 1445s - gathers whole arrays as elements when each yields multiple 1445s 1445s Array#min 1445s - is defined on Array 1445s - returns nil with no values 1445s - returns only element in one element array 1445s - returns smallest value with multiple elements 1445s 1445s Array#min given a block with one argument 1445s - yields in turn the last length-1 values from the array 1445s 1445s Array#min 1445s - min should return the minimum element 1445s - returns the minimum (basic cases) 1445s - returns nil for an empty Enumerable 1445s - raises a NoMethodError for elements without #<=> 1445s - raises an ArgumentError for incomparable elements 1445s - returns the minimum when using a block rule 1445s - returns the minimum for enumerables that contain nils 1445s - gathers whole arrays as elements when each yields multiple 1445s 1445s Array#minmax 1445s - min should return the minimum element 1445s - returns the minimum when using a block rule 1445s - returns [nil, nil] for an empty Enumerable 1445s - raises a NoMethodError for elements without #<=> 1445s - raises an ArgumentError when elements are incompatible 1445s 1445s Array#- 1445s - creates an array minus any items from other array 1445s - removes multiple items on the lhs equal to one on the rhs 1445s - properly handles recursive arrays 1445s - tries to convert the passed arguments to Arrays using #to_ary 1445s - raises a TypeError if the argument cannot be coerced to an Array by calling #to_ary 1445s - does not return subclass instance for Array subclasses 1445s - does not call to_ary on array subclasses 1445s - removes an item identified as equivalent via #hash and #eql? 1445s - doesn't remove an item with the same hash but not #eql? 1445s - removes an identical item even when its #eql? isn't reflexive 1445s - is not destructive 1445s 1445s Array#* 1445s - tries to convert the passed argument to a String using #to_str 1445s - tires to convert the passed argument to an Integer using #to_int 1445s - raises a TypeError if the argument can neither be converted to a string nor an integer 1445s - converts the passed argument to a String rather than an Integer 1445s - raises a TypeError is the passed argument is nil 1445s - raises an ArgumentError when passed 2 or more arguments 1445s - raises an ArgumentError when passed no arguments 1445s 1445s Array#* with an integer 1445s - concatenates n copies of the array when passed an integer 1445s - does not return self even if the passed integer is 1 1445s - properly handles recursive arrays 1445s - raises an ArgumentError when passed a negative integer 1445s 1445s Array#* with an integer with a subclass of Array 1445s - returns an Array instance 1445s - does not call #initialize on the subclass instance 1445s 1445s Array#* with a string 1445s - returns a string formed by concatenating each element.to_str separated by separator 1445s - uses the same separator with nested arrays 1445s 1445s Array.new 1445s - returns an instance of Array 1445s - returns an instance of a subclass 1445s - raises an ArgumentError if passed 3 or more arguments 1445s 1445s Array.new with no arguments 1445s - returns an empty array 1445s - does not use the given block 1445s 1445s Array.new with (array) 1445s - returns an array initialized to the other array 1445s - does not use the given block 1445s - calls #to_ary to convert the value to an array 1445s - does not call #to_ary on instances of Array or subclasses of Array 1445s - raises a TypeError if an Array type argument and a default object 1445s 1445s Array.new with (size, object=nil) 1445s - returns an array of size filled with object 1445s - returns an array of size filled with nil when object is omitted 1445s - raises an ArgumentError if size is negative 1445s - calls #to_int to convert the size argument to an Integer when object is given 1445s - calls #to_int to convert the size argument to an Integer when object is not given 1445s - raises a TypeError if the size argument is not an Integer type 1445s - yields the index of the element and sets the element to the value of the block 1445s - uses the block value instead of using the default value 1445s - returns the value passed to break 1445s 1445s Array#none? 1445s - tolerates increasing an array size during iteration 1445s - ignores the block if there is an argument 1445s 1445s Array#one? 1445s - tolerates increasing an array size during iteration 1445s - ignores the block if there is an argument 1445s 1445s Array#pack with format 'A' 1445s - raises a TypeError when passed nil 1445s - raises a TypeError when passed an Integer 1445s - ignores whitespace in the format string 1445s - ignores comments in the format string 1445s - warns in verbose mode that a directive is unknown 1445s - calls #to_str to coerce the directives string 1445s - raises ArgumentError when the format modifier is '_' 1445s - raises ArgumentError when the format modifier is '!' 1445s - adds count bytes of a String to the output 1445s - implicitly has a count of one when no count is specified 1445s - does not add any bytes when the count is zero 1445s - is not affected by a previous count modifier 1445s - raises an ArgumentError when the Array is empty 1445s - raises an ArgumentError when the Array has too few elements 1445s - calls #to_str to convert the element to a String 1445s - raises a TypeError when the object does not respond to #to_str 1445s - returns a string in encoding of common to the concatenated results 1445s - calls #to_str to convert an Object to a String 1445s - will not implicitly convert a number to a string 1445s - adds all the bytes to the output when passed the '*' modifier 1445s - padds the output with spaces when the count exceeds the size of the String 1445s - adds a space when the value is nil 1445s - pads the output with spaces when the value is nil 1445s - does not pad with spaces when passed the '*' modifier and the value is nil 1445s 1445s Array#pack with format 'a' 1445s - raises a TypeError when passed nil 1445s - raises a TypeError when passed an Integer 1445s - ignores whitespace in the format string 1445s - ignores comments in the format string 1445s - warns in verbose mode that a directive is unknown 1445s - calls #to_str to coerce the directives string 1445s - raises ArgumentError when the format modifier is '_' 1445s - raises ArgumentError when the format modifier is '!' 1445s - adds count bytes of a String to the output 1445s - implicitly has a count of one when no count is specified 1445s - does not add any bytes when the count is zero 1445s - is not affected by a previous count modifier 1445s - raises an ArgumentError when the Array is empty 1445s - raises an ArgumentError when the Array has too few elements 1445s - calls #to_str to convert the element to a String 1445s - raises a TypeError when the object does not respond to #to_str 1445s - returns a string in encoding of common to the concatenated results 1445s - adds all the bytes to the output when passed the '*' modifier 1445s - padds the output with NULL bytes when the count exceeds the size of the String 1445s - adds a NULL byte when the value is nil 1445s - pads the output with NULL bytes when the value is nil 1445s - does not pad with NULL bytes when passed the '*' modifier and the value is nil 1445s 1445s Array#pack with format '@' 1445s - raises a TypeError when passed nil 1445s - raises a TypeError when passed an Integer 1445s - ignores whitespace in the format string 1445s - ignores comments in the format string 1445s - warns in verbose mode that a directive is unknown 1445s - calls #to_str to coerce the directives string 1445s - raises ArgumentError when the format modifier is '_' 1445s - raises ArgumentError when the format modifier is '!' 1445s - moves the insertion point to the index specified by the count modifier 1445s - does not consume any elements 1445s - extends the string with NULL bytes if the string size is less than the count 1445s - truncates the string if the string size is greater than the count 1445s - implicitly has a count of one when no count modifier is passed 1445s 1445s Array#pack with format 'B' 1445s - raises a TypeError when passed nil 1445s - raises a TypeError when passed an Integer 1445s - ignores whitespace in the format string 1445s - ignores comments in the format string 1445s - warns in verbose mode that a directive is unknown 1445s - calls #to_str to coerce the directives string 1445s - raises an ArgumentError if there are fewer elements than the format requires 1445s - encodes no bytes when passed zero as the count modifier 1445s - raises a TypeError if the object does not respond to #to_str 1445s - raises a TypeError if #to_str does not return a String 1445s - calls #to_str to convert an Object to a String 1445s - will not implicitly convert a number to a string 1445s - encodes one bit for each character starting with the most significant bit 1445s - implicitly has a count of one when not passed a count modifier 1445s - implicitly has count equal to the string length when passed the '*' modifier 1445s - encodes the least significant bit of a character other than 0 or 1 1445s - returns a binary string 1445s - encodes the string as a sequence of bytes 1445s 1445s Array#pack with format 'b' 1445s - raises a TypeError when passed nil 1445s - raises a TypeError when passed an Integer 1445s - ignores whitespace in the format string 1445s - ignores comments in the format string 1445s - warns in verbose mode that a directive is unknown 1445s - calls #to_str to coerce the directives string 1445s - raises an ArgumentError if there are fewer elements than the format requires 1445s - encodes no bytes when passed zero as the count modifier 1445s - raises a TypeError if the object does not respond to #to_str 1445s - raises a TypeError if #to_str does not return a String 1445s - calls #to_str to convert an Object to a String 1445s - encodes one bit for each character starting with the least significant bit 1445s - implicitly has a count of one when not passed a count modifier 1445s - implicitly has count equal to the string length when passed the '*' modifier 1445s - encodes the least significant bit of a character other than 0 or 1 1445s - returns a binary string 1445s - encodes the string as a sequence of bytes 1445s 1445s Array#pack with :buffer option 1445s - returns specified buffer 1445s - adds result at the end of buffer content 1445s - raises TypeError exception if buffer is not String 1445s 1445s Array#pack with :buffer option offset (@) is specified 1445s - keeps buffer content if it is longer than offset 1445s - fills the gap with \0 if buffer content is shorter than offset 1445s - does not keep buffer content if it is longer than offset + result 1445s 1445s Array#pack with format 'C' 1445s - raises a TypeError when passed nil 1445s - raises a TypeError when passed an Integer 1445s - ignores whitespace in the format string 1445s - ignores comments in the format string 1445s - warns in verbose mode that a directive is unknown 1445s - calls #to_str to coerce the directives string 1445s - encodes the least significant eight bits of a positive number 1445s - encodes the least significant eight bits of a negative number 1445s - encodes a Float truncated as an Integer 1445s - calls #to_int to convert the pack argument to an Integer 1445s - encodes the number of array elements specified by the count modifier 1445s - encodes all remaining elements when passed the '*' modifier 1445s - ignores NULL bytes between directives 1445s - ignores spaces between directives 1445s - raises an ArgumentError if there are fewer elements than the format requires 1445s - returns an empty String if count is zero 1445s - raises a TypeError when passed nil 1445s - raises a TypeError when passed true 1445s - raises a TypeError when passed false 1445s - returns a binary string 1445s - raises a TypeError when the object does not respond to #to_int 1445s - raises a TypeError when passed a String 1445s - raises ArgumentError when the format modifier is '_' 1445s - raises ArgumentError when the format modifier is '!' 1445s 1445s Array#pack with format 'c' 1445s - raises a TypeError when passed nil 1445s - raises a TypeError when passed an Integer 1445s - ignores whitespace in the format string 1445s - ignores comments in the format string 1445s - warns in verbose mode that a directive is unknown 1445s - calls #to_str to coerce the directives string 1445s - encodes the least significant eight bits of a positive number 1445s - encodes the least significant eight bits of a negative number 1445s - encodes a Float truncated as an Integer 1445s - calls #to_int to convert the pack argument to an Integer 1445s - encodes the number of array elements specified by the count modifier 1445s - encodes all remaining elements when passed the '*' modifier 1445s - ignores NULL bytes between directives 1445s - ignores spaces between directives 1445s - raises an ArgumentError if there are fewer elements than the format requires 1445s - returns an empty String if count is zero 1445s - raises a TypeError when passed nil 1445s - raises a TypeError when passed true 1445s - raises a TypeError when passed false 1445s - returns a binary string 1445s - raises a TypeError when the object does not respond to #to_int 1445s - raises a TypeError when passed a String 1445s - raises ArgumentError when the format modifier is '_' 1445s - raises ArgumentError when the format modifier is '!' 1445s 1445s Array#pack 1445s - ignores directives text from '#' to the first newline 1445s - ignores directives text from '#' to the end if no newline is present 1445s - ignores comments at the start of the directives string 1445s - ignores the entire directive string if it is a comment 1445s - ignores multiple comments 1445s 1445s Array#pack with format 'D' 1445s - raises a TypeError when passed nil 1445s - raises a TypeError when passed an Integer 1445s - ignores whitespace in the format string 1445s - ignores comments in the format string 1445s - calls #to_str to coerce the directives string 1445s - raises an ArgumentError if there are fewer elements than the format requires 1445s - raises ArgumentError when the format modifier is '_' 1445s - raises ArgumentError when the format modifier is '!' 1445s - returns an empty String if count is zero 1445s - raises a TypeError when passed nil 1445s - raises a TypeError when passed true 1445s - raises a TypeError when passed false 1445s - returns a binary string 1445s - raises a TypeError if a String does not represent a floating point number 1445s - raises a TypeError when the object is not Numeric 1445s - raises a TypeError when the Numeric object does not respond to #to_f 1445s - encodes a positive Float 1445s - encodes a negative Float 1445s - converts an Integer to a Float 1445s - converts a Rational to a Float 1445s - raises a TypeError if passed a String representation of a floating point number 1445s - encodes the number of array elements specified by the count modifier 1445s - encodes all remaining elements when passed the '*' modifier 1445s - ignores NULL bytes between directives 1445s - ignores spaces between directives 1445s - encodes positive Infinity 1445s - encodes negative Infinity 1445s - encodes NaN 1445s - encodes a positive Float outside the range of a single precision float 1445s - encodes a negative Float outside the range of a single precision float 1445s 1445s Array#pack with format 'd' 1445s - raises a TypeError when passed nil 1445s - raises a TypeError when passed an Integer 1445s - ignores whitespace in the format string 1445s - ignores comments in the format string 1445s - calls #to_str to coerce the directives string 1445s - raises an ArgumentError if there are fewer elements than the format requires 1445s - raises ArgumentError when the format modifier is '_' 1445s - raises ArgumentError when the format modifier is '!' 1445s - returns an empty String if count is zero 1445s - raises a TypeError when passed nil 1445s - raises a TypeError when passed true 1445s - raises a TypeError when passed false 1445s - returns a binary string 1445s - raises a TypeError if a String does not represent a floating point number 1445s - raises a TypeError when the object is not Numeric 1445s - raises a TypeError when the Numeric object does not respond to #to_f 1445s - encodes a positive Float 1445s - encodes a negative Float 1445s - converts an Integer to a Float 1445s - converts a Rational to a Float 1445s - raises a TypeError if passed a String representation of a floating point number 1446s - encodes the number of array elements specified by the count modifier 1446s - encodes all remaining elements when passed the '*' modifier 1446s - ignores NULL bytes between directives 1446s - ignores spaces between directives 1446s - encodes positive Infinity 1446s - encodes negative Infinity 1446s - encodes NaN 1446s - encodes a positive Float outside the range of a single precision float 1446s - encodes a negative Float outside the range of a single precision float 1446s 1446s Array#pack with format 'E' 1446s - raises a TypeError when passed nil 1446s - raises a TypeError when passed an Integer 1446s - ignores whitespace in the format string 1446s - ignores comments in the format string 1446s - calls #to_str to coerce the directives string 1446s - raises an ArgumentError if there are fewer elements than the format requires 1446s - raises ArgumentError when the format modifier is '_' 1446s - raises ArgumentError when the format modifier is '!' 1446s - returns an empty String if count is zero 1446s - raises a TypeError when passed nil 1446s - raises a TypeError when passed true 1446s - raises a TypeError when passed false 1446s - returns a binary string 1446s - raises a TypeError if a String does not represent a floating point number 1446s - raises a TypeError when the object is not Numeric 1446s - raises a TypeError when the Numeric object does not respond to #to_f 1446s - encodes a positive Float 1446s - encodes a negative Float 1446s - converts an Integer to a Float 1446s - converts a Rational to a Float 1446s - raises a TypeError if passed a String representation of a floating point number 1446s - encodes the number of array elements specified by the count modifier 1446s - encodes all remaining elements when passed the '*' modifier 1446s - ignores NULL bytes between directives 1446s - ignores spaces between directives 1446s - encodes positive Infinity 1446s - encodes negative Infinity 1446s - encodes NaN 1446s - encodes a positive Float outside the range of a single precision float 1446s - encodes a negative Float outside the range of a single precision float 1446s 1446s Array#pack with format 'e' 1446s - raises a TypeError when passed nil 1446s - raises a TypeError when passed an Integer 1446s - ignores whitespace in the format string 1446s - ignores comments in the format string 1446s - calls #to_str to coerce the directives string 1446s - raises an ArgumentError if there are fewer elements than the format requires 1446s - raises ArgumentError when the format modifier is '_' 1446s - raises ArgumentError when the format modifier is '!' 1446s - returns an empty String if count is zero 1446s - raises a TypeError when passed nil 1446s - raises a TypeError when passed true 1446s - raises a TypeError when passed false 1446s - returns a binary string 1446s - raises a TypeError if a String does not represent a floating point number 1446s - raises a TypeError when the object is not Numeric 1446s - raises a TypeError when the Numeric object does not respond to #to_f 1446s - encodes a positive Float 1446s - encodes a negative Float 1446s - converts an Integer to a Float 1446s - raises a TypeError if passed a String representation of a floating point number 1446s - encodes the number of array elements specified by the count modifier 1446s - encodes all remaining elements when passed the '*' modifier 1446s - ignores NULL bytes between directives 1446s - ignores spaces between directives 1446s - encodes positive Infinity 1446s - encodes negative Infinity 1446s - encodes NaN 1446s - encodes a positive Float outside the range of a single precision float 1446s - encodes a negative Float outside the range of a single precision float 1446s - encodes a bignum as a float 1446s - encodes a rational as a float 1446s 1446s Array#pack with empty format 1446s - returns an empty String 1446s - returns a String with US-ASCII encoding 1446s 1446s Array#pack with format 'F' 1446s - raises a TypeError when passed nil 1446s - raises a TypeError when passed an Integer 1446s - ignores whitespace in the format string 1446s - ignores comments in the format string 1446s - calls #to_str to coerce the directives string 1446s - raises an ArgumentError if there are fewer elements than the format requires 1446s - raises ArgumentError when the format modifier is '_' 1446s - raises ArgumentError when the format modifier is '!' 1446s - returns an empty String if count is zero 1446s - raises a TypeError when passed nil 1446s - raises a TypeError when passed true 1446s - raises a TypeError when passed false 1446s - returns a binary string 1446s - raises a TypeError if a String does not represent a floating point number 1446s - raises a TypeError when the object is not Numeric 1446s - raises a TypeError when the Numeric object does not respond to #to_f 1446s - encodes a positive Float 1446s - encodes a negative Float 1446s - converts an Integer to a Float 1446s - raises a TypeError if passed a String representation of a floating point number 1446s - encodes the number of array elements specified by the count modifier 1446s - encodes all remaining elements when passed the '*' modifier 1446s - ignores NULL bytes between directives 1446s - ignores spaces between directives 1446s - encodes positive Infinity 1446s - encodes negative Infinity 1446s - encodes NaN 1446s - encodes a positive Float outside the range of a single precision float 1446s - encodes a negative Float outside the range of a single precision float 1446s - encodes a bignum as a float 1446s - encodes a rational as a float 1446s 1446s Array#pack with format 'f' 1446s - raises a TypeError when passed nil 1446s - raises a TypeError when passed an Integer 1446s - ignores whitespace in the format string 1446s - ignores comments in the format string 1446s - calls #to_str to coerce the directives string 1446s - raises an ArgumentError if there are fewer elements than the format requires 1446s - raises ArgumentError when the format modifier is '_' 1446s - raises ArgumentError when the format modifier is '!' 1446s - returns an empty String if count is zero 1446s - raises a TypeError when passed nil 1446s - raises a TypeError when passed true 1446s - raises a TypeError when passed false 1446s - returns a binary string 1446s - raises a TypeError if a String does not represent a floating point number 1446s - raises a TypeError when the object is not Numeric 1446s - raises a TypeError when the Numeric object does not respond to #to_f 1446s - encodes a positive Float 1446s - encodes a negative Float 1446s - converts an Integer to a Float 1446s - raises a TypeError if passed a String representation of a floating point number 1446s - encodes the number of array elements specified by the count modifier 1446s - encodes all remaining elements when passed the '*' modifier 1446s - ignores NULL bytes between directives 1446s - ignores spaces between directives 1446s - encodes positive Infinity 1446s - encodes negative Infinity 1446s - encodes NaN 1446s - encodes a positive Float outside the range of a single precision float 1446s - encodes a negative Float outside the range of a single precision float 1446s - encodes a bignum as a float 1446s - encodes a rational as a float 1446s 1446s Array#pack with format 'G' 1446s - raises a TypeError when passed nil 1446s - raises a TypeError when passed an Integer 1446s - ignores whitespace in the format string 1446s - ignores comments in the format string 1446s - calls #to_str to coerce the directives string 1446s - raises an ArgumentError if there are fewer elements than the format requires 1446s - raises ArgumentError when the format modifier is '_' 1446s - raises ArgumentError when the format modifier is '!' 1446s - returns an empty String if count is zero 1446s - raises a TypeError when passed nil 1446s - raises a TypeError when passed true 1446s - raises a TypeError when passed false 1446s - returns a binary string 1446s - raises a TypeError if a String does not represent a floating point number 1446s - raises a TypeError when the object is not Numeric 1446s - raises a TypeError when the Numeric object does not respond to #to_f 1446s - encodes a positive Float 1446s - encodes a negative Float 1446s - converts an Integer to a Float 1446s - raises a TypeError if passed a String representation of a floating point number 1446s - encodes the number of array elements specified by the count modifier 1446s - encodes all remaining elements when passed the '*' modifier 1446s - ignores NULL bytes between directives 1446s - ignores spaces between directives 1446s - encodes positive Infinity 1446s - encodes negative Infinity 1446s - encodes NaN 1446s - encodes a positive Float outside the range of a single precision float 1446s - encodes a negative Float outside the range of a single precision float 1446s 1446s Array#pack with format 'g' 1446s - raises a TypeError when passed nil 1446s - raises a TypeError when passed an Integer 1446s - ignores whitespace in the format string 1446s - ignores comments in the format string 1446s - calls #to_str to coerce the directives string 1446s - raises an ArgumentError if there are fewer elements than the format requires 1446s - raises ArgumentError when the format modifier is '_' 1446s - raises ArgumentError when the format modifier is '!' 1446s - returns an empty String if count is zero 1446s - raises a TypeError when passed nil 1446s - raises a TypeError when passed true 1446s - raises a TypeError when passed false 1446s - returns a binary string 1446s - raises a TypeError if a String does not represent a floating point number 1446s - raises a TypeError when the object is not Numeric 1446s - raises a TypeError when the Numeric object does not respond to #to_f 1446s - encodes a positive Float 1446s - encodes a negative Float 1446s - converts an Integer to a Float 1446s - converts a Rational to a Float 1446s - raises a TypeError if passed a String representation of a floating point number 1446s - encodes the number of array elements specified by the count modifier 1446s - encodes all remaining elements when passed the '*' modifier 1446s - ignores NULL bytes between directives 1446s - ignores spaces between directives 1446s - encodes positive Infinity 1446s - encodes negative Infinity 1446s - encodes NaN 1446s - encodes a positive Float outside the range of a single precision float 1446s - encodes a negative Float outside the range of a single precision float 1446s 1446s Array#pack with format 'H' 1446s - raises a TypeError when passed nil 1446s - raises a TypeError when passed an Integer 1446s - ignores whitespace in the format string 1446s - ignores comments in the format string 1446s - warns in verbose mode that a directive is unknown 1446s - calls #to_str to coerce the directives string 1446s - raises an ArgumentError if there are fewer elements than the format requires 1446s - encodes no bytes when passed zero as the count modifier 1446s - raises a TypeError if the object does not respond to #to_str 1446s - raises a TypeError if #to_str does not return a String 1446s - calls #to_str to convert an Object to a String 1446s - will not implicitly convert a number to a string 1446s - encodes the first character as the most significant nibble when passed no count modifier 1446s - implicitly has count equal to the string length when passed the '*' modifier 1446s - encodes count nibbles when passed a count modifier exceeding the string length 1446s - encodes the first character as the most significant nibble of a hex value 1446s - encodes the second character as the least significant nibble of a hex value 1446s - encodes the least significant nibble of a non alphanumeric character as the most significant nibble of the hex value 1446s - returns a binary string 1446s 1446s Array#pack with format 'h' 1446s - raises a TypeError when passed nil 1446s - raises a TypeError when passed an Integer 1446s - ignores whitespace in the format string 1446s - ignores comments in the format string 1446s - warns in verbose mode that a directive is unknown 1446s - calls #to_str to coerce the directives string 1446s - raises an ArgumentError if there are fewer elements than the format requires 1446s - encodes no bytes when passed zero as the count modifier 1446s - raises a TypeError if the object does not respond to #to_str 1446s - raises a TypeError if #to_str does not return a String 1446s - calls #to_str to convert an Object to a String 1446s - encodes the first character as the least significant nibble when passed no count modifier 1446s - implicitly has count equal to the string length when passed the '*' modifier 1446s - encodes count nibbles when passed a count modifier exceeding the string length 1446s - encodes the first character as the least significant nibble of a hex value 1446s - encodes the second character as the most significant nibble of a hex value 1446s - encodes the least significant nibble of a non alphanumeric character as the least significant nibble of the hex value 1446s - returns a binary string 1446s 1446s Array#pack with format 'I' 1446s - raises a TypeError when passed nil 1446s - raises a TypeError when passed an Integer 1446s - ignores whitespace in the format string 1446s - ignores comments in the format string 1446s - warns in verbose mode that a directive is unknown 1446s - calls #to_str to coerce the directives string 1446s - raises an ArgumentError if there are fewer elements than the format requires 1446s - returns an empty String if count is zero 1446s - raises a TypeError when passed nil 1446s - raises a TypeError when passed true 1446s - raises a TypeError when passed false 1446s - returns a binary string 1446s - raises a TypeError when the object does not respond to #to_int 1446s - raises a TypeError when passed a String 1446s 1446s Array#pack with format 'i' 1446s - raises a TypeError when passed nil 1446s - raises a TypeError when passed an Integer 1446s - ignores whitespace in the format string 1446s - ignores comments in the format string 1446s - warns in verbose mode that a directive is unknown 1446s - calls #to_str to coerce the directives string 1446s - raises an ArgumentError if there are fewer elements than the format requires 1446s - returns an empty String if count is zero 1446s - raises a TypeError when passed nil 1446s - raises a TypeError when passed true 1446s - raises a TypeError when passed false 1446s - returns a binary string 1446s - raises a TypeError when the object does not respond to #to_int 1446s - raises a TypeError when passed a String 1446s 1446s Array#pack with format 'I' with modifier '<' 1446s - encodes the least significant 32 bits of a positive number 1446s - encodes the least significant 32 bits of a negative number 1446s - encodes a Float truncated as an Integer 1446s - calls #to_int to convert the pack argument to an Integer 1446s - encodes the number of array elements specified by the count modifier 1446s - encodes all remaining elements when passed the '*' modifier 1446s - ignores NULL bytes between directives 1446s - ignores spaces between directives 1446s 1446s Array#pack with format 'I' with modifier '<' and '_' 1446s - encodes the least significant 32 bits of a positive number 1446s - encodes the least significant 32 bits of a negative number 1446s - encodes a Float truncated as an Integer 1446s - calls #to_int to convert the pack argument to an Integer 1446s - encodes the number of array elements specified by the count modifier 1446s - encodes all remaining elements when passed the '*' modifier 1446s - ignores NULL bytes between directives 1446s - ignores spaces between directives 1446s - encodes the least significant 32 bits of a positive number 1446s - encodes the least significant 32 bits of a negative number 1446s - encodes a Float truncated as an Integer 1446s - calls #to_int to convert the pack argument to an Integer 1446s - encodes the number of array elements specified by the count modifier 1446s - encodes all remaining elements when passed the '*' modifier 1446s - ignores NULL bytes between directives 1446s - ignores spaces between directives 1446s 1446s Array#pack with format 'I' with modifier '<' and '!' 1446s - encodes the least significant 32 bits of a positive number 1446s - encodes the least significant 32 bits of a negative number 1446s - encodes a Float truncated as an Integer 1446s - calls #to_int to convert the pack argument to an Integer 1446s - encodes the number of array elements specified by the count modifier 1446s - encodes all remaining elements when passed the '*' modifier 1446s - ignores NULL bytes between directives 1446s - ignores spaces between directives 1446s - encodes the least significant 32 bits of a positive number 1446s - encodes the least significant 32 bits of a negative number 1446s - encodes a Float truncated as an Integer 1446s - calls #to_int to convert the pack argument to an Integer 1446s - encodes the number of array elements specified by the count modifier 1446s - encodes all remaining elements when passed the '*' modifier 1446s - ignores NULL bytes between directives 1446s - ignores spaces between directives 1446s 1446s Array#pack with format 'I' with modifier '>' 1446s - encodes the least significant 32 bits of a positive number 1446s - encodes the least significant 32 bits of a negative number 1446s - encodes a Float truncated as an Integer 1446s - calls #to_int to convert the pack argument to an Integer 1446s - encodes the number of array elements specified by the count modifier 1446s - encodes all remaining elements when passed the '*' modifier 1446s - ignores NULL bytes between directives 1446s - ignores spaces between directives 1446s 1446s Array#pack with format 'I' with modifier '>' and '_' 1446s - encodes the least significant 32 bits of a positive number 1446s - encodes the least significant 32 bits of a negative number 1446s - encodes a Float truncated as an Integer 1446s - calls #to_int to convert the pack argument to an Integer 1446s - encodes the number of array elements specified by the count modifier 1446s - encodes all remaining elements when passed the '*' modifier 1446s - ignores NULL bytes between directives 1446s - ignores spaces between directives 1446s - encodes the least significant 32 bits of a positive number 1446s - encodes the least significant 32 bits of a negative number 1446s - encodes a Float truncated as an Integer 1446s - calls #to_int to convert the pack argument to an Integer 1446s - encodes the number of array elements specified by the count modifier 1446s - encodes all remaining elements when passed the '*' modifier 1446s - ignores NULL bytes between directives 1446s - ignores spaces between directives 1446s 1446s Array#pack with format 'I' with modifier '>' and '!' 1446s - encodes the least significant 32 bits of a positive number 1446s - encodes the least significant 32 bits of a negative number 1446s - encodes a Float truncated as an Integer 1446s - calls #to_int to convert the pack argument to an Integer 1446s - encodes the number of array elements specified by the count modifier 1446s - encodes all remaining elements when passed the '*' modifier 1446s - ignores NULL bytes between directives 1446s - ignores spaces between directives 1446s - encodes the least significant 32 bits of a positive number 1446s - encodes the least significant 32 bits of a negative number 1446s - encodes a Float truncated as an Integer 1446s - calls #to_int to convert the pack argument to an Integer 1446s - encodes the number of array elements specified by the count modifier 1446s - encodes all remaining elements when passed the '*' modifier 1446s - ignores NULL bytes between directives 1446s - ignores spaces between directives 1446s 1446s Array#pack with format 'i' with modifier '<' 1446s - encodes the least significant 32 bits of a positive number 1446s - encodes the least significant 32 bits of a negative number 1446s - encodes a Float truncated as an Integer 1446s - calls #to_int to convert the pack argument to an Integer 1446s - encodes the number of array elements specified by the count modifier 1446s - encodes all remaining elements when passed the '*' modifier 1446s - ignores NULL bytes between directives 1446s - ignores spaces between directives 1446s 1446s Array#pack with format 'i' with modifier '<' and '_' 1446s - encodes the least significant 32 bits of a positive number 1446s - encodes the least significant 32 bits of a negative number 1446s - encodes a Float truncated as an Integer 1446s - calls #to_int to convert the pack argument to an Integer 1446s - encodes the number of array elements specified by the count modifier 1446s - encodes all remaining elements when passed the '*' modifier 1446s - ignores NULL bytes between directives 1446s - ignores spaces between directives 1446s - encodes the least significant 32 bits of a positive number 1446s - encodes the least significant 32 bits of a negative number 1446s - encodes a Float truncated as an Integer 1446s - calls #to_int to convert the pack argument to an Integer 1446s - encodes the number of array elements specified by the count modifier 1446s - encodes all remaining elements when passed the '*' modifier 1446s - ignores NULL bytes between directives 1446s - ignores spaces between directives 1446s 1446s Array#pack with format 'i' with modifier '<' and '!' 1446s - encodes the least significant 32 bits of a positive number 1446s - encodes the least significant 32 bits of a negative number 1446s - encodes a Float truncated as an Integer 1446s - calls #to_int to convert the pack argument to an Integer 1446s - encodes the number of array elements specified by the count modifier 1446s - encodes all remaining elements when passed the '*' modifier 1446s - ignores NULL bytes between directives 1446s - ignores spaces between directives 1446s - encodes the least significant 32 bits of a positive number 1446s - encodes the least significant 32 bits of a negative number 1446s - encodes a Float truncated as an Integer 1446s - calls #to_int to convert the pack argument to an Integer 1446s - encodes the number of array elements specified by the count modifier 1446s - encodes all remaining elements when passed the '*' modifier 1446s - ignores NULL bytes between directives 1446s - ignores spaces between directives 1446s 1446s Array#pack with format 'i' with modifier '>' 1446s - encodes the least significant 32 bits of a positive number 1446s - encodes the least significant 32 bits of a negative number 1446s - encodes a Float truncated as an Integer 1446s - calls #to_int to convert the pack argument to an Integer 1446s - encodes the number of array elements specified by the count modifier 1446s - encodes all remaining elements when passed the '*' modifier 1446s - ignores NULL bytes between directives 1446s - ignores spaces between directives 1446s 1446s Array#pack with format 'i' with modifier '>' and '_' 1446s - encodes the least significant 32 bits of a positive number 1446s - encodes the least significant 32 bits of a negative number 1446s - encodes a Float truncated as an Integer 1446s - calls #to_int to convert the pack argument to an Integer 1446s - encodes the number of array elements specified by the count modifier 1446s - encodes all remaining elements when passed the '*' modifier 1446s - ignores NULL bytes between directives 1446s - ignores spaces between directives 1446s - encodes the least significant 32 bits of a positive number 1446s - encodes the least significant 32 bits of a negative number 1446s - encodes a Float truncated as an Integer 1446s - calls #to_int to convert the pack argument to an Integer 1446s - encodes the number of array elements specified by the count modifier 1446s - encodes all remaining elements when passed the '*' modifier 1446s - ignores NULL bytes between directives 1446s - ignores spaces between directives 1446s 1446s Array#pack with format 'i' with modifier '>' and '!' 1446s - encodes the least significant 32 bits of a positive number 1446s - encodes the least significant 32 bits of a negative number 1446s - encodes a Float truncated as an Integer 1446s - calls #to_int to convert the pack argument to an Integer 1446s - encodes the number of array elements specified by the count modifier 1446s - encodes all remaining elements when passed the '*' modifier 1446s - ignores NULL bytes between directives 1446s - ignores spaces between directives 1446s - encodes the least significant 32 bits of a positive number 1446s - encodes the least significant 32 bits of a negative number 1446s - encodes a Float truncated as an Integer 1446s - calls #to_int to convert the pack argument to an Integer 1446s - encodes the number of array elements specified by the count modifier 1446s - encodes all remaining elements when passed the '*' modifier 1446s - ignores NULL bytes between directives 1446s - ignores spaces between directives 1446s 1446s Array#pack with format 'I' 1446s - encodes the least significant 32 bits of a positive number 1446s - encodes the least significant 32 bits of a negative number 1446s - encodes a Float truncated as an Integer 1446s - calls #to_int to convert the pack argument to an Integer 1446s - encodes the number of array elements specified by the count modifier 1446s - encodes all remaining elements when passed the '*' modifier 1446s - ignores NULL bytes between directives 1446s - ignores spaces between directives 1446s 1446s Array#pack with format 'I' with modifier '_' 1446s - encodes the least significant 32 bits of a number 1446s - encodes the number of array elements specified by the count modifier 1446s - encodes all remaining elements when passed the '*' modifier 1446s - encodes the least significant 32 bits of a number that is greater than 32 bits 1446s 1446s Array#pack with format 'I' with modifier '!' 1446s - encodes the least significant 32 bits of a number 1446s - encodes the number of array elements specified by the count modifier 1446s - encodes all remaining elements when passed the '*' modifier 1446s - encodes the least significant 32 bits of a number that is greater than 32 bits 1446s 1446s Array#pack with format 'i' 1446s - encodes the least significant 32 bits of a positive number 1446s - encodes the least significant 32 bits of a negative number 1446s - encodes a Float truncated as an Integer 1446s - calls #to_int to convert the pack argument to an Integer 1446s - encodes the number of array elements specified by the count modifier 1446s - encodes all remaining elements when passed the '*' modifier 1446s - ignores NULL bytes between directives 1446s - ignores spaces between directives 1446s 1446s Array#pack with format 'i' with modifier '_' 1446s - encodes the least significant 32 bits of a number 1446s - encodes the number of array elements specified by the count modifier 1446s - encodes all remaining elements when passed the '*' modifier 1446s - encodes the least significant 32 bits of a number that is greater than 32 bits 1446s 1446s Array#pack with format 'i' with modifier '!' 1446s - encodes the least significant 32 bits of a number 1446s - encodes the number of array elements specified by the count modifier 1446s - encodes all remaining elements when passed the '*' modifier 1446s - encodes the least significant 32 bits of a number that is greater than 32 bits 1446s 1446s Array#pack with format 'J' 1446s - raises a TypeError when passed nil 1446s - raises a TypeError when passed an Integer 1446s - ignores whitespace in the format string 1446s - ignores comments in the format string 1446s - warns in verbose mode that a directive is unknown 1446s - calls #to_str to coerce the directives string 1446s - raises an ArgumentError if there are fewer elements than the format requires 1446s - returns an empty String if count is zero 1446s - raises a TypeError when passed nil 1446s - raises a TypeError when passed true 1446s - raises a TypeError when passed false 1446s - returns a binary string 1446s - raises a TypeError when the object does not respond to #to_int 1446s - raises a TypeError when passed a String 1446s 1446s Array#pack with format 'j' 1446s - raises a TypeError when passed nil 1446s - raises a TypeError when passed an Integer 1446s - ignores whitespace in the format string 1446s - ignores comments in the format string 1446s - warns in verbose mode that a directive is unknown 1446s - calls #to_str to coerce the directives string 1446s - raises an ArgumentError if there are fewer elements than the format requires 1446s - returns an empty String if count is zero 1446s - raises a TypeError when passed nil 1446s - raises a TypeError when passed true 1446s - raises a TypeError when passed false 1446s - returns a binary string 1446s - raises a TypeError when the object does not respond to #to_int 1446s - raises a TypeError when passed a String 1446s 1446s Array#pack with format 'J' with modifier '_' 1446s - encodes the least significant 64 bits of a positive number 1446s - encodes the least significant 64 bits of a negative number 1446s - encodes a Float truncated as an Integer 1446s - calls #to_int to convert the pack argument to an Integer 1446s - encodes the number of array elements specified by the count modifier 1446s - encodes all remaining elements when passed the '*' modifier 1446s - ignores NULL bytes between directives 1446s - ignores spaces between directives 1446s 1446s Array#pack with format 'J' with modifier '!' 1446s - encodes the least significant 64 bits of a positive number 1446s - encodes the least significant 64 bits of a negative number 1446s - encodes a Float truncated as an Integer 1446s - calls #to_int to convert the pack argument to an Integer 1446s - encodes the number of array elements specified by the count modifier 1446s - encodes all remaining elements when passed the '*' modifier 1446s - ignores NULL bytes between directives 1446s - ignores spaces between directives 1446s 1446s Array#pack with format 'j' with modifier '_' 1446s - encodes the least significant 64 bits of a positive number 1446s - encodes the least significant 64 bits of a negative number 1446s - encodes a Float truncated as an Integer 1446s - calls #to_int to convert the pack argument to an Integer 1446s - encodes the number of array elements specified by the count modifier 1446s - encodes all remaining elements when passed the '*' modifier 1446s - ignores NULL bytes between directives 1446s - ignores spaces between directives 1446s 1446s Array#pack with format 'j' with modifier '!' 1446s - encodes the least significant 64 bits of a positive number 1446s - encodes the least significant 64 bits of a negative number 1446s - encodes a Float truncated as an Integer 1446s - calls #to_int to convert the pack argument to an Integer 1446s - encodes the number of array elements specified by the count modifier 1446s - encodes all remaining elements when passed the '*' modifier 1446s - ignores NULL bytes between directives 1446s - ignores spaces between directives 1446s 1446s Array#pack with format 'J' with modifier '<' and '_' 1446s - encodes the least significant 64 bits of a positive number 1446s - encodes the least significant 64 bits of a negative number 1446s - encodes a Float truncated as an Integer 1446s - calls #to_int to convert the pack argument to an Integer 1446s - encodes the number of array elements specified by the count modifier 1446s - encodes all remaining elements when passed the '*' modifier 1446s - ignores NULL bytes between directives 1446s - ignores spaces between directives 1446s - encodes the least significant 64 bits of a positive number 1446s - encodes the least significant 64 bits of a negative number 1446s - encodes a Float truncated as an Integer 1446s - calls #to_int to convert the pack argument to an Integer 1446s - encodes the number of array elements specified by the count modifier 1446s - encodes all remaining elements when passed the '*' modifier 1446s - ignores NULL bytes between directives 1446s - ignores spaces between directives 1446s 1446s Array#pack with format 'J' with modifier '<' and '!' 1446s - encodes the least significant 64 bits of a positive number 1446s - encodes the least significant 64 bits of a negative number 1446s - encodes a Float truncated as an Integer 1446s - calls #to_int to convert the pack argument to an Integer 1446s - encodes the number of array elements specified by the count modifier 1446s - encodes all remaining elements when passed the '*' modifier 1446s - ignores NULL bytes between directives 1446s - ignores spaces between directives 1446s - encodes the least significant 64 bits of a positive number 1446s - encodes the least significant 64 bits of a negative number 1446s - encodes a Float truncated as an Integer 1446s - calls #to_int to convert the pack argument to an Integer 1446s - encodes the number of array elements specified by the count modifier 1446s - encodes all remaining elements when passed the '*' modifier 1446s - ignores NULL bytes between directives 1446s - ignores spaces between directives 1446s 1446s Array#pack with format 'J' with modifier '>' and '_' 1446s - encodes the least significant 64 bits of a positive number 1446s - encodes the least significant 64 bits of a negative number 1446s - encodes a Float truncated as an Integer 1446s - calls #to_int to convert the pack argument to an Integer 1446s - encodes the number of array elements specified by the count modifier 1446s - encodes all remaining elements when passed the '*' modifier 1446s - ignores NULL bytes between directives 1446s - ignores spaces between directives 1446s - encodes the least significant 64 bits of a positive number 1446s - encodes the least significant 64 bits of a negative number 1446s - encodes a Float truncated as an Integer 1446s - calls #to_int to convert the pack argument to an Integer 1446s - encodes the number of array elements specified by the count modifier 1446s - encodes all remaining elements when passed the '*' modifier 1446s - ignores NULL bytes between directives 1446s - ignores spaces between directives 1446s 1446s Array#pack with format 'J' with modifier '>' and '!' 1446s - encodes the least significant 64 bits of a positive number 1446s - encodes the least significant 64 bits of a negative number 1446s - encodes a Float truncated as an Integer 1446s - calls #to_int to convert the pack argument to an Integer 1446s - encodes the number of array elements specified by the count modifier 1446s - encodes all remaining elements when passed the '*' modifier 1446s - ignores NULL bytes between directives 1446s - ignores spaces between directives 1446s - encodes the least significant 64 bits of a positive number 1446s - encodes the least significant 64 bits of a negative number 1446s - encodes a Float truncated as an Integer 1446s - calls #to_int to convert the pack argument to an Integer 1446s - encodes the number of array elements specified by the count modifier 1446s - encodes all remaining elements when passed the '*' modifier 1446s - ignores NULL bytes between directives 1446s - ignores spaces between directives 1446s 1446s Array#pack with format 'j' with modifier '<' and '_' 1446s - encodes the least significant 64 bits of a positive number 1446s - encodes the least significant 64 bits of a negative number 1446s - encodes a Float truncated as an Integer 1446s - calls #to_int to convert the pack argument to an Integer 1446s - encodes the number of array elements specified by the count modifier 1446s - encodes all remaining elements when passed the '*' modifier 1446s - ignores NULL bytes between directives 1446s - ignores spaces between directives 1446s - encodes the least significant 64 bits of a positive number 1446s - encodes the least significant 64 bits of a negative number 1446s - encodes a Float truncated as an Integer 1446s - calls #to_int to convert the pack argument to an Integer 1446s - encodes the number of array elements specified by the count modifier 1446s - encodes all remaining elements when passed the '*' modifier 1446s - ignores NULL bytes between directives 1446s - ignores spaces between directives 1446s 1446s Array#pack with format 'j' with modifier '<' and '!' 1446s - encodes the least significant 64 bits of a positive number 1446s - encodes the least significant 64 bits of a negative number 1446s - encodes a Float truncated as an Integer 1446s - calls #to_int to convert the pack argument to an Integer 1446s - encodes the number of array elements specified by the count modifier 1446s - encodes all remaining elements when passed the '*' modifier 1446s - ignores NULL bytes between directives 1446s - ignores spaces between directives 1446s - encodes the least significant 64 bits of a positive number 1446s - encodes the least significant 64 bits of a negative number 1446s - encodes a Float truncated as an Integer 1446s - calls #to_int to convert the pack argument to an Integer 1446s - encodes the number of array elements specified by the count modifier 1446s - encodes all remaining elements when passed the '*' modifier 1446s - ignores NULL bytes between directives 1446s - ignores spaces between directives 1446s 1446s Array#pack with format 'j' with modifier '>' and '_' 1446s - encodes the least significant 64 bits of a positive number 1446s - encodes the least significant 64 bits of a negative number 1446s - encodes a Float truncated as an Integer 1446s - calls #to_int to convert the pack argument to an Integer 1446s - encodes the number of array elements specified by the count modifier 1446s - encodes all remaining elements when passed the '*' modifier 1446s - ignores NULL bytes between directives 1446s - ignores spaces between directives 1446s - encodes the least significant 64 bits of a positive number 1446s - encodes the least significant 64 bits of a negative number 1446s - encodes a Float truncated as an Integer 1446s - calls #to_int to convert the pack argument to an Integer 1446s - encodes the number of array elements specified by the count modifier 1446s - encodes all remaining elements when passed the '*' modifier 1446s - ignores NULL bytes between directives 1446s - ignores spaces between directives 1446s 1446s Array#pack with format 'j' with modifier '>' and '!' 1446s - encodes the least significant 64 bits of a positive number 1446s - encodes the least significant 64 bits of a negative number 1446s - encodes a Float truncated as an Integer 1446s - calls #to_int to convert the pack argument to an Integer 1446s - encodes the number of array elements specified by the count modifier 1446s - encodes all remaining elements when passed the '*' modifier 1446s - ignores NULL bytes between directives 1446s - ignores spaces between directives 1446s - encodes the least significant 64 bits of a positive number 1446s - encodes the least significant 64 bits of a negative number 1446s - encodes a Float truncated as an Integer 1446s - calls #to_int to convert the pack argument to an Integer 1446s - encodes the number of array elements specified by the count modifier 1446s - encodes all remaining elements when passed the '*' modifier 1446s - ignores NULL bytes between directives 1446s - ignores spaces between directives 1446s 1446s Array#pack with format 'L' 1446s - raises a TypeError when passed nil 1446s - raises a TypeError when passed an Integer 1446s - ignores whitespace in the format string 1446s - ignores comments in the format string 1446s - warns in verbose mode that a directive is unknown 1446s - calls #to_str to coerce the directives string 1446s - raises an ArgumentError if there are fewer elements than the format requires 1446s - returns an empty String if count is zero 1446s - raises a TypeError when passed nil 1446s - raises a TypeError when passed true 1446s - raises a TypeError when passed false 1446s - returns a binary string 1446s - raises a TypeError when the object does not respond to #to_int 1446s - raises a TypeError when passed a String 1446s 1446s Array#pack with format 'l' 1446s - raises a TypeError when passed nil 1446s - raises a TypeError when passed an Integer 1446s - ignores whitespace in the format string 1446s - ignores comments in the format string 1446s - warns in verbose mode that a directive is unknown 1446s - calls #to_str to coerce the directives string 1446s - raises an ArgumentError if there are fewer elements than the format requires 1446s - returns an empty String if count is zero 1446s - raises a TypeError when passed nil 1446s - raises a TypeError when passed true 1446s - raises a TypeError when passed false 1446s - returns a binary string 1446s - raises a TypeError when the object does not respond to #to_int 1446s - raises a TypeError when passed a String 1446s 1446s Array#pack with format 'L' with modifier '<' 1446s - encodes the least significant 32 bits of a positive number 1446s - encodes the least significant 32 bits of a negative number 1446s - encodes a Float truncated as an Integer 1446s - calls #to_int to convert the pack argument to an Integer 1446s - encodes the number of array elements specified by the count modifier 1446s - encodes all remaining elements when passed the '*' modifier 1446s - ignores NULL bytes between directives 1446s - ignores spaces between directives 1446s 1446s Array#pack with format 'L' with modifier '>' 1446s - encodes the least significant 32 bits of a positive number 1446s - encodes the least significant 32 bits of a negative number 1446s - encodes a Float truncated as an Integer 1446s - calls #to_int to convert the pack argument to an Integer 1446s - encodes the number of array elements specified by the count modifier 1446s - encodes all remaining elements when passed the '*' modifier 1446s - ignores NULL bytes between directives 1446s - ignores spaces between directives 1446s 1446s Array#pack with format 'L' with modifier '<' and '_' 1446s - encodes the least significant 64 bits of a positive number 1446s - encodes the least significant 64 bits of a negative number 1446s - encodes a Float truncated as an Integer 1446s - calls #to_int to convert the pack argument to an Integer 1446s - encodes the number of array elements specified by the count modifier 1446s - encodes all remaining elements when passed the '*' modifier 1446s - ignores NULL bytes between directives 1446s - ignores spaces between directives 1446s - encodes the least significant 64 bits of a positive number 1446s - encodes the least significant 64 bits of a negative number 1446s - encodes a Float truncated as an Integer 1446s - calls #to_int to convert the pack argument to an Integer 1446s - encodes the number of array elements specified by the count modifier 1446s - encodes all remaining elements when passed the '*' modifier 1446s - ignores NULL bytes between directives 1446s - ignores spaces between directives 1446s 1446s Array#pack with format 'L' with modifier '<' and '!' 1446s - encodes the least significant 64 bits of a positive number 1446s - encodes the least significant 64 bits of a negative number 1446s - encodes a Float truncated as an Integer 1446s - calls #to_int to convert the pack argument to an Integer 1446s - encodes the number of array elements specified by the count modifier 1446s - encodes all remaining elements when passed the '*' modifier 1446s - ignores NULL bytes between directives 1446s - ignores spaces between directives 1446s - encodes the least significant 64 bits of a positive number 1446s - encodes the least significant 64 bits of a negative number 1446s - encodes a Float truncated as an Integer 1446s - calls #to_int to convert the pack argument to an Integer 1446s - encodes the number of array elements specified by the count modifier 1446s - encodes all remaining elements when passed the '*' modifier 1446s - ignores NULL bytes between directives 1446s - ignores spaces between directives 1446s 1446s Array#pack with format 'L' with modifier '>' and '_' 1446s - encodes the least significant 64 bits of a positive number 1446s - encodes the least significant 64 bits of a negative number 1446s - encodes a Float truncated as an Integer 1446s - calls #to_int to convert the pack argument to an Integer 1446s - encodes the number of array elements specified by the count modifier 1446s - encodes all remaining elements when passed the '*' modifier 1446s - ignores NULL bytes between directives 1446s - ignores spaces between directives 1446s - encodes the least significant 64 bits of a positive number 1446s - encodes the least significant 64 bits of a negative number 1446s - encodes a Float truncated as an Integer 1446s - calls #to_int to convert the pack argument to an Integer 1446s - encodes the number of array elements specified by the count modifier 1446s - encodes all remaining elements when passed the '*' modifier 1446s - ignores NULL bytes between directives 1446s - ignores spaces between directives 1446s 1446s Array#pack with format 'L' with modifier '>' and '!' 1446s - encodes the least significant 64 bits of a positive number 1446s - encodes the least significant 64 bits of a negative number 1446s - encodes a Float truncated as an Integer 1446s - calls #to_int to convert the pack argument to an Integer 1446s - encodes the number of array elements specified by the count modifier 1446s - encodes all remaining elements when passed the '*' modifier 1446s - ignores NULL bytes between directives 1446s - ignores spaces between directives 1446s - encodes the least significant 64 bits of a positive number 1446s - encodes the least significant 64 bits of a negative number 1446s - encodes a Float truncated as an Integer 1446s - calls #to_int to convert the pack argument to an Integer 1446s - encodes the number of array elements specified by the count modifier 1446s - encodes all remaining elements when passed the '*' modifier 1446s - ignores NULL bytes between directives 1446s - ignores spaces between directives 1446s 1446s Array#pack with format 'l' with modifier '<' 1446s - encodes the least significant 32 bits of a positive number 1446s - encodes the least significant 32 bits of a negative number 1446s - encodes a Float truncated as an Integer 1446s - calls #to_int to convert the pack argument to an Integer 1446s - encodes the number of array elements specified by the count modifier 1446s - encodes all remaining elements when passed the '*' modifier 1446s - ignores NULL bytes between directives 1446s - ignores spaces between directives 1446s 1446s Array#pack with format 'l' with modifier '>' 1446s - encodes the least significant 32 bits of a positive number 1446s - encodes the least significant 32 bits of a negative number 1446s - encodes a Float truncated as an Integer 1446s - calls #to_int to convert the pack argument to an Integer 1446s - encodes the number of array elements specified by the count modifier 1446s - encodes all remaining elements when passed the '*' modifier 1446s - ignores NULL bytes between directives 1446s - ignores spaces between directives 1446s 1446s Array#pack with format 'l' with modifier '<' and '_' 1446s - encodes the least significant 64 bits of a positive number 1446s - encodes the least significant 64 bits of a negative number 1446s - encodes a Float truncated as an Integer 1446s - calls #to_int to convert the pack argument to an Integer 1446s - encodes the number of array elements specified by the count modifier 1446s - encodes all remaining elements when passed the '*' modifier 1446s - ignores NULL bytes between directives 1446s - ignores spaces between directives 1446s - encodes the least significant 64 bits of a positive number 1446s - encodes the least significant 64 bits of a negative number 1446s - encodes a Float truncated as an Integer 1446s - calls #to_int to convert the pack argument to an Integer 1446s - encodes the number of array elements specified by the count modifier 1446s - encodes all remaining elements when passed the '*' modifier 1446s - ignores NULL bytes between directives 1446s - ignores spaces between directives 1446s 1446s Array#pack with format 'l' with modifier '<' and '!' 1446s - encodes the least significant 64 bits of a positive number 1446s - encodes the least significant 64 bits of a negative number 1446s - encodes a Float truncated as an Integer 1446s - calls #to_int to convert the pack argument to an Integer 1446s - encodes the number of array elements specified by the count modifier 1446s - encodes all remaining elements when passed the '*' modifier 1446s - ignores NULL bytes between directives 1446s - ignores spaces between directives 1446s - encodes the least significant 64 bits of a positive number 1446s - encodes the least significant 64 bits of a negative number 1446s - encodes a Float truncated as an Integer 1446s - calls #to_int to convert the pack argument to an Integer 1446s - encodes the number of array elements specified by the count modifier 1446s - encodes all remaining elements when passed the '*' modifier 1446s - ignores NULL bytes between directives 1446s - ignores spaces between directives 1446s 1446s Array#pack with format 'l' with modifier '>' and '_' 1446s - encodes the least significant 64 bits of a positive number 1446s - encodes the least significant 64 bits of a negative number 1446s - encodes a Float truncated as an Integer 1446s - calls #to_int to convert the pack argument to an Integer 1446s - encodes the number of array elements specified by the count modifier 1446s - encodes all remaining elements when passed the '*' modifier 1446s - ignores NULL bytes between directives 1446s - ignores spaces between directives 1446s - encodes the least significant 64 bits of a positive number 1446s - encodes the least significant 64 bits of a negative number 1446s - encodes a Float truncated as an Integer 1446s - calls #to_int to convert the pack argument to an Integer 1446s - encodes the number of array elements specified by the count modifier 1446s - encodes all remaining elements when passed the '*' modifier 1446s - ignores NULL bytes between directives 1446s - ignores spaces between directives 1446s 1446s Array#pack with format 'l' with modifier '>' and '!' 1446s - encodes the least significant 64 bits of a positive number 1446s - encodes the least significant 64 bits of a negative number 1446s - encodes a Float truncated as an Integer 1446s - calls #to_int to convert the pack argument to an Integer 1446s - encodes the number of array elements specified by the count modifier 1446s - encodes all remaining elements when passed the '*' modifier 1446s - ignores NULL bytes between directives 1446s - ignores spaces between directives 1446s - encodes the least significant 64 bits of a positive number 1446s - encodes the least significant 64 bits of a negative number 1446s - encodes a Float truncated as an Integer 1446s - calls #to_int to convert the pack argument to an Integer 1446s - encodes the number of array elements specified by the count modifier 1446s - encodes all remaining elements when passed the '*' modifier 1446s - ignores NULL bytes between directives 1446s - ignores spaces between directives 1446s 1446s Array#pack with format 'L' 1446s - encodes the least significant 32 bits of a positive number 1446s - encodes the least significant 32 bits of a negative number 1446s - encodes a Float truncated as an Integer 1446s - calls #to_int to convert the pack argument to an Integer 1446s - encodes the number of array elements specified by the count modifier 1446s - encodes all remaining elements when passed the '*' modifier 1446s - ignores NULL bytes between directives 1446s - ignores spaces between directives 1446s 1446s Array#pack with format 'l' 1446s - encodes the least significant 32 bits of a positive number 1446s - encodes the least significant 32 bits of a negative number 1446s - encodes a Float truncated as an Integer 1446s - calls #to_int to convert the pack argument to an Integer 1446s - encodes the number of array elements specified by the count modifier 1446s - encodes all remaining elements when passed the '*' modifier 1446s - ignores NULL bytes between directives 1446s - ignores spaces between directives 1446s 1446s Array#pack with format 'L' with modifier '_' 1446s - encodes the least significant 64 bits of a positive number 1446s - encodes the least significant 64 bits of a negative number 1446s - encodes a Float truncated as an Integer 1446s - calls #to_int to convert the pack argument to an Integer 1446s - encodes the number of array elements specified by the count modifier 1446s - encodes all remaining elements when passed the '*' modifier 1446s - ignores NULL bytes between directives 1446s - ignores spaces between directives 1446s 1446s Array#pack with format 'L' with modifier '!' 1446s - encodes the least significant 64 bits of a positive number 1446s - encodes the least significant 64 bits of a negative number 1446s - encodes a Float truncated as an Integer 1446s - calls #to_int to convert the pack argument to an Integer 1446s - encodes the number of array elements specified by the count modifier 1446s - encodes all remaining elements when passed the '*' modifier 1446s - ignores NULL bytes between directives 1446s - ignores spaces between directives 1446s 1446s Array#pack with format 'l' with modifier '_' 1446s - encodes the least significant 64 bits of a positive number 1446s - encodes the least significant 64 bits of a negative number 1446s - encodes a Float truncated as an Integer 1446s - calls #to_int to convert the pack argument to an Integer 1446s - encodes the number of array elements specified by the count modifier 1446s - encodes all remaining elements when passed the '*' modifier 1446s - ignores NULL bytes between directives 1446s - ignores spaces between directives 1446s 1446s Array#pack with format 'l' with modifier '!' 1446s - encodes the least significant 64 bits of a positive number 1446s - encodes the least significant 64 bits of a negative number 1446s - encodes a Float truncated as an Integer 1446s - calls #to_int to convert the pack argument to an Integer 1446s - encodes the number of array elements specified by the count modifier 1446s - encodes all remaining elements when passed the '*' modifier 1446s - ignores NULL bytes between directives 1446s - ignores spaces between directives 1446s 1446s Array#pack with format 'M' 1446s - raises a TypeError when passed nil 1446s - raises a TypeError when passed an Integer 1446s - ignores whitespace in the format string 1446s - ignores comments in the format string 1446s - warns in verbose mode that a directive is unknown 1446s - calls #to_str to coerce the directives string 1446s - raises an ArgumentError if there are fewer elements than the format requires 1446s - encodes an empty string as an empty string 1446s - encodes nil as an empty string 1446s - appends a soft line break at the end of an encoded string 1446s - does not append a soft break if the string ends with a newline 1446s - encodes one element for each directive 1446s - encodes byte values 33..60 directly 1446s - encodes byte values 62..126 directly 1446s - encodes an '=' character in hex format 1446s - encodes an embedded space directly 1446s - encodes a space at the end of the string directly 1446s - encodes an embedded tab directly 1446s - encodes a tab at the end of the string directly 1446s - encodes an embedded newline directly 1446s - encodes 0..31 except tab and newline in hex format 1446s - encodes a tab at the end of a line with an encoded newline 1446s - encodes a space at the end of a line with an encoded newline 1446s - encodes 127..255 in hex format 1446s - emits a soft line break when the output exceeds 72 characters when passed '*', 0, 1, or no count modifier 1446s - emits a soft line break when the output exceeds count characters 1446s - encodes a recursive array 1446s - calls #to_s to convert an object to a String 1446s - converts the object to a String representation if #to_s does not return a String 1446s - encodes a Symbol as a String 1446s - encodes an Integer as a String 1446s - encodes a Float as a String 1446s - converts Floats to the minimum unique representation 1446s - sets the output string to US-ASCII encoding 1446s 1446s Array#pack with format 'm' 1446s - raises a TypeError when passed nil 1446s - raises a TypeError when passed an Integer 1446s - ignores whitespace in the format string 1446s - ignores comments in the format string 1446s - warns in verbose mode that a directive is unknown 1446s - calls #to_str to coerce the directives string 1446s - raises an ArgumentError if there are fewer elements than the format requires 1446s - encodes an empty string as an empty string 1446s - appends a newline to the end of the encoded string 1446s - encodes one element per directive 1446s - encodes 1, 2, or 3 characters in 4 output characters (Base64 encoding) 1446s - emits a newline after complete groups of count / 3 input characters when passed a count modifier 1446s - implicitly has a count of 45 when passed '*', 1, 2 or no count modifier 1446s - encodes all ascii characters 1446s - calls #to_str to convert an object to a String 1446s - raises a TypeError if #to_str does not return a String 1446s - raises a TypeError if passed nil 1446s - raises a TypeError if passed an Integer 1446s - does not emit a newline if passed zero as the count modifier 1446s - sets the output string to US-ASCII encoding 1446s 1446s Array#pack with format 'N' 1446s - raises a TypeError when passed nil 1446s - raises a TypeError when passed an Integer 1446s - ignores whitespace in the format string 1446s - ignores comments in the format string 1446s - warns in verbose mode that a directive is unknown 1446s - calls #to_str to coerce the directives string 1446s - raises an ArgumentError if there are fewer elements than the format requires 1446s - returns an empty String if count is zero 1446s - raises a TypeError when passed nil 1446s - raises a TypeError when passed true 1446s - raises a TypeError when passed false 1446s - returns a binary string 1446s - raises a TypeError when the object does not respond to #to_int 1446s - raises a TypeError when passed a String 1446s - raises ArgumentError when the format modifier is '_' 1446s - raises ArgumentError when the format modifier is '!' 1446s - encodes the least significant 32 bits of a positive number 1446s - encodes the least significant 32 bits of a negative number 1446s - encodes a Float truncated as an Integer 1446s - calls #to_int to convert the pack argument to an Integer 1446s - encodes the number of array elements specified by the count modifier 1446s - encodes all remaining elements when passed the '*' modifier 1446s - ignores NULL bytes between directives 1446s - ignores spaces between directives 1446s 1446s Array#pack with format 'n' 1446s - raises a TypeError when passed nil 1446s - raises a TypeError when passed an Integer 1446s - ignores whitespace in the format string 1446s - ignores comments in the format string 1446s - warns in verbose mode that a directive is unknown 1446s - calls #to_str to coerce the directives string 1446s - raises an ArgumentError if there are fewer elements than the format requires 1446s - returns an empty String if count is zero 1446s - raises a TypeError when passed nil 1446s - raises a TypeError when passed true 1446s - raises a TypeError when passed false 1446s - returns a binary string 1446s - raises a TypeError when the object does not respond to #to_int 1446s - raises a TypeError when passed a String 1446s - raises ArgumentError when the format modifier is '_' 1446s - raises ArgumentError when the format modifier is '!' 1446s - encodes the least significant 16 bits of a positive number 1446s - encodes the least significant 16 bits of a negative number 1446s - encodes a Float truncated as an Integer 1446s - calls #to_int to convert the pack argument to an Integer 1446s - encodes the number of array elements specified by the count modifier 1446s - encodes all remaining elements when passed the '*' modifier 1446s - ignores NULL bytes between directives 1446s - ignores spaces between directives 1446s 1446s Array#pack with format 'P' 1446s - ignores whitespace in the format string 1446s - ignores comments in the format string 1446s - warns in verbose mode that a directive is unknown 1446s - calls #to_str to coerce the directives string 1446s - produces as many bytes as there are in a pointer 1446s - with nil gives a null pointer 1446s 1446s Array#pack with format 'p' 1446s - ignores whitespace in the format string 1446s - ignores comments in the format string 1446s - warns in verbose mode that a directive is unknown 1446s - calls #to_str to coerce the directives string 1446s - produces as many bytes as there are in a pointer 1446s - with nil gives a null pointer 1446s 1446s Array#pack with format '%' 1446s - raises an Argument Error 1446s 1446s Array#pack with format 'Q' 1446s - raises a TypeError when passed nil 1446s - raises a TypeError when passed an Integer 1446s - ignores whitespace in the format string 1446s - ignores comments in the format string 1446s - warns in verbose mode that a directive is unknown 1446s - calls #to_str to coerce the directives string 1446s - raises an ArgumentError if there are fewer elements than the format requires 1446s - returns an empty String if count is zero 1446s - raises a TypeError when passed nil 1446s - raises a TypeError when passed true 1446s - raises a TypeError when passed false 1446s - returns a binary string 1446s - raises a TypeError when the object does not respond to #to_int 1446s - raises a TypeError when passed a String 1446s 1446s Array#pack with format 'q' 1446s - raises a TypeError when passed nil 1446s - raises a TypeError when passed an Integer 1446s - ignores whitespace in the format string 1446s - ignores comments in the format string 1446s - warns in verbose mode that a directive is unknown 1446s - calls #to_str to coerce the directives string 1446s - raises an ArgumentError if there are fewer elements than the format requires 1446s - returns an empty String if count is zero 1446s - raises a TypeError when passed nil 1446s - raises a TypeError when passed true 1446s - raises a TypeError when passed false 1446s - returns a binary string 1446s - raises a TypeError when the object does not respond to #to_int 1446s - raises a TypeError when passed a String 1446s 1446s Array#pack with format 'Q' with modifier '<' 1446s - encodes the least significant 64 bits of a positive number 1446s - encodes the least significant 64 bits of a negative number 1446s - encodes a Float truncated as an Integer 1446s - calls #to_int to convert the pack argument to an Integer 1446s - encodes the number of array elements specified by the count modifier 1446s - encodes all remaining elements when passed the '*' modifier 1446s - ignores NULL bytes between directives 1446s - ignores spaces between directives 1446s 1446s Array#pack with format 'Q' with modifier '>' 1446s - encodes the least significant 64 bits of a positive number 1446s - encodes the least significant 64 bits of a negative number 1446s - encodes a Float truncated as an Integer 1446s - calls #to_int to convert the pack argument to an Integer 1446s - encodes the number of array elements specified by the count modifier 1446s - encodes all remaining elements when passed the '*' modifier 1446s - ignores NULL bytes between directives 1446s - ignores spaces between directives 1446s 1446s Array#pack with format 'q' with modifier '<' 1446s - encodes the least significant 64 bits of a positive number 1446s - encodes the least significant 64 bits of a negative number 1446s - encodes a Float truncated as an Integer 1446s - calls #to_int to convert the pack argument to an Integer 1446s - encodes the number of array elements specified by the count modifier 1446s - encodes all remaining elements when passed the '*' modifier 1446s - ignores NULL bytes between directives 1446s - ignores spaces between directives 1446s 1446s Array#pack with format 'q' with modifier '>' 1446s - encodes the least significant 64 bits of a positive number 1446s - encodes the least significant 64 bits of a negative number 1446s - encodes a Float truncated as an Integer 1446s - calls #to_int to convert the pack argument to an Integer 1446s - encodes the number of array elements specified by the count modifier 1446s - encodes all remaining elements when passed the '*' modifier 1446s - ignores NULL bytes between directives 1446s - ignores spaces between directives 1446s 1446s Array#pack with format 'Q' 1446s - encodes the least significant 64 bits of a positive number 1446s - encodes the least significant 64 bits of a negative number 1446s - encodes a Float truncated as an Integer 1446s - calls #to_int to convert the pack argument to an Integer 1446s - encodes the number of array elements specified by the count modifier 1446s - encodes all remaining elements when passed the '*' modifier 1446s - ignores NULL bytes between directives 1446s - ignores spaces between directives 1446s 1446s Array#pack with format 'q' 1446s - encodes the least significant 64 bits of a positive number 1446s - encodes the least significant 64 bits of a negative number 1446s - encodes a Float truncated as an Integer 1446s - calls #to_int to convert the pack argument to an Integer 1446s - encodes the number of array elements specified by the count modifier 1446s - encodes all remaining elements when passed the '*' modifier 1446s - ignores NULL bytes between directives 1446s - ignores spaces between directives 1446s 1446s Array#pack with format 'S' 1446s - raises a TypeError when passed nil 1446s - raises a TypeError when passed an Integer 1446s - ignores whitespace in the format string 1446s - ignores comments in the format string 1446s - warns in verbose mode that a directive is unknown 1446s - calls #to_str to coerce the directives string 1446s - raises an ArgumentError if there are fewer elements than the format requires 1446s - returns an empty String if count is zero 1446s - raises a TypeError when passed nil 1446s - raises a TypeError when passed true 1446s - raises a TypeError when passed false 1446s - returns a binary string 1446s - raises a TypeError when the object does not respond to #to_int 1446s - raises a TypeError when passed a String 1446s 1446s Array#pack with format 's' 1446s - raises a TypeError when passed nil 1446s - raises a TypeError when passed an Integer 1446s - ignores whitespace in the format string 1446s - ignores comments in the format string 1446s - warns in verbose mode that a directive is unknown 1446s - calls #to_str to coerce the directives string 1446s - raises an ArgumentError if there are fewer elements than the format requires 1446s - returns an empty String if count is zero 1446s - raises a TypeError when passed nil 1446s - raises a TypeError when passed true 1446s - raises a TypeError when passed false 1446s - returns a binary string 1446s - raises a TypeError when the object does not respond to #to_int 1446s - raises a TypeError when passed a String 1446s 1446s Array#pack with format 'S' with modifier '<' 1446s - encodes the least significant 16 bits of a positive number 1446s - encodes the least significant 16 bits of a negative number 1446s - encodes a Float truncated as an Integer 1446s - calls #to_int to convert the pack argument to an Integer 1446s - encodes the number of array elements specified by the count modifier 1446s - encodes all remaining elements when passed the '*' modifier 1446s - ignores NULL bytes between directives 1446s - ignores spaces between directives 1446s 1446s Array#pack with format 'S' with modifier '<' and '_' 1446s - encodes the least significant 16 bits of a positive number 1446s - encodes the least significant 16 bits of a negative number 1446s - encodes a Float truncated as an Integer 1446s - calls #to_int to convert the pack argument to an Integer 1446s - encodes the number of array elements specified by the count modifier 1446s - encodes all remaining elements when passed the '*' modifier 1446s - ignores NULL bytes between directives 1446s - ignores spaces between directives 1446s - encodes the least significant 16 bits of a positive number 1446s - encodes the least significant 16 bits of a negative number 1446s - encodes a Float truncated as an Integer 1446s - calls #to_int to convert the pack argument to an Integer 1446s - encodes the number of array elements specified by the count modifier 1446s - encodes all remaining elements when passed the '*' modifier 1446s - ignores NULL bytes between directives 1446s - ignores spaces between directives 1446s 1446s Array#pack with format 'S' with modifier '<' and '!' 1446s - encodes the least significant 16 bits of a positive number 1446s - encodes the least significant 16 bits of a negative number 1446s - encodes a Float truncated as an Integer 1446s - calls #to_int to convert the pack argument to an Integer 1446s - encodes the number of array elements specified by the count modifier 1446s - encodes all remaining elements when passed the '*' modifier 1446s - ignores NULL bytes between directives 1446s - ignores spaces between directives 1446s - encodes the least significant 16 bits of a positive number 1446s - encodes the least significant 16 bits of a negative number 1446s - encodes a Float truncated as an Integer 1446s - calls #to_int to convert the pack argument to an Integer 1446s - encodes the number of array elements specified by the count modifier 1446s - encodes all remaining elements when passed the '*' modifier 1446s - ignores NULL bytes between directives 1446s - ignores spaces between directives 1446s 1446s Array#pack with format 'S' with modifier '>' 1446s - encodes the least significant 16 bits of a positive number 1446s - encodes the least significant 16 bits of a negative number 1446s - encodes a Float truncated as an Integer 1446s - calls #to_int to convert the pack argument to an Integer 1446s - encodes the number of array elements specified by the count modifier 1446s - encodes all remaining elements when passed the '*' modifier 1446s - ignores NULL bytes between directives 1446s - ignores spaces between directives 1446s 1446s Array#pack with format 'S' with modifier '>' and '_' 1446s - encodes the least significant 16 bits of a positive number 1446s - encodes the least significant 16 bits of a negative number 1446s - encodes a Float truncated as an Integer 1446s - calls #to_int to convert the pack argument to an Integer 1446s - encodes the number of array elements specified by the count modifier 1446s - encodes all remaining elements when passed the '*' modifier 1446s - ignores NULL bytes between directives 1446s - ignores spaces between directives 1446s - encodes the least significant 16 bits of a positive number 1446s - encodes the least significant 16 bits of a negative number 1446s - encodes a Float truncated as an Integer 1446s - calls #to_int to convert the pack argument to an Integer 1446s - encodes the number of array elements specified by the count modifier 1446s - encodes all remaining elements when passed the '*' modifier 1446s - ignores NULL bytes between directives 1446s - ignores spaces between directives 1446s 1446s Array#pack with format 'S' with modifier '>' and '!' 1446s - encodes the least significant 16 bits of a positive number 1446s - encodes the least significant 16 bits of a negative number 1446s - encodes a Float truncated as an Integer 1446s - calls #to_int to convert the pack argument to an Integer 1446s - encodes the number of array elements specified by the count modifier 1446s - encodes all remaining elements when passed the '*' modifier 1446s - ignores NULL bytes between directives 1446s - ignores spaces between directives 1446s - encodes the least significant 16 bits of a positive number 1446s - encodes the least significant 16 bits of a negative number 1446s - encodes a Float truncated as an Integer 1446s - calls #to_int to convert the pack argument to an Integer 1446s - encodes the number of array elements specified by the count modifier 1446s - encodes all remaining elements when passed the '*' modifier 1446s - ignores NULL bytes between directives 1446s - ignores spaces between directives 1446s 1446s Array#pack with format 's' with modifier '<' 1446s - encodes the least significant 16 bits of a positive number 1446s - encodes the least significant 16 bits of a negative number 1446s - encodes a Float truncated as an Integer 1446s - calls #to_int to convert the pack argument to an Integer 1446s - encodes the number of array elements specified by the count modifier 1446s - encodes all remaining elements when passed the '*' modifier 1446s - ignores NULL bytes between directives 1446s - ignores spaces between directives 1446s 1446s Array#pack with format 's' with modifier '<' and '_' 1446s - encodes the least significant 16 bits of a positive number 1446s - encodes the least significant 16 bits of a negative number 1446s - encodes a Float truncated as an Integer 1446s - calls #to_int to convert the pack argument to an Integer 1446s - encodes the number of array elements specified by the count modifier 1446s - encodes all remaining elements when passed the '*' modifier 1446s - ignores NULL bytes between directives 1446s - ignores spaces between directives 1446s - encodes the least significant 16 bits of a positive number 1446s - encodes the least significant 16 bits of a negative number 1446s - encodes a Float truncated as an Integer 1446s - calls #to_int to convert the pack argument to an Integer 1446s - encodes the number of array elements specified by the count modifier 1446s - encodes all remaining elements when passed the '*' modifier 1446s - ignores NULL bytes between directives 1446s - ignores spaces between directives 1446s 1446s Array#pack with format 's' with modifier '<' and '!' 1446s - encodes the least significant 16 bits of a positive number 1446s - encodes the least significant 16 bits of a negative number 1446s - encodes a Float truncated as an Integer 1446s - calls #to_int to convert the pack argument to an Integer 1446s - encodes the number of array elements specified by the count modifier 1446s - encodes all remaining elements when passed the '*' modifier 1446s - ignores NULL bytes between directives 1446s - ignores spaces between directives 1446s - encodes the least significant 16 bits of a positive number 1446s - encodes the least significant 16 bits of a negative number 1446s - encodes a Float truncated as an Integer 1446s - calls #to_int to convert the pack argument to an Integer 1446s - encodes the number of array elements specified by the count modifier 1446s - encodes all remaining elements when passed the '*' modifier 1446s - ignores NULL bytes between directives 1446s - ignores spaces between directives 1446s 1446s Array#pack with format 's' with modifier '>' 1446s - encodes the least significant 16 bits of a positive number 1446s - encodes the least significant 16 bits of a negative number 1446s - encodes a Float truncated as an Integer 1446s - calls #to_int to convert the pack argument to an Integer 1446s - encodes the number of array elements specified by the count modifier 1446s - encodes all remaining elements when passed the '*' modifier 1446s - ignores NULL bytes between directives 1446s - ignores spaces between directives 1446s 1446s Array#pack with format 's' with modifier '>' and '_' 1446s - encodes the least significant 16 bits of a positive number 1446s - encodes the least significant 16 bits of a negative number 1446s - encodes a Float truncated as an Integer 1446s - calls #to_int to convert the pack argument to an Integer 1446s - encodes the number of array elements specified by the count modifier 1446s - encodes all remaining elements when passed the '*' modifier 1446s - ignores NULL bytes between directives 1446s - ignores spaces between directives 1446s - encodes the least significant 16 bits of a positive number 1446s - encodes the least significant 16 bits of a negative number 1446s - encodes a Float truncated as an Integer 1446s - calls #to_int to convert the pack argument to an Integer 1446s - encodes the number of array elements specified by the count modifier 1446s - encodes all remaining elements when passed the '*' modifier 1446s - ignores NULL bytes between directives 1446s - ignores spaces between directives 1446s 1446s Array#pack with format 's' with modifier '>' and '!' 1446s - encodes the least significant 16 bits of a positive number 1446s - encodes the least significant 16 bits of a negative number 1446s - encodes a Float truncated as an Integer 1446s - calls #to_int to convert the pack argument to an Integer 1446s - encodes the number of array elements specified by the count modifier 1446s - encodes all remaining elements when passed the '*' modifier 1446s - ignores NULL bytes between directives 1446s - ignores spaces between directives 1446s - encodes the least significant 16 bits of a positive number 1446s - encodes the least significant 16 bits of a negative number 1446s - encodes a Float truncated as an Integer 1446s - calls #to_int to convert the pack argument to an Integer 1446s - encodes the number of array elements specified by the count modifier 1446s - encodes all remaining elements when passed the '*' modifier 1446s - ignores NULL bytes between directives 1446s - ignores spaces between directives 1446s 1446s Array#pack with format 'S' 1446s - encodes the least significant 16 bits of a positive number 1446s - encodes the least significant 16 bits of a negative number 1446s - encodes a Float truncated as an Integer 1446s - calls #to_int to convert the pack argument to an Integer 1446s - encodes the number of array elements specified by the count modifier 1446s - encodes all remaining elements when passed the '*' modifier 1446s - ignores NULL bytes between directives 1446s - ignores spaces between directives 1446s 1446s Array#pack with format 'S' with modifier '_' 1446s - encodes the least significant 16 bits of a positive number 1446s - encodes the least significant 16 bits of a negative number 1446s - encodes a Float truncated as an Integer 1446s - calls #to_int to convert the pack argument to an Integer 1446s - encodes the number of array elements specified by the count modifier 1446s - encodes all remaining elements when passed the '*' modifier 1446s - ignores NULL bytes between directives 1446s - ignores spaces between directives 1446s 1446s Array#pack with format 'S' with modifier '!' 1446s - encodes the least significant 16 bits of a positive number 1446s - encodes the least significant 16 bits of a negative number 1446s - encodes a Float truncated as an Integer 1446s - calls #to_int to convert the pack argument to an Integer 1446s - encodes the number of array elements specified by the count modifier 1446s - encodes all remaining elements when passed the '*' modifier 1446s - ignores NULL bytes between directives 1446s - ignores spaces between directives 1446s 1446s Array#pack with format 's' 1446s - encodes the least significant 16 bits of a positive number 1446s - encodes the least significant 16 bits of a negative number 1446s - encodes a Float truncated as an Integer 1446s - calls #to_int to convert the pack argument to an Integer 1446s - encodes the number of array elements specified by the count modifier 1446s - encodes all remaining elements when passed the '*' modifier 1446s - ignores NULL bytes between directives 1446s - ignores spaces between directives 1446s 1446s Array#pack with format 's' with modifier '_' 1446s - encodes the least significant 16 bits of a positive number 1446s - encodes the least significant 16 bits of a negative number 1446s - encodes a Float truncated as an Integer 1446s - calls #to_int to convert the pack argument to an Integer 1446s - encodes the number of array elements specified by the count modifier 1446s - encodes all remaining elements when passed the '*' modifier 1446s - ignores NULL bytes between directives 1446s - ignores spaces between directives 1446s 1446s Array#pack with format 's' with modifier '!' 1446s - encodes the least significant 16 bits of a positive number 1446s - encodes the least significant 16 bits of a negative number 1446s - encodes a Float truncated as an Integer 1446s - calls #to_int to convert the pack argument to an Integer 1446s - encodes the number of array elements specified by the count modifier 1446s - encodes all remaining elements when passed the '*' modifier 1446s - ignores NULL bytes between directives 1446s - ignores spaces between directives 1446s 1446s Array#pack with format 'U' 1446s - raises a TypeError when passed nil 1446s - raises a TypeError when passed an Integer 1446s - ignores whitespace in the format string 1446s - ignores comments in the format string 1446s - warns in verbose mode that a directive is unknown 1446s - calls #to_str to coerce the directives string 1446s - raises an ArgumentError if there are fewer elements than the format requires 1446s - encodes ASCII values as a Unicode codepoint 1446s - encodes UTF-8 BMP codepoints 1446s - constructs strings with valid encodings 1446s - encodes values larger than UTF-8 max codepoints 1446s - encodes UTF-8 max codepoints 1446s - encodes the number of array elements specified by the count modifier 1446s - encodes all remaining elements when passed the '*' modifier 1446s - calls #to_int to convert the pack argument to an Integer 1446s - raises a TypeError if #to_int does not return an Integer 1446s - ignores NULL bytes between directives 1446s - ignores spaces between directives 1446s - raises a RangeError if passed a negative number 1446s - raises a RangeError if passed a number larger than an unsigned 32-bit integer 1446s - sets the output string to UTF-8 encoding 1446s 1446s Array#pack with format 'u' 1446s - raises a TypeError when passed nil 1446s - raises a TypeError when passed an Integer 1446s - ignores whitespace in the format string 1446s - ignores comments in the format string 1446s - warns in verbose mode that a directive is unknown 1446s - calls #to_str to coerce the directives string 1446s - raises an ArgumentError if there are fewer elements than the format requires 1446s - calls #to_str to convert an Object to a String 1446s - will not implicitly convert a number to a string 1446s - encodes an empty string as an empty string 1446s - appends a newline to the end of the encoded string 1446s - encodes one element per directive 1446s - prepends the length of each segment of the input string as the first character (+32) in each line of the output 1446s - encodes 1, 2, or 3 characters in 4 output characters (uuencoding) 1446s - emits a newline after complete groups of count / 3 input characters when passed a count modifier 1446s - implicitly has a count of 45 when passed '*', 0, 1, 2 or no count modifier 1446s - encodes all ascii characters 1446s - calls #to_str to convert an object to a String 1446s - raises a TypeError if #to_str does not return a String 1446s - raises a TypeError if passed nil 1446s - raises a TypeError if passed an Integer 1446s - sets the output string to US-ASCII encoding 1446s 1446s Array#pack with format 'V' 1446s - raises a TypeError when passed nil 1446s - raises a TypeError when passed an Integer 1446s - ignores whitespace in the format string 1446s - ignores comments in the format string 1446s - warns in verbose mode that a directive is unknown 1446s - calls #to_str to coerce the directives string 1446s - raises an ArgumentError if there are fewer elements than the format requires 1446s - returns an empty String if count is zero 1446s - raises a TypeError when passed nil 1446s - raises a TypeError when passed true 1446s - raises a TypeError when passed false 1446s - returns a binary string 1446s - raises a TypeError when the object does not respond to #to_int 1446s - raises a TypeError when passed a String 1446s - raises ArgumentError when the format modifier is '_' 1446s - raises ArgumentError when the format modifier is '!' 1446s - encodes the least significant 32 bits of a positive number 1446s - encodes the least significant 32 bits of a negative number 1446s - encodes a Float truncated as an Integer 1446s - calls #to_int to convert the pack argument to an Integer 1446s - encodes the number of array elements specified by the count modifier 1446s - encodes all remaining elements when passed the '*' modifier 1446s - ignores NULL bytes between directives 1446s - ignores spaces between directives 1446s 1446s Array#pack with format 'v' 1446s - raises a TypeError when passed nil 1446s - raises a TypeError when passed an Integer 1446s - ignores whitespace in the format string 1446s - ignores comments in the format string 1446s - warns in verbose mode that a directive is unknown 1446s - calls #to_str to coerce the directives string 1446s - raises an ArgumentError if there are fewer elements than the format requires 1446s - returns an empty String if count is zero 1446s - raises a TypeError when passed nil 1446s - raises a TypeError when passed true 1446s - raises a TypeError when passed false 1446s - returns a binary string 1446s - raises a TypeError when the object does not respond to #to_int 1446s - raises a TypeError when passed a String 1446s - raises ArgumentError when the format modifier is '_' 1446s - raises ArgumentError when the format modifier is '!' 1446s - encodes the least significant 16 bits of a positive number 1446s - encodes the least significant 16 bits of a negative number 1446s - encodes a Float truncated as an Integer 1446s - calls #to_int to convert the pack argument to an Integer 1446s - encodes the number of array elements specified by the count modifier 1446s - encodes all remaining elements when passed the '*' modifier 1446s - ignores NULL bytes between directives 1446s - ignores spaces between directives 1446s 1446s Array#pack with format 'w' 1446s - raises a TypeError when passed nil 1446s - raises a TypeError when passed an Integer 1446s - ignores whitespace in the format string 1446s - ignores comments in the format string 1446s - warns in verbose mode that a directive is unknown 1446s - calls #to_str to coerce the directives string 1446s - raises an ArgumentError if there are fewer elements than the format requires 1446s - returns an empty String if count is zero 1446s - raises a TypeError when passed nil 1446s - raises a TypeError when passed true 1446s - raises a TypeError when passed false 1446s - returns a binary string 1446s - encodes a BER-compressed integer 1446s - calls #to_int to convert the pack argument to an Integer 1446s - ignores NULL bytes between directives 1446s - ignores spaces between directives 1446s - raises an ArgumentError when passed a negative value 1446s - returns a binary string 1446s 1446s Array#pack with format 'x' 1446s - raises a TypeError when passed nil 1446s - raises a TypeError when passed an Integer 1446s - ignores whitespace in the format string 1446s - ignores comments in the format string 1446s - warns in verbose mode that a directive is unknown 1446s - calls #to_str to coerce the directives string 1446s - raises ArgumentError when the format modifier is '_' 1446s - raises ArgumentError when the format modifier is '!' 1446s - adds a NULL byte with an empty array 1446s - adds a NULL byte without consuming an element 1446s - is not affected by a previous count modifier 1446s - adds multiple NULL bytes when passed a count modifier 1446s - does not add a NULL byte if the count modifier is zero 1446s - does not add a NULL byte when passed the '*' modifier 1446s 1446s Array#pack with format 'X' 1446s - raises a TypeError when passed nil 1446s - raises a TypeError when passed an Integer 1446s - ignores whitespace in the format string 1446s - ignores comments in the format string 1446s - warns in verbose mode that a directive is unknown 1446s - calls #to_str to coerce the directives string 1446s - raises ArgumentError when the format modifier is '_' 1446s - raises ArgumentError when the format modifier is '!' 1446s - reduces the output string by one byte at the point it is encountered 1446s - does not consume any elements 1446s - reduces the output string by multiple bytes when passed a count modifier 1446s - has no affect when passed the '*' modifier 1446s - raises an ArgumentError if the output string is empty 1446s - raises an ArgumentError if the count modifier is greater than the bytes in the string 1446s 1446s Array#pack with format 'Z' 1446s - raises a TypeError when passed nil 1446s - raises a TypeError when passed an Integer 1446s - ignores whitespace in the format string 1446s - ignores comments in the format string 1446s - warns in verbose mode that a directive is unknown 1446s - calls #to_str to coerce the directives string 1446s - raises ArgumentError when the format modifier is '_' 1446s - raises ArgumentError when the format modifier is '!' 1446s - adds count bytes of a String to the output 1446s - implicitly has a count of one when no count is specified 1446s - does not add any bytes when the count is zero 1446s - is not affected by a previous count modifier 1446s - raises an ArgumentError when the Array is empty 1446s - raises an ArgumentError when the Array has too few elements 1446s - calls #to_str to convert the element to a String 1446s - raises a TypeError when the object does not respond to #to_str 1446s - returns a string in encoding of common to the concatenated results 1446s - calls #to_str to convert an Object to a String 1446s - will not implicitly convert a number to a string 1446s - adds all the bytes and appends a NULL byte when passed the '*' modifier 1446s - padds the output with NULL bytes when the count exceeds the size of the String 1446s - adds a NULL byte when the value is nil 1446s - pads the output with NULL bytes when the value is nil 1446s - does not append a NULL byte when passed the '*' modifier and the value is nil 1446s 1446s Array#partition 1446s - returns two arrays 1446s - returns in the left array values for which the block evaluates to true 1446s - properly handles recursive arrays 1446s - does not return subclass instances on Array subclasses 1446s 1446s Array#permutation 1446s - returns an Enumerator of all permutations when called without a block or arguments 1446s - returns an Enumerator of permutations of given length when called with an argument but no block 1446s - yields all permutations to the block then returns self when called with block but no arguments 1446s - yields all permutations of given length to the block then returns self when called with block and argument 1446s - returns the empty permutation ([[]]) when the given length is 0 1446s - returns the empty permutation([]) when called on an empty Array 1446s - returns no permutations when the given length has no permutations 1446s - handles duplicate elements correctly 1446s - handles nested Arrays correctly 1446s - truncates Float arguments 1446s - returns an Enumerator which works as expected even when the array was modified 1446s - generates from a defensive copy, ignoring mutations 1446s 1446s Array#permutation when no block is given returned Enumerator size with an array size greater than 0 1446s - returns the descending factorial of array size and given length 1446s - returns the descending factorial of array size with array size when there's no param 1446s 1446s Array#permutation when no block is given returned Enumerator size with an empty array 1446s - returns 1 when the given length is 0 1446s - returns 1 when there's param 1446s 1446s Array#+ 1446s - concatenates two arrays 1446s - can concatenate an array with itself 1446s - properly handles recursive arrays 1446s - does return subclass instances with Array subclasses 1446s - does not call to_ary on array subclasses 1446s 1446s Array#+ converts the passed argument to an Array using #to_ary 1446s - successfully concatenates the resulting array from the #to_ary call 1446s - raises a Typeerror if the given argument can't be converted to an array 1446s - raises a NoMethodError if the given argument raises a NoMethodError during type coercion to an Array 1446s 1446s Array#pop 1446s - removes and returns the last element of the array 1446s - returns nil if there are no more elements 1446s - properly handles recursive arrays 1446s - raises a FrozenError on a frozen array 1446s - raises a FrozenError on an empty frozen array 1446s 1446s Array#pop passed a number n as an argument 1446s - removes and returns an array with the last n elements of the array 1446s - returns an array with the last n elements even if shift was invoked 1446s - returns a new empty array if there are no more elements 1446s - returns whole elements if n exceeds size of the array 1446s - does not return self even when it returns whole elements 1446s - raises an ArgumentError if n is negative 1446s - tries to convert n to an Integer using #to_int 1446s - raises a TypeError when the passed n cannot be coerced to Integer 1446s - raises an ArgumentError if more arguments are passed 1446s - does not return subclass instances with Array subclass 1446s - raises a FrozenError on a frozen array 1446s 1446s Array#prepend 1446s - prepends object to the original array 1446s - returns self 1446s - quietly ignores unshifting nothing 1446s - properly handles recursive arrays 1446s - raises a FrozenError on a frozen array when the array is modified 1446s - raises a FrozenError on a frozen array when the array would not be modified 1446s - doesn't rely on Array#[]= so it can be overridden 1446s 1446s Array#product 1446s - returns converted arguments using :to_ary 1446s - returns converted arguments using :method_missing 1446s - returns the expected result 1446s - has no required argument 1446s - returns an empty array when the argument is an empty array 1446s - does not attempt to produce an unreasonable number of products 1446s 1446s Array#product when given a block 1446s - yields all combinations in turn 1446s - returns self 1446s - will ignore unreasonable numbers of products and yield anyway 1446s 1446s Array#product when given an empty block 1446s - returns self 1447s 1447s Array#push 1447s - appends the arguments to the array 1447s - isn't confused by previous shift 1447s - properly handles recursive arrays 1447s - raises a FrozenError on a frozen array 1447s 1447s Array#rassoc 1447s - returns the first contained array whose second element is == object 1447s - properly handles recursive arrays 1447s - calls elem == obj on the second element of each contained array 1447s - does not check the last element in each contained but specifically the second 1447s 1447s Array#reject 1447s - returns a new array without elements for which block is true 1447s - returns self when called on an Array emptied with #shift 1447s - properly handles recursive arrays 1447s - does not return subclass instance on Array subclasses 1447s - does not retain instance variables 1447s - returns an Enumerator if no block given 1447s 1447s Array#reject when no block is given returned Enumerator 1447s - size returns the enumerable size 1447s 1447s Array#reject 1447s - tolerates increasing an array size during iteration 1447s 1447s Array#reject! 1447s - removes elements for which block is true 1447s - properly handles recursive arrays 1447s - returns nil when called on an Array emptied with #shift 1447s - returns nil if no changes are made 1447s - returns an Enumerator if no block given, and the array is frozen 1447s - raises a FrozenError on a frozen array 1447s - raises a FrozenError on an empty frozen array 1447s - raises a FrozenError on a frozen array only during iteration if called without a block 1447s - does not truncate the array is the block raises an exception 1447s - only removes elements for which the block returns true, keeping the element which raised an error. 1447s - returns an Enumerator if no block given 1447s - updates the receiver after all blocks 1447s 1447s Array#reject! when no block is given returned Enumerator 1447s - size returns the enumerable size 1447s 1447s Array#reject! 1447s - tolerates increasing an array size during iteration 1447s 1447s Array#repeated_combination 1447s - returns an enumerator when no block is provided 1447s - returns self when a block is given 1447s - yields nothing for negative length and return self 1447s - yields the expected repeated_combinations 1447s - yields [] when length is 0 1447s - yields nothing when the array is empty and num is non zero 1447s - yields a partition consisting of only singletons 1447s - accepts sizes larger than the original array 1447s - generates from a defensive copy, ignoring mutations 1447s 1447s Array#repeated_combination when no block is given returned Enumerator size 1447s - returns 0 when the combination_size is < 0 1447s - returns 1 when the combination_size is 0 1447s - returns the binomial coefficient between combination_size and array size + combination_size -1 1447s 1447s Array#repeated_permutation 1447s - returns an Enumerator of all repeated permutations of given length when called without a block 1447s - yields all repeated_permutations to the block then returns self when called with block but no arguments 1447s - yields the empty repeated_permutation ([[]]) when the given length is 0 1447s - does not yield when called on an empty Array with a nonzero argument 1447s - handles duplicate elements correctly 1447s - truncates Float arguments 1447s - returns an Enumerator which works as expected even when the array was modified 1447s - allows permutations larger than the number of elements 1447s - generates from a defensive copy, ignoring mutations 1447s 1447s Array#repeated_permutation when no block is given returned Enumerator size 1447s - returns 0 when combination_size is < 0 1447s - returns array size ** combination_size 1447s 1447s Array#replace 1447s - replaces the elements with elements from other array 1447s - properly handles recursive arrays 1447s - returns self 1447s - does not make self dependent to the original array 1447s - tries to convert the passed argument to an Array using #to_ary 1447s - does not call #to_ary on Array subclasses 1447s - raises a FrozenError on a frozen array 1447s 1447s Array#reverse_each 1447s - traverses array in reverse order and pass each element to block 1447s - returns self 1447s - yields only the top level element of an empty recursive arrays 1447s - yields only the top level element of a recursive array 1447s - returns the correct size when no block is given 1447s - tolerates increasing an array size during iteration 1447s - returns an Enumerator if no block given 1447s 1447s Array#reverse_each when no block is given returned Enumerator 1447s - size returns the enumerable size 1447s 1447s Array#reverse 1447s - returns a new array with the elements in reverse order 1447s - properly handles recursive arrays 1447s - does not return subclass instance on Array subclasses 1447s 1447s Array#reverse! 1447s - reverses the elements in place 1447s - properly handles recursive arrays 1447s - raises a FrozenError on a frozen array 1447s 1447s Array#rindex 1447s - returns the first index backwards from the end where element == to object 1447s - returns size-1 if last element == to object 1447s - returns 0 if only first element == to object 1447s - returns nil if no element == to object 1447s - returns correct index even after delete_at 1447s - properly handles empty recursive arrays 1447s - properly handles recursive arrays 1447s - accepts a block instead of an argument 1447s - ignores the block if there is an argument 1447s - rechecks the array size during iteration 1447s - tolerates increasing an array size during iteration 1447s 1447s Array#rindex given no argument and no block 1447s - produces an Enumerator 1447s 1447s Array#rindex when no block is given returned Enumerator 1447s - size returns nil 1447s 1447s Array#rotate 1447s - returns a copy of the array when its length is one or zero 1447s - does not mutate the receiver 1447s - does not return self 1447s - does not return subclass instance for Array subclasses 1447s 1447s Array#rotate when passed no argument 1447s - returns a copy of the array with the first element moved at the end 1447s 1447s Array#rotate with an argument n 1447s - returns a copy of the array with the first (n % size) elements moved at the end 1447s - coerces the argument using to_int 1447s - raises a TypeError if not passed an integer-like argument 1447s 1447s Array#rotate! 1447s - does nothing and returns self when the length is zero or one 1447s - raises a FrozenError on a frozen array 1447s 1447s Array#rotate! when passed no argument 1447s - moves the first element to the end and returns self 1447s 1447s Array#rotate! with an argument n 1447s - moves the first (n % size) elements at the end and returns self 1447s - coerces the argument using to_int 1447s - raises a TypeError if not passed an integer-like argument 1447s 1447s Array#sample 1447s - samples evenly 1447s - returns nil for an empty Array 1447s - returns nil for an empty array when called without n and a Random is given 1447s - returns a single value when not passed a count 1447s - returns a single value when not passed a count and a Random is given 1447s - returns a single value when not passed a count and a Random class is given 1447s - returns an empty Array when passed zero 1447s - returns an Array of elements when passed a count 1447s - returns elements from the Array 1447s - returns at most the number of elements in the Array 1447s - does not return the same value if the Array has unique values 1447s - may return the same value if the array is not unique 1447s - calls #to_int to convert the count when passed an Object 1447s - raises ArgumentError when passed a negative count 1447s - does not return subclass instances with Array subclass 1447s 1447s Array#sample with options 1447s - calls #rand on the Object passed by the :random key in the arguments Hash 1447s - raises a NoMethodError if an object passed for the RNG does not define #rand 1447s 1447s Array#sample with options when the object returned by #rand is an Integer 1447s - uses the integer as index 1447s - raises a RangeError if the value is less than zero 1447s - raises a RangeError if the value is equal to the Array size 1447s 1447s Array#sample when the object returned by #rand is not an Integer but responds to #to_int 1447s - calls #to_int on the Object 1447s - raises a RangeError if the value is less than zero 1447s - raises a RangeError if the value is equal to the Array size 1447s 1447s Array#select 1447s - returns an Enumerator if no block given 1447s - tolerates increasing an array size during iteration 1447s - returns a new array of elements for which block is true 1447s - does not return subclass instance on Array subclasses 1447s - properly handles recursive arrays 1447s 1447s Array#select when no block is given returned Enumerator 1447s - size returns the enumerable size 1447s 1447s Array#select! 1447s - returns nil if no changes were made in the array 1447s - deletes elements for which the block returns a false value 1447s - returns an enumerator if no block is given 1447s - updates the receiver after all blocks 1447s - does not truncate the array is the block raises an exception 1447s - only changes elements before error is raised, keeping the element which raised an error. 1447s - tolerates increasing an array size during iteration 1447s 1447s Array#select! when no block is given returned Enumerator 1447s - size returns the enumerable size 1447s 1447s Array#select! on frozen objects 1447s - returns an Enumerator if no block is given 1447s - raises a FrozenError on a frozen array only during iteration if called without a block 1447s 1447s Array#select! on frozen objects with truthy block 1447s - keeps elements after any exception 1447s - raises a FrozenError 1447s 1447s Array#select! on frozen objects with falsy block 1447s - keeps elements after any exception 1447s - raises a FrozenError 1447s 1447s Array#shift 1447s - removes and returns the first element 1447s - returns nil when the array is empty 1447s - properly handles recursive arrays 1447s - raises a FrozenError on a frozen array 1447s - raises a FrozenError on an empty frozen array 1447s 1447s Array#shift passed a number n as an argument 1447s - removes and returns an array with the first n element of the array 1447s - does not corrupt the array when shift without arguments is followed by shift with an argument 1447s - returns a new empty array if there are no more elements 1447s - returns whole elements if n exceeds size of the array 1447s - does not return self even when it returns whole elements 1447s - raises an ArgumentError if n is negative 1447s - tries to convert n to an Integer using #to_int 1447s - raises a TypeError when the passed n cannot be coerced to Integer 1447s - raises an ArgumentError if more arguments are passed 1447s - does not return subclass instances with Array subclass 1447s 1447s Array#shuffle 1447s - returns the same values, in a usually different order 1447s - is not destructive 1447s - does not return subclass instances with Array subclass 1447s - calls #rand on the Object passed by the :random key in the arguments Hash 1447s - raises a NoMethodError if an object passed for the RNG does not define #rand 1447s - accepts a Float for the value returned by #rand 1447s - accepts a Random class for the value for random: argument 1447s - calls #to_int on the Object returned by #rand 1447s - raises a RangeError if the value is less than zero 1447s - raises a RangeError if the value is equal to one 1447s 1447s Array#shuffle! 1447s - returns the same values, in a usually different order 1447s - raises a FrozenError on a frozen array 1447s - matches CRuby with random: 1447s - matches CRuby with srand 1447s 1447s Array#size 1447s - returns the number of elements 1447s - properly handles recursive arrays 1447s 1447s Array#slice! 1447s - removes and return the element at index 1447s - removes and returns length elements beginning at start 1447s - returns nil if length is negative 1447s - properly handles recursive arrays 1447s - calls to_int on start and length arguments 1447s - removes and return elements in range 1447s - removes and returns elements in end-exclusive ranges 1447s - calls to_int on range arguments 1447s - returns last element for consecutive calls at zero index 1447s - does not expand array with indices out of bounds 1447s - does not expand array with negative indices out of bounds 1447s - raises a FrozenError on a frozen array 1447s - works with endless ranges 1447s - works with beginless ranges 1447s 1447s Array#slice! with a subclass of Array 1447s - returns a Array instance with [n, m] 1447s - returns a Array instance with [-n, m] 1447s - returns a Array instance with [n..m] 1447s - returns a Array instance with [n...m] 1447s - returns a Array instance with [-n..-m] 1447s - returns a Array instance with [-n...-m] 1447s 1447s Array#slice 1447s - returns the element at index with [index] 1447s - returns the element at index from the end of the array with [-index] 1447s - returns count elements starting from index with [index, count] 1447s - returns count elements starting at index from the end of array with [-index, count] 1447s - returns the first count elements with [0, count] 1447s - returns the subarray which is independent to self with [index,count] 1447s - tries to convert the passed argument to an Integer using #to_int 1447s - raises TypeError if to_int returns non-integer 1447s - returns the elements specified by Range indexes with [m..n] 1447s - returns elements specified by Range indexes except the element at index n with [m...n] 1447s - returns elements that exist if range start is in the array but range end is not with [m..n] 1447s - accepts Range instances having a negative m and both signs for n with [m..n] and [m...n] 1447s - returns the subarray which is independent to self with [m..n] 1447s - tries to convert Range elements to Integers using #to_int with [m..n] and [m...n] 1447s - returns the same elements as [m..n] and [m...n] with Range subclasses 1447s - returns nil for a requested index not in the array with [index] 1447s - returns [] if the index is valid but length is zero with [index, length] 1447s - returns nil if length is zero but index is invalid with [index, length] 1447s - returns [] if index == array.size with [index, length] 1447s - returns nil if index > array.size with [index, length] 1447s - returns nil if length is negative with [index, length] 1447s - returns nil if no requested index is in the array with [m..n] 1447s - returns nil if range start is not in the array with [m..n] 1447s - returns an empty array when m == n with [m...n] 1447s - returns an empty array with [0...0] 1447s - returns a subarray where m, n negatives and m < n with [m..n] 1447s - returns an array containing the first element with [0..0] 1447s - returns the entire array with [0..-1] 1447s - returns all but the last element with [0...-1] 1447s - returns [3] for [2..-1] out of [1, 2, 3] 1447s - returns an empty array when m > n and m, n are positive with [m..n] 1447s - returns an empty array when m > n and m, n are negative with [m..n] 1447s - does not expand array when the indices are outside of the array bounds 1447s - raises a RangeError when the length is out of range of Fixnum 1447s - raises a type error if a range is passed with a length 1447s - raises a RangeError if passed a range with a bound that is too large 1447s - can accept endless ranges 1447s - can accept beginless ranges 1447s - can accept nil...nil ranges 1447s 1447s Array#slice with a subclass of Array 1447s - returns a Array instance with [n, m] 1447s - returns a Array instance with [-n, m] 1447s - returns a Array instance with [n..m] 1447s - returns a Array instance with [n...m] 1447s - returns a Array instance with [-n..-m] 1447s - returns a Array instance with [-n...-m] 1447s - returns an empty array when m == n with [m...n] 1447s - returns an empty array with [0...0] 1447s - returns an empty array when m > n and m, n are positive with [m..n] 1447s - returns an empty array when m > n and m, n are negative with [m..n] 1447s - returns [] if index == array.size with [index, length] 1447s - returns [] if the index is valid but length is zero with [index, length] 1447s - does not call #initialize on the subclass instance 1447s 1447s Array#slice can be sliced with Enumerator::ArithmeticSequence 1447s - has endless range and positive steps 1447s - has beginless range and positive steps 1447s - has endless range and negative steps 1447s - has closed range and positive steps 1447s - has closed range and negative steps 1447s - has inverted closed range and positive steps 1447s - has range with bounds outside of array 1447s - has endless range with start outside of array's bounds 1447s 1447s Array#sort_by! 1447s - sorts array in place by passing each element to the given block 1447s - returns an Enumerator if not given a block 1447s - completes when supplied a block that always returns the same result 1447s - raises a FrozenError on a frozen array 1447s - raises a FrozenError on an empty frozen array 1447s - raises a FrozenError on a frozen array only during iteration if called without a block 1447s - returns the specified value when it would break in the given block 1447s - makes some modification even if finished sorting when it would break in the given block 1447s - changes nothing when called on a single element array 1447s - does not truncate the array is the block raises an exception 1447s - doesn't change array if error is raised 1447s 1447s Array#sort_by! when no block is given returned Enumerator 1447s - size returns the enumerable size 1447s 1447s Array#sort_by! 1447s - tolerates increasing an array size during iteration 1447s 1447s Array#sort 1447s - returns a new array sorted based on comparing elements with <=> 1447s - does not affect the original Array 1447s - sorts already-sorted Arrays 1447s - sorts reverse-sorted Arrays 1447s - sorts Arrays that consist entirely of equal elements 1447s - sorts Arrays that consist mostly of equal elements 1447s - does not return self even if the array would be already sorted 1447s - properly handles recursive arrays 1447s - uses #<=> of elements in order to sort 1447s - does not deal with exceptions raised by unimplemented or incorrect #<=> 1447s - may take a block which is used to determine the order of objects a and b described as -1, 0 or +1 1447s - raises an error when a given block returns nil 1447s - does not call #<=> on contained objects when invoked with a block 1447s - does not call #<=> on elements when invoked with a block even if Array is large (Rubinius #412) 1447s - completes when supplied a block that always returns the same result 1447s - does not freezes self during being sorted 1447s - returns the specified value when it would break in the given block 1447s - uses the sign of Integer block results as the sort result 1447s - compares values returned by block with 0 1447s - sorts an array that has a value shifted off without a block 1447s - sorts an array that has a value shifted off with a block 1447s - raises an error if objects can't be compared 1447s - handles a large array that has been pruned 1447s - does not return subclass instance on Array subclasses 1447s 1447s Array#sort! 1447s - sorts array in place using <=> 1447s - sorts array in place using block value if a block given 1447s - returns self if the order of elements changed 1447s - returns self even if makes no modification 1447s - properly handles recursive arrays 1447s - uses #<=> of elements in order to sort 1447s - does not call #<=> on contained objects when invoked with a block 1447s - does not call #<=> on elements when invoked with a block even if Array is large (Rubinius #412) 1447s - completes when supplied a block that always returns the same result 1447s - raises a FrozenError on a frozen array 1447s - returns the specified value when it would break in the given block 1447s - makes some modification even if finished sorting when it would break in the given block 1447s 1447s Array#sum 1447s - returns the sum of elements 1447s - applies a block to each element before adding if it's given 1447s - doesn't apply the block init 1447s - uses Kahan's compensated summation algorithm for precise sum of float numbers 1447s - handles infinite values and NaN 1447s - returns init value if array is empty 1447s - returns 0 if array is empty and init is omitted 1447s - adds init value to the sum of elements 1447s - can be used for non-numeric objects by providing init value 1447s - raises TypeError if any element are not numeric 1447s - raises TypeError if any element cannot be added to init value 1447s - calls + to sum the elements 1447s - calls + on the init value 1447s 1447s Array#sum 1447s - tolerates increasing an array size during iteration 1447s 1447s Array#take 1447s - returns the first specified number of elements 1447s - returns all elements when the argument is greater than the Array size 1447s - returns all elements when the argument is less than the Array size 1447s - returns an empty Array when passed zero 1447s - returns an empty Array when called on an empty Array 1447s - raises an ArgumentError when the argument is negative 1447s - returns a Array instance for Array subclasses 1447s 1447s Array#take_while 1447s - returns all elements until the block returns false 1447s - returns all elements until the block returns nil 1447s - returns all elements until the block returns false 1447s - returns a Array instance for Array subclasses 1447s 1447s Array#take_while 1447s - tolerates increasing an array size during iteration 1447s 1447s Array#to_a 1447s - returns self 1447s - does not return subclass instance on Array subclasses 1447s - properly handles recursive arrays 1447s 1447s Array#to_ary 1447s - returns self 1447s - properly handles recursive arrays 1447s 1447s Array#to_h 1447s - converts empty array to empty hash 1447s - converts [key, value] pairs to a hash 1447s - uses the last value of a duplicated key 1447s - calls #to_ary on contents 1447s - raises TypeError if an element is not an array 1447s - raises ArgumentError if an element is not a [key, value] pair 1447s - does not accept arguments 1447s - produces a hash that returns nil for a missing element 1447s 1447s Array#to_h with block 1447s - converts [key, value] pairs returned by the block to a Hash 1447s - raises ArgumentError if block returns longer or shorter array 1447s - raises TypeError if block returns something other than Array 1447s - coerces returned pair to Array with #to_ary 1447s - does not coerce returned pair to Array with #to_a 1447s 1447s Array#to_h 1447s - tolerates increasing an array size during iteration 1447s 1447s Array#to_s 1447s - returns a string 1447s - returns '[]' for an empty Array 1447s - calls inspect on its elements and joins the results with commas 1447s - does not call #to_s on a String returned from #inspect 1447s - calls #to_s on the object returned from #inspect if the Object isn't a String 1447s - does not call #to_str on the object returned from #inspect when it is not a String 1447s - does not call #to_str on the object returned from #to_s when it is not a String 1447s - does not swallow exceptions raised by #to_s 1447s - represents a recursive element with '[...]' 1447s 1447s Array#to_s with encoding 1447s - returns a US-ASCII string for an empty Array 1447s - use the default external encoding if it is ascii compatible 1447s - use US-ASCII encoding if the default external encoding is not ascii compatible 1447s - does not raise if inspected result is not default external encoding 1447s 1447s Array#transpose 1447s - assumes an array of arrays and returns the result of transposing rows and columns 1447s - tries to convert the passed argument to an Array using #to_ary 1447s - properly handles recursive arrays 1447s - raises a TypeError if the passed Argument does not respond to #to_ary 1447s - does not call to_ary on array subclass elements 1447s - raises an IndexError if the arrays are not of the same length 1447s - does not return subclass instance on Array subclasses 1447s 1447s Array.try_convert 1447s - returns the argument if it's an Array 1447s - returns the argument if it's a kind of Array 1447s - returns nil when the argument does not respond to #to_ary 1447s - sends #to_ary to the argument and returns the result if it's nil 1447s - sends #to_ary to the argument and returns the result if it's an Array 1447s - sends #to_ary to the argument and returns the result if it's a kind of Array 1447s - sends #to_ary to the argument and raises TypeError if it's not a kind of Array 1447s - does not rescue exceptions raised by #to_ary 1447s 1447s Array#| 1447s - returns an array of elements that appear in either array (union) 1447s - creates an array with no duplicates 1447s - creates an array with elements in order they are first encountered 1447s - properly handles recursive arrays 1447s - tries to convert the passed argument to an Array using #to_ary 1447s - acts as if using an intermediate hash to collect values 1447s - does not return subclass instances for Array subclasses 1447s - does not call to_ary on array subclasses 1447s - properly handles an identical item even when its #eql? isn't reflexive 1447s 1447s Array#union 1447s - returns an array of elements that appear in either array (union) 1447s - creates an array with no duplicates 1447s - creates an array with elements in order they are first encountered 1447s - properly handles recursive arrays 1447s - tries to convert the passed argument to an Array using #to_ary 1447s - acts as if using an intermediate hash to collect values 1447s - does not return subclass instances for Array subclasses 1447s - does not call to_ary on array subclasses 1447s - properly handles an identical item even when its #eql? isn't reflexive 1447s - returns unique elements when given no argument 1447s - does not return subclass instances for Array subclasses 1447s - accepts multiple arguments 1447s 1447s Array#uniq 1447s - returns an array with no duplicates 1447s - properly handles recursive arrays 1447s - uses eql? semantics 1447s - compares elements first with hash 1447s - does not compare elements with different hash codes via eql? 1447s - compares elements with matching hash codes with #eql? 1447s - compares elements based on the value returned from the block 1447s - yields items in order 1447s - handles nil and false like any other values 1447s - returns Array instance on Array subclasses 1447s - properly handles an identical item even when its #eql? isn't reflexive 1447s 1447s Array#uniq given an array of BasicObject subclasses that define ==, eql?, and hash 1447s - filters equivalent elements using those definitions 1447s 1447s Array#uniq 1447s - tolerates increasing an array size during iteration 1447s 1447s Array#uniq! 1447s - modifies the array in place 1447s - returns self 1447s - properly handles recursive arrays 1447s - compares elements first with hash 1447s - does not compare elements with different hash codes via eql? 1447s - returns nil if no changes are made to the array 1447s - raises a FrozenError on a frozen array when the array is modified 1447s - raises a FrozenError on a frozen array when the array would not be modified 1447s - doesn't yield to the block on a frozen array 1447s - compares elements based on the value returned from the block 1447s - properly handles an identical item even when its #eql? isn't reflexive 1447s - does not truncate the array is the block raises an exception 1447s - doesn't change array if error is raised 1447s 1447s Array#uniq! 1447s - tolerates increasing an array size during iteration 1447s 1447s Array#unshift 1447s - prepends object to the original array 1447s - returns self 1447s - quietly ignores unshifting nothing 1447s - properly handles recursive arrays 1447s - raises a FrozenError on a frozen array when the array is modified 1447s - raises a FrozenError on a frozen array when the array would not be modified 1447s - doesn't rely on Array#[]= so it can be overridden 1447s 1447s Array#values_at 1447s - returns an array of elements at the indexes when passed indexes 1447s - calls to_int on its indices 1447s - properly handles recursive arrays 1447s - does not return subclass instance on Array subclasses 1447s - works when given endless ranges 1447s - works when given beginless ranges 1447s 1447s Array#values_at when passed ranges 1447s - returns an array of elements in the ranges 1447s - calls to_int on arguments of ranges 1447s 1447s Array#values_at when passed a range 1447s - fills with nil if the index is out of the range 1447s 1447s Array#values_at when passed a range on an empty array 1447s - fills with nils if the index is out of the range 1447s 1447s Array#zip 1447s - returns an array of arrays containing corresponding elements of each array 1447s - fills in missing values with nil 1447s - properly handles recursive arrays 1447s - calls #to_ary to convert the argument to an Array 1447s - uses #each to extract arguments' elements when #to_ary fails 1447s - stops at own size when given an infinite enumerator 1447s - fills nil when the given enumerator is shorter than self 1447s - calls block if supplied 1447s - does not return subclass instance on Array subclasses 1447s 1447s BasicObject#__id__ 1447s - returns an integer 1447s - returns the same value on all calls to id for a given object 1447s - returns different values for different objects 1447s - returns the same value for two Fixnums with the same value 1447s - returns the same value for two Symbol literals 1447s - returns the same value for two true literals 1447s - returns the same value for two false literals 1447s - returns the same value for two nil literals 1447s - returns a different value for two Bignum literals 1447s - returns a different value for two String literals 1447s - returns a different value for an object and its dup 1447s - returns a different value for two numbers near the 32 bit Fixnum limit 1447s - returns a different value for two numbers near the 64 bit Fixnum limit 1447s 1447s BasicObject#__send__ 1447s - is a public instance method 1447s - invokes the named method 1447s - accepts a String method name 1447s - invokes a class method if called on a class 1447s - raises a TypeError if the method name is not a string or symbol 1447s - raises a NameError if the corresponding method can't be found 1447s - raises a NameError if the corresponding singleton method can't be found 1447s - raises an ArgumentError if no arguments are given 1447s - raises an ArgumentError if called with more arguments than available parameters 1447s - raises an ArgumentError if called with fewer arguments than required parameters 1447s - succeeds if passed an arbitrary number of arguments as a splat parameter 1447s - succeeds when passing 1 or more arguments as a required and a splat parameter 1447s - succeeds when passing 0 arguments to a method with one parameter with a default 1447s - has a negative arity 1447s - invokes module methods with super correctly 1447s 1447s BasicObject 1451s - raises NoMethodError for nonexistent methods after #method_missing is removed 1451s - raises NameError when referencing built-in constants 1451s - does not define built-in constants (according to const_defined?) 1451s - does not define built-in constants (according to defined?) 1451s - is included in Object's list of constants 1451s - includes itself in its list of constants 1451s 1451s BasicObject metaclass 1451s - is an instance of Class 1451s - has Class as superclass 1451s - contains methods for the BasicObject class 1451s 1451s BasicObject instance metaclass 1451s - is an instance of Class 1451s - has BasicObject as superclass 1451s - contains methods defined for the BasicObject instance 1451s 1451s BasicObject subclass 1451s - contains Kernel methods when including Kernel 1451s 1451s BasicObject subclass BasicObject references 1451s - can refer to BasicObject from within itself 1451s 1451s BasicObject#equal? 1451s - is a public instance method 1451s - returns true if other is identical to self 1451s - returns false if other is not identical to self 1451s - returns true only if self and other are the same object 1451s - returns true for the same immediate object 1451s - returns false for nil and any other object 1451s - returns false for objects of different classes 1451s - returns true only if self and other are the same boolean 1451s - returns true for integers of initially different ranges 1451s - is unaffected by overriding __id__ 1451s - is unaffected by overriding object_id 1451s - is unaffected by overriding == 1451s - is unaffected by overriding eql? 1451s 1451s BasicObject#== 1451s - is a public instance method 1451s - returns true if other is identical to self 1451s - returns false if other is not identical to self 1451s - returns true only if self and other are the same object 1451s - returns true for the same immediate object 1451s - returns false for nil and any other object 1451s - returns false for objects of different classes 1451s - returns true only if self and other are the same boolean 1451s - returns true for integers of initially different ranges 1451s 1451s BasicObject#initialize 1451s - is a private instance method 1451s - does not accept arguments 1451s 1451s BasicObject#instance_eval 1451s - is a public instance method 1451s - sets self to the receiver in the context of the passed block 1451s - evaluates strings 1451s - raises an ArgumentError when no arguments and no block are given 1451s - raises an ArgumentError when a block and normal arguments are given 1451s - raises an ArgumentError when more than 3 arguments are given 1451s - yields the object to the block 1451s - returns the result of the block 1451s - only binds the eval to the receiver 1451s - preserves self in the original block when passed a block argument 1451s - binds self to the receiver 1451s - executes in the context of the receiver 1451s - has access to receiver's instance variables 1451s - treats block-local variables as local to the block 1451s - makes the receiver metaclass the scoped class when used with a string 1451s - doesn't get constants in the receiver if a block given 1451s - raises a TypeError when defining methods on an immediate 1451s - raises a TypeError when defining methods on numerics 1451s - evaluates procs originating from methods 1451s - evaluates string with given filename and linenumber 1451s - evaluates string with given filename and negative linenumber 1451s - has access to the caller's local variables 1451s - converts string argument with #to_str method 1451s - raises ArgumentError if returned value is not String 1451s - converts filename argument with #to_str method 1451s - raises ArgumentError if returned value is not String 1451s - converts lineno argument with #to_int method 1451s 1451s BasicObject#instance_eval constants lookup when a String given 1451s - looks in the receiver singleton class first 1451s - looks in the caller class next 1451s - looks in the caller outer scopes next 1451s - looks in the receiver class hierarchy next 1451s 1451s BasicObject#instance_eval class variables lookup 1451s - gets class variables in the caller class when called with a String 1451s - gets class variables in the block definition scope when called with a block 1451s - sets class variables in the caller class when called with a String 1451s - sets class variables in the block definition scope when called with a block 1451s - does not have access to class variables in the receiver class when called with a String 1451s - does not have access to class variables in the receiver's singleton class when called with a String 1451s 1451s BasicObject#instance_exec 1451s - is a public instance method 1451s - sets self to the receiver in the context of the passed block 1451s - passes arguments to the block 1451s - raises a LocalJumpError unless given a block 1451s - has an arity of -1 1451s - accepts arguments with a block 1451s - doesn't pass self to the block as an argument 1451s - passes any arguments to the block 1451s - only binds the exec to the receiver 1451s - binds self to the receiver 1451s - binds the block's binding self to the receiver 1451s - executes in the context of the receiver 1451s - has access to receiver's instance variables 1451s - sets class variables in the receiver 1451s - raises a TypeError when defining methods on an immediate 1451s - raises a TypeError when defining methods on numerics 1451s 1451s BasicObject#method_missing 1451s - is a private method 1451s 1451s BasicObject#method_missing for a Class 1451s - raises a NoMethodError when an undefined method is called 1451s - raises a NoMethodError when a protected method is called 1451s - raises a NoMethodError when a private method is called 1451s 1451s BasicObject#method_missing for an instance 1451s - raises a NoMethodError when an undefined method is called 1451s - raises a NoMethodError when a protected method is called 1451s - raises a NoMethodError when a private method is called 1451s - sets the receiver of the raised NoMethodError 1451s 1451s BasicObject#method_missing for a Module with #method_missing defined 1451s - is not called when a defined method is called 1451s - is called when a not defined method is called 1451s - is called when a protected method is called 1451s - is called when a private method is called 1451s 1451s BasicObject#method_missing for a Module 1451s - raises a NoMethodError when an undefined method is called 1451s - raises a NoMethodError when a protected method is called 1451s - raises a NoMethodError when a private method is called 1451s 1451s BasicObject#method_missing for a Class with #method_missing defined 1451s - is not called when a defined method is called 1451s - is called when an undefined method is called 1451s - is called when an protected method is called 1451s - is called when an private method is called 1451s 1451s BasicObject#method_missing for a Class 1451s - raises a NoMethodError when an undefined method is called 1451s - raises a NoMethodError when a protected method is called 1451s - raises a NoMethodError when a private method is called 1451s 1451s BasicObject#method_missing for an instance with #method_missing defined 1451s - is not called when a defined method is called 1451s - is called when an undefined method is called 1451s - is called when an protected method is called 1451s - is called when an private method is called 1451s 1451s BasicObject#method_missing for an instance 1451s - raises a NoMethodError when an undefined method is called 1451s - raises a NoMethodError when a protected method is called 1451s - raises a NoMethodError when a private method is called 1451s - sets the receiver of the raised NoMethodError 1451s 1451s BasicObject#!= 1451s - is a public instance method 1451s - returns true if other is not identical to self 1451s - returns true if other is an Object 1451s - returns false if other is identical to self 1451s - dispatches to #== 1451s 1451s BasicObject#!= when invoked using Kernel#send 1451s - returns true if other is not identical to self 1451s - returns false if other is identical to self 1451s - dispatches to #== 1451s 1451s BasicObject#! 1451s - is a public instance method 1451s - returns false 1451s 1451s BasicObject#singleton_method_added 1451s - is a private method 1451s - is called when a singleton method is defined on an object 1451s - is not called for instance methods 1451s - is called when a singleton method is defined on a module 1451s - is called when a method is defined in the singleton class 1451s - is called when a method is defined with alias_method in the singleton class 1451s - is called when a method is defined with syntax alias in the singleton class 1451s - is called when define_method is used in the singleton class 1451s 1451s BasicObject#singleton_method_added when singleton_method_added is undefined 1451s - raises NoMethodError for a metaclass 1451s - raises NoMethodError for a singleton instance 1451s - calls #method_missing 1451s 1451s BasicObject#singleton_method_removed 1451s - is a private method 1451s - is called when a method is removed on self 1451s 1451s BasicObject#singleton_method_undefined 1451s - is a private method 1451s - is called when a method is removed on self 1451s 1451s Binding#clone 1451s - returns a copy of the Binding object 1451s - is a shallow copy of the Binding object 1451s 1451s Binding#dup 1451s - returns a copy of the Binding object 1451s - is a shallow copy of the Binding object 1451s 1451s Binding#eval 1451s - behaves like Kernel.eval(..., self) 1451s - does not leak variables to cloned bindings 1451s - starts with line 1 if single argument is given 1451s - preserves __LINE__ across multiple calls to eval 1451s - increments __LINE__ on each line of a multiline eval 1451s - starts with line 1 if the Binding is created with #send 1451s - starts with a __LINE__ of 1 if a filename is passed 1451s - starts with a __LINE__ from the third argument if passed 1451s - uses (eval) as __FILE__ if single argument given 1451s - uses 1 as __LINE__ 1451s - uses the __FILE__ that is passed in 1451s - with __method__ returns the method where the Binding was created 1451s - with __method__ returns the method where the Binding was created, ignoring #send 1451s - reflects refinements activated in the binding scope 1451s 1451s Binding#eval with a file given 1451s - does not store the filename permanently 1451s 1451s Binding#irb 1457s - creates an IRB session with the binding in scope 1457s 1457s Binding#local_variable_defined? 1457s - returns false when a variable is not defined 1457s - returns true when a regular local variable is defined 1457s - returns true when a local variable is defined using eval() 1457s - returns true when a local variable is defined using Binding#local_variable_set 1457s - returns true when a local variable is defined in a parent scope 1457s - allows usage of a String as the variable name 1457s - allows usage of an object responding to #to_str as the variable name 1457s 1457s Binding#local_variable_get 1457s - reads local variables captured in the binding 1457s - raises a NameError for missing variables 1457s - reads variables added later to the binding 1457s - gets a local variable defined in a parent scope 1457s - gets a local variable defined using eval() 1457s - raises a NameError on global access 1457s - raises a NameError on special variable access 1457s 1457s Binding#local_variable_set 1457s - adds nonexistent variables to the binding's eval scope 1457s - sets a new local variable 1457s - sets a local variable using a String as the variable name 1457s - sets a local variable using an object responding to #to_str as the variable name 1457s - scopes new local variables to the receiving Binding 1457s - overwrites an existing local variable defined before a Binding 1457s - overwrites a local variable defined using eval() 1457s - raises a NameError on global access 1457s - raises a NameError on special variable access 1457s 1457s Binding#local_variables 1457s - returns an Array 1457s - includes local variables in the current scope 1457s - includes local variables defined after calling binding.local_variables 1457s - includes local variables of inherited scopes and eval'ed context 1457s - includes shadowed local variables only once 1457s - includes new variables defined in the binding 1457s 1457s Binding#receiver 1457s - returns the object to which binding is bound 1457s 1457s Binding#source_location 1457s - returns an [file, line] pair 1457s - works for eval with a given line 1457s 1457s RUBY_VERSION 1457s - is a String 1457s 1457s RUBY_PATCHLEVEL 1457s - is an Integer 1457s 1457s RUBY_COPYRIGHT 1457s - is a String 1457s 1457s RUBY_DESCRIPTION 1457s - is a String 1457s 1457s RUBY_ENGINE 1457s - is a String 1457s 1457s RUBY_PLATFORM 1457s - is a String 1457s 1457s RUBY_RELEASE_DATE 1457s - is a String 1457s 1457s RUBY_REVISION 1457s - is a String 1457s 1457s Class#allocate 1457s - returns an instance of self 1457s - returns a fully-formed instance of Module 1457s - throws an exception when calling a method on a new instance 1457s - does not call initialize on the new instance 1457s - raises TypeError for #superclass 1457s 1457s Class#dup 1457s - duplicates both the class and the singleton class 1457s - retains an included module in the ancestor chain for the singleton class 1457s - retains the correct ancestor chain for the singleton class 1457s - sets the name from the class to nil if not assigned to a constant 1457s - stores the new name if assigned to a constant 1457s - raises TypeError if called on BasicObject 1457s 1457s Class.inherited 1457s - is invoked with the child Class when self is subclassed 1457s - is invoked only once per subclass 1457s - is called when marked as a private class method 1457s - is called when marked as a protected class method 1457s - is called when marked as a public class method 1457s - is called by super from a method provided by an included module 1457s - is called by super even when marked as a private class method 1457s - will be invoked by child class regardless of visibility 1457s 1457s Class#initialize 1457s - is private 1457s - raises a TypeError when called on already initialized classes 1457s - raises a TypeError when called on BasicObject 1457s 1457s Class#initialize when given the Class 1457s - raises a TypeError 1457s 1457s Class.new with a block given 1457s - yields the new class as self in the block 1457s - uses the given block as the class' body 1457s - creates a subclass of the given superclass 1457s - runs the inherited hook after yielding the block 1457s 1457s Class.new 1457s - creates a new anonymous class 1457s - raises a TypeError if passed a metaclass 1457s - creates a class without a name 1457s - creates a class that can be given a name by assigning it to a constant 1457s - sets the new class' superclass to the given class 1457s - sets the new class' superclass to Object when no class given 1457s - raises a TypeError when given a non-Class 1457s 1457s Class#new 1457s - returns a new instance of self 1457s - invokes #initialize on the new instance with the given args 1457s - uses the internal allocator and does not call #allocate 1457s - passes the block to #initialize 1457s 1457s Class#subclasses 1457s - returns a list of classes directly inheriting from self 1457s - does not return included modules 1457s - does not return singleton classes 1457s - has 1 entry per module or class 1457s - works when creating subclasses concurrently 1457s 1457s Class#superclass 1457s - returns the superclass of self 1457s 1457s Class#superclass for a singleton class 1457s - of an object returns the class of the object 1457s - of a class returns the singleton class of its superclass 1457s 1457s Comparable#between? 1457s - returns true if self is greater than or equal to the first and less than or equal to the second argument 1457s 1457s Comparable#clamp 1457s - raises an Argument error unless the 2 parameters are correctly ordered 1457s - returns self if within the given parameters 1457s - returns the min parameter if smaller than it 1457s - returns the max parameter if greater than it 1457s - returns self if within the given range parameters 1457s - returns the minimum value of the range parameters if smaller than it 1457s - returns the maximum value of the range parameters if greater than it 1457s - raises an Argument error if the range parameter is exclusive 1457s 1457s Comparable#== 1457s - returns true if other is the same as self 1457s - calls #<=> on self with other and returns true if #<=> returns 0 1457s - calls #<=> on self with other and returns true if #<=> returns 0.0 1457s - returns false if calling #<=> on self returns a positive Integer 1457s - returns false if calling #<=> on self returns a negative Integer 1457s 1457s Comparable#== when #<=> returns nil 1457s - returns false 1457s 1457s Comparable#== when #<=> returns nor nil neither an Integer 1457s - raises an ArgumentError 1457s 1457s Comparable#== when #<=> raises an exception 1457s - lets it go through if it is not a StandardError 1457s 1457s Comparable#== when #<=> raises an exception if it is a StandardError 1457s - lets it go through 1457s 1457s Comparable#== when #<=> raises an exception if it is a subclass of StandardError 1457s - lets it go through 1457s 1457s Comparable#== when #<=> is not defined 1457s - returns true for identical objects 1457s - returns false and does not recurse infinitely 1457s 1457s Comparable#== when #<=> calls super 1457s - returns true for identical objects 1457s - calls the defined #<=> only once for different objects 1457s 1457s Comparable#> 1457s - calls #<=> on self with other and returns true if #<=> returns any Integer greater than 0 1457s - returns false if calling #<=> on self returns 0 or any Integer less than 0 1457s - raises an ArgumentError if calling #<=> on self returns nil 1457s 1457s Comparable#>= 1457s - calls #<=> on self with other and returns true if #<=> returns 0 or any Integer greater than 0 1457s - returns false if calling #<=> on self returns any Integer less than 0 1457s - raises an ArgumentError if calling #<=> on self returns nil 1457s 1457s Comparable#< 1457s - calls #<=> on self with other and returns true if #<=> returns any Integer less than 0 1457s - returns false if calling #<=> on self returns 0 or any Integer greater than 0 1457s - raises an ArgumentError if calling #<=> on self returns nil 1457s - raises an argument error with a message containing the value 1457s 1457s Comparable#<= 1457s - calls #<=> on self with other and returns true if #<=> returns 0 or any Integer less than 0 1457s - returns false if calling #<=> on self returns any Integer greater than 0 1457s - raises an ArgumentError if calling #<=> on self returns nil 1457s 1457s Complex#abs2 1457s - returns the sum of the squares of the real and imaginary parts 1457s 1457s Complex#abs 1457s - returns the modulus: |a + bi| = sqrt((a ^ 2) + (b ^ 2)) 1457s 1457s Complex#angle 1457s - returns the argument -- i.e., the angle from (1, 0) in the complex plane 1457s 1457s Complex#arg 1457s - returns the argument -- i.e., the angle from (1, 0) in the complex plane 1457s 1457s Complex#coerce 1457s - returns an array containing other and self as Complex when other is an Integer 1457s - returns an array containing other and self as Complex when other is a Float 1457s - returns an array containing other and self as Complex when other is a Bignum 1457s - returns an array containing other and self as Complex when other is a Rational 1457s - returns an array containing other and self when other is a Complex 1457s - returns an array containing other as Complex and self when other is a Numeric which responds to #real? with true 1457s - raises TypeError when other is a Numeric which responds to #real? with false 1457s - raises a TypeError when other is a String 1457s - raises a TypeError when other is nil 1457s - raises a TypeError when other is false 1457s 1457s Complex#<=> 1457s - returns nil if either self or argument has imaginary part 1457s - returns nil if argument is not numeric 1457s - returns 0, 1, or -1 if self and argument do not have imaginary part 1457s 1457s Complex#conj 1457s - returns the complex conjugate: conj a + bi = a - bi 1457s 1457s Complex#conjugate 1457s - returns the complex conjugate: conj a + bi = a - bi 1457s 1457s Complex::I 1457s - is Complex(0, 1) 1457s 1457s Complex#denominator 1457s - returns the least common multiple denominator of the real and imaginary parts 1457s 1457s Complex#/ with Complex 1457s - divides according to the usual rule for complex numbers 1457s 1457s Complex#/ with Fixnum 1457s - divides both parts of the Complex number 1457s - raises a ZeroDivisionError when given zero 1457s - produces Rational parts 1457s 1457s Complex#/ with Bignum 1457s - divides both parts of the Complex number 1457s 1457s Complex#/ with Float 1457s - divides both parts of the Complex number 1457s - returns Complex(Infinity, Infinity) when given zero 1457s 1457s Complex#/ with Object 1457s - tries to coerce self into other 1457s 1457s Complex#/ with a Numeric which responds to #real? with true 1457s - returns Complex(real.quo(other), imag.quo(other)) 1457s 1457s Complex#/ with a Numeric which responds to #real? with false 1457s - coerces the passed argument to Complex and divides the resulting elements 1457s 1457s Complex#eql? 1457s - returns false if other is not Complex 1457s - returns true when the respective parts are of the same classes and self == other 1457s - returns false when the real parts are of different classes 1457s - returns false when the imaginary parts are of different classes 1457s - returns false when self == other is false 1457s - does NOT send #eql? to real or imaginary parts 1457s 1457s Complex#== with Complex 1457s - returns true when self and other have numerical equality 1457s 1457s Complex#== with Numeric 1457s - returns true when self's imaginary part is 0 and the real part and other have numerical equality 1457s 1457s Complex#== with Object 1457s - calls other#== with self 1457s 1457s Complex#== with a Numeric which responds to #real? with true 1457s - returns real == other when the imaginary part is zero 1457s - returns false when when the imaginary part is not zero 1457s 1457s Complex#== with a Numeric which responds to #real? with false 1457s - returns other == self 1457s 1457s Complex#** with Integer 0 1457s - returns Complex(1) 1457s 1457s Complex#** with Float 0.0 1457s - returns Complex(1.0, 0.0) 1457s 1457s Complex#** with Complex 1457s - returns self raised to the given power 1457s 1457s Complex#** with Integer 1457s - returns self raised to the given power 1457s 1457s Complex#** with Rational 1457s - returns self raised to the given power 1457s 1457s Complex#** with Object 1457s - tries to coerce self into other 1457s 1457s Complex#fdiv 1457s - accepts a numeric argument 1457s - accepts a negative numeric argument 1457s - raises a TypeError if passed a non-numeric argument 1457s - sets the real part to NaN if self's real part is NaN 1457s - sets the imaginary part to NaN if self's imaginary part is NaN 1457s - sets the real and imaginary part to NaN if self's real and imaginary parts are NaN 1457s - sets the real and imaginary part to NaN if self's real part and the argument are both NaN 1457s - sets the real and imaginary part to NaN if self's real part, self's imaginary part, and the argument are NaN 1457s - sets the real part to Infinity if self's real part is Infinity 1457s - sets the imaginary part to Infinity if self's imaginary part is Infinity 1457s - sets the imaginary and real part to Infinity if self's imaginary and real parts are Infinity 1457s - sets the real part to NaN and the imaginary part to NaN if self's imaginary part, self's real part, and the argument are Infinity 1457s 1457s Complex#fdiv with no imaginary part 1457s - returns a Complex number 1457s - sets the real part to self's real part fdiv'd with the argument 1457s - sets the imaginary part to 0.0 1457s 1457s Complex#fdiv with an imaginary part 1457s - returns a Complex number 1457s - sets the real part to self's real part fdiv'd with the argument 1457s - sets the imaginary part to the imaginary part fdiv'd with the argument 1457s 1457s Complex#finite? 1457s - returns true if magnitude is finite 1457s - returns false for positive infinity 1457s - returns false for positive complex with infinite imaginary 1457s - returns false for negative infinity 1457s - returns false for negative complex with infinite imaginary 1457s - returns false for NaN 1457s 1457s Complex#hash 1457s - is static 1457s - is different for different instances 1457s 1457s Complex#imag 1457s - returns the imaginary part of self 1457s 1457s Complex#imaginary 1457s - returns the imaginary part of self 1457s 1457s Complex#infinite? 1457s - returns nil if magnitude is finite 1457s - returns 1 for positive infinity 1457s - returns 1 for positive complex with infinite imaginary 1457s - returns -1 for negative infinity 1457s - returns -1 for negative complex with infinite imaginary 1457s - returns nil for NaN 1457s 1457s Complex#inspect 1457s - returns (${real}+${image}i) for positive imaginary parts 1457s - returns (${real}-${image}i) for negative imaginary parts 1457s - calls #inspect on real and imaginary 1457s - adds an `*' before the `i' if the last character of the imaginary part is not numeric 1457s 1457s Complex#integer? 1457s - returns false for a Complex with no imaginary part 1457s - returns false for a Complex with an imaginary part 1457s 1457s Complex#magnitude 1457s - returns the modulus: |a + bi| = sqrt((a ^ 2) + (b ^ 2)) 1457s 1457s Complex#marshal_dump 1457s - is a private method 1457s - dumps real and imaginary parts 1457s 1457s Complex#- with Complex 1457s - subtracts both the real and imaginary components 1457s 1457s Complex#- with Integer 1457s - subtracts the real number from the real component of self 1457s 1457s Complex#- with Object 1457s - tries to coerce self into other 1457s 1457s Complex#- passed Numeric which responds to #real? with true 1457s - coerces the passed argument to the type of the real part and subtracts the resulting elements 1457s 1457s Complex#- passed Numeric which responds to #real? with false 1457s - coerces the passed argument to Complex and subtracts the resulting elements 1457s 1457s Complex#* with Complex 1457s - multiplies according to the usual rule for complex numbers: (a + bi) * (c + di) = ac - bd + (ad + bc)i 1457s 1457s Complex#* with Integer 1457s - multiplies both parts of self by the given Integer 1457s 1457s Complex#* with Object 1457s - tries to coerce self into other 1457s 1457s Complex#* with a Numeric which responds to #real? with true 1457s - multiples both parts of self by other 1457s 1457s Complex#* with a Numeric which responds to #real? with true with a Numeric which responds to #real? with false 1457s - coerces the passed argument to Complex and multiplies the resulting elements 1457s 1457s Complex#negative? 1457s - is undefined 1457s 1457s Complex#numerator 1457s - returns self's numerator 1457s 1457s Complex#phase 1457s - returns the argument -- i.e., the angle from (1, 0) in the complex plane 1457s 1457s Complex#+ with Complex 1457s - adds both the real and imaginary components 1457s 1457s Complex#+ with Integer 1457s - adds the real number to the real component of self 1457s 1457s Complex#+ with Object 1457s - tries to coerce self into other 1457s 1457s Complex#+ passed Numeric which responds to #real? with true 1457s - coerces the passed argument to the type of the real part and adds the resulting elements 1457s 1457s Complex#+ passed Numeric which responds to #real? with false 1457s - coerces the passed argument to Complex and adds the resulting elements 1457s 1457s Complex.polar 1457s - returns a complex number in terms of radius and angle 1457s - raises a TypeError when given non real arguments 1457s - computes the real values of the real & imaginary parts from the polar form 1457s 1457s Complex#polar 1457s - returns the absolute value and the argument 1457s 1457s Complex#positive? 1457s - is undefined 1457s 1457s Complex#quo with Complex 1457s - divides according to the usual rule for complex numbers 1457s 1457s Complex#quo with Fixnum 1457s - divides both parts of the Complex number 1457s - raises a ZeroDivisionError when given zero 1457s - produces Rational parts 1457s 1457s Complex#quo with Bignum 1457s - divides both parts of the Complex number 1457s 1457s Complex#quo with Float 1457s - divides both parts of the Complex number 1457s - returns Complex(Infinity, Infinity) when given zero 1457s 1457s Complex#quo with Object 1457s - tries to coerce self into other 1457s 1457s Complex#quo with a Numeric which responds to #real? with true 1457s - returns Complex(real.quo(other), imag.quo(other)) 1457s 1457s Complex#quo with a Numeric which responds to #real? with false 1457s - coerces the passed argument to Complex and divides the resulting elements 1457s 1457s Complex#rationalize 1457s - raises RangeError if self has non-zero imaginary part 1457s - raises RangeError if self has 0.0 imaginary part 1457s - returns a Rational if self has zero imaginary part 1457s - sends #rationalize to the real part 1457s - ignores a single argument 1457s - raises ArgumentError when passed more than one argument 1457s 1457s Complex#real 1457s - returns the real part of self 1457s 1457s Complex#real? 1457s - returns false if there is an imaginary part 1457s - returns false if there is not an imaginary part 1457s - returns false if the real part is Infinity 1457s - returns false if the real part is NaN 1457s 1457s Complex#rect 1457s - returns an Array 1457s - returns a two-element Array 1457s - returns the real part of self as the first element 1457s - returns the imaginary part of self as the last element 1457s - raises an ArgumentError if given any arguments 1457s 1457s Complex.rect passed a Numeric n which responds to #real? with true 1457s - returns a Complex with real part n and imaginary part 0 1457s 1457s Complex.rect passed a Numeric which responds to #real? with false 1457s - raises TypeError 1457s 1457s Complex.rect passed Numerics n1 and n2 and at least one responds to #real? with false 1457s - raises TypeError 1457s - raises TypeError 1457s - raises TypeError 1457s 1457s Complex.rect passed Numerics n1 and n2 and both respond to #real? with true 1457s - returns a Complex with real part n1 and imaginary part n2 1457s 1457s Complex.rect passed a non-Numeric 1457s - raises TypeError 1457s 1457s Complex#rectangular 1457s - returns an Array 1457s - returns a two-element Array 1457s - returns the real part of self as the first element 1457s - returns the imaginary part of self as the last element 1457s - raises an ArgumentError if given any arguments 1457s 1457s Complex.rectangular passed a Numeric n which responds to #real? with true 1457s - returns a Complex with real part n and imaginary part 0 1457s 1457s Complex.rectangular passed a Numeric which responds to #real? with false 1457s - raises TypeError 1457s 1457s Complex.rectangular passed Numerics n1 and n2 and at least one responds to #real? with false 1457s - raises TypeError 1457s - raises TypeError 1457s - raises TypeError 1457s 1457s Complex.rectangular passed Numerics n1 and n2 and both respond to #real? with true 1457s - returns a Complex with real part n1 and imaginary part n2 1457s 1457s Complex.rectangular passed a non-Numeric 1457s - raises TypeError 1457s 1457s Complex#to_c 1457s - returns self 1457s - returns the same value 1457s 1457s Complex#to_f when the imaginary part is Integer 0 1457s - returns the result of sending #to_f to the real part 1457s 1457s Complex#to_f when the imaginary part is Rational 0 1457s - returns the result of sending #to_f to the real part 1457s 1457s Complex#to_f when the imaginary part responds to #== 0 with true 1457s - returns the result of sending #to_f to the real part 1457s 1457s Complex#to_f when the imaginary part is non-zero 1457s - raises RangeError 1457s 1457s Complex#to_f when the imaginary part is Float 0.0 1457s - raises RangeError 1457s 1457s Complex#to_i when the imaginary part is Integer 0 1457s - returns the result of sending #to_i to the real part 1457s 1457s Complex#to_i when the imaginary part is Rational 0 1457s - returns the result of sending #to_i to the real part 1457s 1457s Complex#to_i when the imaginary part responds to #== 0 with true 1457s - returns the result of sending #to_i to the real part 1457s 1457s Complex#to_i when the imaginary part is non-zero 1457s - raises RangeError 1457s 1457s Complex#to_i when the imaginary part is Float 0.0 1457s - raises RangeError 1457s 1457s Complex#to_r when the imaginary part is Integer 0 1457s - returns the result of sending #to_r to the real part 1457s 1457s Complex#to_r when the imaginary part is Rational 0 1457s - returns the result of sending #to_r to the real part 1457s 1457s Complex#to_r when the imaginary part responds to #== 0 with true 1457s - returns the result of sending #to_r to the real part 1457s 1457s Complex#to_r when the imaginary part is non-zero 1457s - raises RangeError 1457s 1457s Complex#to_r when the imaginary part is Float 0.0 1457s - raises RangeError 1458s 1458s Complex#to_s 1458s - returns self as String 1458s - returns 1+0.0i for Complex(1, 0.0) 1458s - returns 1-0.0i for Complex(1, -0.0) 1458s - returns 1+Infinity*i for Complex(1, Infinity) 1458s - returns 1-Infinity*i for Complex(1, -Infinity) 1458s - returns 1+NaN*i for Complex(1, NaN) 1458s - treats real and imaginary parts as strings 1458s 1458s Complex#to_s when self's real component is 0 1458s - returns both the real and imaginary component even when the real is 0 1458s 1458s Complex#-@ 1458s - sends #-@ to the real and imaginary parts and returns a Complex with the resulting respective parts 1458s 1458s ConditionVariable#broadcast 1458s - releases all threads waiting in line for this resource 1458s 1458s ConditionVariable#marshal_dump 1458s - raises a TypeError 1458s 1458s ConditionVariable#signal 1458s - releases the first thread waiting in line for this resource 1458s - allows control to be passed between a pair of threads 1458s 1458s ConditionVariable#wait 1458s - calls #sleep on the given object 1458s - can be woken up by ConditionVariable#signal 1458s - can be interrupted by Thread#run 1458s - can be interrupted by Thread#wakeup 1458s - reacquires the lock even if the thread is killed 1458s - reacquires the lock even if the thread is killed after being signaled 1458s - supports multiple Threads waiting on the same ConditionVariable and Mutex 1458s 1458s Data 1458s - does not exist anymore 1458s 1458s Dir.chdir 1458s - defaults to $HOME with no arguments 1458s - changes to the specified directory 1458s - returns 0 when successfully changing directory 1458s - calls #to_str on the argument if it's not a String 1458s - calls #to_str on the argument if it's not a String and a block is given 1458s - calls #to_path on the argument if it's not a String 1458s - prefers #to_path over #to_str 1458s - returns the value of the block when a block is given 1458s - defaults to the home directory when given a block but no argument 1458s - changes to the specified directory for the duration of the block 1458s - raises an Errno::ENOENT if the directory does not exist 1458s - raises an Errno::ENOENT if the original directory no longer exists 1458s - always returns to the original directory when given a block 1458s 1458s Dir.children 1458s - returns an Array of filenames in an existing directory including dotfiles 1458s - calls #to_path on non-String arguments 1458s - accepts an options Hash 1458s - returns children encoded with the filesystem encoding by default 1458s - returns children encoded with the specified encoding 1458s - returns children transcoded to the default internal encoding 1458s - raises a SystemCallError if called with a nonexistent directory 1458s 1458s Dir#children 1458s - returns an Array of filenames in an existing directory including dotfiles 1458s - accepts an encoding keyword for the encoding of the entries 1458s - returns children encoded with the filesystem encoding by default 1458s - returns children encoded with the specified encoding 1458s - returns children transcoded to the default internal encoding 1458s 1458s Dir#close 1458s - does not raise an IOError even if the Dir instance is closed 1458s 1458s Dir.delete 1458s - removes empty directories 1458s - calls #to_path on non-String arguments 1458s - raises an Errno::ENOTEMPTY when trying to remove a nonempty directory 1458s - raises an Errno::ENOENT when trying to remove a non-existing directory 1458s - raises an Errno::ENOTDIR when trying to remove a non-directory 1458s - raises an Errno::EACCES if lacking adequate permissions to remove the directory 1458s 1458s Dir 1458s - includes Enumerable 1458s 1458s Dir.each_child 1458s - accepts an encoding keyword for the encoding of the entries 1458s - yields all names in an existing directory to the provided block 1458s - returns nil when successful 1458s - calls #to_path on non-String arguments 1458s - raises a SystemCallError if passed a nonexistent directory 1458s 1458s Dir.each_child when no block is given 1458s - returns an Enumerator 1458s 1458s Dir.each_child when no block is given returned Enumerator size 1458s - should return nil 1458s 1458s Dir#each_child 1458s - yields all names in an existing directory to the provided block 1458s - returns self when successful 1458s 1458s Dir#each_child when no block is given 1458s - returns an Enumerator 1458s 1458s Dir#each_child when no block is given returned Enumerator size 1458s - should return nil 1458s 1458s Dir#each 1458s - yields each directory entry in succession 1458s - returns the directory which remains open 1458s 1458s Dir#each when no block is given 1458s - returns an Enumerator 1458s 1458s Dir#each when no block is given returned Enumerator size 1458s - should return nil 1458s 1458s Dir#each 1459s - raises an IOError when called on a closed Dir instance 1459s 1459s Dir.[] 1459s - raises an Encoding::CompatibilityError if the argument encoding is not compatible with US-ASCII 1459s - calls #to_path to convert a pattern 1459s - raises an ArgumentError if the string contains \0 1459s - result is sorted by default 1459s - result is sorted with sort: true 1459s - sort: false returns same files 1459s - raises an ArgumentError if sort: is not true or false 1459s - matches non-dotfiles with '*' 1459s - returns empty array when empty pattern provided 1459s - matches regexp special + 1459s - matches directories with special characters when escaped 1459s - matches regexp special * 1459s - matches regexp special ? 1459s - matches regexp special | 1459s - matches files with backslashes in their name 1459s - matches regexp special ^ 1459s - matches regexp special $ 1459s - matches regexp special ( 1459s - matches regexp special ) 1459s - matches regexp special [ 1459s - matches regexp special ] 1459s - matches regexp special { 1459s - matches regexp special } 1459s - matches paths with glob patterns 1459s - matches dotfiles except .. with '.*' 1459s - matches non-dotfiles with '*' 1459s - matches dotfiles with '.*' 1459s - matches files with any ending with '*' 1459s - matches files with any middle with '*' 1459s - handles directories with globs 1459s - matches files with multiple '*' special characters 1459s - matches non-dotfiles in the current directory with '**' 1459s - matches dotfiles in the current directory except .. with '.**' 1459s - recursively matches any nondot subdirectories with '**/' 1459s - recursively matches any subdirectories except './' or '../' with '**/' from the base directory if that is specified 1459s - recursively matches any subdirectories including ./ with '.**/' 1459s - matches a single character except leading '.' with '?' 1459s - accepts multiple '?' characters in a pattern 1459s - matches any characters in a set with '[]' 1459s - matches any characters in a range with '[-]' 1459s - matches any characters except those in a set with '[^]' 1459s - matches any characters except those in a range with '[^-,,...}' 1459s - matches a set '{,,...}' which also uses a glob 1459s - accepts string sets with empty strings with {,,} 1459s - matches dot or non-dotfiles with '{,.}*' 1459s - respects the order of {} expressions, expanding left most first 1459s - respects the optional nested {} expressions 1459s - matches special characters by escaping with a backslash with '\' 1459s - recursively matches directories with '**/' 1459s - ignores matching through directories that doesn't exist 1459s - ignores matching only directories under an nonexistent path 1459s - matches UTF-8 paths 1459s 1459s Dir.[] :base option passed 1459s - matches entries only from within the specified directory 1459s - accepts both relative and absolute paths 1459s - returns [] if specified path does not exist 1459s - returns [] if specified path is a file 1459s - raises TypeError when cannot convert value to string 1459s - handles '' as current directory path 1459s - handles nil as current directory path 1459s 1459s Dir.[] 1459s - matches multiple recursives 1459s - ignores symlinks 1459s 1459s Dir.[] 1459s - calls #to_path to convert multiple patterns 1459s 1459s Dir.empty? 1459s - returns true for empty directories 1459s - returns false for non-empty directories 1459s - returns false for a non-directory 1459s - raises ENOENT for nonexistent directories 1459s 1459s Dir.entries 1459s - returns an Array of filenames in an existing directory including dotfiles 1459s - calls #to_path on non-String arguments 1459s - accepts an encoding keyword for the encoding of the entries 1459s - returns entries encoded with the filesystem encoding by default 1459s - returns entries encoded with the specified encoding 1459s - returns entries transcoded to the default internal encoding 1459s - raises a SystemCallError if called with a nonexistent directory 1459s 1459s Dir.exist? 1459s - returns true if the given directory exists 1459s - returns true for '.' 1459s - returns true for '..' 1459s - understands non-ASCII paths 1459s - understands relative paths 1459s - returns false if the given directory doesn't exist 1459s - doesn't require the name to have a trailing slash 1459s - doesn't expand paths 1459s - returns false if the argument exists but is a file 1459s - doesn't set $! when file doesn't exist 1459s - calls #to_path on non String arguments 1459s 1459s Dir#fileno 1459s - raises an error when not implemented on the platform 1459s 1459s Dir.foreach 1459s - yields all names in an existing directory to the provided block 1459s - returns nil when successful 1459s - calls #to_path on non-String arguments 1459s - raises a SystemCallError if passed a nonexistent directory 1459s - returns an Enumerator if no block given 1459s - accepts an encoding keyword for the encoding of the entries 1459s 1459s Dir.foreach when no block is given 1459s - returns an Enumerator 1459s 1459s Dir.foreach when no block is given returned Enumerator size 1459s - should return nil 1459s 1459s Dir.getwd 1459s - returns the current working directory 1459s - returns an absolute path 1459s - returns an absolute path even when chdir to a relative path 1459s - returns a String with the filesystem encoding 1459s 1459s Dir.glob 1459s - raises an Encoding::CompatibilityError if the argument encoding is not compatible with US-ASCII 1459s - calls #to_path to convert a pattern 1459s - raises an ArgumentError if the string contains \0 1459s - result is sorted by default 1459s - result is sorted with sort: true 1459s - sort: false returns same files 1459s - raises an ArgumentError if sort: is not true or false 1459s - matches non-dotfiles with '*' 1459s - returns empty array when empty pattern provided 1459s - matches regexp special + 1459s - matches directories with special characters when escaped 1459s - matches regexp special * 1459s - matches regexp special ? 1459s - matches regexp special | 1459s - matches files with backslashes in their name 1459s - matches regexp special ^ 1459s - matches regexp special $ 1459s - matches regexp special ( 1459s - matches regexp special ) 1459s - matches regexp special [ 1459s - matches regexp special ] 1459s - matches regexp special { 1459s - matches regexp special } 1459s - matches paths with glob patterns 1459s - matches dotfiles except .. with '.*' 1459s - matches non-dotfiles with '*' 1459s - matches dotfiles with '.*' 1459s - matches files with any ending with '*' 1459s - matches files with any middle with '*' 1459s - handles directories with globs 1459s - matches files with multiple '*' special characters 1459s - matches non-dotfiles in the current directory with '**' 1459s - matches dotfiles in the current directory except .. with '.**' 1459s - recursively matches any nondot subdirectories with '**/' 1459s - recursively matches any subdirectories except './' or '../' with '**/' from the base directory if that is specified 1459s - recursively matches any subdirectories including ./ with '.**/' 1459s - matches a single character except leading '.' with '?' 1459s - accepts multiple '?' characters in a pattern 1459s - matches any characters in a set with '[]' 1459s - matches any characters in a range with '[-]' 1459s - matches any characters except those in a set with '[^]' 1459s - matches any characters except those in a range with '[^-,,...}' 1459s - matches a set '{,,...}' which also uses a glob 1459s - accepts string sets with empty strings with {,,} 1459s - matches dot or non-dotfiles with '{,.}*' 1459s - respects the order of {} expressions, expanding left most first 1459s - respects the optional nested {} expressions 1459s - matches special characters by escaping with a backslash with '\' 1459s - recursively matches directories with '**/' 1459s - ignores matching through directories that doesn't exist 1459s - ignores matching only directories under an nonexistent path 1459s - matches UTF-8 paths 1459s 1459s Dir.glob :base option passed 1459s - matches entries only from within the specified directory 1459s - accepts both relative and absolute paths 1459s - returns [] if specified path does not exist 1459s - returns [] if specified path is a file 1459s - raises TypeError when cannot convert value to string 1459s - handles '' as current directory path 1459s - handles nil as current directory path 1459s 1459s Dir.glob 1459s - matches multiple recursives 1459s - ignores symlinks 1459s 1459s Dir.glob 1459s - can take an array of patterns 1459s - returns matching file paths when supplied :base keyword argument 1459s - calls #to_path to convert multiple patterns 1459s - matches both dot and non-dotfiles with '*' and option File::FNM_DOTMATCH 1459s - matches files with any beginning with '*' and option File::FNM_DOTMATCH 1459s - matches any files in the current directory with '**' and option File::FNM_DOTMATCH 1459s - recursively matches any subdirectories except './' or '../' with '**/' from the current directory and option File::FNM_DOTMATCH 1459s - recursively matches files and directories in nested dot subdirectory except . with 'nested/**/*' from the current directory and option File::FNM_DOTMATCH 1459s - recursively matches any subdirectories except './' or '../' with '**/' and option File::FNM_DOTMATCH 1459s - matches a list of paths by concatenating their individual results 1459s - preserves multiple /s before a ** 1459s - accepts a block and yields it with each elements 1459s - ignores non-dirs when traversing recursively 1459s - matches nothing when given an empty list of paths 1460s - handles infinite directory wildcards 1460s - handles **/** with base keyword argument 1460s - handles **/nondotfile with base keyword argument 1460s - handles **/nondotfile with base keyword argument and FNM_DOTMATCH 1460s - handles **/.dotfile with base keyword argument 1460s - handles **/.dotfile with base keyword argument and FNM_DOTMATCH 1460s - handles **/.* with base keyword argument and FNM_DOTMATCH 1460s - handles **/** with base keyword argument and FNM_DOTMATCH 1460s - handles **/*pattern* with base keyword argument and FNM_DOTMATCH 1460s - handles **/glob with base keyword argument and FNM_EXTGLOB 1460s - handles simple filename patterns 1460s - handles simple directory patterns 1460s - handles simple directory patterns applied to non-directories 1460s - matches the literal character '\' with option File::FNM_NOESCAPE 1460s - returns nil for directories current user has no permission to read 1460s - will not follow symlinks when recursively traversing directories 1460s 1460s Dir.home 1460s - raises an ArgumentError if the named user doesn't exist 1460s 1460s Dir.home when called without arguments 1460s - returns the current user's home directory, reading $HOME first 1460s - returns a non-frozen string 1460s - returns a string with the filesystem encoding 1460s - works even if HOME is unset 1460s 1460s Dir.home when called with the current user name 1460s - returns the named user's home directory, from the user database 1460s - returns a non-frozen string 1460s - returns a string with the filesystem encoding 1460s 1460s Dir.home when called with a nil user name 1460s - returns the current user's home directory, reading $HOME first 1460s 1460s Dir#initialize 1460s - calls #to_path on non-String arguments 1460s 1460s Dir#inspect 1460s - returns a String 1460s - includes the class name 1460s - includes the directory name 1460s 1460s Dir.mkdir 1460s - creates the named directory with the given permissions 1460s - calls #to_path on non-String path arguments 1460s - calls #to_int on non-Integer permissions argument 1460s - raises TypeError if non-Integer permissions argument does not have #to_int method 1460s - raises a SystemCallError if any of the directories in the path before the last does not exist 1460s - raises Errno::EEXIST if the specified directory already exists 1460s - raises Errno::EEXIST if the argument points to the existing file 1460s 1460s Dir.mkdir 1460s - raises a SystemCallError when lacking adequate permissions in the parent dir 1460s 1460s Dir.open 1460s - returns a Dir instance representing the specified directory 1460s - raises a SystemCallError if the directory does not exist 1460s - may take a block which is yielded to with the Dir instance 1460s - returns the value of the block if a block is given 1460s - closes the Dir instance when the block exits if given a block 1460s - closes the Dir instance when the block exits the block even due to an exception 1460s - calls #to_path on non-String arguments 1460s - accepts an options Hash 1460s - calls #to_hash to convert the options object 1460s - ignores the :encoding option if it is nil 1460s 1460s Dir#path 1460s - returns the path that was supplied to .new or .open 1460s - returns the path even when called on a closed Dir instance 1460s - returns a String with the same encoding as the argument to .open 1460s 1460s Dir#pos 1460s - returns an Integer representing the current position in the directory 1460s - returns a different Integer if moved from previous position 1460s 1460s Dir#pos 1460s - raises an IOError when called on a closed Dir instance 1460s 1460s Dir#pos= 1460s - moves the read position to a previously obtained position 1460s 1460s Dir.pwd 1460s - returns the current working directory 1460s - returns an absolute path 1460s - returns an absolute path even when chdir to a relative path 1460s - returns a String with the filesystem encoding 1460s 1460s Dir#read 1460s - returns the file name in the current seek position 1460s - returns nil when there are no more entries 1460s - returns each entry successively 1460s - returns all directory entries even when encoding conversion will fail 1460s - raises an IOError when called on a closed Dir instance 1460s 1460s Dir#rewind 1460s - resets the next read to start from the first entry 1460s - returns the Dir instance 1460s - raises an IOError when called on a closed Dir instance 1460s 1460s Dir.rmdir 1460s - removes empty directories 1460s - calls #to_path on non-String arguments 1460s - raises an Errno::ENOTEMPTY when trying to remove a nonempty directory 1460s - raises an Errno::ENOENT when trying to remove a non-existing directory 1460s - raises an Errno::ENOTDIR when trying to remove a non-directory 1460s - raises an Errno::EACCES if lacking adequate permissions to remove the directory 1460s 1460s Dir#seek 1460s - returns the Dir instance 1460s - moves the read position to a previously obtained position 1460s 1460s Dir#tell 1460s - returns an Integer representing the current position in the directory 1460s - returns a different Integer if moved from previous position 1460s - raises an IOError when called on a closed Dir instance 1460s 1460s Dir#to_path 1460s - returns the path that was supplied to .new or .open 1460s - returns the path even when called on a closed Dir instance 1460s - returns a String with the same encoding as the argument to .open 1460s 1460s Dir.unlink 1460s - removes empty directories 1460s - calls #to_path on non-String arguments 1460s - raises an Errno::ENOTEMPTY when trying to remove a nonempty directory 1460s - raises an Errno::ENOENT when trying to remove a non-existing directory 1460s - raises an Errno::ENOTDIR when trying to remove a non-directory 1460s - raises an Errno::EACCES if lacking adequate permissions to remove the directory 1460s 1460s Encoding#_dump 1460s - needs to be reviewed for spec completeness 1460s 1460s Encoding._load 1460s - needs to be reviewed for spec completeness 1460s 1460s Encoding.aliases 1460s - returns a Hash 1460s - has Strings as keys 1460s - has Strings as values 1460s - has alias names as its keys 1460s - has the names of the aliased encoding as its values 1460s - has an 'external' key with the external default encoding as its value 1460s - has a 'locale' key and its value equals the name of the encoding found by the locale charmap 1460s - only contains valid aliased encodings 1460s 1460s Encoding#ascii_compatible? 1460s - returns true if self represents an ASCII-compatible encoding 1460s - returns false if self does not represent an ASCII-compatible encoding 1460s 1460s Encoding.compatible? String, String when the first's Encoding is valid US-ASCII 1460s - returns US-ASCII when the second's is US-ASCII 1460s - returns US-ASCII if the second String is BINARY and ASCII only 1460s - returns BINARY if the second String is BINARY but not ASCII only 1460s - returns US-ASCII if the second String is UTF-8 and ASCII only 1460s - returns UTF-8 if the second String is UTF-8 but not ASCII only 1460s 1460s Encoding.compatible? String, String when the first's Encoding is ASCII compatible and ASCII only 1460s - returns the first's Encoding if the second is ASCII compatible and ASCII only 1460s - returns the first's Encoding if the second is ASCII compatible and ASCII only 1460s - returns the second's Encoding if the second is ASCII compatible but not ASCII only 1460s - returns nil if the second's Encoding is not ASCII compatible 1460s 1460s Encoding.compatible? String, String when the first's Encoding is ASCII compatible but not ASCII only 1460s - returns the first's Encoding if the second's is valid US-ASCII 1460s - returns the first's Encoding if the second's is UTF-8 and ASCII only 1460s - returns nil if the second encoding is ASCII compatible but neither String's encoding is ASCII only 1460s 1460s Encoding.compatible? String, String when the first's Encoding is not ASCII compatible 1460s - returns nil when the second String is US-ASCII 1460s - returns nil when the second String is BINARY and ASCII only 1460s - returns nil when the second String is BINARY but not ASCII only 1460s - returns the Encoding when the second's Encoding is not ASCII compatible but the same as the first's Encoding 1460s 1460s Encoding.compatible? String, String when the first's Encoding is invalid 1460s - returns the first's Encoding when the second's Encoding is US-ASCII 1460s - returns the first's Encoding when the second String is ASCII only 1460s - returns nil when the second's Encoding is BINARY but not ASCII only 1460s - returns nil when the second's Encoding is invalid and ASCII only 1460s - returns nil when the second's Encoding is invalid and not ASCII only 1460s - returns the Encoding when the second's Encoding is invalid but the same as the first 1460s 1460s Encoding.compatible? String, String when the first String is empty and the second is not and the first's Encoding is ASCII compatible 1460s - returns the first's encoding when the second String is ASCII only 1460s - returns the second's encoding when the second String is not ASCII only 1460s 1460s Encoding.compatible? String, String when the first String is empty and the second is not when the first's Encoding is not ASCII compatible 1460s - returns the second string's encoding 1460s 1460s Encoding.compatible? String, String when the second String is empty 1460s - returns the first Encoding 1460s 1460s Encoding.compatible? String, Regexp 1460s - returns US-ASCII if both are US-ASCII 1460s - returns the String's Encoding if it is not US-ASCII but both are ASCII only 1460s - returns the String's Encoding if the String is not ASCII only 1460s 1460s Encoding.compatible? String, Symbol 1460s - returns US-ASCII if both are ASCII only 1460s - returns the String's Encoding if it is not US-ASCII but both are ASCII only 1460s - returns the String's Encoding if the String is not ASCII only 1460s 1460s Encoding.compatible? String, Encoding 1460s - returns nil if the String's encoding is not ASCII compatible 1460s - returns nil if the Encoding is not ASCII compatible 1460s - returns the String's encoding if the Encoding is US-ASCII 1460s - returns the Encoding if the String's encoding is ASCII compatible and the String is ASCII only 1460s - returns nil if the String's encoding is ASCII compatible but the string is not ASCII only 1460s 1460s Encoding.compatible? Regexp, String 1460s - returns US-ASCII if both are US-ASCII 1460s 1460s Encoding.compatible? Regexp, Regexp 1460s - returns US-ASCII if both are US-ASCII 1460s - returns the first's Encoding if it is not US-ASCII and not ASCII only 1460s 1460s Encoding.compatible? Regexp, Symbol 1460s - returns US-ASCII if both are US-ASCII 1460s - returns the first's Encoding if it is not US-ASCII and not ASCII only 1460s 1460s Encoding.compatible? Symbol, String 1460s - returns US-ASCII if both are ASCII only 1460s 1460s Encoding.compatible? Symbol, Regexp 1460s - returns US-ASCII if both are US-ASCII 1460s - returns the Regexp's Encoding if it is not US-ASCII and not ASCII only 1460s 1460s Encoding.compatible? Symbol, Symbol 1460s - returns US-ASCII if both are US-ASCII 1460s - returns the first's Encoding if it is not ASCII only 1460s 1460s Encoding.compatible? Encoding, Encoding 1460s - returns nil if one of the encodings is a dummy encoding 1460s - returns nil if one of the encodings is not US-ASCII 1460s - returns the first if the second is US-ASCII 1460s - returns the Encoding if both are the same 1460s 1460s Encoding.compatible? Object, Object 1460s - returns nil for Object, String 1460s - returns nil for Object, Regexp 1460s - returns nil for Object, Symbol 1460s - returns nil for String, Object 1460s - returns nil for Regexp, Object 1460s - returns nil for Symbol, Object 1460s 1460s Encoding::Converter.asciicompat_encoding 1460s - accepts an encoding name as a String argument 1460s - coerces non-String/Encoding objects with #to_str 1460s - accepts an Encoding object as an argument 1460s - returns a corresponding ASCII compatible encoding for ASCII-incompatible encodings 1460s - returns nil when the given encoding is ASCII compatible 1460s - handles encoding names who resolve to nil encodings 1460s 1460s Encoding::Converter::INVALID_MASK 1460s - exists 1460s - has an Integer value 1460s 1460s Encoding::Converter::INVALID_REPLACE 1460s - exists 1460s - has an Integer value 1460s 1460s Encoding::Converter::UNDEF_MASK 1460s - exists 1460s - has an Integer value 1460s 1460s Encoding::Converter::UNDEF_REPLACE 1460s - exists 1460s - has an Integer value 1460s 1460s Encoding::Converter::UNDEF_HEX_CHARREF 1460s - exists 1460s - has an Integer value 1460s 1460s Encoding::Converter::PARTIAL_INPUT 1460s - exists 1460s - has an Integer value 1460s 1460s Encoding::Converter::AFTER_OUTPUT 1460s - exists 1460s - has an Integer value 1460s 1460s Encoding::Converter::UNIVERSAL_NEWLINE_DECORATOR 1460s - exists 1460s - has an Integer value 1460s 1460s Encoding::Converter::CRLF_NEWLINE_DECORATOR 1460s - exists 1460s - has an Integer value 1460s 1460s Encoding::Converter::CR_NEWLINE_DECORATOR 1460s - exists 1460s - has an Integer value 1460s 1460s Encoding::Converter::XML_TEXT_DECORATOR 1460s - exists 1460s - has an Integer value 1460s 1460s Encoding::Converter::XML_ATTR_CONTENT_DECORATOR 1460s - exists 1460s - has an Integer value 1460s 1460s Encoding::Converter::XML_ATTR_QUOTE_DECORATOR 1460s - exists 1460s - has an Integer value 1460s 1460s Encoding::Converter#convert 1460s - returns a String 1460s - sets the encoding of the result to the target encoding 1460s - transcodes the given String to the target encoding 1460s - allows Strings of different encodings to the source encoding 1460s - reuses the given encoding pair if called multiple times 1460s - raises UndefinedConversionError if the String contains characters invalid for the target encoding 1460s - raises an ArgumentError if called on a finished stream 1460s 1460s Encoding::Converter#convpath 1460s - returns an Array with a single element if there is a direct converter 1460s - returns multiple encoding pairs when direct conversion is impossible 1460s - indicates if crlf_newline conversion would occur 1460s 1460s Encoding::Converter#destination_encoding 1460s - returns the destination encoding as an Encoding object 1460s 1460s Encoding::Converter#finish 1460s - returns a String 1460s - returns an empty String if there is nothing more to convert 1460s - returns the last part of the converted String if it hasn't already 1460s - returns a String in the destination encoding 1460s - returns an empty String if self was not given anything to convert 1460s - returns an empty String on subsequent invocations 1460s 1460s Encoding::Converter#insert_output 1460s - needs to be reviewed for spec completeness 1460s 1460s Encoding::Converter#inspect 1460s - includes the source and destination encodings in the return value 1460s 1460s Encoding::Converter#last_error 1460s - returns nil when the no conversion has been attempted 1460s - returns nil when the last conversion did not produce an error 1460s - returns nil when #primitive_convert last returned :destination_buffer_full 1460s - returns nil when #primitive_convert last returned :finished 1460s - returns nil if the last conversion succeeded but the penultimate failed 1460s - returns an Encoding::InvalidByteSequenceError when #primitive_convert last returned :invalid_byte_sequence 1460s - returns an Encoding::UndefinedConversionError when #primitive_convert last returned :undefined_conversion 1460s - returns an Encoding::InvalidByteSequenceError when #primitive_convert last returned :incomplete_input 1460s - returns an Encoding::InvalidByteSequenceError when the last call to #convert produced one 1460s - returns an Encoding::UndefinedConversionError when the last call to #convert produced one 1460s - returns the last error of #convert with a message showing the transcoding path 1460s 1460s Encoding::Converter.new 1460s - accepts a String for the source encoding 1460s - accepts a String for the destination encoding 1460s - accepts an Encoding object for the source encoding 1460s - accepts an Encoding object for the destination encoding 1460s - raises an Encoding::ConverterNotFoundError if both encodings are the same 1460s - calls #to_str to convert the source encoding argument to an encoding name 1460s - calls #to_str to convert the destination encoding argument to an encoding name 1460s - sets replacement from the options Hash 1460s - calls #to_hash to convert the options argument to a Hash if not an Integer 1460s - calls #to_str to convert the replacement object to a String 1460s - raises a TypeError if #to_str does not return a String 1460s - raises a TypeError if passed true for the replacement object 1460s - raises a TypeError if passed false for the replacement object 1460s - raises a TypeError if passed an Integer for the replacement object 1460s - accepts an empty String for the replacement object 1460s 1460s Encoding::Converter.new when passed nil for the replacement object when the destination encoding is not UTF-8 1460s - sets the replacement String to '?' 1460s - sets the replacement String encoding to US-ASCII 1460s - sets the replacement String to '\uFFFD' 1460s - sets the replacement String encoding to UTF-8 1460s 1460s Encoding::Converter#primitive_convert 1460s - accepts a nil source buffer 1460s - accepts a String as the source buffer 1460s - raises FrozenError when the destination buffer is a frozen String 1460s - accepts nil for the destination byte offset 1460s - accepts an integer for the destination byte offset 1460s - calls #to_int to convert the destination byte offset 1460s - raises an ArgumentError if the destination byte offset is greater than the bytesize of the destination buffer 1460s - uses the destination byte offset to determine where to write the result in the destination buffer 1460s - accepts nil for the destination bytesize 1460s - accepts an integer for the destination bytesize 1460s - allows a destination bytesize value greater than the bytesize of the source buffer 1460s - allows a destination bytesize value less than the bytesize of the source buffer 1460s - calls #to_int to convert the destination byte size 1460s - uses destination bytesize as the maximum bytesize of the destination buffer 1460s - allows a destination buffer of unlimited size if destination bytesize is nil 1460s - accepts an options hash 1460s - sets the destination buffer's encoding to the destination encoding if the conversion succeeded 1460s - sets the destination buffer's encoding to the destination encoding if the conversion failed 1460s - removes the undefined part from the source buffer when returning :undefined_conversion 1460s - returns :incomplete_input when source buffer ends unexpectedly and :partial_input isn't specified 1460s - clears the source buffer when returning :incomplete_input 1460s - returns :source_buffer_empty when source buffer ends unexpectedly and :partial_input is true 1460s - clears the source buffer when returning :source_buffer_empty 1460s - returns :undefined_conversion when a character in the source buffer is not representable in the output encoding 1460s - returns :invalid_byte_sequence when an invalid byte sequence was found in the source buffer 1460s - removes consumed and erroneous bytes from the source buffer when returning :invalid_byte_sequence 1460s - returns :finished when the conversion succeeded 1460s - clears the source buffer when returning :finished 1460s - returns :destination_buffer_full when the destination buffer is too small 1460s - clears the source buffer when returning :destination_buffer_full 1460s - keeps removing invalid bytes from the source buffer 1460s - reuses read-again bytes after the first error 1460s 1460s Encoding::Converter#primitive_errinfo 1460s - returns [:source_buffer_empty,nil,nil,nil,nil] when no conversion has been attempted 1460s - returns [:finished,nil,nil,nil,nil] when #primitive_convert last returned :finished 1460s - returns [:source_buffer_empty,nil,nil,nil, nil] when #convert last succeeded 1460s - returns [:destination_buffer_full,nil,nil,nil,nil] when #primitive_convert last returned :destination_buffer_full 1460s - returns the status of the last primitive conversion, even if it was successful and the previous one wasn't 1460s - returns the state, source encoding, target encoding, and the erroneous bytes when #primitive_convert last returned :undefined_conversion 1460s - returns the state, source encoding, target encoding, and erroneous bytes when #primitive_convert last returned :incomplete_input 1460s - returns the state, source encoding, target encoding, erroneous bytes, and the read-again bytes when #primitive_convert last returned :invalid_byte_sequence 1460s - returns the state, source encoding, target encoding, erroneous bytes, and the read-again bytes when #convert last raised InvalidByteSequenceError 1460s - returns the state, source encoding, target encoding, erroneous bytes, and the read-again bytes when #finish last raised InvalidByteSequenceError 1460s 1460s Encoding::Converter#putback 1460s - returns a String 1460s - returns a String in the source encoding 1460s - returns the bytes buffered due to an :invalid_byte_sequence error 1460s - allows conversion to be resumed after an :invalid_byte_sequence 1460s - returns an empty String when there are no more bytes to put back 1460s - returns the problematic bytes for UTF-16LE 1460s - accepts an integer argument corresponding to the number of bytes to be put back 1460s 1460s Encoding::Converter#replacement 1460s - returns '?' in US-ASCII when the destination encoding is not UTF-8 1460s - returns \uFFFD when the destination encoding is UTF-8 1460s 1460s Encoding::Converter#replacement= 1460s - accepts a String argument 1460s - accepts a String argument of arbitrary length 1460s - raises a TypeError if assigned a non-String argument 1460s - sets #replacement 1460s - raises an UndefinedConversionError is the argument cannot be converted into the destination encoding 1460s - does not change the replacement character if the argument cannot be converted into the destination encoding 1460s - uses the replacement character 1460s 1460s Encoding::Converter.search_convpath 1460s - returns an Array with a single element if there is a direct converter 1460s - returns multiple encoding pairs when direct conversion is impossible 1460s - indicates if crlf_newline conversion would occur 1460s - raises an Encoding::ConverterNotFoundError if no conversion path exists 1460s 1460s Encoding::Converter#source_encoding 1460s - returns the source encoding as an Encoding object 1460s 1460s Encoding#dummy? 1460s - returns false for proper encodings 1460s - returns true for dummy encodings 1460s 1460s Encoding.find 1460s - returns the corresponding Encoding object if given a valid encoding name 1460s - returns the corresponding Encoding object if given a valid alias name 1460s - raises a TypeError if passed a Symbol 1460s - returns the passed Encoding object 1460s - accepts encoding names as Strings 1460s - accepts any object as encoding name, if it responds to #to_str 1460s - is case insensitive 1460s - raises an ArgumentError if the given encoding does not exist 1460s - supports the 'locale' encoding alias 1460s - returns default external encoding for the 'external' encoding alias 1460s - returns default internal encoding for the 'internal' encoding alias 1460s - uses default external encoding for the 'filesystem' encoding alias 1460s 1460s Encoding#inspect 1460s - returns a String 1460s - returns # for a non-dummy encoding named 'name' 1460s - returns # for a dummy encoding named 'name' 1460s 1460s Encoding::InvalidByteSequenceError#destination_encoding_name 1460s - returns a String 1460s - is equal to the destination encoding name of the object that raised it 1460s 1460s Encoding::InvalidByteSequenceError#destination_encoding 1460s - returns an Encoding object 1460s - is equal to the destination encoding of the object that raised it 1460s 1460s Encoding::InvalidByteSequenceError#error_bytes 1460s - returns a String 1460s - returns the bytes that caused the exception 1460s - uses BINARY as the encoding 1460s 1460s Encoding::InvalidByteSequenceError#incomplete_input? 1460s - returns nil by default 1460s - returns true if #primitive_convert returned :incomplete_input for the same data 1460s - returns false if #primitive_convert returned :invalid_byte_sequence for the same data 1460s 1460s Encoding::InvalidByteSequenceError#readagain_bytes 1460s - returns a String 1460s - returns the bytes to be read again 1460s - uses BINARY as the encoding 1460s 1460s Encoding::UndefinedConversionError#source_encoding_name 1460s - returns a String 1460s - is equal to the source encoding name of the object that raised it 1460s - is equal to the source encoding at the stage of the conversion path where the error occurred 1460s 1460s Encoding::InvalidByteSequenceError#source_encoding 1460s - returns an Encoding object 1460s - is equal to the source encoding of the object that raised it 1460s - is equal to the source encoding at the stage of the conversion path where the error occurred 1460s 1460s Encoding.list 1460s - returns an Array 1460s - returns an Array of Encoding objects 1460s - returns each encoding only once 1460s - includes the default external encoding 1460s - does not include any alias names 1460s - includes all aliased encodings 1460s - includes dummy encodings 1460s - includes UTF-8 encoding 1460s - includes CESU-8 encoding 1460s - updates the list when #find is used to load a new encoding 1460s 1460s Encoding.locale_charmap 1460s - returns a String 1460s - is unaffected by assigning to ENV['LC_ALL'] in the same process 1460s 1460s Encoding.name_list 1460s - returns an Array 1460s - returns encoding names as Strings 1460s - includes all aliases 1460s - includes all non-dummy encodings 1460s 1460s Encoding#name 1460s - returns a String 1460s - uniquely identifies an encoding 1460s 1460s Encoding#names 1460s - returns an Array 1460s - returns names as Strings 1460s - returns #name as the first value 1461s - includes any aliases the encoding has 1461s 1461s Encoding#to_s 1461s - returns a String 1461s - uniquely identifies an encoding 1461s 1461s Encoding::UndefinedConversionError#destination_encoding_name 1461s - returns a String 1461s - is equal to the destination encoding name of the object that raised it 1461s 1461s Encoding::UndefinedConversionError#destination_encoding 1461s - returns an Encoding object 1461s - is equal to the destination encoding of the object that raised it 1461s 1461s Encoding::UndefinedConversionError#error_char 1461s - returns a String 1461s - returns the one-character String that caused the exception 1461s - uses the source encoding 1461s 1461s Encoding::UndefinedConversionError#source_encoding_name 1461s - returns a String 1461s - is equal to the source encoding name of the object that raised it 1461s - is equal to the source encoding at the stage of the conversion path where the error occurred 1461s 1461s Encoding::UndefinedConversionError#source_encoding 1461s - returns an Encoding object 1461s - is equal to the source encoding of the object that raised it 1461s - is equal to the source encoding at the stage of the conversion path where the error occurred 1461s 1461s Enumerable#all? 1461s - always returns true on empty enumeration 1461s - raises an ArgumentError when more than 1 argument is provided 1461s - does not hide exceptions out of #each 1461s 1461s Enumerable#all? with no block 1461s - returns true if no elements are false or nil 1461s - returns false if there are false or nil elements 1461s - gathers whole arrays as elements when each yields multiple 1461s 1461s Enumerable#all? with block 1461s - returns true if the block never returns false or nil 1461s - returns false if the block ever returns false or nil 1461s - stops iterating once the return value is determined 1461s - does not hide exceptions out of the block 1461s - gathers initial args as elements when each yields multiple 1461s - yields multiple arguments when each yields multiple 1461s 1461s Enumerable#all? when given a pattern argument 1461s - calls `===` on the pattern the return value 1461s - always returns true on empty enumeration 1461s - does not hide exceptions out of #each 1461s - returns true if the pattern never returns false or nil 1461s - returns false if the pattern ever returns false or nil 1461s - does not hide exceptions out of pattern#=== 1461s - calls the pattern with gathered array when yielded with multiple arguments 1461s - ignores the block if there is an argument 1461s 1461s Enumerable#any? 1461s - always returns false on empty enumeration 1461s - raises an ArgumentError when more than 1 argument is provided 1461s - does not hide exceptions out of #each 1461s 1461s Enumerable#any? with no block 1461s - returns true if any element is not false or nil 1461s - returns false if all elements are false or nil 1461s - gathers whole arrays as elements when each yields multiple 1461s 1461s Enumerable#any? with block 1461s - returns true if the block ever returns other than false or nil 1461s - returns false if the block never returns other than false or nil 1461s - stops iterating once the return value is determined 1461s - does not hide exceptions out of the block 1461s - gathers initial args as elements when each yields multiple 1461s - yields multiple arguments when each yields multiple 1461s 1461s Enumerable#any? when given a pattern argument 1461s - calls `===` on the pattern the return value 1461s - always returns false on empty enumeration 1461s - does not hide exceptions out of #each 1461s - returns true if the pattern ever returns a truthy value 1461s - returns false if the block never returns other than false or nil 1461s - does not hide exceptions out of pattern#=== 1461s - calls the pattern with gathered array when yielded with multiple arguments 1461s - ignores the block if there is an argument 1461s 1461s Enumerable#chain 1461s - returns a chain of self and provided enumerables 1461s - returns an Enumerator::Chain if given a block 1461s 1461s Enumerable#chunk 1461s - returns an Enumerator if called without a block 1461s - returns an Enumerator if given a block 1461s - yields the current element and the current chunk to the block 1461s - returns elements of the Enumerable in an Array of Arrays, [v, ary], where 'ary' contains the consecutive elements for which the block returned the value 'v' 1461s - returns a partitioned Array of values 1461s - returns elements for which the block returns :_alone in separate Arrays 1461s - yields Arrays as a single argument to a rest argument 1461s - does not return elements for which the block returns :_separator 1461s - does not return elements for which the block returns nil 1461s - raises a RuntimeError if the block returns a Symbol starting with an underscore other than :_alone or :_separator 1461s - does not accept arguments 1461s - returned Enumerator size returns nil 1461s 1461s Enumerable#chunk_while when given a block 1461s - returns an enumerator 1461s - splits chunks between adjacent elements i and j where the block returns false 1461s - calls the block for length of the receiver enumerable minus one times 1461s 1461s Enumerable#chunk_while when not given a block 1461s - raises an ArgumentError 1461s 1461s Enumerable#chunk_while on a single-element array 1461s - ignores the block and returns an enumerator that yields [element] 1461s 1461s Enumerable#collect_concat 1461s - yields elements to the block and flattens one level 1461s - appends non-Array elements that do not define #to_ary 1461s - concatenates the result of calling #to_ary if it returns an Array 1461s - does not call #to_a 1461s - appends an element that defines #to_ary that returns nil 1461s - raises a TypeError if an element defining #to_ary does not return an Array or nil 1461s - returns an enumerator when no block given 1461s 1461s Enumerable#collect_concat Enumerable with size when no block is given returned Enumerator 1461s - size returns the enumerable size 1461s 1461s Enumerable#collect_concat Enumerable with no size when no block is given returned Enumerator 1461s - size returns nil 1461s 1461s Enumerable#collect 1461s - returns a new array with the results of passing each element to block 1461s - passes through the values yielded by #each_with_index 1461s - gathers initial args as elements when each yields multiple 1461s - only yields increasing values for a Range 1461s - returns an enumerator when no block given 1461s - reports the same arity as the given block 1461s - yields an Array of 2 elements for a Hash when block arity is 1 1461s - yields 2 arguments for a Hash when block arity is 2 1461s - raises an error for a Hash when an arity enforcing block of arity >2 is passed in 1461s - calls the each method on sub-classes 1461s 1461s Enumerable#collect Enumerable with size when no block is given returned Enumerator 1461s - size returns the enumerable size 1461s 1461s Enumerable#collect Enumerable with no size when no block is given returned Enumerator 1461s - size returns nil 1461s 1461s Enumerable#compact 1461s - returns array without nil elements 1461s 1461s Enumerable#count 1461s - counts nils if given nil as an argument 1461s - accepts an argument for comparison using == 1461s - uses a block for comparison 1461s - ignores the block when given an argument 1461s 1461s Enumerable#count when no argument or a block 1461s - returns size 1461s 1461s Enumerable#count when no argument or a block with a custom size method 1461s - ignores the custom size method 1461s 1461s Enumerable#count when each yields multiple values 1461s - gathers initial args as elements 1461s - accepts an argument for comparison using == 1461s 1461s Enumerable#cycle passed no argument or nil 1461s - loops indefinitely 1461s - returns nil if there are no elements 1461s - yields successive elements of the array repeatedly 1461s - calls each at most once 1461s - yields only when necessary 1461s 1461s Enumerable#cycle passed a number n as an argument 1461s - returns nil and does nothing for non positive n 1461s - calls each at most once 1461s - yields only when necessary 1461s - tries to convert n to an Integer using #to_int 1461s - raises a TypeError when the passed n cannot be coerced to Integer 1461s - raises an ArgumentError if more arguments are passed 1461s - gathers whole arrays as elements when each yields multiple 1461s 1461s Enumerable#cycle Enumerable with size when no block is given returned Enumerator size 1461s - should be the result of multiplying the enumerable size by the argument passed 1461s - should be zero when the argument passed is 0 or less 1461s - should be Float::INFINITY when no argument is passed 1461s 1461s Enumerable#cycle Enumerable with no size when no block is given returned Enumerator 1461s - size returns nil 1461s 1461s Enumerable#detect 1461s - passes each entry in enum to block while block when block is false 1461s - returns nil when the block is false and there is no ifnone proc given 1461s - returns the first element for which the block is not false 1461s - returns the value of the ifnone proc if the block is false 1461s - doesn't call the ifnone proc if an element is found 1461s - calls the ifnone proc only once when the block is false 1461s - calls the ifnone proc when there are no elements 1461s - ignores the ifnone argument when nil 1461s - passes through the values yielded by #each_with_index 1461s - returns an enumerator when no block given 1461s - passes the ifnone proc to the enumerator 1461s - gathers whole arrays as elements when each yields multiple 1461s 1461s Enumerable#detect Enumerable with size when no block is given returned Enumerator 1461s - size returns nil 1461s 1461s Enumerable#detect Enumerable with no size when no block is given returned Enumerator 1461s - size returns nil 1461s 1461s Enumerable#drop 1461s - requires exactly one argument 1461s 1461s Enumerable#drop passed a number n as an argument 1461s - raises ArgumentError if n < 0 1461s - tries to convert n to an Integer using #to_int 1461s - returns [] for empty enumerables 1461s - returns [] if dropping all 1461s - raises a TypeError when the passed n cannot be coerced to Integer 1461s 1461s Enumerable#drop_while 1461s - returns an Enumerator if no block given 1461s - returns no/all elements for {true/false} block 1461s - accepts returns other than true/false 1461s - passes elements to the block until the first false 1461s - will only go through what's needed 1461s - doesn't return self when it could 1461s - gathers whole arrays as elements when each yields multiple 1461s 1461s Enumerable#drop_while Enumerable with size when no block is given returned Enumerator 1461s - size returns nil 1461s 1461s Enumerable#drop_while Enumerable with no size when no block is given returned Enumerator 1461s - size returns nil 1461s 1461s Enumerable#each_cons 1461s - passes element groups to the block 1461s - raises an ArgumentError if there is not a single parameter > 0 1461s - tries to convert n to an Integer using #to_int 1461s - works when n is >= full length 1461s - yields only as much as needed 1461s - gathers whole arrays as elements when each yields multiple 1461s - returns self when a block is given 1461s 1461s Enumerable#each_cons when no block is given 1461s - returns an enumerator 1461s 1461s Enumerable#each_cons when no block is given Enumerable with size returned Enumerator size 1461s - returns enum size - each_cons argument + 1 1461s - returns 0 when the argument is larger than self 1461s - returns 0 when the enum is empty 1461s 1461s Enumerable#each_cons when no block is given Enumerable with no size when no block is given returned Enumerator 1461s - size returns nil 1461s 1461s Enumerable#each_entry 1461s - yields multiple arguments as an array 1461s - returns an enumerator if no block 1461s - passes through the values yielded by #each_with_index 1461s - raises an ArgumentError when extra arguments 1461s - passes extra arguments to #each 1461s 1461s Enumerable#each_entry Enumerable with size when no block is given returned Enumerator 1461s - size returns the enumerable size 1461s 1461s Enumerable#each_entry Enumerable with no size when no block is given returned Enumerator 1461s - size returns nil 1461s 1461s Enumerable#each_slice 1461s - passes element groups to the block 1461s - raises an ArgumentError if there is not a single parameter > 0 1461s - tries to convert n to an Integer using #to_int 1461s - works when n is >= full length 1461s - yields only as much as needed 1461s - returns an enumerator if no block 1461s - returns self when a block is given 1461s - gathers whole arrays as elements when each yields multiple 1461s 1461s Enumerable#each_slice when no block is given 1461s - returns an enumerator 1461s 1461s Enumerable#each_slice when no block is given Enumerable with size returned Enumerator size 1461s - returns the ceil of Enumerable size divided by the argument value 1461s - returns 0 when the Enumerable is empty 1461s 1461s Enumerable#each_slice when no block is given Enumerable with no size when no block is given returned Enumerator 1461s - size returns nil 1461s 1461s Enumerable#each_with_index 1461s - passes each element and its index to block 1461s - provides each element to the block 1461s - provides each element to the block and its index 1461s - binds splat arguments properly 1461s - returns an enumerator if no block 1461s - passes extra parameters to each 1461s 1461s Enumerable#each_with_index Enumerable with size when no block is given returned Enumerator 1461s - size returns the enumerable size 1461s 1461s Enumerable#each_with_index Enumerable with no size when no block is given returned Enumerator 1461s - size returns nil 1461s 1461s Enumerable#each_with_object 1461s - passes each element and its argument to the block 1461s - returns an enumerator if no block 1461s - gathers whole arrays as elements when each yields multiple 1461s 1461s Enumerable#each_with_object Enumerable with size when no block is given returned Enumerator 1461s - size returns the enumerable size 1461s 1461s Enumerable#each_with_object Enumerable with no size when no block is given returned Enumerator 1461s - size returns nil 1461s 1461s Enumerable#entries 1461s - returns an array containing the elements 1461s - passes through the values yielded by #each_with_index 1461s - passes arguments to each 1461s 1461s Enumerable#filter_map 1461s - returns an empty array if there are no elements 1461s - returns an array with truthy results of passing each element to block 1461s - returns an enumerator when no block given 1461s 1461s Enumerable#filter 1461s - returns all elements for which the block is not false 1461s - returns an enumerator when no block given 1461s - passes through the values yielded by #each_with_index 1461s - gathers whole arrays as elements when each yields multiple 1461s 1461s Enumerable#filter Enumerable with size when no block is given returned Enumerator 1461s - size returns the enumerable size 1461s 1461s Enumerable#filter Enumerable with no size when no block is given returned Enumerator 1461s - size returns nil 1461s 1461s Enumerable#find_all 1461s - returns all elements for which the block is not false 1461s - returns an enumerator when no block given 1461s - passes through the values yielded by #each_with_index 1461s - gathers whole arrays as elements when each yields multiple 1461s 1461s Enumerable#find_all Enumerable with size when no block is given returned Enumerator 1461s - size returns the enumerable size 1461s 1461s Enumerable#find_all Enumerable with no size when no block is given returned Enumerator 1461s - size returns nil 1461s 1461s Enumerable#find_index 1461s - passes each entry in enum to block while block when block is false 1461s - returns nil when the block is false 1461s - returns the first index for which the block is not false 1461s - returns the first index found 1461s - returns nil when the element not found 1461s - ignores the block if an argument is given 1461s - returns an Enumerator if no block given 1461s - uses #== for testing equality 1461s 1461s Enumerable#find_index without block 1461s - gathers whole arrays as elements when each yields multiple 1461s 1461s Enumerable#find_index with block given a single yield parameter 1461s - passes first element to the parameter 1461s 1461s Enumerable#find_index with block given a greedy yield parameter 1461s - passes a gathered array to the parameter 1461s 1461s Enumerable#find_index Enumerable with size when no block is given returned Enumerator 1461s - size returns nil 1461s 1461s Enumerable#find_index Enumerable with no size when no block is given returned Enumerator 1461s - size returns nil 1461s 1461s Enumerable#find 1461s - passes each entry in enum to block while block when block is false 1461s - returns nil when the block is false and there is no ifnone proc given 1461s - returns the first element for which the block is not false 1461s - returns the value of the ifnone proc if the block is false 1461s - doesn't call the ifnone proc if an element is found 1461s - calls the ifnone proc only once when the block is false 1461s - calls the ifnone proc when there are no elements 1461s - ignores the ifnone argument when nil 1461s - passes through the values yielded by #each_with_index 1461s - returns an enumerator when no block given 1461s - passes the ifnone proc to the enumerator 1461s - gathers whole arrays as elements when each yields multiple 1461s 1461s Enumerable#find Enumerable with size when no block is given returned Enumerator 1461s - size returns nil 1461s 1461s Enumerable#find Enumerable with no size when no block is given returned Enumerator 1461s - size returns nil 1461s 1461s Enumerable#first 1461s - returns the first element 1461s - returns nil if self is empty 1461s - returns a gathered array from yield parameters 1461s - raises a RangeError when passed a Bignum 1461s 1461s Enumerable#first when passed an argument 1461s - returns the first count elements if given a count 1461s - returns an empty array when passed count on an empty array 1461s - returns an empty array when passed count == 0 1461s - returns an array containing the first element when passed count == 1 1461s - raises an ArgumentError when count is negative 1461s - returns the entire array when count > length 1461s - tries to convert the passed argument to an Integer using #to_int 1461s - raises a TypeError if the passed argument is not numeric 1461s - gathers whole arrays as elements when each yields multiple 1461s - consumes only what is needed 1461s 1461s Enumerable#flat_map 1461s - yields elements to the block and flattens one level 1461s - appends non-Array elements that do not define #to_ary 1461s - concatenates the result of calling #to_ary if it returns an Array 1461s - does not call #to_a 1461s - appends an element that defines #to_ary that returns nil 1461s - raises a TypeError if an element defining #to_ary does not return an Array or nil 1461s - returns an enumerator when no block given 1461s 1461s Enumerable#flat_map Enumerable with size when no block is given returned Enumerator 1461s - size returns the enumerable size 1461s 1461s Enumerable#flat_map Enumerable with no size when no block is given returned Enumerator 1461s - size returns nil 1461s 1461s Enumerable#grep 1461s - grep without a block should return an array of all elements === pattern 1461s - grep with a block should return an array of elements === pattern passed through block 1461s - grep the enumerable (rubycon legacy) 1461s - can use $~ in the block when used with a Regexp 1461s - sets $~ in the block 1461s - does not set $~ when given no block 1461s - does not modify Regexp.last_match without block 1461s - correctly handles non-string elements 1461s 1461s Enumerable#grep with a block 1461s - returns an Array of matched elements that mapped by the block 1461s - calls the block with gathered array when yielded with multiple arguments 1461s - raises an ArgumentError when not given a pattern 1461s 1461s Enumerable#grep_v 1461s - sets $~ in the block 1461s - does not set $~ when given no block 1461s - does not modify Regexp.last_match without block 1461s - correctly handles non-string elements 1461s 1461s Enumerable#grep_v without block 1461s - returns an Array of matched elements 1461s - compares pattern with gathered array when yielded with multiple arguments 1461s - raises an ArgumentError when not given a pattern 1461s 1461s Enumerable#grep_v with block 1461s - returns an Array of matched elements that mapped by the block 1461s - calls the block with gathered array when yielded with multiple arguments 1461s - raises an ArgumentError when not given a pattern 1461s 1461s Enumerable#group_by 1461s - returns a hash with values grouped according to the block 1461s - returns an empty hash for empty enumerables 1461s - returns a hash without default_proc 1461s - returns an Enumerator if called without a block 1461s - gathers whole arrays as elements when each yields multiple 1461s 1461s Enumerable#group_by Enumerable with size when no block is given returned Enumerator 1461s - size returns the enumerable size 1461s 1461s Enumerable#group_by Enumerable with no size when no block is given returned Enumerator 1461s - size returns nil 1461s 1461s Enumerable#include? 1461s - returns true if any element == argument for numbers 1461s - returns true if any element == argument for other objects 1461s - returns true if any member of enum equals obj when == compare different classes (legacy rubycon) 1461s - gathers whole arrays as elements when each yields multiple 1461s 1461s Enumerable#inject 1461s - with argument takes a block with an accumulator (with argument as initial value) and the current element. Value of block becomes new accumulator 1461s - produces an array of the accumulator and the argument when given a block with a *arg 1461s - can take two argument 1461s - ignores the block if two arguments 1461s - does not warn when given a Symbol with $VERBOSE true 1461s - can take a symbol argument 1461s - without argument takes a block with an accumulator (with first element as initial value) and the current element. Value of block becomes new accumulator 1461s - gathers whole arrays as elements when each yields multiple 1461s - with inject arguments(legacy rubycon) 1461s - without inject arguments(legacy rubycon) 1461s - returns nil when fails(legacy rubycon) 1461s - tolerates increasing a collection size during iterating Array 1461s 1461s Enumerable#lazy 1461s - returns an instance of Enumerator::Lazy 1461s 1461s Enumerable#map 1461s - returns a new array with the results of passing each element to block 1461s - passes through the values yielded by #each_with_index 1461s - gathers initial args as elements when each yields multiple 1461s - only yields increasing values for a Range 1461s - returns an enumerator when no block given 1461s - reports the same arity as the given block 1461s - yields an Array of 2 elements for a Hash when block arity is 1 1461s - yields 2 arguments for a Hash when block arity is 2 1461s - raises an error for a Hash when an arity enforcing block of arity >2 is passed in 1461s - calls the each method on sub-classes 1461s 1461s Enumerable#map Enumerable with size when no block is given returned Enumerator 1461s - size returns the enumerable size 1461s 1461s Enumerable#map Enumerable with no size when no block is given returned Enumerator 1461s - size returns nil 1461s 1461s Enumerable#max_by 1461s - returns an enumerator if no block 1461s - returns nil if #each yields no objects 1461s - returns the object for whom the value returned by block is the largest 1461s - returns the object that appears first in #each in case of a tie 1461s - uses max.<=>(current) to determine order 1461s - is able to return the maximum for enums that contain nils 1461s - gathers whole arrays as elements when each yields multiple 1461s 1461s Enumerable#max_by Enumerable with size when no block is given returned Enumerator 1461s - size returns the enumerable size 1461s 1461s Enumerable#max_by Enumerable with no size when no block is given returned Enumerator 1461s - size returns nil 1461s 1461s Enumerable#max_by when called with an argument n without a block 1461s - returns an enumerator 1461s 1461s Enumerable#max_by when called with an argument n with a block 1461s - returns an array containing the maximum n elements based on the block's value 1461s 1461s Enumerable#max_by when called with an argument n with a block on a enumerable of length x where x < n 1461s - returns an array containing the maximum n elements of length n 1461s 1461s Enumerable#max_by when called with an argument n with a block when n is negative 1461s - raises an ArgumentError 1461s 1461s Enumerable#max_by when called with an argument n when n is nil 1461s - returns the maximum element 1461s 1461s Enumerable#max 1461s - returns the maximum element 1461s - returns the maximum element (basics cases) 1461s - returns nil for an empty Enumerable 1461s - raises a NoMethodError for elements without #<=> 1461s - raises an ArgumentError for incomparable elements 1461s - returns the maximum for enumerables that contain nils 1461s - gathers whole arrays as elements when each yields multiple 1461s 1461s Enumerable#max when passed a block 1461s - returns the maximum element 1461s 1461s Enumerable#max when called with an argument n without a block 1461s - returns an array containing the maximum n elements 1461s 1461s Enumerable#max when called with an argument n with a block 1461s - returns an array containing the maximum n elements 1461s 1461s Enumerable#max when called with an argument n on a enumerable of length x where x < n 1461s - returns an array containing the maximum n elements of length x 1461s 1461s Enumerable#max when called with an argument n that is negative 1461s - raises an ArgumentError 1461s 1461s Enumerable#max that is nil 1461s - returns the maximum element 1461s 1461s Enumerable#member? 1461s - returns true if any element == argument for numbers 1461s - returns true if any element == argument for other objects 1461s - returns true if any member of enum equals obj when == compare different classes (legacy rubycon) 1461s - gathers whole arrays as elements when each yields multiple 1461s 1461s Enumerable#min_by 1461s - returns an enumerator if no block 1461s - returns nil if #each yields no objects 1461s - returns the object for whom the value returned by block is the smallest 1461s - returns the object that appears first in #each in case of a tie 1461s - uses min.<=>(current) to determine order 1461s - is able to return the minimum for enums that contain nils 1461s - gathers whole arrays as elements when each yields multiple 1461s 1461s Enumerable#min_by Enumerable with size when no block is given returned Enumerator 1461s - size returns the enumerable size 1461s 1461s Enumerable#min_by Enumerable with no size when no block is given returned Enumerator 1461s - size returns nil 1461s 1461s Enumerable#min_by when called with an argument n without a block 1461s - returns an enumerator 1461s 1461s Enumerable#min_by when called with an argument n with a block 1461s - returns an array containing the minimum n elements based on the block's value 1461s 1461s Enumerable#min_by when called with an argument n with a block on a enumerable of length x where x < n 1461s - returns an array containing the minimum n elements of length n 1461s 1461s Enumerable#min_by when called with an argument n with a block when n is negative 1461s - raises an ArgumentError 1461s 1461s Enumerable#min_by when called with an argument n when n is nil 1461s - returns the minimum element 1461s 1461s Enumerable#min 1461s - min should return the minimum element 1461s - returns the minimum (basic cases) 1461s - returns nil for an empty Enumerable 1461s - raises a NoMethodError for elements without #<=> 1461s - raises an ArgumentError for incomparable elements 1461s - returns the minimum when using a block rule 1461s - returns the minimum for enumerables that contain nils 1461s - gathers whole arrays as elements when each yields multiple 1461s 1461s Enumerable#min when called with an argument n without a block 1461s - returns an array containing the minimum n elements 1461s 1461s Enumerable#min when called with an argument n with a block 1461s - returns an array containing the minimum n elements 1461s 1461s Enumerable#min when called with an argument n on a enumerable of length x where x < n 1461s - returns an array containing the minimum n elements of length x 1461s 1461s Enumerable#min when called with an argument n that is negative 1461s - raises an ArgumentError 1461s 1461s Enumerable#min that is nil 1461s - returns the minimum element 1461s 1461s Enumerable#minmax_by 1461s - returns an enumerator if no block 1461s - returns nil if #each yields no objects 1461s - returns the object for whom the value returned by block is the largest 1461s - returns the object that appears first in #each in case of a tie 1461s - uses min/max.<=>(current) to determine order 1461s - is able to return the maximum for enums that contain nils 1461s - gathers whole arrays as elements when each yields multiple 1461s 1461s Enumerable#minmax_by Enumerable with size when no block is given returned Enumerator 1461s - size returns the enumerable size 1461s 1461s Enumerable#minmax_by Enumerable with no size when no block is given returned Enumerator 1461s - size returns nil 1461s 1461s Enumerable#minmax 1461s - min should return the minimum element 1461s - returns the minimum when using a block rule 1461s - returns [nil, nil] for an empty Enumerable 1461s - raises a NoMethodError for elements without #<=> 1461s - raises an ArgumentError when elements are incompatible 1461s - gathers whole arrays as elements when each yields multiple 1461s 1461s Enumerable#none? 1461s - always returns true on empty enumeration 1461s - raises an ArgumentError when more than 1 argument is provided 1461s - does not hide exceptions out of #each 1461s 1461s Enumerable#none? with no block 1461s - returns true if none of the elements in self are true 1461s - returns false if at least one of the elements in self are true 1461s - gathers whole arrays as elements when each yields multiple 1461s 1461s Enumerable#none? with a block 1461s - passes each element to the block in turn until it returns true 1461s - stops passing elements to the block when it returns true 1461s - returns true if the block never returns true 1461s - returns false if the block ever returns true 1461s - does not hide exceptions out of the block 1461s - gathers initial args as elements when each yields multiple 1461s - yields multiple arguments when each yields multiple 1461s 1461s Enumerable#none? when given a pattern argument 1461s - calls `===` on the pattern the return value 1461s - always returns true on empty enumeration 1461s - does not hide exceptions out of #each 1461s - returns true if the pattern never returns a truthy value 1461s - returns false if the pattern ever returns other than false or nil 1461s - does not hide exceptions out of pattern#=== 1461s - calls the pattern with gathered array when yielded with multiple arguments 1461s - ignores the block if there is an argument 1461s 1461s Enumerable#one? 1461s - always returns false on empty enumeration 1461s - raises an ArgumentError when more than 1 argument is provided 1461s - does not hide exceptions out of #each 1461s 1461s Enumerable#one? with no block 1461s - returns true if only one element evaluates to true 1461s - returns false if two elements evaluate to true 1461s - returns false if all elements evaluate to false 1461s - gathers whole arrays as elements when each yields multiple 1461s 1461s Enumerable#one? with a block 1461s - returns true if block returns true once 1461s - returns false if the block returns true more than once 1461s - returns false if the block only returns false 1461s - does not hide exceptions out of the block 1461s - gathers initial args as elements when each yields multiple 1461s - yields multiple arguments when each yields multiple 1461s 1461s Enumerable#one? when given a pattern argument 1461s - calls `===` on the pattern the return value 1461s - always returns false on empty enumeration 1461s - does not hide exceptions out of #each 1461s - returns true if the pattern returns a truthy value only once 1461s - returns false if the pattern returns a truthy value more than once 1461s - returns false if the pattern never returns a truthy value 1461s - does not hide exceptions out of pattern#=== 1461s - calls the pattern with gathered array when yielded with multiple arguments 1461s - ignores the block if there is an argument 1461s 1461s Enumerable#partition 1461s - returns two arrays, the first containing elements for which the block is true, the second containing the rest 1461s - returns an Enumerator if called without a block 1461s - gathers whole arrays as elements when each yields multiple 1461s 1461s Enumerable#partition Enumerable with size when no block is given returned Enumerator 1461s - size returns the enumerable size 1461s 1461s Enumerable#partition Enumerable with no size when no block is given returned Enumerator 1461s - size returns nil 1461s 1461s Enumerable#reduce 1461s - with argument takes a block with an accumulator (with argument as initial value) and the current element. Value of block becomes new accumulator 1461s - produces an array of the accumulator and the argument when given a block with a *arg 1461s - can take two argument 1461s - ignores the block if two arguments 1461s - does not warn when given a Symbol with $VERBOSE true 1461s - can take a symbol argument 1461s - without argument takes a block with an accumulator (with first element as initial value) and the current element. Value of block becomes new accumulator 1461s - gathers whole arrays as elements when each yields multiple 1461s - with inject arguments(legacy rubycon) 1461s - without inject arguments(legacy rubycon) 1461s - returns nil when fails(legacy rubycon) 1461s - tolerates increasing a collection size during iterating Array 1461s 1461s Enumerable#reject 1461s - returns an array of the elements for which block is false 1461s - returns an Enumerator if called without a block 1461s - gathers whole arrays as elements when each yields multiple 1461s 1461s Enumerable#reject Enumerable with size when no block is given returned Enumerator 1461s - size returns the enumerable size 1461s 1461s Enumerable#reject Enumerable with no size when no block is given returned Enumerator 1461s - size returns nil 1461s 1461s Enumerable#reverse_each 1461s - traverses enum in reverse order and pass each element to block 1461s - returns an Enumerator if no block given 1461s - gathers whole arrays as elements when each yields multiple 1461s 1461s Enumerable#reverse_each Enumerable with size when no block is given returned Enumerator 1461s - size returns the enumerable size 1461s 1461s Enumerable#reverse_each Enumerable with no size when no block is given returned Enumerator 1461s - size returns nil 1461s 1461s Enumerable#select 1461s - returns all elements for which the block is not false 1461s - returns an enumerator when no block given 1461s - passes through the values yielded by #each_with_index 1461s - gathers whole arrays as elements when each yields multiple 1461s 1461s Enumerable#select Enumerable with size when no block is given returned Enumerator 1461s - size returns the enumerable size 1461s 1461s Enumerable#select Enumerable with no size when no block is given returned Enumerator 1461s - size returns nil 1461s 1461s Enumerable#slice_after 1461s - raises an ArgumentError when given an incorrect number of arguments 1461s 1461s Enumerable#slice_after when given an argument and no block 1461s - calls === on the argument to determine when to yield 1461s - doesn't yield an empty array if the filter matches the first entry or the last entry 1461s - uses standard boolean as a test 1461s 1461s Enumerable#slice_after when given a block and no argument 1461s - calls the block to determine when to yield 1461s 1461s Enumerable#slice_after when given a block and an argument 1461s - raises an ArgumentError 1461s 1461s when an iterator method yields more than one value 1461s - processes all yielded values 1461s 1461s Enumerable#slice_before 1461s - raises an ArgumentError when given an incorrect number of arguments 1461s 1461s Enumerable#slice_before when given an argument and no block 1461s - calls === on the argument to determine when to yield 1461s - doesn't yield an empty array if the filter matches the first entry or the last entry 1461s - uses standard boolean as a test 1461s 1461s Enumerable#slice_before when given a block 1461s - does not accept arguments 1461s 1461s Enumerable#slice_before when given a block and no argument 1461s - calls the block to determine when to yield 1461s 1461s Enumerable#slice_before when an iterator method yields more than one value 1461s - processes all yielded values 1461s 1461s Enumerable#slice_before Enumerable with size when no block is given returned Enumerator 1461s - size returns nil 1461s 1461s Enumerable#slice_before Enumerable with no size when no block is given returned Enumerator 1461s - size returns nil 1461s 1461s Enumerable#slice_when when given a block 1461s - returns an enumerator 1461s - splits chunks between adjacent elements i and j where the block returns true 1461s - calls the block for length of the receiver enumerable minus one times 1461s - doesn't yield an empty array if the block matches the first or the last time 1461s - doesn't yield an empty array on a small enumerable 1461s 1461s Enumerable#slice_when when not given a block 1461s - raises an ArgumentError 1461s 1461s Enumerable#slice_when when an iterator method yields more than one value 1461s - processes all yielded values 1461s 1461s Enumerable#sort_by 1461s - returns an array of elements ordered by the result of block 1461s - sorts the object by the given attribute 1461s - returns an Enumerator when a block is not supplied 1461s - gathers whole arrays as elements when each yields multiple 1461s - returns an array of elements when a block is supplied and #map returns an enumerable 1461s - calls #each to iterate over the elements to be sorted 1461s 1461s Enumerable#sort_by Enumerable with size when no block is given returned Enumerator 1461s - size returns the enumerable size 1461s 1461s Enumerable#sort_by Enumerable with no size when no block is given returned Enumerator 1461s - size returns nil 1461s 1461s Enumerable#sort 1461s - sorts by the natural order as defined by <=> 1461s - yields elements to the provided block 1461s - raises a NoMethodError if elements do not define <=> 1461s - sorts enumerables that contain nils 1461s - compare values returned by block with 0 1461s - raises an error if objects can't be compared 1461s - gathers whole arrays as elements when each yields multiple 1461s - doesn't raise an error if #to_a returns a frozen Array 1461s 1461s Enumerable#sum 1461s - returns amount of the elements with taking an argument as the initial value 1461s - gives 0 as a default argument 1461s - uses Kahan's compensated summation algorithm for precise sum of float numbers 1461s 1461s Enumerable#sum with a block 1461s - transforms the elements 1461s - does not destructure array elements 1461s 1461s Enumerable#take 1461s - requires an argument 1461s 1461s Enumerable#take when passed an argument 1461s - returns the first count elements if given a count 1461s - returns an empty array when passed count on an empty array 1461s - returns an empty array when passed count == 0 1461s - returns an array containing the first element when passed count == 1 1461s - raises an ArgumentError when count is negative 1461s - returns the entire array when count > length 1461s - tries to convert the passed argument to an Integer using #to_int 1461s - raises a TypeError if the passed argument is not numeric 1461s - gathers whole arrays as elements when each yields multiple 1461s - consumes only what is needed 1461s 1461s Enumerable#take_while 1461s - returns an Enumerator if no block given 1461s - returns no/all elements for {true/false} block 1461s - accepts returns other than true/false 1461s - passes elements to the block until the first false 1461s - will only go through what's needed 1461s - doesn't return self when it could 1461s - calls the block with initial args when yielded with multiple arguments 1461s 1461s Enumerable#take_while Enumerable with size when no block is given returned Enumerator 1461s - size returns nil 1461s 1461s Enumerable#take_while Enumerable with no size when no block is given returned Enumerator 1461s - size returns nil 1461s 1461s Enumerable#tally 1461s - returns a hash with counts according to the value 1461s - returns a hash without default 1461s - returns an empty hash for empty enumerables 1461s - counts values as gathered array when yielded with multiple arguments 1461s - does not call given block 1461s 1461s Enumerable#tally with a hash 1461s - returns a hash with counts according to the value 1461s - returns the given hash 1461s - calls #to_hash to convert argument to Hash implicitly if passed not a Hash 1461s - raises a FrozenError and does not update the given hash when the hash is frozen 1461s - raises a FrozenError even if enumerable is empty 1461s - does not call given block 1461s - ignores the default value 1461s - ignores the default proc 1461s - needs the values counting each elements to be an integer 1461s 1461s Enumerable#to_a 1461s - returns an array containing the elements 1461s - passes through the values yielded by #each_with_index 1461s - passes arguments to each 1461s 1461s Enumerable#to_h 1461s - converts empty enumerable to empty hash 1461s - converts yielded [key, value] pairs to a hash 1461s - uses the last value of a duplicated key 1461s - calls #to_ary on contents 1461s - forwards arguments to #each 1461s - raises TypeError if an element is not an array 1461s - raises ArgumentError if an element is not a [key, value] pair 1461s 1461s Enumerable#to_h with block 1461s - converts [key, value] pairs returned by the block to a hash 1461s - raises ArgumentError if block returns longer or shorter array 1461s - raises TypeError if block returns something other than Array 1461s - coerces returned pair to Array with #to_ary 1461s - does not coerce returned pair to Array with #to_a 1461s 1461s Enumerable#uniq 1461s - returns an array that contains only unique elements 1461s - uses eql? semantics 1461s - compares elements first with hash 1461s - does not compare elements with different hash codes via eql? 1461s - compares elements with matching hash codes with #eql? 1461s 1461s Enumerable#uniq when yielded with multiple arguments 1461s - returns all yield arguments as an array 1461s 1461s Enumerable#zip 1461s - combines each element of the receiver with the element of the same index in arrays given as arguments 1461s - passes each element of the result array to a block and return nil if a block is given 1461s - fills resulting array with nils if an argument array is too short 1461s - converts arguments to arrays using #to_ary 1461s - converts arguments to enums using #to_enum 1461s - gathers whole arrays as elements when each yields multiple 1461s - raises TypeError when some argument isn't Array and doesn't respond to #to_ary and #to_enum 1461s 1461s Enumerator::ArithmeticSequence#begin 1461s - returns the begin of the sequence 1461s 1461s Enumerator::ArithmeticSequence#begin with beginless 1461s - returns nil as begin of the sequence 1461s 1461s Enumerator::ArithmeticSequence#each 1461s - calls given block on each item of the sequence 1461s - returns self 1461s 1461s Enumerator::ArithmeticSequence#end 1461s - returns the end of the sequence 1461s 1461s Enumerator::ArithmeticSequence#end with endless 1461s - returns nil as end of the sequence 1461s 1461s Enumerator::ArithmeticSequence#== 1461s - returns true if begin, end, step and exclude_end? are equal 1461s 1461s Enumerator::ArithmeticSequence#exclude_end? when created using Numeric#step 1461s - always returns false 1461s 1461s Enumerator::ArithmeticSequence#exclude_end? when created using Range#step 1461s - mirrors range.exclude_end? 1461s 1461s Enumerator::ArithmeticSequence#first 1461s - returns the first element of the sequence 1461s 1461s Enumerator::ArithmeticSequence#hash 1461s - is based on begin, end, step and exclude_end? 1461s 1461s Enumerator::ArithmeticSequence#inspect when Numeric#step is used 1461s - returns '(begin.step(end{, step}))' 1461s 1461s Enumerator::ArithmeticSequence#inspect when Range#step is used 1461s - returns '((range).step{(step)})' 1461s 1461s Enumerator::ArithmeticSequence#last 1461s - returns the last element of the sequence 1461s 1461s Enumerator::ArithmeticSequence.new 1461s - is not defined 1461s 1461s Enumerator::ArithmeticSequence.allocate 1461s - is not defined 1461s 1461s Enumerator::ArithmeticSequence#size for finite sequence 1461s - returns the number of elements in this arithmetic sequence 1461s 1461s Enumerator::ArithmeticSequence#size for infinite sequence 1461s - returns Infinity 1461s 1461s Enumerator::ArithmeticSequence#step 1461s - returns the original value given to step method 1461s 1461s Enumerator::Chain#each 1461s - calls each on its constituents as needed 1461s 1461s Enumerator::Chain#initialize 1461s - is a private method 1461s - returns self 1461s - accepts many arguments 1461s - accepts arguments that are not Enumerable nor responding to :each 1461s 1461s Enumerator::Chain#initialize on frozen instance 1461s - raises a FrozenError 1461s 1461s Enumerator::Chain#inspect 1461s - shows a representation of the Enumerator 1461s - calls inspect on its chain elements 1461s - returns a not initialized representation if #initialized is not called yet 1461s 1461s Enumerator::Chain#rewind 1461s - returns self 1461s - does nothing if receiver has not been iterated 1461s - does nothing on objects that don't respond_to rewind 1461s - calls_rewind its objects 1461s - calls_rewind in reverse order 1461s - calls rewind only for objects that have actually been iterated on 1461s 1461s Enumerator::Chain#size 1461s - returns the sum of the sizes of the elements 1461s - returns nil or Infinity for the first element of such a size 1461s 1461s Enumerator#each 1461s - yields each element of self to the given block 1461s - calls #each on the object given in the constructor by default 1461s - calls #each on the underlying object until it's exhausted 1461s - calls the method given in the constructor instead of #each 1461s - calls the method given in the constructor until it's exhausted 1461s - raises a NoMethodError if the object doesn't respond to #each 1461s - returns self if not given arguments and not given a block 1461s - returns the same value from receiver.each if block is given 1461s - passes given arguments at initialized to receiver.each 1461s - requires multiple arguments 1461s - appends given arguments to receiver.each 1461s - returns the same value from receiver.each if block and arguments are given 1461s - returns new Enumerator if given arguments but not given a block 1461s 1461s Enumerator#each_with_index 1461s - passes each element and its index to block 1461s - returns the object being enumerated when given a block 1461s - binds splat arguments properly 1461s - returns an enumerator if no block is supplied 1461s - returns a new Enumerator when no block is given 1461s - raises an ArgumentError if passed extra arguments 1461s - passes on the given block's return value 1461s - returns the iterator's return value 1461s - returns the correct value if chained with itself 1461s 1461s Enumerator#each_with_index when no block is given returned Enumerator 1461s - size returns the enumerable size 1461s 1461s Enumerator#each_with_object 1461s - receives an argument 1461s 1461s Enumerator#each_with_object with block 1461s - returns the given object 1461s 1461s Enumerator#each_with_object with block the block parameter 1461s - passes each element to first parameter 1461s - passes the given object to last parameter 1461s 1461s Enumerator#each_with_object without block 1461s - returns new Enumerator 1461s 1461s Enumerator#enum_for 1461s - is defined in Kernel 1461s - returns a new enumerator 1461s - defaults the first argument to :each 1461s - sets regexp matches in the caller 1461s - exposes multi-arg yields as an array 1461s - uses the passed block's value to calculate the size of the enumerator 1461s - defers the evaluation of the passed block until #size is called 1461s 1461s Enumerator 1461s - includes Enumerable 1461s 1461s Enumerator#feed 1461s - sets the future return value of yield if called before advancing the iterator 1461s - causes yield to return the value if called during iteration 1461s - can be called for each iteration 1461s - returns nil 1461s - raises a TypeError if called more than once without advancing the enumerator 1461s - sets the return value of Yielder#yield 1461s 1461s Enumerator#first 1461s - returns arrays correctly when calling #first (2376) 1461s 1461s Enumerator::Generator#each 1461s - is an enumerable 1461s - supports enumeration with a block 1461s - raises a LocalJumpError if no block given 1461s - returns the block returned value 1461s - requires multiple arguments 1461s - appends given arguments to receiver.each 1461s 1461s Enumerator::Generator#initialize 1461s - is a private method 1461s - returns self when given a block 1461s 1461s Enumerator#initialize 1461s - is a private method 1461s - returns self when given a block 1461s - accepts a block 1461s - sets size to nil if size is not given 1461s - sets size to nil if the given size is nil 1461s - sets size to the given size if the given size is Float::INFINITY 1461s - sets size to the given size if the given size is an Integer 1461s - sets size to the given size if the given size is a Proc 1461s 1461s Enumerator#initialize on frozen instance 1461s - raises a FrozenError 1461s 1461s Enumerator#inspect shows a representation of the Enumerator 1461s - including receiver and method 1461s - including receiver and method and arguments 1461s - including the nested Enumerator 1461s 1461s Enumerator::Lazy#chunk 1461s - returns a new instance of Enumerator::Lazy 1461s - sets #size to nil 1461s - returns an Enumerator if called without a block 1461s - calls the block with gathered values when yield with multiple arguments 1461s - works with an infinite enumerable 1461s 1461s Enumerator::Lazy#chunk when the returned lazy enumerator is evaluated by Enumerable#first 1461s - stops after specified times 1461s 1461s Enumerator::Lazy#chunk on a nested Lazy 1461s - sets #size to nil 1461s 1461s Enumerator::Lazy#chunk on a nested Lazy when the returned lazy enumerator is evaluated by Enumerable#first 1461s - stops after specified times 1461s 1461s Enumerator::Lazy#chunk_while 1461s - works with an infinite enumerable 1461s - should return a lazy enumerator 1461s 1461s Enumerator::Lazy#collect_concat 1461s - returns a new instance of Enumerator::Lazy 1461s - sets #size to nil 1461s - calls the block with initial values when yield with multiple arguments 1461s - raises an ArgumentError when not given a block 1461s - works with an infinite enumerable 1461s 1461s Enumerator::Lazy#collect_concat when the returned lazy enumerator is evaluated by Enumerable#first 1461s - stops after specified times 1461s - flattens elements when the given block returned an array or responding to .each and .force 1461s 1461s Enumerator::Lazy#collect_concat on a nested Lazy 1461s - sets #size to nil 1461s 1461s Enumerator::Lazy#collect_concat on a nested Lazy when the returned lazy enumerator is evaluated by Enumerable#first 1461s - stops after specified times 1461s - flattens elements when the given block returned an array or responding to .each and .force 1461s 1461s Enumerator::Lazy#collect 1461s - returns a new instance of Enumerator::Lazy 1461s - keeps size 1461s - calls the block with initial values when yield with multiple arguments 1461s - works with an infinite enumerable 1461s 1461s Enumerator::Lazy#collect when the returned lazy enumerator is evaluated by Enumerable#first 1461s - stops after specified times 1461s 1461s Enumerator::Lazy#collect on a nested Lazy 1461s - keeps size 1461s 1461s Enumerator::Lazy#collect on a nested Lazy when the returned lazy enumerator is evaluated by Enumerable#first 1461s - stops after specified times 1461s 1461s Enumerator::Lazy#compact 1461s - returns array without nil elements 1461s - sets #size to nil 1461s 1461s Enumerator::Lazy#drop 1461s - returns a new instance of Enumerator::Lazy 1461s - sets difference of given count with old size to new size 1461s - works with an infinite enumerable 1461s 1461s Enumerator::Lazy#drop when the returned lazy enumerator is evaluated by Enumerable#first 1461s - stops after specified times 1461s 1461s Enumerator::Lazy#drop on a nested Lazy 1461s - sets difference of given count with old size to new size 1461s 1461s Enumerator::Lazy#drop on a nested Lazy when the returned lazy enumerator is evaluated by Enumerable#first 1461s - stops after specified times 1461s 1461s Enumerator::Lazy#drop_while 1461s - returns a new instance of Enumerator::Lazy 1461s - sets #size to nil 1461s - calls the block with initial values when yield with multiple arguments 1461s - raises an ArgumentError when not given a block 1461s - works with an infinite enumerable 1461s 1461s Enumerator::Lazy#drop_while when the returned lazy enumerator is evaluated by Enumerable#first 1461s - stops after specified times 1461s 1461s Enumerator::Lazy#drop_while on a nested Lazy 1461s - sets #size to nil 1461s 1461s Enumerator::Lazy#drop_while on a nested Lazy when the returned lazy enumerator is evaluated by Enumerable#first 1461s - stops after specified times 1461s 1461s Enumerator::Lazy#eager 1461s - returns a non-lazy Enumerator converted from the lazy enumerator 1461s - does not enumerate an enumerator 1461s 1461s Enumerator::Lazy#enum_for 1461s - requires multiple arguments 1461s - returns a new instance of Enumerator::Lazy 1461s - sets #size to nil when not given a block 1461s - sets given block to size when given a block 1461s - generates a lazy enumerator from the given name 1461s - passes given arguments to wrapped method 1461s - works with an infinite enumerable 1461s 1461s Enumerator::Lazy#filter_map 1461s - maps only truthy results 1461s - does not map false results 1461s 1461s Enumerator::Lazy#filter 1461s - returns a new instance of Enumerator::Lazy 1461s - sets #size to nil 1461s - calls the block with a gathered array when yield with multiple arguments 1461s - raises an ArgumentError when not given a block 1461s - works with an infinite enumerable 1461s 1461s Enumerator::Lazy#filter when the returned lazy enumerator is evaluated by Enumerable#first 1461s - stops after specified times 1461s 1461s Enumerator::Lazy#filter on a nested Lazy 1461s - sets #size to nil 1461s 1461s Enumerator::Lazy#filter on a nested Lazy when the returned lazy enumerator is evaluated by Enumerable#first 1461s - stops after specified times 1461s 1461s Enumerator::Lazy#find_all 1461s - returns a new instance of Enumerator::Lazy 1461s - sets #size to nil 1461s - calls the block with a gathered array when yield with multiple arguments 1461s - raises an ArgumentError when not given a block 1461s - works with an infinite enumerable 1461s 1461s Enumerator::Lazy#find_all when the returned lazy enumerator is evaluated by Enumerable#first 1461s - stops after specified times 1461s 1461s Enumerator::Lazy#find_all on a nested Lazy 1461s - sets #size to nil 1461s 1461s Enumerator::Lazy#find_all on a nested Lazy when the returned lazy enumerator is evaluated by Enumerable#first 1461s - stops after specified times 1461s 1461s Enumerator::Lazy#flat_map 1461s - returns a new instance of Enumerator::Lazy 1461s - sets #size to nil 1461s - calls the block with initial values when yield with multiple arguments 1461s - raises an ArgumentError when not given a block 1461s - works with an infinite enumerable 1461s - properly unwraps nested yields 1461s 1461s Enumerator::Lazy#flat_map when the returned lazy enumerator is evaluated by Enumerable#first 1461s - stops after specified times 1461s - flattens elements when the given block returned an array or responding to .each and .force 1461s 1461s Enumerator::Lazy#flat_map on a nested Lazy 1461s - sets #size to nil 1461s 1461s Enumerator::Lazy#flat_map on a nested Lazy when the returned lazy enumerator is evaluated by Enumerable#first 1461s - stops after specified times 1461s - flattens elements when the given block returned an array or responding to .each and .force 1461s 1461s Enumerator::Lazy#force 1461s - passes given arguments to receiver.each 1461s - works with an infinite enumerable 1461s 1461s Enumerator::Lazy#force on a nested Lazy 1461s - calls all block and returns an Array 1461s 1461s Enumerator::Lazy#grep 1461s - requires an argument 1461s - returns a new instance of Enumerator::Lazy 1461s - sets #size to nil 1461s - calls the block with a gathered array when yield with multiple arguments 1461s - works with an infinite enumerable 1461s 1461s Enumerator::Lazy#grep when the returned lazy enumerator is evaluated by Enumerable#first 1461s - stops after specified times when not given a block 1461s - stops after specified times when given a block 1461s 1461s Enumerator::Lazy#grep on a nested Lazy 1461s - sets #size to nil 1461s 1461s Enumerator::Lazy#grep on a nested Lazy when the returned lazy enumerator is evaluated by Enumerable#first 1461s - stops after specified times when not given a block 1461s - stops after specified times when given a block 1461s 1461s Enumerator::Lazy#grep_v 1461s - requires an argument 1461s - returns a new instance of Enumerator::Lazy 1461s - sets #size to nil 1461s - calls the block with a gathered array when yield with multiple arguments 1461s - works with an infinite enumerable 1461s 1461s Enumerator::Lazy#grep_v when the returned lazy enumerator is evaluated by Enumerable#first 1461s - stops after specified times when not given a block 1461s - stops after specified times when given a block 1461s 1461s Enumerator::Lazy#grep_v on a nested Lazy 1461s - sets #size to nil 1461s 1461s Enumerator::Lazy#grep_v on a nested Lazy when the returned lazy enumerator is evaluated by Enumerable#first 1461s - stops after specified times when not given a block 1461s - stops after specified times when given a block 1461s 1461s Enumerator::Lazy#initialize 1461s - is a private method 1461s - returns self 1461s - sets #size to nil if not given a size 1461s - sets #size to nil if given size is nil 1461s - sets given size to own size if the given size is Float::INFINITY 1461s - sets given size to own size if the given size is an Integer 1461s - sets given size to own size if the given size is a Proc 1461s - raises an ArgumentError when block is not given 1461s 1461s Enumerator::Lazy#initialize when the returned lazy enumerator is evaluated by Enumerable#first 1461s - stops after specified times 1461s 1461s Enumerator::Lazy#initialize on frozen instance 1461s - raises a FrozenError 1461s 1461s Enumerator::Lazy 1461s - is a subclass of Enumerator 1461s - defines lazy versions of a whitelist of Enumerator methods 1461s 1461s Enumerator::Lazy#lazy 1461s - returns self 1461s 1461s Enumerator::Lazy#map 1461s - returns a new instance of Enumerator::Lazy 1461s - keeps size 1461s - calls the block with initial values when yield with multiple arguments 1461s - works with an infinite enumerable 1461s - doesn't unwrap Arrays 1461s 1461s Enumerator::Lazy#map when the returned lazy enumerator is evaluated by Enumerable#first 1461s - stops after specified times 1461s 1461s Enumerator::Lazy#map on a nested Lazy 1461s - keeps size 1461s 1461s Enumerator::Lazy#map on a nested Lazy when the returned lazy enumerator is evaluated by Enumerable#first 1461s - stops after specified times 1461s 1461s Enumerator::Lazy#reject 1461s - returns a new instance of Enumerator::Lazy 1461s - sets #size to nil 1461s - lets exceptions raised in the block go through 1461s - calls the block with a gathered array when yield with multiple arguments 1461s - raises an ArgumentError when not given a block 1461s - works with an infinite enumerable 1461s 1461s Enumerator::Lazy#reject when the returned lazy enumerator is evaluated by Enumerable#first 1461s - stops after specified times 1461s 1461s Enumerator::Lazy#reject on a nested Lazy 1461s - sets #size to nil 1461s 1461s Enumerator::Lazy#reject on a nested Lazy when the returned lazy enumerator is evaluated by Enumerable#first 1461s - stops after specified times 1461s 1461s Enumerator::Lazy#select 1461s - returns a new instance of Enumerator::Lazy 1461s - sets #size to nil 1461s - calls the block with a gathered array when yield with multiple arguments 1461s - raises an ArgumentError when not given a block 1461s - works with an infinite enumerable 1461s - doesn't pre-evaluate the next element 1461s - doesn't over-evaluate when peeked 1461s - doesn't re-evaluate after peek 1461s 1461s Enumerator::Lazy#select when the returned lazy enumerator is evaluated by Enumerable#first 1461s - stops after specified times 1461s 1461s Enumerator::Lazy#select on a nested Lazy 1461s - sets #size to nil 1461s 1461s Enumerator::Lazy#select on a nested Lazy when the returned lazy enumerator is evaluated by Enumerable#first 1461s - stops after specified times 1461s 1461s Enumerator::Lazy#slice_after 1461s - works with an infinite enumerable 1461s - should return a lazy enumerator 1461s 1461s Enumerator::Lazy#slice_before 1461s - works with an infinite enumerable 1461s - should return a lazy enumerator 1461s 1461s Enumerator::Lazy#slice_when 1461s - works with an infinite enumerable 1461s - should return a lazy enumerator 1461s 1461s Enumerator::Lazy#take 1461s - returns a new instance of Enumerator::Lazy 1461s - sets given count to size if the given count is less than old size 1461s - sets given count to size if the old size is Infinity 1461s 1461s Enumerator::Lazy#take when the returned lazy enumerator is evaluated by .force 1461s - stops after specified times 1461s - stops without iterations if the given argument is 0 1461s 1461s Enumerator::Lazy#take on a nested Lazy 1461s - sets given count to size if the given count is less than old size 1461s 1461s Enumerator::Lazy#take on a nested Lazy when the returned lazy enumerator is evaluated by .force 1461s - stops after specified times 1461s - stops without iterations if the given argument is 0 1461s 1461s Enumerator::Lazy#take_while 1461s - returns a new instance of Enumerator::Lazy 1461s - sets #size to nil 1461s - calls the block with initial values when yield with multiple arguments 1461s - raises an ArgumentError when not given a block 1461s 1461s Enumerator::Lazy#take_while when the returned lazy enumerator is evaluated by .force 1461s - stops after specified times 1461s 1461s Enumerator::Lazy#take_while on a nested Lazy 1461s - sets #size to nil 1461s 1461s Enumerator::Lazy#take_while on a nested Lazy when the returned lazy enumerator is evaluated by .force 1461s - stops after specified times 1461s 1461s Enumerator::Lazy#to_enum 1461s - requires multiple arguments 1461s - returns a new instance of Enumerator::Lazy 1461s - sets #size to nil when not given a block 1461s - sets given block to size when given a block 1461s - generates a lazy enumerator from the given name 1461s - passes given arguments to wrapped method 1461s - works with an infinite enumerable 1461s 1461s Enumerator::Lazy#uniq 1461s - works with an infinite enumerable 1461s 1461s Enumerator::Lazy#uniq without block 1461s - returns a lazy enumerator 1461s - return same value after rewind 1461s - sets the size to nil 1461s 1461s Enumerator::Lazy#uniq when yielded with an argument 1461s - returns a lazy enumerator 1461s - return same value after rewind 1461s - sets the size to nil 1461s 1461s Enumerator::Lazy#uniq when yielded with multiple arguments 1461s - return same value after rewind 1461s - returns all yield arguments as an array 1461s 1461s Enumerator::Lazy#with_index 1461s - enumerates with an index 1461s - enumerates with an index starting at a given offset 1461s - enumerates with an index starting at 0 when offset is nil 1461s - raises TypeError when offset does not convert to Integer 1461s - resets after a new call to each 1461s 1461s Enumerator::Lazy#zip 1461s - returns a new instance of Enumerator::Lazy 1461s - keeps size 1461s - calls the block with a gathered array when yield with multiple arguments 1461s - returns a Lazy when no arguments given 1461s - raises a TypeError if arguments contain non-list object 1461s - works with an infinite enumerable and an array 1461s - works with two infinite enumerables 1461s 1461s Enumerator::Lazy#zip when the returned lazy enumerator is evaluated by Enumerable#first 1461s - stops after specified times 1461s 1461s Enumerator::Lazy#zip on a nested Lazy 1461s - keeps size 1461s - behaves as Enumerable#zip when given a block 1461s 1461s Enumerator::Lazy#zip on a nested Lazy when the returned lazy enumerator is evaluated by Enumerable#first 1461s - stops after specified times 1461s 1461s Enumerator.new no block given 1461s - raises 1461s 1461s Enumerator.new when passed a block 1461s - defines iteration with block, yielder argument and calling << method 1461s - defines iteration with block, yielder argument and calling yield method 1461s - defines iteration with block, yielder argument and treating it as a proc 1461s 1461s Enumerator.new when passed a block yielded values 1461s - handles yield arguments properly 1461s - handles << arguments properly 1461s 1461s Enumerator#next 1461s - returns the next element of the enumeration 1461s - raises a StopIteration exception at the end of the stream 1461s - cannot be called again until the enumerator is rewound 1461s - restarts the enumerator if an exception terminated a previous iteration 1461s 1461s Enumerator#next_values 1461s - returns the next element in self 1461s - advances the position of the current element 1461s - advances the position of the enumerator each time when called multiple times 1461s - works in concert with #rewind 1461s - returns an empty array if yield is called without arguments 1461s - raises StopIteration if called on a finished enumerator 1461s 1461s Enumerator#peek 1461s - returns the next element in self 1461s - does not advance the position of the current element 1461s - can be called repeatedly without advancing the position of the current element 1461s - works in concert with #rewind 1461s - raises StopIteration if called on a finished enumerator 1461s 1461s Enumerator#peek_values 1461s - returns the next element in self 1461s - does not advance the position of the current element 1461s - can be called repeatedly without advancing the position of the current element 1461s - works in concert with #rewind 1461s - returns an empty array if yield is called without arguments 1461s - raises StopIteration if called on a finished enumerator 1461s 1461s Enumerator#+ 1461s - returns a chain of self and provided enumerators 1461s - calls #each on each argument 1461s 1461s Enumerator.produce 1461s - creates an infinite enumerator 1461s - terminates iteration when block raises StopIteration exception 1461s 1461s Enumerator.produce when initial value skipped 1461s - uses nil instead 1461s - starts enumerable from result of first block call 1461s 1461s Enumerator#rewind 1461s - resets the enumerator to its initial state 1461s - returns self 1461s - has no effect on a new enumerator 1461s - has no effect if called multiple, consecutive times 1461s - works with peek to reset the position 1461s - calls the enclosed object's rewind method if one exists 1461s - does nothing if the object doesn't have a #rewind method 1461s 1461s Enumerator#rewind 1461s - clears a pending #feed value 1461s 1461s Enumerator#size 1461s - returns same value if set size is an Integer 1461s - returns nil if set size is nil 1461s - returns returning value from size.call if set size is a Proc 1461s - returns the result from size.call if the size respond to call 1461s 1461s Enumerator#to_enum 1461s - is defined in Kernel 1461s - returns a new enumerator 1461s - defaults the first argument to :each 1461s - sets regexp matches in the caller 1461s - exposes multi-arg yields as an array 1461s - uses the passed block's value to calculate the size of the enumerator 1461s - defers the evaluation of the passed block until #size is called 1461s 1461s Enumerator#with_index 1461s - passes each element and its index to block 1461s - returns the object being enumerated when given a block 1461s - binds splat arguments properly 1461s - returns an enumerator if no block is supplied 1461s - returns a new Enumerator when no block is given 1461s - accepts an optional argument when given a block 1461s - accepts an optional argument when not given a block 1461s - numbers indices from the given index when given an offset but no block 1461s - numbers indices from the given index when given an offset and block 1461s - raises a TypeError when the argument cannot be converted to numeric 1461s - converts non-numeric arguments to Integer via #to_int 1461s - coerces the given numeric argument to an Integer 1461s - treats nil argument as no argument 1461s - accepts negative argument 1461s 1461s Enumerator#with_index when no block is given returned Enumerator 1461s - size returns the enumerable size 1461s 1461s Enumerator#with_object 1461s - receives an argument 1461s 1461s Enumerator#with_object with block 1461s - returns the given object 1461s 1461s Enumerator#with_object with block the block parameter 1461s - passes each element to first parameter 1461s - passes the given object to last parameter 1461s 1461s Enumerator#with_object without block 1461s - returns new Enumerator 1461s 1461s Enumerator::Yielder#<< 1461s - yields the value to the block 1461s - doesn't double-wrap Arrays 1461s - returns self 1461s 1461s Enumerator::Yielder#initialize 1461s - is a private method 1461s - returns self when given a block 1461s 1461s Enumerator::Yielder#to_proc 1461s - returns a Proc object that takes an argument and yields it to the block 1461s 1461s Enumerator::Yielder#yield 1461s - yields the value to the block 1461s - yields with passed arguments 1461s - returns the result of the block for the given value 1461s 1461s Enumerator::Yielder#yield when multiple arguments passed 1461s - yields the arguments list to the block 1461s 1461s ENV.assoc 1461s - returns an array of the key and value of the environment variable with the given key 1461s - returns nil if no environment variable with the given key exists 1461s - returns the key element coerced with #to_str 1461s - raises TypeError if the argument is not a String and does not respond to #to_str 1461s 1461s ENV.clear 1461s - deletes all environment variables 1461s 1461s ENV#clone 1461s - raises ArgumentError when keyword argument 'freeze' is neither nil nor boolean 1461s - raises ArgumentError when keyword argument is not 'freeze' 1461s 1461s ENV.delete_if 1461s - deletes pairs if the block returns true 1461s - returns ENV when block given 1461s - returns ENV even if nothing deleted 1461s - returns an Enumerator if no block given 1461s - deletes pairs through enumerator 1461s - returns ENV from enumerator 1461s - returns ENV from enumerator even if nothing deleted 1461s 1461s ENV.delete_if when no block is given returned Enumerator 1461s - size returns the enumerable size 1461s 1461s ENV.delete 1461s - removes the variable from the environment 1461s - returns the previous value 1461s - returns nil if the named environment variable does not exist and no block given 1461s - yields the name to the given block if the named environment variable does not exist 1461s - returns the result of given block if the named environment variable does not exist 1461s - does not evaluate the block if the environment variable exists 1461s - removes the variable coerced with #to_str 1461s - raises TypeError if the argument is not a String and does not respond to #to_str 1461s 1461s ENV#dup 1461s - raises TypeError 1461s 1461s ENV.each_key 1461s - returns each key 1461s - returns an Enumerator if called without a block 1461s - returns keys in the locale encoding 1461s 1461s ENV.each_key when no block is given returned Enumerator 1461s - size returns the enumerable size 1461s 1461s ENV.each_pair 1461s - returns each pair 1461s - returns an Enumerator if called without a block 1461s 1461s ENV.each_pair when no block is given returned Enumerator 1461s - size returns the enumerable size 1461s 1461s ENV.each_pair with encoding 1461s - uses the locale encoding when Encoding.default_internal is nil 1461s - transcodes from the locale encoding to Encoding.default_internal if set 1461s 1461s ENV.each 1461s - returns each pair 1461s - returns an Enumerator if called without a block 1461s 1461s ENV.each when no block is given returned Enumerator 1461s - size returns the enumerable size 1461s 1461s ENV.each with encoding 1461s - uses the locale encoding when Encoding.default_internal is nil 1461s - transcodes from the locale encoding to Encoding.default_internal if set 1461s 1461s ENV.each_value 1461s - returns each value 1461s - returns an Enumerator if called without a block 1461s - uses the locale encoding 1461s 1461s ENV.each_value when no block is given returned Enumerator 1461s - size returns the enumerable size 1461s 1461s ENV.[] 1461s - returns nil if the variable isn't found 1461s - returns only frozen values 1461s - coerces a non-string name with #to_str 1461s - raises TypeError if the argument is not a String and does not respond to #to_str 1461s 1461s ENV.[] 1461s - uses the locale encoding if Encoding.default_internal is nil 1461s - transcodes from the locale encoding to Encoding.default_internal if set 1461s 1461s ENV.[]= 1461s - sets the environment variable to the given value 1461s - returns the value 1461s - deletes the environment variable when the value is nil 1461s - coerces the key argument with #to_str 1461s - coerces the value argument with #to_str 1461s - raises TypeError when the key is not coercible to String 1461s - raises TypeError when the value is not coercible to String 1461s - raises Errno::EINVAL when the key contains the '=' character 1461s - raises Errno::EINVAL when the key is an empty string 1461s - does nothing when the key is not a valid environment variable key and the value is nil 1461s 1461s ENV.empty? 1461s - returns true if the Environment is empty 1461s - returns false if not empty 1461s 1461s ENV.except 1461s - returns the ENV as a hash 1461s - uses the locale encoding for keys 1461s - uses the locale encoding for values 1461s - duplicates the ENV when converting to a Hash 1461s - returns a hash without the requested subset 1461s - ignores keys not present in the original hash 1461s 1461s ENV.fetch 1461s - returns a value 1461s - raises a TypeError if the key is not a String 1461s - provides the given default parameter 1461s - does not insist that the default be a String 1461s - provides a default value from a block 1461s - does not insist that the block return a String 1461s - warns on block and default parameter given 1461s - does not evaluate the block when key found 1461s - uses the locale encoding 1461s 1461s ENV.fetch when the key is not found 1461s - raises a KeyError 1461s - sets the Hash as the receiver of KeyError 1461s - sets the unmatched key as the key of KeyError 1461s - formats the object with #inspect in the KeyError message 1461s 1461s ENV.filter! 1461s - removes environment variables for which the block returns true 1461s - returns self if any changes were made 1461s - returns nil if no changes were made 1461s - returns an Enumerator if called without a block 1461s - selects via the enumerator 1461s 1461s ENV.filter! when no block is given returned Enumerator 1461s - size returns the enumerable size 1461s 1461s ENV.filter 1461s - returns a Hash of names and values for which block return true 1461s - returns an Enumerator when no block is given 1461s - selects via the enumerator 1461s 1461s ENV.filter when no block is given returned Enumerator 1461s - size returns the enumerable size 1461s 1461s ENV.has_key? 1461s - returns true if ENV has the key 1461s - returns false if ENV doesn't include the key 1461s - coerces the key with #to_str 1461s - raises TypeError if the argument is not a String and does not respond to #to_str 1461s 1461s ENV.has_value? 1461s - returns true if ENV has the value 1461s - returns false if ENV doesn't have the value 1461s - coerces the value element with #to_str 1461s - returns nil if the argument is not a String and does not respond to #to_str 1461s 1461s ENV.include? 1461s - returns true if ENV has the key 1461s - returns false if ENV doesn't include the key 1461s - coerces the key with #to_str 1461s - raises TypeError if the argument is not a String and does not respond to #to_str 1461s 1461s ENV.inspect 1461s - returns a String that looks like a Hash with real data 1461s 1461s ENV.invert 1461s - returns a hash with ENV.keys as the values and vice versa 1461s 1461s ENV.keep_if 1461s - deletes pairs if the block returns false 1461s - returns ENV when block given 1461s - returns ENV even if nothing deleted 1461s - returns an Enumerator if no block given 1461s - deletes pairs through enumerator 1461s - returns ENV from enumerator 1461s - returns ENV from enumerator even if nothing deleted 1461s 1461s ENV.keep_if when no block is given returned Enumerator 1461s - size returns the enumerable size 1461s 1461s ENV.key? 1461s - returns true if ENV has the key 1461s - returns false if ENV doesn't include the key 1461s - coerces the key with #to_str 1461s - raises TypeError if the argument is not a String and does not respond to #to_str 1461s 1461s ENV.key 1461s - returns the index associated with the passed value 1461s - returns nil if the passed value is not found 1461s - coerces the key element with #to_str 1461s - raises TypeError if the argument is not a String and does not respond to #to_str 1461s 1461s ENV.keys 1461s - returns an array of the keys 1461s - returns the keys in the locale encoding 1461s 1461s ENV.length 1461s - returns the number of ENV entries 1461s 1461s ENV.member? 1461s - returns true if ENV has the key 1461s - returns false if ENV doesn't include the key 1461s - coerces the key with #to_str 1461s - raises TypeError if the argument is not a String and does not respond to #to_str 1461s 1461s ENV.merge! 1461s - adds the parameter hash to ENV, returning ENV 1461s - returns ENV when no block given 1461s - yields key, the old value and the new value when replacing an entry 1461s - yields key, the old value and the new value when replacing an entry 1461s - does not evaluate the block when the name is new 1461s - does not use the block's return value as the value when the name is new 1461s - returns ENV when block given 1461s - raises TypeError when a name is not coercible to String 1461s - raises TypeError when a value is not coercible to String 1461s - raises Errno::EINVAL when a name contains the '=' character 1461s - raises Errno::EINVAL when a name is an empty string 1461s - updates good data preceding an error 1461s - does not update good data following an error 1461s 1461s ENV.rassoc 1461s - returns an array of the key and value of the environment variable with the given value 1461s - returns a single array even if there are multiple such environment variables 1461s - returns nil if no environment variable with the given value exists 1461s - returns the value element coerced with #to_str 1461s - returns nil if the argument is not a String and does not respond to #to_str 1461s 1461s ENV.rehash 1461s - returns nil 1461s 1461s ENV.reject! 1461s - rejects entries based on key 1461s - rejects entries based on value 1461s - returns itself or nil 1461s - returns an Enumerator if called without a block 1461s - doesn't raise if empty 1461s 1461s ENV.reject! when no block is given returned Enumerator 1461s - size returns the enumerable size 1461s 1461s ENV.reject 1461s - rejects entries based on key 1461s - rejects entries based on value 1461s - returns a Hash 1461s - returns an Enumerator if called without a block 1461s - doesn't raise if empty 1461s 1461s ENV.reject when no block is given returned Enumerator 1461s - size returns the enumerable size 1461s 1461s ENV.replace 1461s - replaces ENV with a Hash 1461s - raises TypeError if the argument is not a Hash 1461s - raises TypeError if a key is not a String 1461s - raises TypeError if a value is not a String 1461s - raises Errno::EINVAL when the key contains the '=' character 1461s - raises Errno::EINVAL when the key is an empty string 1461s - does not accept good data preceding an error 1461s - does not accept good data following an error 1461s 1461s ENV.select! 1461s - removes environment variables for which the block returns true 1461s - returns self if any changes were made 1461s - returns nil if no changes were made 1461s - returns an Enumerator if called without a block 1461s - selects via the enumerator 1461s 1461s ENV.select! when no block is given returned Enumerator 1461s - size returns the enumerable size 1461s 1461s ENV.select 1461s - returns a Hash of names and values for which block return true 1461s - returns an Enumerator when no block is given 1461s - selects via the enumerator 1461s 1461s ENV.select when no block is given returned Enumerator 1461s - size returns the enumerable size 1461s 1461s ENV.shift 1461s - returns a pair and deletes it 1461s - returns nil if ENV.empty? 1461s - uses the locale encoding if Encoding.default_internal is nil 1461s - transcodes from the locale encoding to Encoding.default_internal if set 1461s 1461s ENV.size 1461s - returns the number of ENV entries 1461s 1461s ENV.slice 1461s - returns a hash of the given environment variable names and their values 1461s - ignores each String that is not an environment variable name 1461s - returns the values for the keys coerced with #to_str, but keeps the original objects as result keys 1461s - raises TypeError if any argument is not a String and does not respond to #to_str 1461s 1461s ENV.store 1461s - sets the environment variable to the given value 1461s - returns the value 1461s - deletes the environment variable when the value is nil 1461s - coerces the key argument with #to_str 1461s - coerces the value argument with #to_str 1461s - raises TypeError when the key is not coercible to String 1461s - raises TypeError when the value is not coercible to String 1461s - raises Errno::EINVAL when the key contains the '=' character 1461s - raises Errno::EINVAL when the key is an empty string 1461s - does nothing when the key is not a valid environment variable key and the value is nil 1461s 1461s ENV.to_a 1461s - returns the ENV as an array 1461s - returns the entries in the locale encoding 1461s 1461s ENV.to_h 1461s - returns the ENV as a hash 1461s - uses the locale encoding for keys 1461s - uses the locale encoding for values 1461s - duplicates the ENV when converting to a Hash 1461s 1461s ENV.to_h with block 1461s - converts [key, value] pairs returned by the block to a hash 1461s - does not require the array elements to be strings 1461s - raises ArgumentError if block returns longer or shorter array 1461s - raises TypeError if block returns something other than Array 1461s - coerces returned pair to Array with #to_ary 1461s - does not coerce returned pair to Array with #to_a 1461s 1461s ENV.to_hash 1461s - returns the ENV as a hash 1461s - uses the locale encoding for keys 1461s - uses the locale encoding for values 1461s - duplicates the ENV when converting to a Hash 1461s 1461s ENV.to_s 1461s - returns "ENV" 1461s 1461s ENV.update 1461s - adds the parameter hash to ENV, returning ENV 1461s - returns ENV when no block given 1461s - yields key, the old value and the new value when replacing an entry 1461s - yields key, the old value and the new value when replacing an entry 1461s - does not evaluate the block when the name is new 1461s - does not use the block's return value as the value when the name is new 1461s - returns ENV when block given 1461s - raises TypeError when a name is not coercible to String 1461s - raises TypeError when a value is not coercible to String 1461s - raises Errno::EINVAL when a name contains the '=' character 1461s - raises Errno::EINVAL when a name is an empty string 1461s - updates good data preceding an error 1461s - does not update good data following an error 1461s 1461s ENV.value? 1461s - returns true if ENV has the value 1461s - returns false if ENV doesn't have the value 1461s - coerces the value element with #to_str 1461s - returns nil if the argument is not a String and does not respond to #to_str 1461s 1461s ENV.values_at 1461s - returns an array of the values corresponding to the given keys 1461s - returns an empty array if no keys specified 1461s - returns nil for each key that is not a name 1461s - uses the locale encoding 1461s - raises TypeError when a key is not coercible to String 1461s 1461s ENV.values 1461s - returns an array of the values 1461s - uses the locale encoding 1461s 1461s Exception#backtrace_locations 1461s - returns nil if no backtrace was set 1461s - returns an Array 1461s - sets each element to a Thread::Backtrace::Location 1461s - produces a backtrace for an exception captured using $! 1461s - returns an Array that can be updated 1461s 1461s Exception#backtrace 1461s - returns nil if no backtrace was set 1461s - returns an Array 1461s - sets each element to a String 1461s - includes the filename of the location where self raised in the first element 1461s - includes the line number of the location where self raised in the first element 1461s - includes the name of the method from where self raised in the first element 1461s - includes the filename of the location immediately prior to where self raised in the second element 1461s - includes the line number of the location immediately prior to where self raised in the second element 1461s - contains lines of the same format for each prior position in the stack 1461s - captures the backtrace for an exception into $! 1461s - captures the backtrace for an exception into $@ 1461s - returns an Array that can be updated 1461s - returns the same array after duping 1461s 1461s SystemCallError.=== 1461s - returns true for an instance of the same class 1461s - returns true if errnos same 1461s - returns false if errnos different 1461s - returns false if arg is not kind of SystemCallError 1461s - returns true if receiver is generic and arg is kind of SystemCallError 1461s - returns false if receiver is generic and arg is not kind of SystemCallError 1461s 1461s Exception#cause 1461s - returns the active exception when an exception is raised 1461s - is set for user errors caused by internal errors 1461s - is set for internal errors caused by user errors 1461s - is not set to the exception itself when it is re-raised 1461s 1461s Exception#dup 1461s - calls #initialize_copy on the new instance 1461s - copies instance variables 1461s - does not copy singleton methods 1461s - does not copy modules included in the singleton class 1461s - does not copy constants defined in the singleton class 1461s - does copy the message 1461s - does copy the backtrace 1461s 1461s Exception#== 1461s - returns true if both exceptions are the same object 1461s - returns true if one exception is the dup'd copy of the other 1461s - returns true if both exceptions have the same class, no message, and no backtrace 1461s - returns true if both exceptions have the same class, the same message, and no backtrace 1461s - returns true if both exceptions have the same class, the same message, and the same backtrace 1461s - returns false if the two exceptions inherit from Exception but have different classes 1461s - returns true if the two objects subclass Exception and have the same message and backtrace 1461s - returns false if the argument is not an Exception 1461s - returns false if the two exceptions differ only in their backtrace 1461s - returns false if the two exceptions differ only in their message 1461s 1461s Errno::EINVAL.new 1461s - can be called with no arguments 1461s - accepts an optional custom message 1461s 1461s Errno::EMFILE 1461s - can be subclassed 1461s 1461s Errno::EAGAIN 1461s - is the same class as Errno::EWOULDBLOCK if they represent the same errno value 1461s 1461s Errno::ENOTSUP 1461s - is defined 1461s - is the same class as Errno::EOPNOTSUPP if they represent the same errno value 1461s 1461s Errno::ENOENT 1461s - lets subclasses inherit the default error message 1461s 1461s Exception.exception 1461s - creates a new instance of Exception 1461s - sets the message of the Exception when passes a message 1461s - returns 'Exception' for message when no message given 1461s - returns the exception when it has a custom constructor 1461s 1461s Exception#exception 1461s - returns self when passed no argument 1461s - returns self when passed self as an argument 1461s - returns an exception of the same class as self with the message given as argument 1461s - when raised will be rescued as the new exception 1461s - captures an exception into $! 1461s - returns an exception of the same class as self with the message given as argument, but without reinitializing 1461s 1461s FrozenError.new 1461s - should take optional receiver argument 1461s 1461s FrozenError#receiver 1461s - should return frozen object that modification was attempted on 1461s 1461s Modifying a frozen object #inspect is redefined and modifies the object 1461s - returns ... instead of String representation of object 1461s 1461s Exception#full_message 1461s - returns formatted string of exception using the same format that is used to print an uncaught exceptions to stderr 1461s - supports :highlight option and adds escape sequences to highlight some strings 1461s - supports :order option and places the error message and the backtrace at the top or the bottom 1461s - shows the exception class at the end of the first line of the message when the message contains multiple lines 1461s - highlights the entire message when the message contains multiple lines 1462s - contains cause of exception 1462s - contains all the chain of exceptions 1462s 1462s Exception#full_message includes details about whether an exception was handled RuntimeError 1462s - should report as unhandled if message is empty 1462s - should not report as unhandled if the message is not empty 1462s - should not report as unhandled if the message is nil 1462s - should not report as unhandled if the message is not specified 1462s 1462s Exception#full_message includes details about whether an exception was handled generic Error 1462s - should not report as unhandled in any event 1462s 1462s Exception 1462s - has the right class hierarchy 1462s 1462s Exception#inspect 1462s - returns '#' when no message given 1462s - keeps message encoding 1462s - includes #to_s when the result is non-empty 1462s - returns the class name when #to_s returns an empty string 1462s - returns the derived class name with a subclassed Exception 1462s 1462s Interrupt.new 1462s - returns an instance of interrupt with no message given 1462s - takes an optional message argument 1462s 1462s IO::EAGAINWaitReadable 1462s - combines Errno::EAGAIN and IO::WaitReadable 1462s - is the same as IO::EWOULDBLOCKWaitReadable if Errno::EAGAIN is the same as Errno::EWOULDBLOCK 1462s 1462s IO::EWOULDBLOCKWaitReadable 1462s - combines Errno::EWOULDBLOCK and IO::WaitReadable 1462s 1462s IO::EAGAINWaitWritable 1462s - combines Errno::EAGAIN and IO::WaitWritable 1462s - is the same as IO::EWOULDBLOCKWaitWritable if Errno::EAGAIN is the same as Errno::EWOULDBLOCK 1462s 1462s IO::EWOULDBLOCKWaitWritable 1462s - combines Errno::EWOULDBLOCK and IO::WaitWritable 1462s 1462s KeyError 1462s - accepts :receiver and :key options 1462s 1462s LoadError#path 1462s - is nil when constructed directly 1462s 1462s LoadError raised by load or require 1462s - provides the failing path in its #path attribute 1462s 1462s Exception#message 1462s - returns the class name if there is no message 1462s - returns the message passed to #initialize 1462s - calls #to_s on self 1462s 1462s Exception#message when #backtrace is redefined 1462s - returns the Exception message 1462s 1462s NameError.new 1462s - should take optional name argument 1462s - accepts a :receiver keyword argument 1462s 1462s NameError#dup 1462s - copies the name and receiver 1462s 1462s NameError#name 1462s - returns a method name as a symbol 1462s - returns a constant name as a symbol 1462s - returns a constant name without namespace as a symbol 1462s - returns a class variable name as a symbol 1462s - returns the first argument passed to the method when a NameError is raised from #instance_variable_get 1462s - returns the first argument passed to the method when a NameError is raised from #class_variable_get 1462s 1462s Exception.new 1462s - creates a new instance of Exception 1462s - sets the message of the Exception when passes a message 1462s - returns 'Exception' for message when no message given 1462s - returns the exception when it has a custom constructor 1462s 1462s NoMethodError.new 1462s - allows passing method args 1462s - does not require a name 1462s - accepts a :receiver keyword argument 1462s 1462s NoMethodError#args 1462s - returns an empty array if the caller method had no arguments 1462s - returns an array with the same elements as passed to the method 1462s 1462s NoMethodError#message 1462s - for an undefined method match /undefined method/ 1462s - for an protected method match /protected method/ 1462s - for private method match /private method/ 1462s - calls receiver.inspect only when calling Exception#message 1462s - fallbacks to a simpler representation of the receiver when receiver.inspect raises an exception 1462s - uses #name to display the receiver if it is a class or a module 1462s 1462s NoMethodError#dup 1462s - copies the name, arguments and receiver 1462s 1462s LocalJumpError#reason 1462s - returns 'return' for a return 1462s 1462s NameError#receiver 1462s - returns the object that raised the exception 1462s - returns the Object class when an undefined constant is called without namespace 1462s - returns a class when an undefined constant is called 1462s - returns the Object class when an undefined class variable is called 1462s - returns a class when an undefined class variable is called in a subclass' namespace 1462s - returns the receiver when raised from #instance_variable_get 1462s - returns the receiver when raised from #class_variable_get 1462s - raises an ArgumentError when the receiver is none 1462s 1462s StopIteration#result 1462s - returns the method-returned-object from an Enumerator 1462s 1462s Exception#set_backtrace 1462s - accepts an Array of Strings 1462s - allows the user to set the backtrace from a rescued exception 1462s - accepts an empty Array 1462s - accepts a String 1462s - accepts nil 1462s - raises a TypeError when passed a Symbol 1462s - raises a TypeError when the Array contains a Symbol 1462s - raises a TypeError when the array contains nil 1462s - raises a TypeError when the argument is a nested array 1462s 1462s SignalException.new 1462s - takes a signal number as the first argument 1462s - raises an exception with an invalid signal number 1462s - takes a signal name without SIG prefix as the first argument 1462s - takes a signal name with SIG prefix as the first argument 1462s - raises an exception with an invalid signal name 1462s - raises an exception with an invalid first argument type 1462s - takes a signal symbol without SIG prefix as the first argument 1462s - takes a signal symbol with SIG prefix as the first argument 1462s - raises an exception with an invalid signal name 1462s - takes an optional message argument with a signal number 1462s - raises an exception for an optional argument with a signal name 1462s 1462s SignalException 1465s - can be rescued 1465s 1465s StandardError 1465s - rescues StandardError 1465s - rescues subclass of StandardError 1465s - does not rescue superclass of StandardError 1465s 1465s SystemExit#status 1465s - returns the exit status 1465s 1465s SystemExit#success? 1465s - returns true if the process exited successfully 1465s - returns false if the process exited unsuccessfully 1465s 1465s SystemCallError 1465s - can be subclassed 1465s 1465s SystemCallError.new 1465s - requires at least one argument 1465s - accepts single Integer argument as errno 1465s - constructs a SystemCallError for an unknown error number 1465s - constructs the appropriate Errno class 1465s - accepts an optional custom message preceding the errno 1465s - returns an arity of -1 for the initialize method 1465s - converts to Integer if errno is a Float 1465s - converts to Integer if errno is a Complex convertible to Integer 1465s - raises TypeError if message is not a String 1465s - raises TypeError if errno is not an Integer 1465s - raises RangeError if errno is a Complex not convertible to Integer 1465s 1465s SystemCallError#errno 1465s - returns nil when no errno given 1465s - returns the errno given as optional argument to new 1465s 1465s SystemCallError#message 1465s - returns the default message when no message is given 1465s - returns the message given as an argument to new 1465s 1465s SystemCallError#backtrace 1465s - is nil if not raised 1465s 1465s SystemExit 1469s - sets the exit status and exits silently when raised 1472s - sets the exit status and exits silently when raised when subclassed 1472s 1472s SystemExit #initialize 1472s - accepts a status and message 1472s - accepts a status only 1472s - accepts a message only 1472s - accepts no arguments 1472s 1472s Exception#to_s 1472s - returns the self's name if no message is set 1472s - returns self's message if set 1472s - calls #to_s on the message 1472s 1472s NameError#to_s 1472s - raises its own message for an undefined variable 1472s - raises its own message for an undefined constant 1472s 1472s An Exception reaching the top level 1475s - is printed on STDERR 1478s - the Exception#cause is printed to STDERR with backtraces 1478s 1478s An Exception reaching the top level with a custom backtrace 1481s - is printed on STDERR 1481s 1481s An Exception reaching the top level kills all threads and fibers, ensure clauses are only run for threads current fibers, not for suspended fibers 1484s - with ensure on the root fiber 1484s 1484s UncaughtThrowError#tag 1484s - returns the object thrown 1484s 1484s FalseClass#& 1484s - returns false 1484s 1484s FalseClass#=== 1484s - returns true for false 1484s - returns false for non-false object 1484s 1484s FalseClass#dup 1484s - returns self 1484s 1484s FalseClass 1484s - .allocate raises a TypeError 1484s - .new is undefined 1484s 1484s FalseClass#inspect 1484s - returns the string 'false' 1484s 1484s FalseClass#| 1484s - returns false if other is nil or false, otherwise true 1484s 1484s FalseClass#to_s 1484s - returns the string 'false' 1484s - returns a frozen string 1484s - always returns the same string 1484s 1484s FalseClass#^ 1484s - returns false if other is nil or false, otherwise true 1484s 1484s Fiber.blocking? root Fiber of the main thread 1484s - returns false 1484s - returns false for blocking: false 1484s 1484s Fiber.blocking? root Fiber of a new thread 1484s - returns false 1484s - returns false for blocking: false 1484s 1484s Fiber.blocking? when fiber is blocking root Fiber of the main thread 1484s - returns 1 for blocking: true 1484s 1484s Fiber.blocking? when fiber is blocking root Fiber of a new thread 1484s - returns 1 for blocking: true 1484s 1484s Fiber#blocking? root Fiber of the main thread 1484s - returns false 1484s - returns false for blocking: false 1484s 1484s Fiber#blocking? root Fiber of a new thread 1484s - returns false 1484s - returns false for blocking: false 1484s 1484s Fiber#blocking? when fiber is blocking root Fiber of the main thread 1484s - returns true for blocking: true 1484s 1484s Fiber#blocking? when fiber is blocking root Fiber of a new thread 1484s - returns true for blocking: true 1484s 1484s Fiber.new 1484s - creates a fiber from the given block 1484s - creates a fiber from a subclass 1484s - raises an ArgumentError if called without a block 1484s - does not invoke the block 1484s - closes over lexical environments 1484s 1484s Fiber#raise 1484s - aborts execution 1484s - accepts an exception that implements to_hash 1484s - allows the message parameter to be a hash 1484s - allows extra keyword arguments for compatibility 1484s - raises RuntimeError if no exception class is given 1484s - raises a given Exception instance 1484s - raises a RuntimeError if string given 1484s - passes no arguments to the constructor when given only an exception class 1484s - raises a TypeError when passed a non-Exception object 1484s - raises a TypeError when passed true 1484s - raises a TypeError when passed false 1484s - raises a TypeError when passed nil 1484s - allows Exception, message, and backtrace parameters 1484s 1484s Fiber#raise 1484s - raises RuntimeError by default 1484s - raises FiberError if Fiber is dead 1484s - accepts error class 1484s - accepts error message 1484s - does not accept array of backtrace information only 1484s - does not accept integer 1484s - accepts error class with error message 1484s - accepts error class with with error message and backtrace information 1484s - does not accept only error message and backtrace information 1484s - raises a FiberError if invoked from a different Thread 1484s - kills Fiber 1484s - returns to calling fiber after raise 1484s 1484s Fiber#raise 1484s - transfers and raises on a transferring fiber 1484s 1484s Fiber#resume 1484s - can be invoked from the root Fiber 1484s - raises a FiberError if invoked from a different Thread 1484s - passes control to the beginning of the block on first invocation 1484s - returns the last value encountered on first invocation 1484s - runs until the end of the block 1484s - accepts any number of arguments 1484s - raises a FiberError if the Fiber is dead 1484s - raises a LocalJumpError if the block includes a return statement 1484s - raises a LocalJumpError if the block includes a break statement 1484s 1484s Fiber#resume 1484s - runs until Fiber.yield 1484s - resumes from the last call to Fiber.yield on subsequent invocations 1484s - sets the block parameters to its arguments on the first invocation 1484s - raises a FiberError if the Fiber tries to resume itself 1484s - returns control to the calling Fiber if called from one 1487s /tmp/autopkgtest.nFBjtB/autopkgtest_tmp/spec/ruby/core/fiber/yield_spec.rb:14: warning: unused literal ignored 1487s /tmp/autopkgtest.nFBjtB/autopkgtest_tmp/spec/ruby/core/fiber/yield_spec.rb:20: warning: unused literal ignored 1487s - executes the ensure clause 1487s 1487s Fiber.yield 1487s - passes control to the Fiber's caller 1487s - returns its arguments to the caller 1487s - returns nil to the caller if given no arguments 1487s - returns to the Fiber the value of the #resume call that invoked it 1487s - does not propagate or reraise a rescued exception 1487s - raises a FiberError if called from the root Fiber 1487s 1487s File.absolute_path? 1487s - returns true if it's an absolute pathname 1487s - returns false if it's a relative path 1487s - returns false if it's a tricky relative path 1487s - does not expand '~' to a home directory. 1487s - does not expand '~user' to a home directory. 1487s - calls #to_path on its argument 1487s - takes into consideration the platform's root 1487s 1487s File.absolute_path 1487s - returns the argument if it's an absolute pathname 1487s - resolves paths relative to the current working directory 1487s - does not expand '~' to a home directory. 1487s - does not expand '~' when given dir argument 1487s - does not expand '~user' to a home directory. 1487s - accepts a second argument of a directory from which to resolve the path 1487s - calls #to_path on its argument 1487s 1487s File.atime 1487s - returns the last access time for the named file as a Time object 1487s - returns the last access time for the named file with microseconds 1487s - raises an Errno::ENOENT exception if the file is not found 1487s - accepts an object that has a #to_path method 1487s 1487s File#atime 1487s - returns the last access time to self 1487s 1487s File.basename 1487s - returns the basename of a path (basic cases) 1487s - returns the last component of the filename 1487s - returns an string 1487s - returns the basename for unix format 1487s - returns the basename for edge cases 1487s - ignores a trailing directory separator 1487s - returns the basename for unix suffix 1487s - takes into consideration the platform path separator(s) 1487s - raises a TypeError if the arguments are not String types 1487s - accepts an object that has a #to_path method 1487s - raises an ArgumentError if passed more than two arguments 1487s - returns the extension for a multibyte filename 1487s - returns the basename with the same encoding as the original 1487s - returns a new unfrozen String 1487s 1487s File.blockdev? 1487s - returns true/false depending if the named file is a block device 1487s - accepts an object that has a #to_path method 1487s 1487s File.chardev? 1487s - returns true/false depending if the named file is a char device 1487s - accepts an object that has a #to_path method 1487s 1487s File#chmod 1487s - returns 0 if successful 1487s - raises RangeError with too large values 1487s - invokes to_int on non-integer argument 1487s - with '0222' makes file writable but not readable or executable 1487s - with '0444' makes file readable but not writable or executable 1487s - with '0666' makes file readable and writable but not executable 1487s - with '0111' makes file executable but not readable or writable 1487s - modifies the permission bits of the files specified 1487s 1487s File.chmod 1487s - returns the number of files modified 1487s - raises RangeError with too large values 1487s - accepts an object that has a #to_path method 1487s - throws a TypeError if the given path is not coercible into a string 1487s - raises an error for a non existent path 1487s - invokes to_int on non-integer argument 1487s - invokes to_str on non-string file names 1487s - with '0222' makes file writable but not readable or executable 1487s - with '0444' makes file readable but not writable or executable 1487s - with '0666' makes file readable and writable but not executable 1487s - with '0111' makes file executable but not readable or writable 1487s - modifies the permission bits of the files specified 1487s 1487s File.chown 1487s - returns the number of files processed 1487s - raises an error for a non existent path 1487s - accepts an object that has a #to_path method 1487s 1487s File#chown 1487s - returns 0 1487s 1487s File::Constants::APPEND 1487s - is defined 1487s 1487s File::Constants::CREAT 1487s - is defined 1487s 1487s File::Constants::EXCL 1487s - is defined 1487s 1487s File::Constants::FNM_CASEFOLD 1487s - is defined 1487s 1487s File::Constants::FNM_DOTMATCH 1487s - is defined 1487s 1487s File::Constants::FNM_EXTGLOB 1487s - is defined 1487s 1487s File::Constants::FNM_NOESCAPE 1487s - is defined 1487s 1487s File::Constants::FNM_PATHNAME 1487s - is defined 1487s 1487s File::Constants::FNM_SYSCASE 1487s - is defined 1487s 1487s File::Constants::LOCK_EX 1487s - is defined 1487s 1487s File::Constants::LOCK_NB 1487s - is defined 1487s 1487s File::Constants::LOCK_SH 1487s - is defined 1487s 1487s File::Constants::LOCK_UN 1487s - is defined 1487s 1487s File::Constants::NONBLOCK 1487s - is defined 1487s 1487s File::Constants::RDONLY 1487s - is defined 1487s 1487s File::Constants::RDWR 1487s - is defined 1487s 1487s File::Constants::TRUNC 1487s - is defined 1487s 1487s File::Constants::WRONLY 1487s - is defined 1487s 1487s File::Constants::NOCTTY 1487s - is defined 1487s 1487s File::Constants::SYNC 1487s - is defined 1487s 1487s File::Constants 1487s - matches mode constants 1487s - the separator constant 1487s - the open mode constants 1487s - lock mode constants 1487s 1487s File::Constants 1487s - File::RDONLY 1487s - File::WRONLY 1487s - File::CREAT 1487s - File::RDWR 1487s - File::APPEND 1487s - File::TRUNC 1487s - File::NOCTTY 1487s - File::NONBLOCK 1487s - File::LOCK_EX 1487s - File::LOCK_NB 1487s - File::LOCK_SH 1487s - File::LOCK_UN 1487s - File::SEPARATOR 1487s - File::Separator 1487s - File::PATH_SEPARATOR 1487s - File::SEPARATOR 1487s - File::PATH_SEPARATOR 1487s 1487s File.ctime 1487s - returns the change time for the named file (the time at which directory information about the file was changed, not the file itself). 1487s - returns the change time for the named file (the time at which directory information about the file was changed, not the file itself) with microseconds. 1487s - accepts an object that has a #to_path method 1487s - raises an Errno::ENOENT exception if the file is not found 1487s 1487s File#ctime 1487s - returns the change time for the named file (the time at which directory information about the file was changed, not the file itself). 1487s 1487s File.delete 1487s - returns 0 when called without arguments 1487s - deletes a single file 1487s - deletes multiple files 1487s - raises a TypeError if not passed a String type 1487s - raises an Errno::ENOENT when the given file doesn't exist 1487s - coerces a given parameter into a string if possible 1487s - accepts an object that has a #to_path method 1487s 1487s File.directory? 1487s - returns true if the argument is a directory 1487s - returns false if the argument is not a directory 1487s - accepts an object that has a #to_path method 1487s - raises a TypeError when passed an Integer 1487s - raises a TypeError when passed nil 1487s 1487s File.directory? 1487s - returns false if the argument is an IO that's not a directory 1487s - returns true if the argument is an IO that is a directory 1487s - calls #to_io to convert a non-IO object 1487s 1487s File.dirname 1487s - returns all the components of filename except the last one 1487s - returns a String 1487s - does not modify its argument 1487s - ignores a trailing / 1487s - returns the return all the components of filename except the last one (unix format) 1487s - returns all the components of filename except the last one (edge cases on all platforms) 1487s - returns all the components of filename except the last one (edge cases on non-windows) 1487s - accepts an object that has a #to_path method 1487s - raises a TypeError if not passed a String type 1487s 1487s File.dirname when level is passed 1487s - returns all the components of filename except the last parts by the level 1487s - returns the same String if the level is 0 1487s - raises ArgumentError if the level is negative 1487s - returns '/' when level exceeds the number of segments in the path 1487s - calls #to_int if passed not numeric value 1487s 1487s File.empty? 1487s - returns true if the file is empty 1487s - returns false if the file is not empty 1487s - accepts an object that has a #to_path method 1487s - returns true for /dev/null 1487s - raises an ArgumentError if not passed one argument 1487s - raises a TypeError if not passed a String type 1487s - returns true inside a block opening a file if it is empty 1487s - returns true or false for a directory 1487s - returns false if the file does not exist 1487s 1487s File.executable_real? 1487s - returns true if the file its an executable 1487s - accepts an object that has a #to_path method 1487s - returns true if named file is readable by the real user id of the process, otherwise false 1487s - raises an ArgumentError if not passed one argument 1487s - raises a TypeError if not passed a String type 1487s - returns false if the file does not exist 1487s 1487s File.executable? 1487s - returns true if named file is executable by the effective user id of the process, otherwise false 1487s - returns true if the argument is an executable file 1487s - accepts an object that has a #to_path method 1487s - raises an ArgumentError if not passed one argument 1487s - raises a TypeError if not passed a String type 1487s - returns false if the file does not exist 1487s 1487s File.exist? 1487s - returns true if the file exist 1487s - raises an ArgumentError if not passed one argument 1487s - raises a TypeError if not passed a String type 1487s - accepts an object that has a #to_path method 1487s 1487s File.expand_path 1487s - converts a pathname to an absolute pathname 1487s - converts a pathname to an absolute pathname, Ruby-Talk:18512 1487s - keeps trailing dots on absolute pathname 1487s - converts a pathname to an absolute pathname, using a complete path 1487s - expand path with 1487s - expand_path for common unix path gives a full path 1487s - does not replace multiple '/' at the beginning of the path 1487s - replaces multiple '/' with a single '/' 1487s - raises an ArgumentError if the path is not valid 1487s - expands ~ENV['USER'] to the user's home directory 1487s - expands ~ENV['USER']/a to a in the user's home directory 1487s - does not expand ~ENV['USER'] when it's not at the start 1487s - expands ../foo with ~/dir as base dir to /path/to/user/home/foo 1487s - accepts objects that have a #to_path method 1487s - raises a TypeError if not passed a String type 1487s - expands /./dir to /dir 1487s - returns a String in the same encoding as the argument 1487s - expands a path when the default external encoding is BINARY 1487s - expands a path with multi-byte characters 1487s - does not modify the string argument 1487s - does not modify a HOME string argument 1487s - returns a String when passed a String subclass 1487s 1487s File.expand_path when HOME is set 1487s - converts a pathname to an absolute pathname, using ~ (home) as base 1487s - does not return a frozen string 1487s 1487s File.expand_path when HOME is not set 1487s - raises an ArgumentError when passed '~' if HOME == '' 1487s 1487s File.expand_path with a non-absolute HOME 1487s - raises an ArgumentError 1487s 1487s File.extname 1487s - returns the extension (the portion of file name in path after the period) 1487s - returns unfrozen strings 1487s - returns the extension for edge cases 1487s - returns only the last extension of a file with several dots 1487s - accepts an object that has a #to_path method 1487s - raises a TypeError if not passed a String type 1487s - raises an ArgumentError if not passed one argument 1487s - returns the extension for a multibyte filename 1487s 1487s File.extname for a filename ending with a dot 1487s - returns '.' 1487s 1487s File 1487s - includes Enumerable 1487s - includes File::Constants 1487s 1487s File.file? 1487s - returns true if the named file exists and is a regular file. 1487s - accepts an object that has a #to_path method 1487s - returns true if the null device exists and is a regular file. 1487s - raises an ArgumentError if not passed one argument 1487s - raises a TypeError if not passed a String type 1487s 1487s File#flock 1487s - exclusively locks a file 1487s - non-exclusively locks a file 1491s - returns false if trying to lock an exclusively locked file 1491s - returns 0 if trying to lock a non-exclusively locked file 1491s 1491s File.fnmatch 1491s - matches entire strings 1491s - does not match partial strings 1491s - does not support { } patterns by default 1491s - supports some { } patterns when File::FNM_EXTGLOB is passed 1491s - doesn't support some { } patterns even when File::FNM_EXTGLOB is passed 1491s - doesn't match an extra } when File::FNM_EXTGLOB is passed 1491s - matches when both FNM_EXTGLOB and FNM_PATHNAME are passed 1491s - matches a single character for each ? character 1491s - matches zero or more characters for each * character 1491s - does not match unterminated range of characters 1491s - does not match unterminated range of characters as a literal 1491s - matches ranges of characters using bracket expression (e.g. [a-z]) 1491s - matches ranges of characters using bracket expression, taking case into account 1491s - does not match characters outside of the range of the bracket expression 1491s - matches ranges of characters using exclusive bracket expression (e.g. [^t] or [!t]) 1491s - matches characters with a case sensitive comparison 1491s - matches characters with case insensitive comparison when flags includes FNM_CASEFOLD 1491s - doesn't match case sensitive characters on platforms with case sensitive paths, when flags include FNM_SYSCASE 1491s - matches wildcard with characters when flags includes FNM_PATHNAME 1491s - does not match '/' characters with ? or * when flags includes FNM_PATHNAME 1491s - does not match '/' characters inside bracket expressions when flags includes FNM_PATHNAME 1491s - matches literal ? or * in path when pattern includes \? or \* 1491s - matches literal character (e.g. 'a') in path when pattern includes escaped character (e.g. \a) 1491s - matches '\' characters in path when flags includes FNM_NOESACPE 1491s - escapes special characters inside bracket expression 1491s - does not match leading periods in filenames with wildcards by default 1491s - matches patterns with leading periods to dotfiles 1491s - does not match directories with leading periods by default with FNM_PATHNAME 1491s - matches leading periods in filenames when flags includes FNM_DOTMATCH 1491s - matches multiple directories with ** and * 1491s - matches multiple directories with ** when flags includes File::FNM_PATHNAME 1491s - returns false if '/' in pattern do not match '/' in path when flags includes FNM_PATHNAME 1491s - returns true if '/' in pattern match '/' in path when flags includes FNM_PATHNAME 1491s - has special handling for ./ when using * and FNM_PATHNAME 1491s - matches **/* with FNM_PATHNAME to recurse directories 1491s - matches ** with FNM_PATHNAME only in current directory 1491s - accepts an object that has a #to_path method 1491s - raises a TypeError if the first and second arguments are not string-like 1491s - raises a TypeError if the third argument is not an Integer 1491s - does not raise a TypeError if the third argument can be coerced to an Integer 1491s - matches multibyte characters 1491s 1491s File.fnmatch? 1491s - matches entire strings 1491s - does not match partial strings 1491s - does not support { } patterns by default 1491s - supports some { } patterns when File::FNM_EXTGLOB is passed 1491s - doesn't support some { } patterns even when File::FNM_EXTGLOB is passed 1491s - doesn't match an extra } when File::FNM_EXTGLOB is passed 1491s - matches when both FNM_EXTGLOB and FNM_PATHNAME are passed 1491s - matches a single character for each ? character 1491s - matches zero or more characters for each * character 1491s - does not match unterminated range of characters 1491s - does not match unterminated range of characters as a literal 1491s - matches ranges of characters using bracket expression (e.g. [a-z]) 1491s - matches ranges of characters using bracket expression, taking case into account 1491s - does not match characters outside of the range of the bracket expression 1491s - matches ranges of characters using exclusive bracket expression (e.g. [^t] or [!t]) 1491s - matches characters with a case sensitive comparison 1491s - matches characters with case insensitive comparison when flags includes FNM_CASEFOLD 1491s - doesn't match case sensitive characters on platforms with case sensitive paths, when flags include FNM_SYSCASE 1491s - matches wildcard with characters when flags includes FNM_PATHNAME 1491s - does not match '/' characters with ? or * when flags includes FNM_PATHNAME 1491s - does not match '/' characters inside bracket expressions when flags includes FNM_PATHNAME 1491s - matches literal ? or * in path when pattern includes \? or \* 1491s - matches literal character (e.g. 'a') in path when pattern includes escaped character (e.g. \a) 1491s - matches '\' characters in path when flags includes FNM_NOESACPE 1491s - escapes special characters inside bracket expression 1491s - does not match leading periods in filenames with wildcards by default 1491s - matches patterns with leading periods to dotfiles 1491s - does not match directories with leading periods by default with FNM_PATHNAME 1491s - matches leading periods in filenames when flags includes FNM_DOTMATCH 1491s - matches multiple directories with ** and * 1491s - matches multiple directories with ** when flags includes File::FNM_PATHNAME 1491s - returns false if '/' in pattern do not match '/' in path when flags includes FNM_PATHNAME 1491s - returns true if '/' in pattern match '/' in path when flags includes FNM_PATHNAME 1491s - has special handling for ./ when using * and FNM_PATHNAME 1491s - matches **/* with FNM_PATHNAME to recurse directories 1491s - matches ** with FNM_PATHNAME only in current directory 1491s - accepts an object that has a #to_path method 1491s - raises a TypeError if the first and second arguments are not string-like 1491s - raises a TypeError if the third argument is not an Integer 1491s - does not raise a TypeError if the third argument can be coerced to an Integer 1491s - matches multibyte characters 1491s 1491s File.ftype 1491s - raises ArgumentError if not given exactly one filename 1491s - raises Errno::ENOENT if the file is not valid 1491s - returns a String 1491s - returns 'file' when the file is a file 1491s - returns 'directory' when the file is a dir 1491s - uses to_path to convert arguments 1491s - returns 'blockSpecial' when the file is a block 1491s - returns 'characterSpecial' when the file is a char 1491s - returns 'link' when the file is a link 1491s - returns fifo when the file is a fifo 1491s - returns 'socket' when the file is a socket 1491s 1491s File.grpowned? 1491s - returns true if the file exist 1491s - accepts an object that has a #to_path method 1491s - returns false if file the does not exist 1491s 1491s File.identical? 1491s - returns true for a file and its link 1491s - returns false if any of the files doesn't exist 1491s - accepts an object that has a #to_path method 1491s - raises an ArgumentError if not passed two arguments 1491s - raises a TypeError if not passed String types 1491s - returns true if both named files are identical 1492s 1492s File#initialize 1492s - accepts encoding options in mode parameter 1492s - accepts encoding options as a hash parameter 1492s 1492s File#inspect 1492s - returns a String 1492s 1492s File.join 1492s - changes only boundaries separators 1492s - respects the given separator if only one part has a boundary separator 1492s - joins parts using File::SEPARATOR if there are no boundary separators 1492s - prefers the separator of the right part if both parts have separators 1492s - does not treat \ as a separator on non-Windows 1492s - returns an empty string when given no arguments 1492s - returns a duplicate string when given a single argument 1492s - supports any number of arguments 1492s - flattens nested arrays 1492s - inserts the separator in between empty strings and arrays 1492s - handles leading parts edge cases 1492s - handles trailing parts edge cases 1492s - handles middle parts edge cases 1492s - raises an ArgumentError if passed a recursive array 1492s - raises a TypeError exception when args are nil 1492s - calls #to_str 1492s - doesn't mutate the object when calling #to_str 1492s - calls #to_path 1492s 1492s File.link 1492s - link a file with another 1492s - raises an Errno::EEXIST if the target already exists 1492s - raises an ArgumentError if not passed two arguments 1492s - raises a TypeError if not passed String types 1492s 1492s File.lstat 1492s - returns a File::Stat object if the given file exists 1492s - returns a File::Stat object when called on an instance of File 1492s - accepts an object that has a #to_path method 1492s - raises an Errno::ENOENT if the file does not exist 1492s 1492s File.lstat 1492s - returns a File::Stat object with symlink properties for a symlink 1492s 1492s File#lstat 1492s - needs to be reviewed for spec completeness 1492s 1492s File.lutime 1492s - sets the access and modification time for a regular file 1492s - sets the access and modification time for a symlink 1492s 1492s File.mkfifo 1492s - creates a FIFO file at the passed path 1492s - creates a FIFO file with passed mode & ~umask 1492s - creates a FIFO file with a default mode of 0666 & ~umask 1492s - returns 0 after creating the FIFO file 1492s 1492s File.mkfifo when path passed responds to :to_path 1492s - creates a FIFO file at the path specified 1492s 1492s File.mkfifo when path passed is not a String value 1492s - raises a TypeError 1492s 1492s File.mkfifo when path does not exist 1492s - raises an Errno::ENOENT exception 1492s 1492s File.mtime 1492s - returns the modification Time of the file 1492s - returns the modification Time of the file with microseconds 1492s - raises an Errno::ENOENT exception if the file is not found 1492s 1492s File#mtime 1492s - returns the modification Time of the file 1492s 1492s File.new 1492s - returns a new File with mode string 1492s - returns a new File with mode num 1492s - returns a new File with modus num and permissions 1492s - creates the file and returns writable descriptor when called with 'w' mode and r-o permissions 1492s - opens the existing file, does not change permissions even when they are specified 1492s - returns a new File with modus fd 1492s - returns a new read-only File when mode is not specified 1492s - returns a new read-only File when mode is not specified but flags option is present 1492s - creates a new file when use File::EXCL mode 1492s - raises an Errno::EEXIST if the file exists when create a new file with File::CREAT|File::EXCL 1492s - creates a new file when use File::WRONLY|File::APPEND mode 1492s - returns a new File when use File::APPEND mode 1492s - returns a new File when use File::RDONLY|File::APPEND mode 1492s - returns a new File when use File::RDONLY|File::WRONLY mode 1492s - creates a new file when use File::WRONLY|File::TRUNC mode 1492s - returns a new read-only File when use File::RDONLY|File::CREAT mode 1492s - returns a new read-only File when use File::CREAT mode 1492s - coerces filename using to_str 1492s - coerces filename using #to_path 1492s - bitwise-ORs mode and flags option 1492s - does not use the given block and warns to use File::open 1492s - raises a TypeError if the first parameter can't be coerced to a string 1492s - raises a TypeError if the first parameter is nil 1492s - raises an Errno::EBADF if the first parameter is an invalid file descriptor 1492s - can't alter mode or permissions when opening a file 1492s - opens directories 1492s 1492s File::NULL 1492s - returns /dev/null as a string 1492s 1492s File.open 1492s - opens the file (basic case) 1492s - opens the file with unicode characters 1492s - opens a file when called with a block 1492s - opens with mode string 1492s - opens a file with mode string and block 1492s - opens a file with mode num 1492s - opens a file with mode num and block 1492s - opens a file with mode and permission as nil 1492s - opens the file when passed mode, num and permissions 1492s - opens the file when passed mode, num, permissions and block 1492s - creates the file and returns writable descriptor when called with 'w' mode and r-o permissions 1492s - opens the existing file, does not change permissions even when they are specified 1492s - creates a new write-only file when invoked with 'w' and '0222' 1492s - opens the file when call with fd 1492s - opens a file that no exists when use File::WRONLY mode 1492s - opens a file that no exists when use File::RDONLY mode 1492s - opens a file that no exists when use 'r' mode 1492s - opens a file that no exists when use File::EXCL mode 1492s - opens a file that no exists when use File::NONBLOCK mode 1492s - opens a file that no exists when use File::TRUNC mode 1492s - opens a file that no exists when use File::NOCTTY mode 1492s - opens a file that no exists when use File::CREAT mode 1492s - opens a file that no exists when use 'a' mode 1492s - opens a file that no exists when use 'w' mode 1492s - raises an ArgumentError exception when call with an unknown mode 1492s - can read in a block when call open with RDONLY mode 1492s - can read in a block when call open with 'r' mode 1492s - raises an IO exception when write in a block opened with RDONLY mode 1492s - raises an IO exception when write in a block opened with 'r' mode 1492s - can't write in a block when call open with File::WRONLY||File::RDONLY mode 1492s - can't read in a block when call open with File::WRONLY||File::RDONLY mode 1492s - can write in a block when call open with WRONLY mode 1492s - can write in a block when call open with 'w' mode 1492s - raises an IOError when read in a block opened with WRONLY mode 1492s - raises an IOError when read in a block opened with 'w' mode 1492s - raises an IOError when read in a block opened with 'a' mode 1492s - raises an IOError when read in a block opened with 'a' mode 1492s - raises an IOError when read in a block opened with 'a' mode 1492s - raises an IOError when read in a block opened with File::WRONLY|File::APPEND mode 1492s - raises an IOError when write in a block opened with File::RDONLY|File::APPEND mode 1492s - can read and write in a block when call open with RDWR mode 1492s - can't read in a block when call open with File::EXCL mode 1492s - can read in a block when call open with File::EXCL mode 1492s - can read and write in a block when call open with File::RDWR|File::EXCL mode 1492s - raises an Errno::EEXIST if the file exists when open with File::CREAT|File::EXCL 1492s - creates a new file when use File::WRONLY|File::APPEND mode 1492s - opens a file when use File::WRONLY|File::APPEND mode 1492s - raises an IOError if the file exists when open with File::RDONLY|File::APPEND 1492s - truncates the file when passed File::TRUNC mode 1492s - can't read in a block when call open with File::TRUNC mode 1492s - opens a file when use File::WRONLY|File::TRUNC mode 1492s - can't write in a block when call open with File::TRUNC mode 1492s - raises an Errno::EEXIST if the file exists when open with File::RDONLY|File::TRUNC 1492s - raises an Errno::EACCES when opening non-permitted file 1492s - raises an Errno::EACCES when opening read-only file 1492s - opens a file for binary read 1492s - opens a file for binary write 1492s - opens a file for read-write and truncate the file 1492s - opens a file for binary read-write starting at the beginning of the file 1492s - opens a file for binary read-write and truncate the file 1492s - creates an unnamed temporary file with File::TMPFILE 1492s - raises a TypeError if passed a filename that is not a String or Integer type 1492s - raises a SystemCallError if passed an invalid Integer type 1492s - raises an ArgumentError if passed the wrong number of arguments 1492s - raises an ArgumentError if passed an invalid string for mode 1492s - defaults external_encoding to BINARY for binary modes 1492s - uses the second argument as an options Hash 1492s - calls #to_hash to convert the second argument to a Hash 1492s - accepts extra flags as a keyword argument and combine with a string mode 1492s - accepts extra flags as a keyword argument and combine with an integer mode 1492s - raises ArgumentError if mixing :newline and binary mode 1492s 1492s File.open with a block 1492s - does not raise error when file is closed inside the block 1492s - invokes close on an opened file when exiting the block 1492s - propagates non-StandardErrors produced by close 1492s - propagates StandardErrors produced by close 1492s - does not propagate IOError with 'closed stream' message produced by close 1492s 1492s File.open on a FIFO 1492s - opens it as a normal file 1492s 1492s File.open 'x' flag 1492s - does nothing if the file doesn't exist 1492s - throws a Errno::EEXIST error if the file exists 1492s - can't be used with 'r' and 'a' flags 1492s 1492s File.open when passed a file descriptor 1492s - opens a file 1492s - opens a file when passed a block 1492s 1492s File.open 1492s - opens directories 1492s 1492s File.owned? 1492s - accepts an object that has a #to_path method 1492s 1492s File.owned? 1492s - returns false if file does not exist 1492s - returns true if the file exist and is owned by the user 1492s - returns false when the file is not owned by the user 1492s 1492s File#path 1492s - returns a String 1492s - returns a different String on every call 1492s - returns a mutable String 1492s - calls to_str on argument and returns exact value 1492s - does not normalise the path it returns 1492s - does not canonicalize the path it returns 1492s - does not absolute-ise the path it returns 1492s 1492s File.path 1492s - returns the string argument without any change 1492s - returns path for File argument 1492s - returns path for Pathname argument 1492s - calls #to_path for non-string argument and returns result 1492s 1492s File.pipe? 1492s - accepts an object that has a #to_path method 1492s 1492s File.pipe? 1492s - returns false if file does not exist 1492s - returns false if the file is not a pipe 1492s - returns true if the file is a pipe 1492s 1492s File#printf 1492s - does not raise error when passed more arguments than needed 1492s 1492s File#printf integer formats 1492s - converts argument into Integer with to_int 1492s - converts argument into Integer with to_i if to_int isn't available 1492s - converts String argument with Kernel#Integer 1492s - raises TypeError exception if cannot convert to Integer 1492s 1492s File#printf integer formats b 1492s - converts argument as a binary number 1492s - displays negative number as a two's complement prefixed with '..1' 1492s - collapse negative number representation if it equals 1 1492s 1492s File#printf integer formats B 1492s - converts argument as a binary number 1492s - displays negative number as a two's complement prefixed with '..1' 1492s - collapse negative number representation if it equals 1 1492s 1492s File#printf integer formats d 1492s - converts argument as a decimal number 1492s - works well with large numbers 1492s 1492s File#printf integer formats i 1492s - converts argument as a decimal number 1492s - works well with large numbers 1492s 1492s File#printf integer formats u 1492s - converts argument as a decimal number 1492s - works well with large numbers 1492s 1492s File#printf integer formats o 1492s - converts argument as an octal number 1492s - displays negative number as a two's complement prefixed with '..7' 1492s - collapse negative number representation if it equals 7 1492s 1492s File#printf integer formats x 1492s - converts argument as a hexadecimal number 1492s - displays negative number as a two's complement prefixed with '..f' 1492s - collapse negative number representation if it equals f 1492s 1492s File#printf integer formats X 1492s - converts argument as a hexadecimal number with uppercase letters 1492s - displays negative number as a two's complement prefixed with '..f' 1492s - collapse negative number representation if it equals F 1492s 1492s File#printf float formats 1492s - converts argument into Float 1492s - raises TypeError exception if cannot convert to Float 1492s 1492s File#printf float formats e 1492s - converts argument into exponential notation [-]d.dddddde[+-]dd 1492s - cuts excessive digits and keeps only 6 ones 1492s - rounds the last significant digit to the closest one 1492s - displays Float::INFINITY as Inf 1492s - displays Float::NAN as NaN 1492s 1492s File#printf float formats E 1492s - converts argument into exponential notation [-]d.dddddde[+-]dd 1492s - cuts excessive digits and keeps only 6 ones 1492s - rounds the last significant digit to the closest one 1492s - displays Float::INFINITY as Inf 1492s - displays Float::NAN as NaN 1492s 1492s File#printf float formats f 1492s - converts floating point argument as [-]ddd.dddddd 1492s - cuts excessive digits and keeps only 6 ones 1492s - rounds the last significant digit to the closest one 1492s - displays Float::INFINITY as Inf 1492s - displays Float::NAN as NaN 1492s 1492s File#printf float formats g 1492s - displays Float::INFINITY as Inf 1492s - displays Float::NAN as NaN 1492s 1492s File#printf float formats g the exponent is less than -4 1492s - converts a floating point number using exponential form 1492s 1492s File#printf float formats g the exponent is greater than or equal to the precision (6 by default) 1492s - converts a floating point number using exponential form 1492s 1492s File#printf float formats g otherwise 1492s - converts a floating point number in dd.dddd form 1492s - cuts excessive digits in fractional part and keeps only 4 ones 1492s - rounds the last significant digit to the closest one in fractional part 1492s - cuts fraction part to have only 6 digits at all 1492s 1492s File#printf float formats G 1492s - displays Float::INFINITY as Inf 1492s - displays Float::NAN as NaN 1492s 1492s File#printf float formats G the exponent is less than -4 1492s - converts a floating point number using exponential form 1492s 1492s File#printf float formats G the exponent is greater than or equal to the precision (6 by default) 1492s - converts a floating point number using exponential form 1492s 1492s File#printf float formats G otherwise 1492s - converts a floating point number in dd.dddd form 1492s - cuts excessive digits in fractional part and keeps only 4 ones 1492s - rounds the last significant digit to the closest one in fractional part 1492s - cuts fraction part to have only 6 digits at all 1492s 1492s File#printf float formats a 1492s - converts floating point argument as [-]0xh.hhhhp[+-]dd 1492s - displays Float::INFINITY as Inf 1492s - displays Float::NAN as NaN 1492s 1492s File#printf float formats A 1492s - converts floating point argument as [-]0xh.hhhhp[+-]dd and use uppercase X and P 1492s - displays Float::INFINITY as Inf 1492s - displays Float::NAN as NaN 1492s 1492s File#printf other formats c 1492s - displays character if argument is a numeric code of character 1492s - displays character if argument is a single character string 1492s - raises ArgumentError if argument is a string of several characters 1492s - raises ArgumentError if argument is an empty string 1492s - raises TypeError if argument is not String or Integer and cannot be converted to them 1492s - raises TypeError if argument is nil 1492s - tries to convert argument to String with to_str 1492s - tries to convert argument to Integer with to_int 1492s - raises TypeError if converting to String with to_str returns non-String 1492s - raises TypeError if converting to Integer with to_int returns non-Integer 1492s 1492s File#printf other formats p 1492s - displays argument.inspect value 1492s 1492s File#printf other formats s 1492s - substitute argument passes as a string 1492s - substitutes '' for nil 1492s - converts argument to string with to_s 1492s - does not try to convert with to_str 1492s - formats a partial substring without including omitted characters 1492s - formats string with precision 1492s - formats string with width 1492s - formats string with width and precision 1492s - formats nil with width 1492s - formats nil with precision 1492s - formats nil with width and precision 1492s - formats multibyte string with precision 1492s - preserves encoding of the format string 1492s 1492s File#printf other formats % 1492s - alone raises an ArgumentError 1492s - is escaped by % 1492s 1492s File#printf flags space applies to numeric formats bBdiouxXeEfgGaA 1492s - leaves a space at the start of non-negative numbers 1492s - does not leave a space at the start of negative numbers 1492s - prevents converting negative argument to two's complement form 1492s - treats several white spaces as one 1492s 1492s File#printf flags (digit)$ 1492s - specifies the absolute argument number for this field 1492s - raises exception if argument number is bigger than actual arguments list 1492s - ignores '-' sign 1492s - raises ArgumentError exception when absolute and relative argument numbers are mixed 1492s 1492s File#printf flags # applies to format o 1492s - increases the precision until the first digit will be `0' if it is not formatted as complements 1492s - does nothing for negative argument 1492s 1492s File#printf flags # applies to formats bBxX 1492s - prefixes the result with 0x, 0X, 0b and 0B respectively for non-zero argument 1492s - does nothing for zero argument 1492s 1492s File#printf flags # applies to formats aAeEfgG 1492s - forces a decimal point to be added, even if no digits follow 1492s - changes format from dd.dddd to exponential form for gG 1492s 1492s File#printf flags # applies to gG 1492s - does not remove trailing zeros 1492s 1492s File#printf flags + applies to numeric formats bBdiouxXaAeEfgG 1492s - adds a leading plus sign to non-negative numbers 1492s - does not use two's complement form for negative numbers for formats bBoxX 1492s 1492s File#printf flags - 1492s - left-justifies the result of conversion if width is specified 1492s 1492s File#printf flags 0 (zero) applies to numeric formats bBdiouxXaAeEfgG and width is specified 1492s - pads with zeros, not spaces 1492s - uses radix-1 when displays negative argument as a two's complement 1492s 1492s File#printf flags * 1492s - uses the previous argument as the field width 1492s - left-justifies the result if width is negative 1492s - uses the specified argument as the width if * is followed by a number and $ 1492s - left-justifies the result if specified with $ argument is negative 1492s - raises ArgumentError when is mixed with width 1492s 1492s File#printf width 1492s - specifies the minimum number of characters that will be written to the result 1492s - is ignored if argument's actual length is greater 1492s 1492s File#printf precision integer types 1492s - controls the number of decimal places displayed 1492s 1492s File#printf precision float types 1492s - controls the number of decimal places displayed in fraction part 1492s - does not affect G format 1492s 1492s File#printf precision string formats 1492s - determines the maximum number of characters to be copied from the string 1492s 1492s File#printf reference by name %s style 1492s - uses value passed in a hash argument 1492s - supports flags, width, precision and type 1492s - allows to place name in any position 1492s - cannot be mixed with unnamed style 1492s 1492s File#printf reference by name %{name} style 1492s - uses value passed in a hash argument 1492s - does not support type style 1492s - supports flags, width and precision 1492s - cannot be mixed with unnamed style 1492s - raises KeyError when there is no matching key 1492s - converts value to String with to_s 1492s 1492s File#printf faulty key 1492s - raises a KeyError 1492s - sets the Hash as the receiver of KeyError 1492s - sets the unmatched key as the key of KeyError 1492s 1492s File.read 1492s - raises an Errno::EISDIR when passed a path that is a directory 1492s 1492s File.readable_real? 1492s - returns true if named file is readable by the real user id of the process, otherwise false 1492s - accepts an object that has a #to_path method 1492s - returns false if the file does not exist 1492s 1492s File.readable? 1492s - returns true if named file is readable by the effective user id of the process, otherwise false 1492s - accepts an object that has a #to_path method 1492s - returns false if the file does not exist 1492s 1492s File.readlink with absolute paths 1492s - returns the name of the file referenced by the given link 1492s - returns the name of the file referenced by the given link when the file does not exist 1492s - raises an Errno::ENOENT if there is no such file 1492s - raises an Errno::EINVAL if called with a normal file 1492s 1492s File.readlink with paths containing unicode characters 1492s - returns the name of the file referenced by the given link 1492s 1492s File.readlink when changing the working directory 1492s - returns the name of the file referenced by the given link 1492s - returns the name of the file referenced by the given link when the file does not exist 1492s 1492s File.realdirpath 1492s - returns '/' when passed '/' 1492s - returns the real (absolute) pathname not containing symlinks 1492s - uses base directory for interpreting relative pathname 1492s - uses current directory for interpreting relative pathname 1492s - uses link directory for expanding relative links 1492s - returns the real (absolute) pathname if the file is absent 1492s 1492s File.realpath 1492s - returns '/' when passed '/' 1492s - returns the real (absolute) pathname not containing symlinks 1492s - uses base directory for interpreting relative pathname 1492s - uses current directory for interpreting relative pathname 1492s - uses link directory for expanding relative links 1492s - removes the file element when going one level up 1492s - raises Errno::ENOENT if the file is absent 1492s - raises Errno::ENOENT if the symlink points to an absent file 1492s - converts the argument with #to_path 1492s 1492s File.rename 1492s - renames a file 1492s - raises an Errno::ENOENT if the source does not exist 1492s - raises an ArgumentError if not passed two arguments 1492s - raises a TypeError if not passed String types 1492s 1492s File#reopen 1492s - resets the stream to a new file path 1492s - calls #to_path to convert an Object 1492s 1492s File.setgid? 1492s - returns false if the file was just made 1492s - returns false if the file does not exist 1492s 1492s File.setuid? 1492s - returns false if the file was just made 1492s - returns false if the file does not exist 1492s - returns true when the gid bit is set 1492s 1492s File.size? 1492s - returns the size of the file if it exists and is not empty 1492s - accepts a String-like (to_str) parameter 1492s - accepts an object that has a #to_path method 1492s 1492s File.size? 1492s - calls #to_io to convert the argument to an IO 1492s 1492s File.size? 1492s - returns nil if file_name doesn't exist or has 0 size 1492s 1492s File.size? 1492s - returns nil if file_name is empty 1492s 1492s File.size? 1492s - accepts a File argument 1492s 1492s File.size 1492s - returns the size of the file if it exists and is not empty 1492s - accepts a String-like (to_str) parameter 1492s - accepts an object that has a #to_path method 1492s 1492s File.size 1492s - calls #to_io to convert the argument to an IO 1492s 1492s File.size 1492s - raises an error if file_name doesn't exist 1492s 1492s File.size 1492s - returns 0 if the file is empty 1492s 1492s File.size 1492s - accepts a File argument 1492s 1492s File#size 1492s - is an instance method 1492s - returns the file's size as an Integer 1492s - returns the file's size in bytes 1492s - returns the cached size of the file if subsequently deleted 1492s - returns the file's current size even if modified 1492s - raises an IOError on a closed file 1492s - follows symlinks if necessary 1492s 1492s File#size for an empty file 1492s - returns 0 1492s 1492s File.socket? 1492s - accepts an object that has a #to_path method 1492s 1492s File.socket? 1492s - returns false if file does not exist 1492s - returns false if the file is not a socket 1492s 1492s File.socket? 1492s - returns true if the file is a socket 1492s 1492s File.split 1492s - splits the string at the last '/' when the last component does not have an extension 1492s - splits the string at the last '/' when the last component has an extension 1492s - splits an empty string into a '.' and an empty string 1492s - collapses multiple '/' characters and strips trailing ones 1492s - does not split a string that contains '\' 1492s - raises an ArgumentError when not passed a single argument 1492s - raises a TypeError if the argument is not a String type 1492s - coerces the argument with to_str if it is not a String type 1492s - accepts an object that has a #to_path method 1492s 1492s File::Stat#atime 1492s - returns the atime of a File::Stat object 1492s 1492s File::Stat#birthtime 1492s - raises an NotImplementedError 1492s 1492s File::Stat#blksize 1492s - returns the blksize of a File::Stat object 1492s 1492s File::Stat#blockdev? 1492s - returns true/false depending if the named file is a block device 1492s - accepts an object that has a #to_path method 1492s 1492s File::Stat#blocks 1492s - returns a non-negative integer 1492s 1492s File::Stat#chardev? 1492s - returns true/false depending if the named file is a char device 1492s - accepts an object that has a #to_path method 1492s 1492s File::Stat#<=> 1492s - is able to compare files by the same modification times 1492s - is able to compare files by different modification times 1492s - includes Comparable and #== shows mtime equality between two File::Stat objects 1492s 1492s File::Stat#ctime 1492s - returns the ctime of a File::Stat object 1492s 1492s File::Stat#dev_major 1492s - returns the major part of File::Stat#dev 1492s 1492s File::Stat#dev_minor 1492s - returns the minor part of File::Stat#dev 1492s 1492s File::Stat#dev 1492s - returns the number of the device on which the file exists 1492s 1492s File::Stat#directory? 1492s - returns true if the argument is a directory 1492s - returns false if the argument is not a directory 1492s - accepts an object that has a #to_path method 1492s - raises a TypeError when passed an Integer 1492s - raises a TypeError when passed nil 1492s 1492s File::Stat#executable_real? 1492s - returns true if the file its an executable 1492s - accepts an object that has a #to_path method 1492s - returns true if named file is readable by the real user id of the process, otherwise false 1492s - raises an ArgumentError if not passed one argument 1492s - raises a TypeError if not passed a String type 1492s 1492s File::Stat#executable? 1492s - returns true if named file is executable by the effective user id of the process, otherwise false 1492s - returns true if the argument is an executable file 1492s - accepts an object that has a #to_path method 1492s - raises an ArgumentError if not passed one argument 1492s - raises a TypeError if not passed a String type 1492s 1492s File::Stat#file? 1492s - returns true if the named file exists and is a regular file. 1492s - accepts an object that has a #to_path method 1492s - returns true if the null device exists and is a regular file. 1492s - raises an ArgumentError if not passed one argument 1492s - raises a TypeError if not passed a String type 1492s 1492s File::Stat#ftype 1492s - returns a String 1492s - returns 'file' when the file is a file 1492s - returns 'directory' when the file is a dir 1492s - returns 'characterSpecial' when the file is a char 1492s - returns 'blockSpecial' when the file is a block 1492s - returns 'link' when the file is a link 1492s - returns fifo when the file is a fifo 1492s - returns 'socket' when the file is a socket 1492s 1492s File::Stat#gid 1492s - returns the group owner attribute of a File::Stat object 1492s 1492s File::Stat#grpowned? 1492s - returns true if the file exist 1492s - accepts an object that has a #to_path method 1492s 1492s File::Stat#ino 1492s - returns the ino of a File::Stat object 1492s 1492s File::Stat#inspect 1492s - produces a nicely formatted description of a File::Stat object 1492s 1492s File::Stat#mode 1492s - returns the mode of a File::Stat object 1492s 1492s File::Stat#mtime 1492s - returns the mtime of a File::Stat object 1492s 1492s File::Stat#initialize 1492s - raises an exception if the file doesn't exist 1492s - creates a File::Stat object for the given file 1492s - calls #to_path on non-String arguments 1492s 1492s File::Stat#nlink 1492s - returns the number of links to a file 1492s 1492s File::Stat#owned? 1492s - accepts an object that has a #to_path method 1492s 1492s File::Stat#owned? 1492s - returns true if the file is owned by the user 1492s - returns false if the file is not owned by the user 1492s 1492s File::Stat#pipe? 1492s - accepts an object that has a #to_path method 1492s 1492s File::Stat#pipe? 1492s - returns false if the file is not a pipe 1492s - returns true if the file is a pipe 1492s 1492s File::Stat#rdev_major 1492s - returns the major part of File::Stat#rdev 1492s 1492s File::Stat#rdev_minor 1492s - returns the minor part of File::Stat#rdev 1492s 1492s File::Stat#rdev 1492s - returns the number of the device this file represents which the file exists 1492s 1492s File::Stat#readable_real? 1492s - returns true if named file is readable by the real user id of the process, otherwise false 1492s - accepts an object that has a #to_path method 1492s 1492s File::Stat#readable? 1492s - returns true if named file is readable by the effective user id of the process, otherwise false 1492s - accepts an object that has a #to_path method 1492s 1492s File::Stat.size? 1492s - returns the size of the file if it exists and is not empty 1492s - accepts a String-like (to_str) parameter 1492s - accepts an object that has a #to_path method 1492s - returns nil if file_name is empty 1492s 1492s File::Stat.size 1492s - returns the size of the file if it exists and is not empty 1492s - accepts a String-like (to_str) parameter 1492s - accepts an object that has a #to_path method 1492s - returns 0 if the file is empty 1492s 1492s File::Stat#size 1492s - needs to be reviewed for spec completeness 1492s 1492s File::Stat#size? 1492s - needs to be reviewed for spec completeness 1492s 1492s File::Stat#socket? 1492s - accepts an object that has a #to_path method 1492s 1492s File::Stat#sticky? 1492s - returns true if the named file has the sticky bit, otherwise false 1492s - accepts an object that has a #to_path method 1492s 1492s File::Stat#symlink? 1492s - returns true if the file is a link 1492s - accepts an object that has a #to_path method 1492s 1492s File::Stat#uid 1492s - returns the owner attribute of a File::Stat object 1492s 1492s File::Stat.world_readable? 1492s - returns nil if the file is chmod 600 1492s - returns nil if the file is chmod 000 1492s - returns nil if the file is chmod 700 1492s - returns an Integer if the file is chmod 644 1492s - returns an Integer if the file is a directory and chmod 644 1492s - coerces the argument with #to_path 1492s 1492s File::Stat#world_readable? 1492s - needs to be reviewed for spec completeness 1492s 1492s File::Stat.world_writable? 1492s - returns nil if the file is chmod 600 1492s - returns nil if the file is chmod 000 1492s - returns nil if the file is chmod 700 1492s - returns an Integer if the file is chmod 777 1492s - returns an Integer if the file is a directory and chmod 777 1492s - coerces the argument with #to_path 1492s 1492s File::Stat#world_writable? 1492s - needs to be reviewed for spec completeness 1492s 1492s File::Stat#writable_real? 1492s - returns true if named file is writable by the real user id of the process, otherwise false 1492s - accepts an object that has a #to_path method 1492s - raises an ArgumentError if not passed one argument 1492s - raises a TypeError if not passed a String type 1492s 1492s File::Stat#writable? 1492s - returns true if named file is writable by the effective user id of the process, otherwise false 1492s - accepts an object that has a #to_path method 1492s 1492s File::Stat#zero? 1492s - returns true if the file is empty 1492s - returns false if the file is not empty 1492s - accepts an object that has a #to_path method 1492s - returns true for /dev/null 1492s - raises an ArgumentError if not passed one argument 1492s - raises a TypeError if not passed a String type 1492s - returns true inside a block opening a file if it is empty 1492s - returns true or false for a directory 1492s 1492s File.stat 1492s - returns a File::Stat object if the given file exists 1492s - returns a File::Stat object when called on an instance of File 1492s - accepts an object that has a #to_path method 1492s - raises an Errno::ENOENT if the file does not exist 1492s 1492s File.stat 1492s - returns information for a file that has been deleted but is still open 1492s - returns a File::Stat object with file properties for a symlink 1492s 1492s File.sticky? 1492s - returns true if the named file has the sticky bit, otherwise false 1492s - accepts an object that has a #to_path method 1492s - returns false if the file dies not exist 1492s 1492s File.sticky? 1492s - returns false if file does not exist 1492s - returns false if the file has not sticky bit set 1492s - returns true if the file has sticky bit set 1492s 1492s File.symlink 1492s - creates a symlink between a source and target file 1492s - creates a symbolic link 1492s - accepts args that have #to_path methods 1492s - raises an Errno::EEXIST if the target already exists 1492s - raises an ArgumentError if not called with two arguments 1492s - raises a TypeError if not called with String types 1492s 1492s File.symlink? 1492s - returns true if the file is a link 1492s - accepts an object that has a #to_path method 1492s 1492s File.symlink? 1492s - returns false if the file does not exist 1492s 1492s File#to_path 1492s - returns a String 1492s - returns a different String on every call 1492s - returns a mutable String 1492s - calls to_str on argument and returns exact value 1492s - does not normalise the path it returns 1492s - does not canonicalize the path it returns 1492s - does not absolute-ise the path it returns 1492s 1492s File.truncate 1492s - truncates a file 1492s - truncate a file size to 0 1492s - truncate a file size to 5 1492s - truncates to a larger file size than the original file 1492s - truncates to the same size as the original file 1492s - raises an Errno::ENOENT if the file does not exist 1492s - raises an ArgumentError if not passed two arguments 1492s - raises an Errno::EINVAL if the length argument is not valid 1492s - raises a TypeError if not passed a String type for the first argument 1492s - raises a TypeError if not passed an Integer type for the second argument 1492s - accepts an object that has a #to_path method 1492s 1492s File#truncate 1492s - does not move the file write pointer to the specified byte offset 1492s - does not move the file read pointer to the specified byte offset 1492s - truncates a file 1492s - truncates a file size to 0 1492s - truncates a file size to 5 1492s - truncates a file to a larger size than the original file 1492s - truncates a file to the same size as the original file 1492s - raises an ArgumentError if not passed one argument 1492s - raises an Errno::EINVAL if the length argument is not valid 1492s - raises an IOError if file is closed 1492s - raises an IOError if file is not opened for writing 1492s - raises a TypeError if not passed an Integer type for the for the argument 1492s 1492s File.umask 1492s - returns an Integer 1492s - returns the current umask value for the process 1492s - invokes to_int on non-integer argument 1492s - raises RangeError with too large values 1492s - raises ArgumentError when more than one argument is provided 1492s 1492s File.unlink 1492s - returns 0 when called without arguments 1492s - deletes a single file 1492s - deletes multiple files 1492s - raises a TypeError if not passed a String type 1492s - raises an Errno::ENOENT when the given file doesn't exist 1492s - coerces a given parameter into a string if possible 1492s - accepts an object that has a #to_path method 1492s 1492s File.utime 1492s - sets the access and modification time of each file 1492s - uses the current times if two nil values are passed 1492s - accepts an object that has a #to_path method 1492s - accepts numeric atime and mtime arguments 1492s - may set nanosecond precision 1492s - returns the number of filenames in the arguments 1492s 1492s File.world_readable? 1492s - returns nil if the file is chmod 600 1492s - returns nil if the file is chmod 000 1492s - returns nil if the file is chmod 700 1492s - returns an Integer if the file is chmod 644 1492s - returns an Integer if the file is a directory and chmod 644 1492s - coerces the argument with #to_path 1492s - returns nil if the file does not exist 1492s 1492s File.world_writable? 1492s - returns nil if the file is chmod 600 1492s - returns nil if the file is chmod 000 1492s - returns nil if the file is chmod 700 1492s - returns an Integer if the file is chmod 777 1492s - returns an Integer if the file is a directory and chmod 777 1492s - coerces the argument with #to_path 1492s - returns nil if the file does not exist 1492s 1492s File.writable_real? 1492s - returns true if named file is writable by the real user id of the process, otherwise false 1492s - accepts an object that has a #to_path method 1492s - raises an ArgumentError if not passed one argument 1492s - raises a TypeError if not passed a String type 1492s - returns false if the file does not exist 1492s 1492s File.writable? 1492s - returns true if named file is writable by the effective user id of the process, otherwise false 1492s - accepts an object that has a #to_path method 1492s - returns false if the file does not exist 1492s 1492s File.zero? 1492s - returns true if the file is empty 1492s - returns false if the file is not empty 1492s - accepts an object that has a #to_path method 1492s - returns true for /dev/null 1492s - raises an ArgumentError if not passed one argument 1492s - raises a TypeError if not passed a String type 1492s - returns true inside a block opening a file if it is empty 1492s - returns true or false for a directory 1492s - returns false if the file does not exist 1492s 1492s FileTest.blockdev? 1492s - returns true/false depending if the named file is a block device 1492s - accepts an object that has a #to_path method 1492s 1492s FileTest.chardev? 1492s - returns true/false depending if the named file is a char device 1492s - accepts an object that has a #to_path method 1492s 1492s FileTest.directory? 1492s - returns true if the argument is a directory 1492s - returns false if the argument is not a directory 1492s - accepts an object that has a #to_path method 1492s - raises a TypeError when passed an Integer 1492s - raises a TypeError when passed nil 1492s 1492s FileTest.directory? 1492s - returns false if the argument is an IO that's not a directory 1492s - returns true if the argument is an IO that is a directory 1492s - calls #to_io to convert a non-IO object 1492s 1492s FileTest.executable_real? 1492s - returns true if the file its an executable 1492s - accepts an object that has a #to_path method 1492s - returns true if named file is readable by the real user id of the process, otherwise false 1492s - raises an ArgumentError if not passed one argument 1492s - raises a TypeError if not passed a String type 1492s - returns false if the file does not exist 1492s 1492s FileTest.executable? 1492s - returns true if named file is executable by the effective user id of the process, otherwise false 1492s - returns true if the argument is an executable file 1492s - accepts an object that has a #to_path method 1492s - raises an ArgumentError if not passed one argument 1492s - raises a TypeError if not passed a String type 1492s - returns false if the file does not exist 1492s 1492s FileTest.exist? 1492s - returns true if the file exist 1492s - raises an ArgumentError if not passed one argument 1492s - raises a TypeError if not passed a String type 1492s - accepts an object that has a #to_path method 1492s 1492s File.file? 1492s - returns true if the named file exists and is a regular file. 1492s - accepts an object that has a #to_path method 1492s - returns true if the null device exists and is a regular file. 1492s - raises an ArgumentError if not passed one argument 1492s - raises a TypeError if not passed a String type 1492s 1492s FileTest.file? 1492s - needs to be reviewed for spec completeness 1492s 1492s FileTest.grpowned? 1492s - returns true if the file exist 1492s - accepts an object that has a #to_path method 1492s - returns false if the file doesn't exist 1492s 1492s FileTest.identical? 1492s - returns true for a file and its link 1492s - returns false if any of the files doesn't exist 1492s - accepts an object that has a #to_path method 1492s - raises an ArgumentError if not passed two arguments 1492s - raises a TypeError if not passed String types 1492s - returns true if both named files are identical 1492s 1492s FileTest.owned? 1492s - accepts an object that has a #to_path method 1492s 1492s FileTest.pipe? 1492s - accepts an object that has a #to_path method 1492s 1492s FileTest.readable_real? 1492s - returns true if named file is readable by the real user id of the process, otherwise false 1492s - accepts an object that has a #to_path method 1492s - returns false if the file does not exist 1492s 1492s FileTest.readable? 1492s - returns true if named file is readable by the effective user id of the process, otherwise false 1492s - accepts an object that has a #to_path method 1492s - returns false if the file does not exist 1492s 1492s FileTest.size? 1492s - returns the size of the file if it exists and is not empty 1492s - accepts a String-like (to_str) parameter 1492s - accepts an object that has a #to_path method 1492s 1492s FileTest.size? 1492s - returns nil if file_name doesn't exist or has 0 size 1492s 1492s FileTest.size? 1492s - returns nil if file_name is empty 1492s 1492s FileTest.size? 1492s - accepts a File argument 1492s 1492s FileTest.size 1492s - returns the size of the file if it exists and is not empty 1492s - accepts a String-like (to_str) parameter 1492s - accepts an object that has a #to_path method 1492s 1492s FileTest.size 1492s - raises an error if file_name doesn't exist 1492s 1492s FileTest.size 1492s - returns 0 if the file is empty 1492s 1492s FileTest.size 1492s - accepts a File argument 1492s 1492s FileTest.socket? 1492s - accepts an object that has a #to_path method 1492s 1492s FileTest.sticky? 1492s - returns true if the named file has the sticky bit, otherwise false 1492s - accepts an object that has a #to_path method 1492s - returns false if the file dies not exist 1492s 1492s FileTest.symlink? 1492s - returns true if the file is a link 1492s - accepts an object that has a #to_path method 1492s 1492s FileTest.symlink? 1492s - returns false if the file does not exist 1492s 1492s FileTest.world_readable? 1492s - needs to be reviewed for spec completeness 1492s 1492s FileTest.world_writable? 1492s - needs to be reviewed for spec completeness 1492s 1492s FileTest.writable_real? 1492s - returns true if named file is writable by the real user id of the process, otherwise false 1492s - accepts an object that has a #to_path method 1492s - raises an ArgumentError if not passed one argument 1492s - raises a TypeError if not passed a String type 1492s - returns false if the file does not exist 1492s 1492s FileTest.writable? 1492s - returns true if named file is writable by the effective user id of the process, otherwise false 1492s - accepts an object that has a #to_path method 1492s - returns false if the file does not exist 1492s 1492s FileTest.zero? 1492s - returns true if the file is empty 1492s - returns false if the file is not empty 1492s - accepts an object that has a #to_path method 1492s - returns true for /dev/null 1492s - raises an ArgumentError if not passed one argument 1493s - raises a TypeError if not passed a String type 1493s - returns true inside a block opening a file if it is empty 1493s - returns true or false for a directory 1493s - returns false if the file does not exist 1493s 1493s Float#abs 1493s - returns the absolute value 1493s - returns 0.0 if -0.0 1493s - returns Infinity if -Infinity 1493s - returns NaN if NaN 1493s 1493s Float#angle 1493s - returns NaN if NaN 1493s - returns self if NaN 1493s - returns 0 if positive 1493s - returns 0 if +0.0 1493s - returns 0 if +Infinity 1493s - returns Pi if negative 1493s - returns Pi if -0.0 1493s - returns Pi if -Infinity 1493s 1493s Float#arg 1493s - returns NaN if NaN 1493s - returns self if NaN 1493s - returns 0 if positive 1493s - returns 0 if +0.0 1493s - returns 0 if +Infinity 1493s - returns Pi if negative 1493s - returns Pi if -0.0 1493s - returns Pi if -Infinity 1493s 1493s Float#=== 1493s - returns true if self has the same value as other 1493s - calls 'other == self' if coercion fails 1493s - returns false if one side is NaN 1493s - handles positive infinity 1493s - handles negative infinity 1493s 1493s Float#ceil 1493s - returns the smallest Integer greater than or equal to self 1493s - returns the smallest number greater than or equal to self with an optionally given precision 1493s 1493s Float#coerce 1493s - returns [other, self] both as Floats 1493s 1493s Float#<=> 1493s - returns -1, 0, 1 when self is less than, equal, or greater than other 1493s - returns nil if one side is NaN 1493s - handles positive infinity 1493s - handles negative infinity 1493s - returns nil when the given argument is not a Float 1493s - compares using #coerce when argument is not a Float 1493s - raises TypeError when #coerce misbehaves 1493s - returns the correct result when one side is infinite 1493s - returns 0 when self is Infinity and other other is infinite?=1 1493s - returns 1 when self is Infinity and other is infinite?=-1 1493s - returns 1 when self is Infinity and other is infinite?=nil (which means finite) 1493s - returns 0 for -0.0 and 0.0 1493s - returns 0 for -0.0 and 0 1493s - returns 0 for 0.0 and 0 1493s 1493s Float constant 1493s - DIG is 15 1493s - EPSILON is 2.220446049250313e-16 1493s - MANT_DIG is 53 1493s - MAX_10_EXP is 308 1493s - MIN_10_EXP is -308 1493s - MAX_EXP is 1024 1493s - MIN_EXP is -1021 1493s - MAX is 1.7976931348623157e+308 1493s - MIN is 2.2250738585072014e-308 1493s - RADIX is 2 1493s - INFINITY is the positive infinity 1493s - NAN is 'not a number' 1493s 1493s Float#denominator 1493s - returns an Integer 1493s - converts self to a Rational and returns the denominator 1493s - returns 1 for NaN and Infinity 1493s 1493s Float#/ 1493s - does not rescue exception raised in other#coerce 1493s - returns self divided by other 1493s - properly coerces objects 1493s - returns +Infinity when dividing non-zero by zero of the same sign 1493s - returns -Infinity when dividing non-zero by zero of opposite sign 1493s - returns NaN when dividing zero by zero 1493s - raises a TypeError when given a non-Numeric 1493s - divides correctly by Rational numbers 1493s 1493s Float#divmod 1493s - returns an [quotient, modulus] from dividing self by other 1493s - raises a FloatDomainError if self is NaN 1493s - raises a FloatDomainError if other is NaN 1493s - raises a FloatDomainError if self is Infinity 1493s - raises a ZeroDivisionError if other is zero 1493s - returns the correct [quotient, modulus] even for large quotient 1493s 1493s Float#dup 1493s - returns self 1493s 1493s Float#eql? 1493s - returns true if other is a Float equal to self 1493s - returns false if other is a Float not equal to self 1493s - returns false if other is not a Float 1493s 1493s Float#== 1493s - returns true if self has the same value as other 1493s - calls 'other == self' if coercion fails 1493s - returns false if one side is NaN 1493s - handles positive infinity 1493s - handles negative infinity 1493s 1493s Float#** 1493s - returns self raise to the other power 1493s - returns a complex number when negative and raised to a fractional power 1493s 1493s Float#fdiv 1493s - performs floating-point division between self and an Integer 1493s - performs floating-point division between self and an Integer 1493s - performs floating-point division between self and a Float 1493s - returns NaN when the argument is NaN 1493s - returns Infinity when the argument is 0.0 1493s - returns -Infinity when the argument is 0.0 and self is negative 1493s - returns Infinity when the argument is 0 1493s - returns -Infinity when the argument is 0 and self is negative 1493s - returns 0.0 when the argument is Infinity 1493s - returns -0.0 when the argument is -Infinity 1493s - performs floating-point division between self and a Rational 1493s - performs floating-point division between self and a Complex 1493s - raises a TypeError when argument isn't numeric 1493s - raises an ArgumentError when passed multiple arguments 1493s 1493s Float#finite? 1493s - returns true for finite values 1493s - returns false for positive infinity 1493s - returns false for negative infinity 1493s - returns false for NaN 1493s 1493s Float 1493s - includes Comparable 1493s - .allocate raises a TypeError 1493s - .new is undefined 1493s 1493s Float#floor 1493s - returns the largest Integer less than or equal to self 1493s - returns the largest number less than or equal to self with an optionally given precision 1493s 1493s Float#> 1493s - does not rescue exception raised in other#coerce 1493s - returns true if self is greater than other 1493s - raises an ArgumentError when given a non-Numeric 1493s - returns false if one side is NaN 1493s - handles positive infinity 1493s - handles negative infinity 1493s 1493s Float#>= 1493s - does not rescue exception raised in other#coerce 1493s - returns true if self is greater than or equal to other 1493s - raises an ArgumentError when given a non-Numeric 1493s - returns false if one side is NaN 1493s - handles positive infinity 1493s - handles negative infinity 1493s 1493s Float#hash 1493s - is provided 1493s - is stable 1493s 1493s Float#infinite? 1493s - returns nil for finite values 1493s - returns 1 for positive infinity 1493s - returns -1 for negative infinity 1493s - returns nil for NaN 1493s 1493s Float#inspect 1493s - returns 'NaN' for NaN 1493s - returns 'Infinity' for positive infinity 1493s - returns '-Infinity' for negative infinity 1493s - returns '0.0' for 0.0 1493s - emits '-' for -0.0 1493s - emits a '-' for negative values 1493s - emits a trailing '.0' for a whole number 1493s - emits a trailing '.0' for the mantissa in e format 1493s - uses non-e format for a positive value with fractional part having 5 significant figures 1493s - uses non-e format for a negative value with fractional part having 5 significant figures 1493s - uses e format for a positive value with fractional part having 6 significant figures 1493s - uses e format for a negative value with fractional part having 6 significant figures 1493s - uses non-e format for a positive value with whole part having 15 significant figures 1493s - uses non-e format for a negative value with whole part having 15 significant figures 1493s - uses non-e format for a positive value with whole part having 16 significant figures 1493s - uses non-e format for a negative value with whole part having 16 significant figures 1493s - outputs the minimal, unique form necessary to recreate the value 1493s - outputs the minimal, unique form to represent the value 1493s 1493s Float#inspect matches 1493s - random examples in all ranges 1493s - random examples in human ranges 1493s - random values from divisions 1493s 1493s Float#inspect encoding 1493s - returns a String in US-ASCII encoding when Encoding.default_internal is nil 1493s - returns a String in US-ASCII encoding when Encoding.default_internal is not nil 1493s 1493s Float#< 1493s - does not rescue exception raised in other#coerce 1493s - returns true if self is less than other 1493s - raises an ArgumentError when given a non-Numeric 1493s - returns false if one side is NaN 1493s - handles positive infinity 1493s - handles negative infinity 1493s 1493s Float#<= 1493s - does not rescue exception raised in other#coerce 1493s - returns true if self is less than or equal to other 1493s - raises an ArgumentError when given a non-Numeric 1493s - returns false if one side is NaN 1493s - handles positive infinity 1493s - handles negative infinity 1493s 1493s Float#magnitude 1493s - returns the absolute value 1493s - returns 0.0 if -0.0 1493s - returns Infinity if -Infinity 1493s - returns NaN if NaN 1493s 1493s Float#- 1493s - does not rescue exception raised in other#coerce 1493s - returns self minus other 1493s 1493s Float#% 1493s - returns self modulo other 1493s - returns self when modulus is +Infinity 1493s - returns -Infinity when modulus is -Infinity 1493s - returns NaN when called on NaN or Infinities 1493s - returns NaN when modulus is NaN 1493s - returns -0.0 when called on -0.0 with a non zero modulus 1493s - tries to coerce the modulus 1493s - raises a ZeroDivisionError if other is zero 1493s 1493s Float#modulo 1493s - returns self modulo other 1493s - returns self when modulus is +Infinity 1493s - returns -Infinity when modulus is -Infinity 1493s - returns NaN when called on NaN or Infinities 1493s - returns NaN when modulus is NaN 1493s - returns -0.0 when called on -0.0 with a non zero modulus 1493s - tries to coerce the modulus 1493s - raises a ZeroDivisionError if other is zero 1493s 1493s Float#* 1493s - does not rescue exception raised in other#coerce 1493s - returns self multiplied by other 1493s - raises a TypeError when given a non-Numeric 1493s 1493s Float#nan? 1493s - returns true if self is not a valid IEEE floating-point number 1493s 1493s Float#negative? on positive numbers 1493s - returns false 1493s 1493s Float#negative? on zero 1493s - returns false 1493s 1493s Float#negative? on negative zero 1493s - returns false 1493s 1493s Float#negative? on negative numbers 1493s - returns true 1493s 1493s Float#negative? on NaN 1493s - returns false 1493s 1493s Float#next_float 1493s - returns a float the smallest possible step greater than the receiver 1493s - returns Float::INFINITY for Float::INFINITY 1493s - steps directly between MAX and INFINITY 1493s - steps directly between 1.0 and 1.0 + EPSILON 1493s - steps directly between -1.0 and -1.0 + EPSILON/2 1493s - reverses the effect of prev_float for all Floats except INFINITY and +0.0 1493s - returns negative zero when stepping upward from just below zero 1493s - gives the same result for -0.0 as for +0.0 1493s - returns NAN if NAN was the receiver 1493s 1493s Float#numerator 1493s - converts self to a Rational object then returns its numerator 1493s - returns 0 for 0.0 1493s - returns NaN for NaN 1493s - returns Infinity for Infinity 1493s - returns -Infinity for -Infinity 1493s 1493s Float#phase 1493s - returns NaN if NaN 1493s - returns self if NaN 1493s - returns 0 if positive 1493s - returns 0 if +0.0 1493s - returns 0 if +Infinity 1493s - returns Pi if negative 1493s - returns Pi if -0.0 1493s - returns Pi if -Infinity 1493s 1493s Float#+ 1493s - does not rescue exception raised in other#coerce 1493s - returns self plus other 1493s 1493s Float#positive? on positive numbers 1493s - returns true 1493s 1493s Float#positive? on zero 1493s - returns false 1493s 1493s Float#positive? on negative zero 1493s - returns false 1493s 1493s Float#positive? on negative numbers 1493s - returns false 1493s 1493s Float#positive? on NaN 1493s - returns false 1493s 1493s Float#prev_float 1493s - returns a float the smallest possible step smaller than the receiver 1493s - returns -Float::INFINITY for -Float::INFINITY 1493s - steps directly between MAX and INFINITY 1493s - steps directly between 1.0 and 1.0 - EPSILON/2 1493s - steps directly between -1.0 and -1.0 - EPSILON 1493s - reverses the effect of next_float for all Floats except -INFINITY and -0.0 1493s - returns positive zero when stepping downward from just above zero 1493s - gives the same result for -0.0 as for +0.0 1493s - returns NAN if NAN was the receiver 1493s 1493s Float#quo 1493s - performs floating-point division between self and an Integer 1493s - performs floating-point division between self and an Integer 1493s - performs floating-point division between self and a Float 1493s - returns NaN when the argument is NaN 1493s - returns Infinity when the argument is 0.0 1493s - returns -Infinity when the argument is 0.0 and self is negative 1493s - returns Infinity when the argument is 0 1493s - returns -Infinity when the argument is 0 and self is negative 1493s - returns 0.0 when the argument is Infinity 1493s - returns -0.0 when the argument is -Infinity 1493s - performs floating-point division between self and a Rational 1493s - performs floating-point division between self and a Complex 1493s - raises a TypeError when argument isn't numeric 1493s - raises an ArgumentError when passed multiple arguments 1493s 1493s Float#rationalize 1493s - returns self as a simplified Rational with no argument 1493s - simplifies self to the degree specified by a Rational argument 1493s - simplifies self to the degree specified by a Float argument 1493s - raises a FloatDomainError for Infinity 1493s - raises a FloatDomainError for NaN 1493s - raises ArgumentError when passed more than one argument 1493s 1493s Float#round 1493s - returns the nearest Integer 1493s - returns the nearest Integer for Float near the limit 1493s - raises FloatDomainError for exceptional values 1493s - rounds self to an optionally given precision 1493s - returns zero when passed a negative argument with magnitude greater than magnitude of the whole number portion of the Float 1493s - raises a TypeError when its argument can not be converted to an Integer 1493s - raises FloatDomainError for exceptional values when passed a non-positive precision 1493s - raises RangeError for NAN when passed a non-positive precision 1493s - returns self for exceptional values when passed a non-negative precision 1493s - works for corner cases 1493s - returns rounded values for big argument 1493s - returns big values rounded to nearest 1493s - returns rounded values for big values 1493s - returns different rounded values depending on the half option 1493s - rounds self to an optionally given precision with a half option 1493s - preserves cases where neighbouring floating pointer number increase the decimal places 1493s - does not lose precision during the rounding process 1493s - raises FloatDomainError for exceptional values with a half option 1493s - raise for a non-existent round mode 1493s 1493s Float#round when 0.0 is given 1493s - returns self for positive ndigits 1493s - returns 0 for 0 or undefined ndigits 1493s 1493s Float#to_f 1493s - returns self 1493s 1493s Float#to_i 1493s - returns self truncated to an Integer 1493s - raises a FloatDomainError for NaN 1493s 1493s Float#to_int 1493s - returns self truncated to an Integer 1493s - raises a FloatDomainError for NaN 1493s 1493s Float#to_r 1493s - needs to be reviewed for spec completeness 1493s 1493s Float#to_s 1493s - returns 'NaN' for NaN 1493s - returns 'Infinity' for positive infinity 1493s - returns '-Infinity' for negative infinity 1493s - returns '0.0' for 0.0 1493s - emits '-' for -0.0 1493s - emits a '-' for negative values 1493s - emits a trailing '.0' for a whole number 1493s - emits a trailing '.0' for the mantissa in e format 1493s - uses non-e format for a positive value with fractional part having 5 significant figures 1493s - uses non-e format for a negative value with fractional part having 5 significant figures 1493s - uses e format for a positive value with fractional part having 6 significant figures 1493s - uses e format for a negative value with fractional part having 6 significant figures 1493s - uses non-e format for a positive value with whole part having 15 significant figures 1493s - uses non-e format for a negative value with whole part having 15 significant figures 1493s - uses non-e format for a positive value with whole part having 16 significant figures 1493s - uses non-e format for a negative value with whole part having 16 significant figures 1493s - outputs the minimal, unique form necessary to recreate the value 1493s - outputs the minimal, unique form to represent the value 1493s 1493s Float#to_s matches 1493s - random examples in all ranges 1493s - random examples in human ranges 1493s - random values from divisions 1493s 1493s Float#to_s encoding 1493s - returns a String in US-ASCII encoding when Encoding.default_internal is nil 1493s - returns a String in US-ASCII encoding when Encoding.default_internal is not nil 1493s 1493s Float#truncate 1493s - returns self truncated to an Integer 1493s - raises a FloatDomainError for NaN 1493s - returns self truncated to an optionally given precision 1493s 1493s Float#-@ 1493s - negates self 1493s - negates self at Float boundaries 1493s - returns negative infinity for positive infinity 1493s - returns positive infinity for negative infinity 1493s - returns NaN for NaN 1493s 1493s Float#+@ 1493s - returns the same value with same sign (twos complement) 1493s 1493s Float#zero? 1493s - returns true if self is 0.0 1493s 1493s GC.auto_compact 1493s - can set and get a boolean value 1493s 1493s GC.count 1493s - returns an integer 1493s - increases as collections are run 1493s 1493s GC.disable 1493s - returns true if and only if the garbage collection was previously disabled 1493s 1493s GC.enable 1493s - returns true if and only if the garbage collection was already disabled 1493s 1493s GC#garbage_collect 1493s - always returns nil 1493s 1493s GC::Profiler.clear 1493s - needs to be reviewed for spec completeness 1493s 1493s GC::Profiler.disable 1493s - disables the profiler 1493s 1493s GC::Profiler.enable 1493s - enables the profiler 1493s 1493s GC::Profiler.enabled? 1493s - reports as enabled when enabled 1493s - reports as disabled when disabled 1493s 1493s GC::Profiler.report 1493s - needs to be reviewed for spec completeness 1493s 1493s GC::Profiler.total_time 1493s - returns an float 1493s 1493s GC.start 1494s - always returns nil 1494s - accepts keyword arguments 1494s 1494s GC.stat 1494s - returns hash of values 1494s - updates the given hash values 1494s - can return a single value 1494s - increases count after GC is run 1494s - provides some number for count 1494s - raises an error if argument is not nil, a symbol, or a hash 1494s - raises an error if an unknown key is given 1494s 1494s GC.stress 1494s - returns current status of GC stress mode 1494s 1494s GC.stress= 1494s - sets the stress mode 1494s 1494s Hash.allocate 1494s - returns an instance of Hash 1494s - returns a fully-formed instance of Hash 1494s 1494s Hash#any? with no block given 1494s - checks if there are any members of a Hash 1494s 1494s Hash#any? with a block given 1494s - is false if the hash is empty 1494s - is true if the block returns true for any member of the hash 1494s - is false if the block returns false for all members of the hash 1494s 1494s Hash#assoc 1494s - returns an Array if the argument is == to a key of the Hash 1494s - returns a 2-element Array if the argument is == to a key of the Hash 1494s - sets the first element of the Array to the located key 1494s - sets the last element of the Array to the value of the located key 1494s - only returns the first matching key-value pair for identity hashes 1494s - uses #== to compare the argument to the keys 1494s - returns nil if the argument is not a key of the Hash 1494s - returns nil if the argument is not a key of the Hash even when there is a default 1494s 1494s Hash#clear 1494s - removes all key, value pairs 1494s - does not remove default values 1494s - does not remove default procs 1494s - raises a FrozenError if called on a frozen instance 1494s 1494s Hash#clone 1494s - copies instance variable but not the objects they refer to 1494s 1494s Hash#compact 1494s - returns new object that rejects pair has nil value 1494s - keeps own pairs 1494s 1494s Hash#compact! 1494s - returns self 1494s - rejects own pair has nil value 1494s 1494s Hash#compact! when each pair does not have nil value 1494s - returns nil 1494s 1494s Hash#compact! on frozen instance 1494s - keeps pairs and raises a FrozenError 1494s 1494s Hash#compare_by_identity 1494s - causes future comparisons on the receiver to be made by identity 1494s - rehashes internally so that old keys can be looked up 1494s - returns self 1494s - has no effect on an already compare_by_identity hash 1494s - uses the semantics of BasicObject#equal? to determine key identity 1494s - uses #equal? semantics, but doesn't actually call #equal? to determine identity 1494s - does not call #hash on keys 1494s - regards #dup'd objects as having different identities 1494s - regards #clone'd objects as having different identities 1494s - regards references to the same object as having the same identity 1494s - raises a FrozenError on frozen hashes 1494s - persists over #dups 1494s - persists over #clones 1494s - does not copy string keys 1494s - gives different identity for string literals 1494s 1494s Hash#compare_by_identity? 1494s - returns false by default 1494s - returns true once #compare_by_identity has been invoked on self 1494s - returns true when called multiple times on the same ident hash 1494s 1494s Hash.[] 1494s - creates a Hash; values can be provided as the argument list 1494s - creates a Hash; values can be provided as one single hash 1494s - creates a Hash; values can be provided as a list of value-pairs in an array 1494s - coerces a single argument which responds to #to_ary 1494s - raises for elements that are not arrays 1494s - raises an ArgumentError for arrays of more than 2 elements 1494s - raises an ArgumentError when passed a list of value-invalid-pairs in an array 1494s - raises an ArgumentError when passed an odd number of arguments 1494s - calls to_hash 1494s - returns an instance of a subclass when passed an Array 1494s - returns instances of subclasses 1494s - returns an instance of the class it's called on 1494s - does not call #initialize on the subclass instance 1494s - removes the default value 1494s - removes the default_proc 1494s 1494s Hash.[] passed zero arguments 1494s - returns an empty hash 1494s 1494s Hash.[] passed an array 1494s - treats elements that are 2 element arrays as key and value 1494s - treats elements that are 1 element arrays as keys with value nil 1494s 1494s Hash.[] passed a single argument which responds to #to_hash 1494s - coerces it and returns a copy 1494s 1494s Hash#deconstruct_keys 1494s - returns self 1494s - requires one argument 1494s - ignores argument 1494s 1494s Hash#default_proc 1494s - returns the block passed to Hash.new 1494s - returns nil if no block was passed to proc 1494s 1494s Hash#default_proc= 1494s - replaces the block passed to Hash.new 1494s - uses :to_proc on its argument 1494s - overrides the static default 1494s - raises an error if passed stuff not convertible to procs 1494s - returns the passed Proc 1494s - clears the default proc if passed nil 1494s - returns nil if passed nil 1494s - accepts a lambda with an arity of 2 1494s - raises a TypeError if passed a lambda with an arity other than 2 1494s - raises a FrozenError if self is frozen 1494s 1494s Hash#default 1494s - returns the default value 1494s - uses the default proc to compute a default value, passing given key 1494s - calls default proc with nil arg if passed a default proc but no arg 1494s 1494s Hash#default= 1494s - sets the default value 1494s - unsets the default proc 1494s - raises a FrozenError if called on a frozen instance 1494s 1494s Hash#delete_if 1494s - yields two arguments: key and value 1494s - removes every entry for which block is true and returns self 1494s - removes all entries if the block is true 1494s - processes entries with the same order as each() 1494s - raises a FrozenError if called on a frozen instance 1494s - returns an Enumerator if called on a non-empty hash without a block 1494s - returns an Enumerator if called on an empty hash without a block 1494s - returns an Enumerator if called on a frozen instance 1494s 1494s Hash#delete_if when no block is given returned Enumerator 1494s - size returns the enumerable size 1494s 1494s Hash#delete 1494s - removes the entry and returns the deleted value 1494s - calls supplied block if the key is not found 1494s - returns nil if the key is not found when no block is given 1494s - allows removing a key while iterating 1494s - allows removing a key while iterating for big hashes 1494s - accepts keys with private #hash method 1494s - raises a FrozenError if called on a frozen instance 1494s 1494s Hash#dig 1494s - returns #[] with one arg 1494s - returns the nested value specified by the sequence of keys 1494s - returns the nested value specified if the sequence includes an index 1494s - returns nil if any intermediate step is nil 1494s - raises an ArgumentError if no arguments provided 1494s - handles type-mixed deep digging 1494s - raises TypeError if an intermediate element does not respond to #dig 1494s - calls #dig on the result of #[] with the remaining arguments 1494s - respects Hash's default 1494s 1494s Hash#each_key 1494s - calls block once for each key, passing key 1494s - processes keys in the same order as keys() 1494s - returns an Enumerator if called on a non-empty hash without a block 1494s - returns an Enumerator if called on an empty hash without a block 1494s - returns an Enumerator if called on a frozen instance 1494s 1494s Hash#each_key when no block is given returned Enumerator 1494s - size returns the enumerable size 1494s 1494s Hash#each_pair 1494s - yields a [[key, value]] Array for each pair to a block expecting |*args| 1494s - yields the key and value of each pair to a block expecting |key, value| 1494s - yields the key only to a block expecting |key,| 1494s - always yields an Array of 2 elements, even when given a callable of arity 2 1494s - yields an Array of 2 elements when given a callable of arity 1 1494s - raises an error for a Hash when an arity enforcing callable of arity >2 is passed in 1494s - uses the same order as keys() and values() 1494s - properly expands (or not) child class's 'each'-yielded args 1494s - returns an Enumerator if called on a non-empty hash without a block 1494s - returns an Enumerator if called on an empty hash without a block 1494s - returns an Enumerator if called on a frozen instance 1494s 1494s Hash#each_pair when no block is given returned Enumerator 1494s - size returns the enumerable size 1494s 1494s Hash#each 1494s - yields a [[key, value]] Array for each pair to a block expecting |*args| 1494s - yields the key and value of each pair to a block expecting |key, value| 1494s - yields the key only to a block expecting |key,| 1494s - always yields an Array of 2 elements, even when given a callable of arity 2 1494s - yields an Array of 2 elements when given a callable of arity 1 1494s - raises an error for a Hash when an arity enforcing callable of arity >2 is passed in 1494s - uses the same order as keys() and values() 1494s - properly expands (or not) child class's 'each'-yielded args 1494s - returns an Enumerator if called on a non-empty hash without a block 1494s - returns an Enumerator if called on an empty hash without a block 1494s - returns an Enumerator if called on a frozen instance 1494s 1494s Hash#each when no block is given returned Enumerator 1494s - size returns the enumerable size 1494s 1494s Hash#each_value 1494s - calls block once for each key, passing value 1494s - processes values in the same order as values() 1494s - returns an Enumerator if called on a non-empty hash without a block 1494s - returns an Enumerator if called on an empty hash without a block 1494s - returns an Enumerator if called on a frozen instance 1494s 1494s Hash#each_value when no block is given returned Enumerator 1494s - size returns the enumerable size 1494s 1494s Hash#[] 1494s - returns the value for key 1494s - returns nil as default default value 1494s - returns the default (immediate) value for missing keys 1494s - calls subclass implementations of default 1494s - does not create copies of the immediate default value 1494s - returns the default (dynamic) value for missing keys 1494s - does not return default values for keys with nil values 1494s - compares keys with eql? semantics 1494s - compares key via hash 1494s - does not compare keys with different #hash values via #eql? 1494s - compares keys with the same #hash value via #eql? 1494s - finds a value via an identical key even when its #eql? isn't reflexive 1494s - supports keys with private #hash method 1498s - does not dispatch to hash for Boolean, Integer, Float, String, or Symbol 1498s 1498s Hash#[]= 1498s - associates the key with the value and return the value 1498s - duplicates string keys using dup semantics 1498s - stores unequal keys that hash to the same value 1498s - accepts keys with private #hash method 1498s - accepts keys with an Integer hash 1498s - duplicates and freezes string keys 1498s - doesn't duplicate and freeze already frozen string keys 1498s - keeps the existing key in the hash if there is a matching one 1498s - keeps the existing String key in the hash if there is a matching one 1498s - raises a FrozenError if called on a frozen instance 1498s - does not raise an exception if changing the value of an existing key during iteration 1501s - does not dispatch to hash for Boolean, Integer, Float, String, or Symbol 1501s 1501s Hash#empty? 1501s - returns true if the hash has no entries 1501s - returns true if the hash has no entries and has a default value 1501s 1501s Hash#eql? 1501s - does not compare values when keys don't match 1501s - returns false when the numbers of keys differ without comparing any elements 1501s - first compares keys via hash 1501s - does not compare keys with different hash codes via eql? 1501s - computes equality for recursive hashes 1501s - doesn't call to_hash on objects 1501s - computes equality for complex recursive hashes 1501s - computes equality for recursive hashes & arrays 1501s - compares values when keys match 1501s - compares keys with eql? semantics 1501s - returns true if and only if other Hash has the same number of keys and each key-value pair matches 1501s - does not call to_hash on hash subclasses 1501s - ignores hash class differences 1501s - compares keys with matching hash codes via eql? 1501s - compares the values in self to values in other hash 1501s - returns true if other Hash has the same number of keys and each key-value pair matches, even though the default-value are not same 1501s 1501s Hash#== 1501s - does not compare values when keys don't match 1501s - returns false when the numbers of keys differ without comparing any elements 1501s - first compares keys via hash 1501s - does not compare keys with different hash codes via eql? 1501s - computes equality for recursive hashes 1501s - doesn't call to_hash on objects 1501s - computes equality for complex recursive hashes 1501s - computes equality for recursive hashes & arrays 1501s - compares values when keys match 1501s - compares keys with eql? semantics 1501s - returns true if and only if other Hash has the same number of keys and each key-value pair matches 1501s - does not call to_hash on hash subclasses 1501s - ignores hash class differences 1501s - compares keys with matching hash codes via eql? 1501s - compares the values in self to values in other hash 1501s - returns true if other Hash has the same number of keys and each key-value pair matches, even though the default-value are not same 1501s - compares values with == semantics 1501s 1501s Hash#except 1501s - returns a new duplicate hash without arguments 1501s - returns a hash without the requested subset 1501s - ignores keys not present in the original hash 1501s - always returns a Hash without a default 1501s 1501s Hash#fetch 1501s - returns the value for key 1501s - returns default if key is not found when passed a default 1501s - returns value of block if key is not found when passed a block 1501s - gives precedence to the default block over the default argument when passed both 1501s - raises an ArgumentError when not passed one or two arguments 1501s 1501s Hash#fetch when the key is not found 1501s - raises a KeyError 1501s - sets the Hash as the receiver of KeyError 1501s - sets the unmatched key as the key of KeyError 1501s - raises a KeyError 1501s - sets the Hash as the receiver of KeyError 1501s - sets the unmatched key as the key of KeyError 1501s - raises a KeyError 1501s - sets the Hash as the receiver of KeyError 1501s - sets the unmatched key as the key of KeyError 1501s - raises a KeyError 1501s - sets the Hash as the receiver of KeyError 1501s - sets the unmatched key as the key of KeyError 1501s - formats the object with #inspect in the KeyError message 1501s 1501s Hash#fetch_values with matched keys 1501s - returns the values for keys 1501s - returns the values for keys ordered in the order of the requested keys 1501s 1501s Hash#fetch_values with unmatched keys 1501s - raises a KeyError 1501s - sets the Hash as the receiver of KeyError 1501s - sets the unmatched key as the key of KeyError 1501s - returns the default value from block 1501s 1501s Hash#fetch_values without keys 1501s - returns an empty Array 1501s 1501s Hash#filter 1501s - yields two arguments: key and value 1501s - returns a Hash of entries for which block is true 1501s - processes entries with the same order as reject 1501s - returns an Enumerator when called on a non-empty hash without a block 1501s - returns an Enumerator when called on an empty hash without a block 1501s - returns an Enumerator if called on a non-empty hash without a block 1501s - returns an Enumerator if called on an empty hash without a block 1501s - returns an Enumerator if called on a frozen instance 1501s 1501s Hash#filter when no block is given returned Enumerator 1501s - size returns the enumerable size 1501s 1501s Hash#filter! 1501s - is equivalent to keep_if if changes are made 1501s - removes all entries if the block is false 1501s - returns nil if no changes were made 1501s - raises a FrozenError if called on an empty frozen instance 1501s - raises a FrozenError if called on a frozen instance that would not be modified 1501s - returns an Enumerator if called on a non-empty hash without a block 1501s - returns an Enumerator if called on an empty hash without a block 1501s - returns an Enumerator if called on a frozen instance 1501s 1501s Hash#filter! when no block is given returned Enumerator 1501s - size returns the enumerable size 1501s 1501s Hash#flatten 1501s - returns an Array 1501s - returns an empty Array for an empty Hash 1501s - sets each even index of the Array to a key of the Hash 1501s - sets each odd index of the Array to the value corresponding to the previous element 1501s - does not recursively flatten Array values when called without arguments 1501s - does not recursively flatten Hash values when called without arguments 1501s - recursively flattens Array values when called with an argument >= 2 1501s - recursively flattens Array values to the given depth 1501s - raises a TypeError if given a non-Integer argument 1501s 1501s Hash#> 1501s - raises a TypeError if the right operand is not a hash 1501s - returns false if both hashes have the same keys but different values 1501s - returns true if the other hash is a subset of self 1501s - returns false if the other hash is not a subset of self 1501s - converts the right operand to a hash before comparing 1501s - returns false if both hashes are identical 1501s 1501s Hash#> 1501s - returns false when receiver size is smaller than argument 1501s - returns false when receiver size is the same as argument 1501s - returns true when argument is a subset of receiver 1501s - returns false when keys match but values don't 1501s 1501s Hash#>= 1501s - raises a TypeError if the right operand is not a hash 1501s - returns false if both hashes have the same keys but different values 1501s - returns true if the other hash is a subset of self 1501s - returns false if the other hash is not a subset of self 1501s - converts the right operand to a hash before comparing 1501s - returns true if both hashes are identical 1501s 1501s Hash#>= 1501s - returns false when receiver size is smaller than argument 1501s - returns false when argument is not a subset or not equals to receiver 1501s - returns true when argument is a subset of receiver or equals to receiver 1501s - returns false when keys match but values don't 1501s 1501s Hash#has_key? 1501s - returns true if argument is a key 1501s - returns true if the key's matching value was nil 1501s - returns true if the key's matching value was false 1501s - returns true if the key is nil 1501s - compares keys with the same #hash value via #eql? 1501s 1501s Hash#has_value? 1501s - returns true if the value exists in the hash 1501s - uses == semantics for comparing values 1501s 1501s Hash 1501s - includes Enumerable 1501s 1501s Hash#hash 1501s - returns a value which doesn't depend on the hash order 1501s - returns a value in which element values do not cancel each other out 1501s - returns a value in which element keys and values do not cancel each other out 1501s - generates a hash for recursive hash structures 1501s - returns the same hash for recursive hashes 1501s - returns the same hash for recursive hashes through arrays 1501s - allows omitting values 1501s 1501s Hash#include? 1501s - returns true if argument is a key 1501s - returns true if the key's matching value was nil 1501s - returns true if the key's matching value was false 1501s - returns true if the key is nil 1501s - compares keys with the same #hash value via #eql? 1501s 1501s Hash#initialize 1501s - is private 1501s - can be used to reset default_proc 1501s - can be used to reset the default value 1501s - receives the arguments passed to Hash#new 1501s - does not change the storage, only the default value or proc 1501s - returns self 1501s - raises a FrozenError if called on a frozen instance 1501s 1501s Hash#inspect 1501s - returns a string representation with same order as each() 1501s - calls #inspect on keys and values 1501s - does not call #to_s on a String returned from #inspect 1501s - calls #to_s on the object returned from #inspect if the Object isn't a String 1501s - does not call #to_str on the object returned from #inspect when it is not a String 1501s - does not call #to_str on the object returned from #to_s when it is not a String 1501s - does not swallow exceptions raised by #to_s 1501s - handles hashes with recursive values 1501s - does not raise if inspected result is not default external encoding 1501s - works for keys and values whose #inspect return a frozen String 1501s 1501s Hash#invert 1501s - returns a new hash where keys are values and vice versa 1501s - handles collisions by overriding with the key coming later in keys() 1501s - compares new keys with eql? semantics 1501s - does not return subclass instances for subclasses 1501s 1501s Hash#keep_if 1501s - yields two arguments: key and value 1501s - keeps every entry for which block is true and returns self 1501s - removes all entries if the block is false 1501s - returns self even if unmodified 1501s - raises a FrozenError if called on a frozen instance 1501s - returns an Enumerator if called on a non-empty hash without a block 1501s - returns an Enumerator if called on an empty hash without a block 1501s - returns an Enumerator if called on a frozen instance 1501s 1501s Hash#keep_if when no block is given returned Enumerator 1501s - size returns the enumerable size 1501s 1501s Hash#key? 1501s - returns true if argument is a key 1501s - returns true if the key's matching value was nil 1501s - returns true if the key's matching value was false 1501s - returns true if the key is nil 1501s - compares keys with the same #hash value via #eql? 1501s 1501s Hash#key 1501s - returns the corresponding key for value 1501s - returns nil if the value is not found 1501s - doesn't return default value if the value is not found 1501s - compares values using == 1501s 1501s Hash#keys 1501s - returns an array with the keys in the order they were inserted 1501s - uses the same order as #values 1501s 1501s Hash#length 1501s - returns the number of entries 1501s 1501s Hash#< 1501s - raises a TypeError if the right operand is not a hash 1501s - returns false if both hashes have the same keys but different values 1501s - returns true if self is a subset of the other hash 1501s - returns false if self is not a subset of the other hash 1501s - converts the right operand to a hash before comparing 1501s - returns false if both hashes are identical 1501s 1501s Hash#< 1501s - returns false when receiver size is larger than argument 1501s - returns false when receiver size is the same as argument 1501s - returns true when receiver is a subset of argument 1501s - returns false when keys match but values don't 1501s 1501s Hash#<= 1501s - raises a TypeError if the right operand is not a hash 1501s - returns false if both hashes have the same keys but different values 1501s - returns true if self is a subset of the other hash 1501s - returns false if self is not a subset of the other hash 1501s - converts the right operand to a hash before comparing 1501s - returns true if both hashes are identical 1501s 1501s Hash#<= 1501s - returns false when receiver size is larger than argument 1501s - returns false when receiver size is the same as argument 1501s - returns true when receiver is a subset of argument or equals to argument 1501s - returns false when keys match but values don't 1501s 1501s Hash#member? 1501s - returns true if argument is a key 1501s - returns true if the key's matching value was nil 1501s - returns true if the key's matching value was false 1501s - returns true if the key is nil 1501s - compares keys with the same #hash value via #eql? 1501s 1501s Hash#merge 1501s - returns a new hash by combining self with the contents of other 1501s - sets any duplicate key to the value of block if passed a block 1501s - tries to convert the passed argument to a hash using #to_hash 1501s - does not call to_hash on hash subclasses 1501s - returns subclass instance for subclasses 1501s - processes entries with same order as each() 1501s - preserves the order of merged elements 1501s - preserves the order of merged elements for large hashes 1501s - accepts multiple hashes 1501s - accepts zero arguments and returns a copy of self 1501s 1501s Hash#merge! 1501s - adds the entries from other, overwriting duplicate keys. Returns self 1501s - sets any duplicate key to the value of block if passed a block 1501s - tries to convert the passed argument to a hash using #to_hash 1501s - does not call to_hash on hash subclasses 1501s - processes entries with same order as merge() 1501s - raises a FrozenError on a frozen instance that is modified 1501s - checks frozen status before coercing an object with #to_hash 1501s - raises a FrozenError on a frozen instance that would not be modified 1501s - does not raise an exception if changing the value of an existing key during iteration 1501s - accepts multiple hashes 1501s - accepts zero arguments 1501s 1501s Hash.new 1501s - creates an empty Hash if passed no arguments 1501s - creates a new Hash with default object if passed a default argument 1501s - does not create a copy of the default argument 1501s - creates a Hash with a default_proc if passed a block 1501s - raises an ArgumentError if more than one argument is passed 1501s - raises an ArgumentError if passed both default argument and default block 1501s 1501s Hash#rassoc 1501s - returns an Array if the argument is a value of the Hash 1501s - returns a 2-element Array if the argument is a value of the Hash 1501s - sets the first element of the Array to the key of the located value 1501s - sets the last element of the Array to the located value 1501s - only returns the first matching key-value pair 1501s - uses #== to compare the argument to the values 1501s - returns nil if the argument is not a value of the Hash 1501s - returns nil if the argument is not a value of the Hash even when there is a default 1501s 1501s Hash#rehash 1501s - reorganizes the Hash by recomputing all key hash codes 1501s - calls #hash for each key 1501s - removes duplicate keys 1501s - removes duplicate keys for large hashes 1501s - raises a FrozenError if called on a frozen instance 1501s 1501s Hash#reject 1501s - returns a new hash removing keys for which the block yields true 1501s - is equivalent to hsh.dup.delete_if 1501s - processes entries with the same order as reject! 1501s - returns an Enumerator if called on a non-empty hash without a block 1501s - returns an Enumerator if called on an empty hash without a block 1501s - returns an Enumerator if called on a frozen instance 1501s 1501s Hash#reject with extra state 1501s - returns Hash instance for subclasses 1501s 1501s Hash#reject when no block is given returned Enumerator 1501s - size returns the enumerable size 1501s 1501s Hash#reject! 1501s - removes keys from self for which the block yields true 1501s - removes all entries if the block is true 1501s - is equivalent to delete_if if changes are made 1501s - returns nil if no changes were made 1501s - processes entries with the same order as delete_if 1501s - raises a FrozenError if called on a frozen instance that is modified 1501s - raises a FrozenError if called on a frozen instance that would not be modified 1501s - returns an Enumerator if called on a non-empty hash without a block 1501s - returns an Enumerator if called on an empty hash without a block 1501s - returns an Enumerator if called on a frozen instance 1501s 1501s Hash#reject! when no block is given returned Enumerator 1501s - size returns the enumerable size 1501s 1501s Hash#replace 1501s - replaces the contents of self with other 1501s - tries to convert the passed argument to a hash using #to_hash 1501s - calls to_hash on hash subclasses 1501s - does not transfer default values 1501s - raises a FrozenError if called on a frozen instance that would not be modified 1501s - raises a FrozenError if called on a frozen instance that is modified 1501s 1501s Hash.ruby2_keywords_hash? 1501s - returns false if the Hash is not a keywords Hash 1501s - returns true if the Hash is a keywords Hash marked by Module#ruby2_keywords 1501s - raises TypeError for non-Hash 1501s 1501s Hash.ruby2_keywords_hash 1501s - returns a copy of a Hash and marks the copy as a keywords Hash 1501s - returns an instance of the subclass if called on an instance of a subclass of Hash 1501s - copies instance variables 1501s - copies the hash internals 1501s - raises TypeError for non-Hash 1501s - retains the default value 1501s - retains the default_proc 1501s 1501s Hash#select 1501s - yields two arguments: key and value 1501s - returns a Hash of entries for which block is true 1501s - processes entries with the same order as reject 1501s - returns an Enumerator when called on a non-empty hash without a block 1501s - returns an Enumerator when called on an empty hash without a block 1501s - returns an Enumerator if called on a non-empty hash without a block 1501s - returns an Enumerator if called on an empty hash without a block 1501s - returns an Enumerator if called on a frozen instance 1501s 1501s Hash#select when no block is given returned Enumerator 1501s - size returns the enumerable size 1501s 1501s Hash#select! 1501s - is equivalent to keep_if if changes are made 1501s - removes all entries if the block is false 1501s - returns nil if no changes were made 1501s - raises a FrozenError if called on an empty frozen instance 1501s - raises a FrozenError if called on a frozen instance that would not be modified 1501s - returns an Enumerator if called on a non-empty hash without a block 1501s - returns an Enumerator if called on an empty hash without a block 1501s - returns an Enumerator if called on a frozen instance 1501s 1501s Hash#select! when no block is given returned Enumerator 1501s - size returns the enumerable size 1501s 1501s Hash#shift 1501s - removes a pair from hash and return it 1501s - allows shifting entries while iterating 1501s - calls #default with nil if the Hash is empty 1501s - returns nil from an empty hash 1501s - returns (computed) default for empty hashes 1501s - preserves Hash invariants when removing the last item 1501s - raises a FrozenError if called on a frozen instance 1501s - works when the hash is at capacity 1501s 1501s Hash#size 1501s - returns the number of entries 1501s 1501s Hash#slice 1501s - returns a new empty hash without arguments 1501s - returns the requested subset 1501s - returns a hash ordered in the order of the requested keys 1501s - returns only the keys of the original hash 1501s - returns a Hash instance, even on subclasses 1501s - uses the regular Hash#[] method, even on subclasses that override it 1501s 1501s Hash#sort 1501s - converts self to a nested array of [key, value] arrays and sort with Array#sort 1501s - works when some of the keys are themselves arrays 1501s - uses block to sort array if passed a block 1501s 1501s Hash#store 1501s - associates the key with the value and return the value 1501s - duplicates string keys using dup semantics 1501s - stores unequal keys that hash to the same value 1501s - accepts keys with private #hash method 1501s - accepts keys with an Integer hash 1501s - duplicates and freezes string keys 1501s - doesn't duplicate and freeze already frozen string keys 1501s - keeps the existing key in the hash if there is a matching one 1501s - keeps the existing String key in the hash if there is a matching one 1501s - raises a FrozenError if called on a frozen instance 1501s - does not raise an exception if changing the value of an existing key during iteration 1504s - does not dispatch to hash for Boolean, Integer, Float, String, or Symbol 1504s 1504s Hash#to_a 1504s - returns a list of [key, value] pairs with same order as each() 1504s - is called for Enumerable#entries 1504s 1504s Hash#to_h 1504s - returns self for Hash instances 1504s 1504s Hash#to_h when called on a subclass of Hash 1504s - returns a new Hash instance 1504s - copies the default 1504s - copies the default_proc 1504s 1504s Hash#to_h with block 1504s - converts [key, value] pairs returned by the block to a hash 1504s - raises ArgumentError if block returns longer or shorter array 1504s - raises TypeError if block returns something other than Array 1504s - coerces returned pair to Array with #to_ary 1504s - does not coerce returned pair to Array with #to_a 1504s 1504s Hash#to_hash 1504s - returns self for Hash instances 1504s - returns self for instances of subclasses of Hash 1504s 1504s Hash#to_proc 1504s - returns an instance of Proc 1504s 1504s Hash#to_proc the returned proc 1504s - is a lambda 1504s - has an arity of 1 1504s - raises ArgumentError if not passed exactly one argument 1504s - raises an ArgumentError when calling #call on the Proc with no arguments 1504s 1504s Hash#to_proc the returned proc with a stored key 1504s - returns the paired value 1504s 1504s Hash#to_proc the returned proc passed as a block 1504s - retrieves the hash's values 1504s 1504s Hash#to_proc the returned proc passed as a block to instance_exec 1504s - always retrieves the original hash's values 1504s 1504s Hash#to_proc the returned proc with no stored key 1504s - returns nil 1504s 1504s Hash#to_proc the returned proc with no stored key when the hash has a default value 1504s - returns the default value 1504s 1504s Hash#to_proc the returned proc with no stored key when the hash has a default proc 1504s - returns an evaluated value from the default proc 1504s 1504s Hash#to_s 1504s - returns a string representation with same order as each() 1504s - calls #inspect on keys and values 1504s - does not call #to_s on a String returned from #inspect 1504s - calls #to_s on the object returned from #inspect if the Object isn't a String 1504s - does not call #to_str on the object returned from #inspect when it is not a String 1504s - does not call #to_str on the object returned from #to_s when it is not a String 1504s - does not swallow exceptions raised by #to_s 1504s - handles hashes with recursive values 1504s - does not raise if inspected result is not default external encoding 1504s - works for keys and values whose #inspect return a frozen String 1504s 1504s Hash#transform_keys 1504s - returns new hash 1504s - sets the result as transformed keys with the given block 1504s - keeps last pair if new keys conflict 1504s - makes both hashes to share values 1504s - returns a Hash instance, even on subclasses 1504s - allows a hash argument 1504s - allows a partial transformation of keys when using a hash argument 1504s - allows a combination of hash and block argument 1504s 1504s Hash#transform_keys when no block is given 1504s - returns a sized Enumerator 1504s 1504s Hash#transform_keys! 1504s - returns self 1504s - updates self as transformed values with the given block 1504s - prevents conflicts between new keys and old ones 1504s - returns the processed keys and non evaluated keys if we break from the block 1504s - keeps later pair if new keys conflict 1504s - allows a hash argument 1504s 1504s Hash#transform_keys! when no block is given 1504s - returns a sized Enumerator 1504s 1504s Hash#transform_keys! on frozen instance 1504s - raises a FrozenError on an empty hash 1504s - keeps pairs and raises a FrozenError 1504s - raises a FrozenError on hash argument 1504s 1504s Hash#transform_keys! on frozen instance when no block is given 1504s - does not raise an exception 1504s 1504s Hash#transform_values 1504s - returns new hash 1504s - sets the result as transformed values with the given block 1504s - makes both hashes to share keys 1504s - returns a Hash instance, even on subclasses 1504s 1504s Hash#transform_values when no block is given 1504s - returns a sized Enumerator 1504s 1504s Hash#transform_values! 1504s - returns self 1504s - updates self as transformed values with the given block 1504s - partially modifies the contents if we broke from the block 1504s 1504s Hash#transform_values! when no block is given 1504s - returns a sized Enumerator 1504s 1504s Hash#transform_values! on frozen instance 1504s - raises a FrozenError on an empty hash 1504s - keeps pairs and raises a FrozenError 1504s 1504s Hash#transform_values! on frozen instance when no block is given 1504s - does not raise an exception 1504s 1504s Hash.try_convert 1504s - returns the argument if it's a Hash 1504s - returns the argument if it's a kind of Hash 1504s - returns nil when the argument does not respond to #to_hash 1504s - sends #to_hash to the argument and returns the result if it's nil 1504s - sends #to_hash to the argument and returns the result if it's a Hash 1504s - sends #to_hash to the argument and returns the result if it's a kind of Hash 1504s - sends #to_hash to the argument and raises TypeError if it's not a kind of Hash 1504s - does not rescue exceptions raised by #to_hash 1504s 1504s Hash#update 1504s - adds the entries from other, overwriting duplicate keys. Returns self 1504s - sets any duplicate key to the value of block if passed a block 1504s - tries to convert the passed argument to a hash using #to_hash 1504s - does not call to_hash on hash subclasses 1504s - processes entries with same order as merge() 1504s - raises a FrozenError on a frozen instance that is modified 1504s - checks frozen status before coercing an object with #to_hash 1504s - raises a FrozenError on a frozen instance that would not be modified 1504s - does not raise an exception if changing the value of an existing key during iteration 1504s - accepts multiple hashes 1504s - accepts zero arguments 1504s 1504s Hash#value? 1504s - returns true if the value exists in the hash 1504s - uses == semantics for comparing values 1504s 1504s Hash#values_at 1504s - returns an array of values for the given keys 1504s 1504s Hash#values 1504s - returns an array of values 1504s 1504s Integer#abs fixnum 1504s - returns self's absolute fixnum value 1504s 1504s Integer#abs bignum 1504s - returns the absolute bignum value 1504s 1504s Integer#allbits? 1504s - returns true if and only if all the bits of the argument are set in the receiver 1504s - handles negative values using two's complement notation 1504s - coerces the rhs using to_int 1504s - raises a TypeError when given a non-Integer 1504s 1504s Integer#anybits? 1504s - returns true if and only if all the bits of the argument are set in the receiver 1504s - handles negative values using two's complement notation 1504s - coerces the rhs using to_int 1504s - raises a TypeError when given a non-Integer 1504s 1504s Integer#& fixnum 1504s - returns self bitwise AND other 1504s - returns self bitwise AND other when one operand is negative 1504s - returns self bitwise AND other when both operands are negative 1504s - returns self bitwise AND a bignum 1504s - coerces the rhs and calls #coerce 1504s - raises a TypeError when passed a Float 1504s - raises a TypeError and does not call #to_int when defined on an object 1504s 1504s Integer#& bignum 1504s - returns self bitwise AND other 1504s - returns self bitwise AND other when one operand is negative 1504s - returns self bitwise AND other when both operands are negative 1504s - returns self bitwise AND other when both are negative and a multiple in bitsize of Fixnum::MIN 1504s - raises a TypeError when passed a Float 1504s - raises a TypeError and does not call #to_int when defined on an object 1504s 1504s Integer#bit_length fixnum 1504s - returns the position of the leftmost bit of a positive number 1504s - returns the position of the leftmost 0 bit of a negative number 1504s 1504s Integer#bit_length bignum 1504s - returns the position of the leftmost bit of a positive number 1504s - returns the position of the leftmost 0 bit of a negative number 1504s 1504s Integer#| fixnum 1504s - returns self bitwise OR other 1504s - returns self bitwise OR other when one operand is negative 1504s - returns self bitwise OR other when both operands are negative 1504s - returns self bitwise OR a bignum 1504s - coerces the rhs and calls #coerce 1504s - raises a TypeError when passed a Float 1504s - raises a TypeError and does not call #to_int when defined on an object 1504s 1504s Integer#| bignum 1504s - returns self bitwise OR other 1504s - returns self bitwise OR other when one operand is negative 1504s - returns self bitwise OR other when both operands are negative 1504s - raises a TypeError when passed a Float 1504s - raises a TypeError and does not call #to_int when defined on an object 1504s 1504s Integer#^ fixnum 1504s - returns self bitwise EXCLUSIVE OR other 1504s - returns self bitwise XOR other when one operand is negative 1504s - returns self bitwise XOR other when both operands are negative 1504s - returns self bitwise EXCLUSIVE OR a bignum 1504s - coerces the rhs and calls #coerce 1504s - raises a TypeError when passed a Float 1504s - raises a TypeError and does not call #to_int when defined on an object 1504s 1504s Integer#^ bignum 1504s - returns self bitwise EXCLUSIVE OR other 1504s - returns self bitwise EXCLUSIVE OR other when one operand is negative 1504s - returns self bitwise EXCLUSIVE OR other when both operands are negative 1504s - returns self bitwise EXCLUSIVE OR other when all bits are 1 and other value is negative 1504s - raises a TypeError when passed a Float 1504s - raises a TypeError and does not call #to_int when defined on an object 1504s 1504s Integer#=== fixnum 1504s - returns true if self has the same value as other 1504s - calls 'other == self' if the given argument is not an Integer 1504s 1504s Integer#=== bignum 1504s - returns true if self has the same value as the given argument 1504s - calls 'other == self' if the given argument is not an Integer 1504s - returns the result of 'other == self' as a boolean 1504s 1504s Integer#ceil 1504s - returns self 1504s - returns self if not passed a precision 1504s - returns self if passed a precision of zero 1504s - returns itself if passed a positive precision 1504s 1504s Integer#ceil precision argument specified as part of the ceil method is negative 1504s - returns the smallest integer greater than self with at least precision.abs trailing zeros 1504s 1504s Integer#chr without argument 1504s - returns a String 1504s - returns a new String for each call 1504s - raises a RangeError is self is less than 0 1504s - raises a RangeError if self is too large 1504s 1504s Integer#chr without argument when Encoding.default_internal is nil 1504s - raises a RangeError is self is greater than 255 1504s 1504s Integer#chr without argument when Encoding.default_internal is nil and self is between 0 and 127 (inclusive) 1504s - returns a US-ASCII String 1505s - returns a String encoding self interpreted as a US-ASCII codepoint 1505s 1505s Integer#chr without argument when Encoding.default_internal is nil and self is between 128 and 255 (inclusive) 1505s - returns a binary String 1505s - returns a String containing self interpreted as a byte 1505s 1505s Integer#chr without argument when Encoding.default_internal is not nil and self is between 0 and 127 (inclusive) 1505s - returns a US-ASCII String 1505s - returns a String encoding self interpreted as a US-ASCII codepoint 1505s 1505s Integer#chr without argument when Encoding.default_internal is not nil and self is between 128 and 255 (inclusive) 1505s - returns a binary String 1505s - returns a String containing self interpreted as a byte 1505s 1505s Integer#chr without argument when Encoding.default_internal is not nil and self is greater than 255 1505s - returns a String with the default internal encoding 1505s - returns a String encoding self interpreted as a codepoint in the default internal encoding 1505s - raises RangeError if self is invalid as a codepoint in the default internal encoding 1505s 1505s Integer#chr with an encoding argument 1505s - returns a String 1505s - returns a new String for each call 1505s - accepts a String as an argument 1505s - converts a String to an Encoding as Encoding.find does 1505s - raises a RangeError is self is less than 0 1505s - raises a RangeError if self is too large 1505s - returns a String with the specified encoding 1505s - returns a String encoding self interpreted as a codepoint in the specified encoding 1505s - raises RangeError if self is invalid as a codepoint in the specified encoding 1505s - returns a String encoding self interpreted as a codepoint in the CESU-8 encoding 1505s 1505s Integer#coerce fixnum 1505s - raises a TypeError when trying to coerce with nil 1505s - tries to convert the given Object into a Float by using #to_f 1505s - raises a TypeError when given an Object that does not respond to #to_f 1505s 1505s Integer#coerce fixnum when given a Fixnum 1505s - returns an array containing two Fixnums 1505s 1505s Integer#coerce fixnum when given a String 1505s - raises an ArgumentError when trying to coerce with a non-number String 1505s - returns an array containing two Floats 1505s 1505s Integer#coerce bignum 1505s - coerces other to a Bignum and returns [other, self] when passed a Fixnum 1505s - returns [other, self] when passed a Bignum 1505s - raises a TypeError when not passed a Fixnum or Bignum 1505s - coerces both values to Floats and returns [other, self] when passed a Float 1505s - coerces both values to Floats and returns [other, self] when passed a String 1505s - calls #to_f to coerce other to a Float 1505s 1505s Integer#coerce bigdecimal 1505s - produces Floats 1505s 1505s Integer#<=> fixnum 1505s - returns -1 when self is less than the given argument 1505s - returns 0 when self is equal to the given argument 1505s - returns 1 when self is greater than the given argument 1505s - returns nil when the given argument is not an Integer 1505s 1505s Integer#<=> bignum 1505s - returns 1 when self is Infinity and other is a Bignum 1505s - returns -1 when self is negative and other is Infinity 1505s - returns 1 when self is negative and other is -Infinity 1505s - returns -1 when self is -Infinity and other is negative 1505s 1505s Integer#<=> bignum with a Fixnum 1505s - returns -1 when other is larger 1505s - returns 1 when other is smaller 1505s 1505s Integer#<=> bignum with a Bignum when other is negative 1505s - returns -1 when self is negative and other is larger 1505s - returns 0 when other is equal 1505s - returns 1 when self is negative and other is smaller 1505s - returns 1 when self is positive 1505s 1505s Integer#<=> bignum with a Bignum when other is positive 1505s - returns -1 when self is negative 1505s - returns -1 when self is positive and other is larger 1505s - returns 0 when other is equal 1505s - returns 1 when other is smaller 1505s 1505s Integer#<=> bignum with a Float when other is negative 1505s - returns -1 when self is negative and other is larger 1505s - returns 0 when other is equal 1505s - returns 1 when self is negative and other is smaller 1505s - returns 1 when self is positive 1505s 1505s Integer#<=> bignum with a Float when other is positive 1505s - returns -1 when self is negative 1505s - returns -1 when self is positive and other is larger 1505s - returns 0 when other is equal 1505s - returns 1 when other is smaller 1505s 1505s Integer#<=> bignum with an Object 1505s - calls #coerce on other 1505s - lets the exception go through if #coerce raises an exception 1505s - raises an exception if #coerce raises a non-StandardError exception 1505s - returns nil if #coerce does not return an Array 1505s - returns -1 if the coerced value is larger 1505s - returns 0 if the coerced value is equal 1505s - returns 1 if the coerced value is smaller 1505s 1505s Integer#~ fixnum 1505s - returns self with each bit flipped 1505s 1505s Integer#~ bignum 1505s - returns self with each bit flipped 1505s 1505s Fixnum 1505s - is unified into Integer 1505s - is deprecated 1505s 1505s Bignum 1505s - is unified into Integer 1505s - is deprecated 1505s 1505s Integer#denominator 1505s - returns 1 1505s 1505s Integer#digits 1505s - returns an array of place values in base-10 by default 1505s - returns digits by place value of a given radix 1505s - converts the radix with #to_int 1505s - returns [0] when called on 0, regardless of base 1505s - raises ArgumentError when calling with a radix less than 2 1505s - raises ArgumentError when calling with a negative radix 1505s - raises Math::DomainError when calling digits on a negative number 1505s - returns integer values > 9 when base is above 10 1505s - can be used with base > 37 1505s 1505s Integer#div fixnum 1505s - returns self divided by the given argument as an Integer 1505s - rounds towards -inf 1505s - means (x / y).floor 1505s - calls #coerce and #div if argument responds to #coerce 1505s - coerces self and the given argument to Floats and returns self divided by other as Integer 1505s - raises a ZeroDivisionError when the given argument is 0 and a Float 1505s - raises a ZeroDivisionError when the given argument is 0 and not a Float 1505s - raises a TypeError when given a non-numeric argument 1505s 1505s Integer#div bignum 1505s - returns self divided by other 1505s - handles fixnum_min / -1 1505s - calls #coerce and #div if argument responds to #coerce 1505s - means (x / y).floor 1505s - looses precision if passed Float argument 1505s - raises a TypeError when given a non-numeric 1505s - returns a result of integer division of self by a float argument 1505s - raises ZeroDivisionError if the argument is 0 and is a Float 1505s - raises ZeroDivisionError if the argument is 0 and is not a Float 1505s 1505s Integer#div rational 1505s - returns self divided by the given argument as an Integer 1505s 1505s Integer#/ 1505s - does not rescue exception raised in other#coerce 1505s 1505s Integer#/ fixnum 1505s - returns self divided by the given argument 1505s - supports dividing negative numbers 1505s - returns result the same class as the argument 1505s - raises a ZeroDivisionError if the given argument is zero and not a Float 1505s - does NOT raise ZeroDivisionError if the given argument is zero and is a Float 1505s - coerces fixnum and return self divided by other 1505s - raises a TypeError when given a non-Integer 1505s 1505s Integer#/ bignum 1505s - returns self divided by other 1505s - returns self divided by Float 1505s - returns result the same class as the argument 1505s - does NOT raise ZeroDivisionError if other is zero and is a Float 1505s - raises a ZeroDivisionError if other is zero and not a Float 1505s - raises a TypeError when given a non-numeric 1505s 1505s Integer#divmod fixnum 1505s - returns an Array containing quotient and modulus obtained from dividing self by the given argument 1505s - raises a ZeroDivisionError when the given argument is 0 1505s - raises a ZeroDivisionError when the given argument is 0 and a Float 1505s - raises a TypeError when given a non-Integer 1505s 1505s Integer#divmod bignum 1505s - returns an Array containing quotient and modulus obtained from dividing self by the given argument 1505s - raises a ZeroDivisionError when the given argument is 0 1505s - raises a FloatDomainError if other is NaN 1505s - raises a ZeroDivisionError when the given argument is 0 and a Float 1505s - raises a TypeError when the given argument is not an Integer 1505s 1505s Integer#divmod bignum with q = floor(x/y), a = q*b + r, 1505s - returns [q,r] when a < 0, b > 0 and |a| < b 1505s - returns [q,r] when a > 0, b < 0 and a > |b| 1505s - returns [q,r] when a > 0, b < 0 and a < |b| 1505s - returns [q,r] when a < 0, b < 0 and |a| < |b| 1505s 1505s Integer#downto [stop] when self and stop are Integers 1505s - does not yield when stop is greater than self 1505s - yields once when stop equals self 1505s - yields while decreasing self until it is less than stop 1505s - yields while decreasing self until it less than ceil for a Float endpoint 1505s - raises an ArgumentError for invalid endpoints 1505s 1505s Integer#downto [stop] when self and stop are Integers when no block is given 1505s - returns an Enumerator 1505s 1505s Integer#downto [stop] when self and stop are Integers when no block is given returned Enumerator size 1505s - raises an ArgumentError for invalid endpoints 1505s - returns self - stop + 1 1505s - returns 0 when stop > self 1505s 1505s Integer#dup 1505s - returns self for small integers 1505s - returns self for large integers 1505s 1505s Integer#[] fixnum 1505s - behaves like (n >> b) & 1 1505s - returns 1 if the nth bit is set 1505s - returns 1 if the nth bit is set (in two's-complement representation) 1505s - returns 0 if the nth bit is not set 1505s - returns 0 if the nth bit is not set (in two's-complement representation) 1505s - returns 0 if the nth bit is greater than the most significant bit 1505s - returns 1 if self is negative and the nth bit is greater than the most significant bit 1505s - returns 0 when passed a negative argument 1505s - calls #to_int to convert the argument to an Integer and returns 1 if the nth bit is set 1505s - calls #to_int to convert the argument to an Integer and returns 0 if the nth bit is set 1505s - accepts a Float argument and returns 0 if the bit at the truncated value is not set 1505s - accepts a Float argument and returns 1 if the bit at the truncated value is set 1505s - raises a TypeError when passed a String 1505s - raises a TypeError when #to_int does not return an Integer 1505s - calls #to_int to coerce a String to a Bignum and returns 0 1505s - returns 0 when passed a Float in the range of a Bignum 1505s 1505s Integer#[] fixnum when index and length passed 1505s - returns specified number of bits from specified position 1505s - ensures n[i, len] equals to (n >> i) & ((1 << len) - 1) 1505s - moves start position to the most significant bits when negative index passed 1505s - ignores negative length 1505s 1505s Integer#[] fixnum when range passed 1505s - returns bits specified by range 1505s - ensures n[i..j] equals to (n >> i) & ((1 << (j - i + 1)) - 1) 1505s - ensures n[i..] equals to (n >> i) 1505s - moves lower boundary to the most significant bits when negative value passed 1505s - ignores upper boundary smaller than lower boundary 1505s - raises FloatDomainError if any boundary is infinity 1505s 1505s Integer#[] fixnum when range passed when passed (..i) 1505s - returns 0 if all i bits equal 0 1505s - raises ArgumentError if any of i bit equals 1 1505s 1505s Integer#[] bignum 1505s - returns the nth bit in the binary representation of self 1505s - tries to convert the given argument to an Integer using #to_int 1505s - raises a TypeError when the given argument can't be converted to Integer 1505s /tmp/autopkgtest.nFBjtB/autopkgtest_tmp/spec/ruby/core/integer/fdiv_spec.rb:15: warning: Bignum out of Float range 1505s /tmp/autopkgtest.nFBjtB/autopkgtest_tmp/spec/ruby/core/integer/fdiv_spec.rb:15: warning: Bignum out of Float range 1505s /tmp/autopkgtest.nFBjtB/autopkgtest_tmp/spec/ruby/core/integer/fdiv_spec.rb:15: warning: Bignum out of Float range 1505s /tmp/autopkgtest.nFBjtB/autopkgtest_tmp/spec/ruby/core/integer/fdiv_spec.rb:59: warning: Bignum out of Float range 1505s /tmp/autopkgtest.nFBjtB/autopkgtest_tmp/spec/ruby/core/integer/fdiv_spec.rb:60: warning: Bignum out of Float range 1505s 1505s Integer#== fixnum 1505s - returns true if self has the same value as other 1505s - calls 'other == self' if the given argument is not an Integer 1505s 1505s Integer#== bignum 1505s - returns true if self has the same value as the given argument 1505s - calls 'other == self' if the given argument is not an Integer 1505s - returns the result of 'other == self' as a boolean 1505s 1505s Integer#even? fixnum 1505s - returns true for a Fixnum when it is an even number 1505s - returns true for a Bignum when it is an even number 1505s 1505s Integer#even? bignum 1505s - returns true if self is even and positive 1505s - returns true if self is even and negative 1505s - returns false if self is odd and positive 1505s - returns false if self is odd and negative 1505s 1505s Integer#** fixnum 1505s - returns self raised to the given power 1505s - overflows the answer to a bignum transparently 1505s - raises negative numbers to the given power 1505s - can raise 1 to a bignum safely 1505s - can raise -1 to a bignum safely 1505s - returns Float::INFINITY when the number is too big 1505s - raises a ZeroDivisionError for 0 ** -1 1505s - returns Float::INFINITY for 0 ** -1.0 1505s - raises a TypeError when given a non-numeric power 1505s - coerces power and calls #** 1505s - returns Float when power is Float 1505s - returns Rational when power is Rational 1505s - returns a complex number when negative and raised to a fractional power 1505s 1505s Integer#** bignum 1505s - returns self raised to other power 1505s - raises a TypeError when given a non-Integer 1505s - switch to a Float when the values is too big 1505s - returns a complex number when negative and raised to a fractional power 1505s 1505s Integer#fdiv 1505s - performs floating-point division between self and a fixnum 1505s - performs floating-point division between self and a bignum 1505s - performs floating-point division between self bignum and a bignum 1505s - rounds to the correct float for bignum denominators 1505s - performs floating-point division between self and a Float 1505s - returns NaN when the argument is NaN 1505s - returns Infinity when the argument is 0 1505s - returns -Infinity when the argument is 0 and self is negative 1505s - returns Infinity when the argument is 0.0 1505s - returns -Infinity when the argument is 0.0 and self is negative 1505s - raises a TypeError when argument isn't numeric 1505s - raises an ArgumentError when passed multiple arguments 1505s - follows the coercion protocol 1505s 1505s Integer#floor 1505s - returns self 1505s - returns self if not passed a precision 1505s - returns self if passed a precision of zero 1505s - returns itself if passed a positive precision 1505s 1505s Integer#floor precision argument specified as part of the floor method is negative 1505s - returns the largest integer less than self with at least precision.abs trailing zeros 1505s 1505s Integer#gcd 1505s - returns self if equal to the argument 1505s - returns an Integer 1505s - returns the greatest common divisor of self and argument 1505s - returns a positive integer even if self is negative 1505s - returns a positive integer even if the argument is negative 1505s - returns a positive integer even if both self and argument are negative 1505s - accepts a Bignum argument 1505s - works if self is a Bignum 1505s - doesn't cause an integer overflow 1505s - raises an ArgumentError if not given an argument 1505s - raises an ArgumentError if given more than one argument 1505s - raises a TypeError unless the argument is an Integer 1505s 1505s Integer#gcdlcm 1505s - returns [self, self] if self is equal to the argument 1505s - returns an Array 1505s - returns a two-element Array 1505s - returns the greatest common divisor of self and argument as the first element 1505s - returns the least common multiple of self and argument as the last element 1505s - accepts a Bignum argument 1505s - works if self is a Bignum 1505s - raises an ArgumentError if not given an argument 1505s - raises an ArgumentError if given more than one argument 1505s - raises a TypeError unless the argument is an Integer 1505s 1505s Integer#> 1505s - does not rescue exception raised in other#coerce 1505s 1505s Integer#> fixnum 1505s - returns true if self is greater than the given argument 1505s - raises an ArgumentError when given a non-Integer 1505s 1505s Integer#> bignum 1505s - returns true if self is greater than the given argument 1505s - raises an ArgumentError when given a non-Integer 1505s 1505s Integer#>= 1505s - does not rescue exception raised in other#coerce 1505s 1505s Integer#>= fixnum 1505s - returns true if self is greater than or equal to the given argument 1505s - raises an ArgumentError when given a non-Integer 1505s 1505s Integer#>= bignum 1505s - returns true if self is greater than or equal to other 1505s - raises an ArgumentError when given a non-Integer 1505s 1505s Integer 1505s - includes Comparable 1505s - is the class of both small and large integers 1505s 1505s Integer#integer? 1505s - returns true for Integers 1505s 1505s Integer#lcm 1505s - returns self if equal to the argument 1505s - returns an Integer 1505s - returns the least common multiple of self and argument 1505s - returns a positive integer even if self is negative 1505s - returns a positive integer even if the argument is negative 1505s - returns a positive integer even if both self and argument are negative 1505s - accepts a Bignum argument 1505s - works if self is a Bignum 1505s - raises an ArgumentError if not given an argument 1505s - raises an ArgumentError if given more than one argument 1505s - raises a TypeError unless the argument is an Integer 1505s 1505s Integer#<< (with n << m) fixnum 1505s - returns n shifted left m bits when n > 0, m > 0 1505s - returns n shifted left m bits when n < 0, m > 0 1505s - returns n shifted right m bits when n > 0, m < 0 1505s - returns n shifted right m bits when n < 0, m < 0 1505s - returns 0 when n == 0 1505s - returns n when n > 0, m == 0 1505s - returns n when n < 0, m == 0 1505s - returns 0 when n > 0, m < 0 and n < 2**-m 1505s - returns -1 when n < 0, m < 0 and n > -(2**-m) 1505s - returns 0 when m < 0 and m is a Bignum 1505s - returns a Bignum == fixnum_max * 2 when fixnum_max << 1 and n > 0 1505s - returns a Bignum == fixnum_min * 2 when fixnum_min << 1 and n < 0 1505s - calls #to_int to convert the argument to an Integer 1505s - raises a TypeError when #to_int does not return an Integer 1505s - raises a TypeError when passed nil 1505s - raises a TypeError when passed a String 1505s 1505s Integer#<< (with n << m) bignum 1505s - returns n shifted left m bits when n > 0, m > 0 1505s - returns n shifted left m bits when n < 0, m > 0 1505s - returns n shifted right m bits when n > 0, m < 0 1505s - returns n shifted right m bits when n < 0, m < 0 1505s - returns n when n > 0, m == 0 1505s - returns n when n < 0, m == 0 1505s - returns 0 when m < 0 and m == p where 2**p > n >= 2**(p-1) 1505s - returns a Fixnum == fixnum_max when (fixnum_max * 2) << -1 and n > 0 1505s - returns a Fixnum == fixnum_min when (fixnum_min * 2) << -1 and n < 0 1505s - calls #to_int to convert the argument to an Integer 1505s - raises a TypeError when #to_int does not return an Integer 1505s - raises a TypeError when passed nil 1505s - raises a TypeError when passed a String 1505s 1505s Integer#<< (with n << m) when m is a bignum or larger than int 1505s - returns -1 when m < 0 and n < 0 1505s - returns 0 when m < 0 and n >= 0 1505s - returns 0 when m > 0 long and n == 0 1505s - returns 0 when m > 0 bignum and n == 0 1505s 1505s Integer#< 1505s - does not rescue exception raised in other#coerce 1505s 1505s Integer#< fixnum 1505s - returns true if self is less than the given argument 1505s - raises an ArgumentError when given a non-Integer 1505s 1505s Integer#< bignum 1505s - returns true if self is less than the given argument 1505s - raises an ArgumentError when given a non-Integer 1505s 1505s Integer#<= 1505s - does not rescue exception raised in other#coerce 1505s 1505s Integer#<= fixnum 1505s - returns true if self is less than or equal to other 1505s - raises an ArgumentError when given a non-Integer 1505s 1505s Integer#<= bignum 1505s - returns true if self is less than or equal to other 1505s - returns false if compares with near float 1505s - returns true for bignums compare to a bigger float 1505s - raises an ArgumentError when given a non-Integer 1505s 1505s Integer#magnitude fixnum 1505s - returns self's absolute fixnum value 1505s 1505s Integer#magnitude bignum 1505s - returns the absolute bignum value 1505s 1505s Integer#- 1505s - does not rescue exception raised in other#coerce 1505s 1505s Integer#- fixnum 1505s - returns self minus the given Integer 1505s - raises a TypeError when given a non-Integer 1505s 1505s Integer#- bignum 1505s - returns self minus the given Integer 1505s - raises a TypeError when given a non-Integer 1505s 1505s Integer#% fixnum 1505s - returns the modulus obtained from dividing self by the given argument 1505s - raises a ZeroDivisionError when the given argument is 0 1505s - raises a ZeroDivisionError when the given argument is 0 and a Float 1505s - raises a TypeError when given a non-Integer 1505s 1505s Integer#% bignum 1505s - returns the modulus obtained from dividing self by the given argument 1505s - raises a ZeroDivisionError when the given argument is 0 1505s - raises a ZeroDivisionError when the given argument is 0 and a Float 1505s - raises a TypeError when given a non-Integer 1505s 1505s Integer#modulo fixnum 1505s - returns the modulus obtained from dividing self by the given argument 1505s - raises a ZeroDivisionError when the given argument is 0 1505s - raises a ZeroDivisionError when the given argument is 0 and a Float 1505s - raises a TypeError when given a non-Integer 1505s 1505s Integer#modulo bignum 1505s - returns the modulus obtained from dividing self by the given argument 1505s - raises a ZeroDivisionError when the given argument is 0 1505s - raises a ZeroDivisionError when the given argument is 0 and a Float 1505s - raises a TypeError when given a non-Integer 1505s 1505s Integer#* 1505s - does not rescue exception raised in other#coerce 1505s 1505s Integer#* fixnum 1505s - returns self multiplied by the given Integer 1505s - raises a TypeError when given a non-Integer 1505s 1505s Integer#* bignum 1505s - returns self multiplied by the given Integer 1505s - raises a TypeError when given a non-Integer 1505s 1505s Integer#next 1505s - returns the next larger positive Fixnum 1505s - returns the next larger negative Fixnum 1505s - returns the next larger positive Bignum 1505s - returns the next larger negative Bignum 1505s - overflows a Fixnum to a Bignum 1505s - underflows a Bignum to a Fixnum 1505s 1505s Integer#nobits? 1505s - returns true if and only if all no bits of the argument are set in the receiver 1505s - handles negative values using two's complement notation 1505s - coerces the rhs using to_int 1505s - raises a TypeError when given a non-Integer 1505s 1505s Integer#numerator 1505s - returns self 1505s 1505s Integer#odd? fixnum 1505s - returns true when self is an odd number 1505s 1505s Integer#odd? bignum 1505s - returns true if self is odd and positive 1505s - returns true if self is odd and negative 1505s - returns false if self is even and positive 1505s - returns false if self is even and negative 1505s 1505s Integer#ord 1505s - returns self 1505s 1505s Integer#+ 1505s - does not rescue exception raised in other#coerce 1508s - can be redefined 1508s 1508s Integer#+ fixnum 1508s - returns self plus the given Integer 1508s - raises a TypeError when given a non-Integer 1508s 1508s Integer#+ bignum 1508s - returns self plus the given Integer 1508s - raises a TypeError when given a non-Integer 1508s 1508s Integer#pow one argument is passed fixnum 1508s - returns self raised to the given power 1508s - overflows the answer to a bignum transparently 1508s - raises negative numbers to the given power 1508s - can raise 1 to a bignum safely 1508s - can raise -1 to a bignum safely 1508s - returns Float::INFINITY when the number is too big 1508s - raises a ZeroDivisionError for 0 ** -1 1508s - returns Float::INFINITY for 0 ** -1.0 1508s - raises a TypeError when given a non-numeric power 1508s - coerces power and calls #** 1508s - returns Float when power is Float 1508s - returns Rational when power is Rational 1508s - returns a complex number when negative and raised to a fractional power 1508s 1508s Integer#pow one argument is passed bignum 1508s - returns self raised to other power 1508s - raises a TypeError when given a non-Integer 1508s - switch to a Float when the values is too big 1508s - returns a complex number when negative and raised to a fractional power 1508s 1508s Integer#pow two arguments are passed 1508s - returns modulo of self raised to the given power 1508s - works well with bignums 1508s - handles sign like #divmod does 1508s - ensures all arguments are integers 1508s - raises TypeError for non-numeric value 1508s - raises a ZeroDivisionError when the given argument is 0 1508s - raises a RangeError when the first argument is negative and the second argument is present 1508s 1508s Integer#pred 1508s - returns the Integer equal to self - 1 1508s 1508s Integer#rationalize 1508s - returns a Rational object 1508s - uses self as the numerator 1508s - uses 1 as the denominator 1508s - ignores a single argument 1508s - raises ArgumentError when passed more than one argument 1508s 1508s Integer#remainder fixnum 1508s - returns the remainder of dividing self by other 1508s - means x-y*(x/y).truncate 1508s - keeps sign of self 1508s - raises TypeError if passed non-numeric argument 1508s 1508s Integer#remainder bignum 1508s - returns the remainder of dividing self by other 1508s - raises a ZeroDivisionError if other is zero and not a Float 1508s - does raises ZeroDivisionError if other is zero and a Float 1508s 1508s Integer#>> (with n >> m) fixnum 1508s - returns n shifted right m bits when n > 0, m > 0 1508s - returns n shifted right m bits when n < 0, m > 0 1508s - returns n shifted left m bits when n > 0, m < 0 1508s - returns n shifted left m bits when n < 0, m < 0 1508s - returns 0 when n == 0 1508s - returns n when n > 0, m == 0 1508s - returns n when n < 0, m == 0 1508s - returns 0 when n > 0, m > 0 and n < 2**m 1508s - returns -1 when n < 0, m > 0 and n > -(2**m) 1508s - returns a Bignum == fixnum_max * 2 when fixnum_max >> -1 and n > 0 1508s - returns a Bignum == fixnum_min * 2 when fixnum_min >> -1 and n < 0 1508s - calls #to_int to convert the argument to an Integer 1508s - raises a TypeError when #to_int does not return an Integer 1508s - raises a TypeError when passed nil 1508s - raises a TypeError when passed a String 1508s 1508s Integer#>> (with n >> m) bignum 1508s - returns n shifted right m bits when n > 0, m > 0 1508s - returns n shifted right m bits when n < 0, m > 0 1508s - respects twos complement signed shifting 1508s - respects twos complement signed shifting for very large values 1508s - returns n shifted left m bits when n > 0, m < 0 1508s - returns n shifted left m bits when n < 0, m < 0 1508s - returns n when n > 0, m == 0 1508s - returns n when n < 0, m == 0 1508s - returns 0 when m > 0 and m == p where 2**p > n >= 2**(p-1) 1508s - returns a Fixnum == fixnum_max when (fixnum_max * 2) >> 1 and n > 0 1508s - returns a Fixnum == fixnum_min when (fixnum_min * 2) >> 1 and n < 0 1508s - calls #to_int to convert the argument to an Integer 1508s - raises a TypeError when #to_int does not return an Integer 1508s - raises a TypeError when passed nil 1508s - raises a TypeError when passed a String 1508s 1508s Integer#>> (with n >> m) when m is a bignum or larger than int 1508s - returns -1 when m > 0 and n < 0 1508s - returns 0 when m > 0 and n >= 0 1508s - returns 0 when m < 0 long and n == 0 1508s - returns 0 when m < 0 bignum and n == 0 1508s 1508s Integer#round 1508s - returns self 1508s - returns self if not passed a precision 1508s - returns self if passed a precision of zero 1508s - returns itself if passed a positive precision 1508s - returns itself rounded if passed a negative value 1508s - returns itself rounded to nearest if passed a negative value 1508s - raises a RangeError when passed a big negative value 1508s - raises a RangeError when passed Float::INFINITY 1508s - raises a RangeError when passed a beyond signed int 1508s - raises a TypeError when passed a String 1508s - raises a TypeError when its argument cannot be converted to an Integer 1508s - calls #to_int on the argument to convert it to an Integer 1508s - raises a TypeError when #to_int does not return an Integer 1508s - returns different rounded values depending on the half option 1508s - returns itself if passed a positive precision and the half option 1508s - raises ArgumentError for an unknown rounding mode 1508s 1508s Integer#size 1508s - returns the number of bytes in the machine representation of self 1508s 1508s Integer#size bignum 1508s - returns the number of bytes required to hold the unsigned bignum data 1508s 1508s Integer.sqrt 1508s - returns an integer 1508s - returns the integer square root of the argument 1508s - raises a Math::DomainError if the argument is negative 1508s - accepts any argument that can be coerced to Integer 1508s - converts the argument with #to_int 1508s - raises a TypeError if the argument cannot be coerced to Integer 1508s 1508s Integer#succ 1508s - returns the next larger positive Fixnum 1508s - returns the next larger negative Fixnum 1508s - returns the next larger positive Bignum 1508s - returns the next larger negative Bignum 1508s - overflows a Fixnum to a Bignum 1508s - underflows a Bignum to a Fixnum 1508s 1508s Integer#times 1508s - returns self 1508s - yields each value from 0 to self - 1 1508s - skips the current iteration when encountering 'next' 1508s - skips all iterations when encountering 'break' 1508s - skips all iterations when encountering break with an argument and returns that argument 1508s - executes a nested while loop containing a break expression 1508s - executes a nested #times 1508s - returns an Enumerator 1508s 1508s Integer#times when no block is given returned Enumerator size 1508s - returns self 1508s 1508s Integer#to_f fixnum 1508s - returns self converted to a Float 1508s 1508s Integer#to_f bignum 1508s - returns self converted to a Float 1508s - converts number close to Float::MAX without exceeding MAX or producing NaN 1508s 1508s Integer#to_i 1508s - returns self 1508s 1508s Integer#to_int 1508s - returns self 1508s 1508s Integer#to_r 1508s - returns a Rational object 1508s - constructs a rational number with self as the numerator 1508s - constructs a rational number with 1 as the denominator 1508s - works even if self is a Bignum 1508s - raises an ArgumentError if given any arguments 1508s 1508s Integer#to_s fixnum 1508s - returns a String in US-ASCII encoding when Encoding.default_internal is nil 1508s - returns a String in US-ASCII encoding when Encoding.default_internal is not nil 1508s 1508s Integer#to_s fixnum when given a base 1508s - returns self converted to a String in the given base 1508s - raises an ArgumentError if the base is less than 2 or higher than 36 1508s 1508s Integer#to_s fixnum when no base given 1508s - returns self converted to a String using base 10 1508s 1508s Integer#to_s bignum 1508s - returns a String in US-ASCII encoding when Encoding.default_internal is nil 1508s - returns a String in US-ASCII encoding when Encoding.default_internal is not nil 1508s 1508s Integer#to_s bignum when given a base 1508s - returns self converted to a String using the given base 1508s - raises an ArgumentError if the base is less than 2 or higher than 36 1508s 1508s Integer#to_s bignum when given no base 1508s - returns self converted to a String using base 10 1508s 1508s Integer#truncate 1508s - returns self 1508s - returns self if not passed a precision 1508s - returns self if passed a precision of zero 1508s - returns itself if passed a positive precision 1508s 1508s Integer#truncate precision argument specified as part of the truncate method is negative 1508s - returns an integer with at least precision.abs trailing zeros 1508s 1508s Integer.try_convert 1508s - returns the argument if it's an Integer 1508s - returns nil when the argument does not respond to #to_int 1508s - sends #to_int to the argument and returns the result if it's nil 1508s - sends #to_int to the argument and returns the result if it's an Integer 1508s - sends #to_int to the argument and raises TypeError if it's not a kind of Integer 1508s - responds with a different error message when it raises a TypeError, depending on the type of the non-Integer object :to_int returns 1508s - does not rescue exceptions raised by #to_int 1508s 1508s Integer#-@ fixnum 1508s - returns self as a negative value 1508s - negates self at Fixnum/Bignum boundaries 1508s 1508s Integer#-@ bignum 1508s - returns self as a negative value 1508s 1508s Integer#upto [stop] when self and stop are Integers 1508s - does not yield when stop is less than self 1508s - yields once when stop equals self 1508s - yields while increasing self until it is less than stop 1508s - yields while increasing self until it is greater than floor of a Float endpoint 1508s - raises an ArgumentError for non-numeric endpoints 1508s 1508s Integer#upto [stop] when self and stop are Integers when no block is given 1508s - returns an Enumerator 1508s 1508s Integer#upto [stop] when self and stop are Integers when no block is given returned Enumerator size 1508s - raises an ArgumentError for non-numeric endpoints 1508s - returns stop - self + 1 1508s - returns 0 when stop < self 1508s 1508s Integer#zero? 1508s - returns true if self is 0 1508s - Integer#zero? overrides Numeric#zero? 1508s 1508s IO#advise 1508s - raises a TypeError if advise is not a Symbol 1508s - raises a TypeError if offset cannot be coerced to an Integer 1508s - raises a TypeError if len cannot be coerced to an Integer 1508s - raises a RangeError if offset is too big 1508s - raises a RangeError if len is too big 1508s - raises a NotImplementedError if advise is not recognized 1508s - supports the normal advice type 1508s - supports the sequential advice type 1508s - supports the random advice type 1508s - supports the dontneed advice type 1508s - supports the noreuse advice type 1508s - raises an IOError if the stream is closed 1508s 1508s IO#binmode 1508s - returns self 1508s - raises an IOError on closed stream 1508s - sets external encoding to binary 1508s - sets internal encoding to nil 1508s 1508s IO#binmode? 1508s - is true after a call to IO#binmode 1508s - propagates to dup'ed IO objects 1508s - raises an IOError on closed stream 1508s 1508s IO.binread 1508s - reads the contents of a file 1508s - reads the contents of a file up to a certain size when specified 1508s - reads the contents of a file from an offset of a specific size when specified 1508s - returns a String in BINARY encoding 1508s - returns a String in BINARY encoding regardless of Encoding.default_internal 1508s - raises an ArgumentError when not passed a valid length 1508s - raises an Errno::EINVAL when not passed a valid offset 1508s 1508s IO.binwrite 1508s - coerces the argument to a string using to_s 1508s - returns the number of bytes written 1508s - creates a file if missing 1508s - creates file if missing even if offset given 1508s - truncates the file and writes the given string 1508s - doesn't truncate the file and writes the given string if an offset is given 1508s - doesn't truncate and writes at the given offset after passing empty opts 1508s - accepts a :mode option 1508s - accepts a :flags option without :mode one 1508s - raises an error if readonly mode is specified 1508s - truncates if empty :opts provided and offset skipped 1508s 1508s IO#close_on_exec= 1508s - sets the close-on-exec flag if true 1508s - sets the close-on-exec flag if non-false 1508s - unsets the close-on-exec flag if false 1508s - unsets the close-on-exec flag if nil 1508s - raises IOError if called on a closed IO 1508s 1508s IO#close_on_exec? 1508s - returns true by default 1508s - returns true if set 1508s - raises IOError if called on a closed IO 1508s 1508s IO#close_read 1508s - closes the read end of a duplex I/O stream 1508s - does nothing on subsequent invocations 1508s - allows subsequent invocation of close 1508s - raises an IOError if the stream is writable and not duplexed 1508s - closes the stream if it is neither writable nor duplexed 1508s - does nothing on closed stream 1508s 1508s IO#close 1508s - closes the stream 1508s - returns nil 1508s - raises an IOError reading from a closed IO 1508s - raises an IOError writing to a closed IO 1508s - does not close the stream if autoclose is false 1508s - does nothing if already closed 1508s - does not call the #flush method but flushes the stream internally 1508s - raises an IOError with a clear message 1508s 1508s IO#close on an IO.popen stream 1512s - clears #pid 1514s - waits for the child to exit 1514s 1514s IO#close_write 1514s - closes the write end of a duplex I/O stream 1514s - does nothing on subsequent invocations 1514s - allows subsequent invocation of close 1514s - raises an IOError if the stream is readable and not duplexed 1514s - closes the stream if it is neither readable nor duplexed 1514s - flushes and closes the write stream 1514s - does nothing on closed stream 1514s 1514s IO#closed? 1514s - returns true on closed stream 1514s - returns false on open stream 1514s 1514s IO::SEEK_SET 1514s - is defined 1514s 1514s IO::SEEK_CUR 1514s - is defined 1514s 1514s IO::SEEK_END 1514s - is defined 1514s 1514s IO.copy_stream from an IO 1514s - raises an IOError if the source IO is not open for reading 1514s - does not close the source IO 1514s - does not change the IO offset when an offset is specified 1514s - does change the IO offset when an offset is not specified 1514s 1514s IO.copy_stream from an IO to a file name 1514s - copies the entire IO contents to the file 1514s - returns the number of bytes copied 1514s - copies only length bytes when specified 1514s - calls #to_path to convert on object to a file name 1514s - raises a TypeError if #to_path does not return a String 1514s - copies only length bytes from the offset 1514s 1514s IO.copy_stream from an IO to an IO 1514s - copies the entire IO contents to the IO 1514s - returns the number of bytes copied 1514s - starts writing at the destination IO's current position 1514s - leaves the destination IO position at the last write 1514s - raises an IOError if the destination IO is not open for writing 1514s - does not close the destination IO 1514s - copies only length bytes when specified 1514s - copies only length bytes from the offset 1514s 1514s IO.copy_stream from an IO to a Tempfile 1514s - copies the entire IO contents to the IO 1514s - returns the number of bytes copied 1514s - starts writing at the destination IO's current position 1514s - leaves the destination IO position at the last write 1514s - raises an IOError if the destination IO is not open for writing 1514s - does not close the destination IO 1514s - copies only length bytes when specified 1514s - copies only length bytes from the offset 1514s 1514s IO.copy_stream from a file name 1514s - calls #to_path to convert on object to a file name 1514s - raises a TypeError if #to_path does not return a String 1514s 1514s IO.copy_stream from a file name to a file name 1514s - copies the entire IO contents to the file 1514s - returns the number of bytes copied 1514s - copies only length bytes when specified 1514s - calls #to_path to convert on object to a file name 1514s - raises a TypeError if #to_path does not return a String 1514s - copies only length bytes from the offset 1514s 1514s IO.copy_stream from a file name to an IO 1514s - copies the entire IO contents to the IO 1514s - returns the number of bytes copied 1514s - starts writing at the destination IO's current position 1514s - leaves the destination IO position at the last write 1514s - raises an IOError if the destination IO is not open for writing 1514s - does not close the destination IO 1514s - copies only length bytes when specified 1514s - copies only length bytes from the offset 1514s 1514s IO.copy_stream from a pipe IO 1514s - does not close the source IO 1514s 1514s IO.copy_stream from a pipe IO to a file name 1514s - copies the entire IO contents to the file 1514s - returns the number of bytes copied 1514s - copies only length bytes when specified 1514s - calls #to_path to convert on object to a file name 1514s - raises a TypeError if #to_path does not return a String 1514s 1514s IO.copy_stream from a pipe IO to an IO 1514s - copies the entire IO contents to the IO 1514s - returns the number of bytes copied 1514s - starts writing at the destination IO's current position 1514s - leaves the destination IO position at the last write 1514s - raises an IOError if the destination IO is not open for writing 1514s - does not close the destination IO 1514s - copies only length bytes when specified 1514s 1514s IO.copy_stream with non-IO Objects 1514s - calls #write on the destination Object 1514s - does not call #pos on the source if no offset is given 1514s 1514s IO.copy_stream with a destination that does partial reads 1514s - calls #write repeatedly on the destination Object 1514s 1514s IO.copy_stream 1518s - does not use buffering when writing to STDOUT 1518s 1518s IO#dup 1518s - returns a new IO instance 1518s - sets a new descriptor on the returned object 1518s - allows closing the new IO without affecting the original 1518s - allows closing the original IO without affecting the new one 1518s - raises IOError on closed stream 1518s - always sets the autoclose flag for the new IO object 1518s 1518s IO#each_byte 1518s - raises IOError on closed stream 1518s - yields each byte 1518s 1518s IO#each_byte when no block is given 1518s - returns an Enumerator 1518s 1518s IO#each_byte when no block is given returned Enumerator size 1518s - should return nil 1518s 1518s IO#each_byte 1518s - returns self on an empty stream 1518s 1518s IO#each_char 1518s - yields each character 1518s - returns itself 1518s - returns an enumerator for a closed stream 1518s - raises an IOError when an enumerator created on a closed stream is accessed 1518s - raises IOError on closed stream 1518s 1518s IO#each_char when no block is given 1518s - returns an Enumerator 1518s 1518s IO#each_char when no block is given returned Enumerator size 1518s - should return nil 1518s 1518s IO#each_char 1518s - does not yield any characters on an empty stream 1518s 1518s IO#each_codepoint 1518s - yields each codepoint 1518s - yields each codepoint starting from the current position 1518s - raises an error if reading invalid sequence 1518s - does not change $_ 1518s - raises an IOError when self is not readable 1518s 1518s IO#each_codepoint when no block is given 1518s - returns an Enumerator 1518s 1518s IO#each_codepoint when no block is given returned Enumerator size 1518s - should return nil 1518s 1518s IO#each_codepoint 1518s - calls the given block 1518s - returns self 1518s 1518s IO#each_codepoint 1518s - raises an exception at incomplete character before EOF when conversion takes place 1518s 1518s IO#each_line with no separator 1518s - yields each line to the passed block 1518s - yields each line starting from the current position 1518s - returns self 1518s - does not change $_ 1518s - raises an IOError when self is not readable 1518s - makes line count accessible via lineno 1518s - makes line count accessible via $. 1518s 1518s IO#each_line with no separator when no block is given 1518s - returns an Enumerator 1518s 1518s IO#each_line with no separator when no block is given returned Enumerator size 1518s - should return nil 1518s 1518s IO#each_line with limit 1518s - does not accept Integers that don't fit in a C off_t 1518s 1518s IO#each_line when passed a String containing one space as a separator 1518s - uses the passed argument as the line separator 1518s - does not change $_ 1518s - tries to convert the passed separator to a String using #to_str 1518s 1518s IO#each_line when passed nil as a separator 1518s - yields self's content starting from the current position when the passed separator is nil 1518s 1518s IO#each_line when passed an empty String as a separator 1518s - yields each paragraph 1518s - discards leading newlines 1518s 1518s IO#each_line with both separator and limit when no block is given returned Enumerator size 1518s - should return nil 1518s 1518s IO#each_line with both separator and limit when a block is given 1518s - accepts an empty block 1518s 1518s IO#each_line with both separator and limit when a block is given when passed nil as a separator 1518s - yields self's content starting from the current position when the passed separator is nil 1518s 1518s IO#each_line with both separator and limit when a block is given when passed an empty String as a separator 1518s - yields each paragraph 1518s - discards leading newlines 1518s 1518s IO#each_line when passed chomp 1518s - yields each line without trailing newline characters to the passed block 1518s 1518s IO#each_line when passed chomp and a separator 1518s - yields each line without separator to the passed block 1518s 1518s IO#each_line when passed chomp and empty line as a separator 1518s - yields each paragraph without trailing new line characters 1518s 1518s IO#each_line when passed chomp and nil as a separator 1518s - yields self's content without trailing new line character 1518s 1518s IO#each_line when passed chomp, nil as a separator, and a limit 1518s - yields each line of limit size without truncating trailing new line character 1518s 1518s IO#each_line when passed too many arguments 1518s - raises ArgumentError 1518s 1518s IO#each_line 1518s - uses $/ as the default line separator 1518s 1518s IO#each with no separator 1518s - yields each line to the passed block 1518s - yields each line starting from the current position 1518s - returns self 1518s - does not change $_ 1518s - raises an IOError when self is not readable 1518s - makes line count accessible via lineno 1518s - makes line count accessible via $. 1518s 1518s IO#each with no separator when no block is given 1518s - returns an Enumerator 1518s 1518s IO#each with no separator when no block is given returned Enumerator size 1518s - should return nil 1518s 1518s IO#each with limit 1518s - does not accept Integers that don't fit in a C off_t 1518s 1518s IO#each when passed a String containing one space as a separator 1518s - uses the passed argument as the line separator 1518s - does not change $_ 1518s - tries to convert the passed separator to a String using #to_str 1518s 1518s IO#each when passed nil as a separator 1518s - yields self's content starting from the current position when the passed separator is nil 1518s 1518s IO#each when passed an empty String as a separator 1518s - yields each paragraph 1518s - discards leading newlines 1518s 1518s IO#each with both separator and limit when no block is given returned Enumerator size 1518s - should return nil 1518s 1518s IO#each with both separator and limit when a block is given 1518s - accepts an empty block 1518s 1518s IO#each with both separator and limit when a block is given when passed nil as a separator 1518s - yields self's content starting from the current position when the passed separator is nil 1518s 1518s IO#each with both separator and limit when a block is given when passed an empty String as a separator 1518s - yields each paragraph 1518s - discards leading newlines 1518s 1518s IO#each when passed chomp 1518s - yields each line without trailing newline characters to the passed block 1518s 1518s IO#each when passed chomp and a separator 1518s - yields each line without separator to the passed block 1518s 1518s IO#each when passed chomp and empty line as a separator 1518s - yields each paragraph without trailing new line characters 1518s 1518s IO#each when passed chomp and nil as a separator 1518s - yields self's content without trailing new line character 1518s 1518s IO#each when passed chomp, nil as a separator, and a limit 1518s - yields each line of limit size without truncating trailing new line character 1518s 1518s IO#each when passed too many arguments 1518s - raises ArgumentError 1518s 1518s IO#each 1518s - uses $/ as the default line separator 1518s 1518s IO#eof? 1518s - returns true on an empty stream that has just been opened 1518s - raises IOError on stream not opened for reading 1518s 1518s IO#eof? 1518s - returns false when not at end of file 1518s - returns true after reading with read with no parameters 1518s - returns true after reading with read 1518s - returns true after reading with sysread 1518s - returns true after reading with readlines 1518s - returns false on just opened non-empty stream 1518s - does not consume the data from the stream 1518s - raises IOError on closed stream 1518s - raises IOError on stream closed for reading by close_read 1518s - returns true on one-byte stream after single-byte read 1518s 1518s IO#eof? 1518s - returns true on receiving side of Pipe when writing side is closed 1518s - returns false on receiving side of Pipe when writing side wrote some data 1518s 1518s IO#external_encoding 1518s - can be retrieved from a closed stream 1518s 1518s IO#external_encoding with 'r' mode when Encoding.default_internal is nil 1518s - returns Encoding.default_external if the external encoding is not set 1518s - returns Encoding.default_external when that encoding is changed after the instance is created 1518s - returns the external encoding specified when the instance was created 1518s - returns the encoding set by #set_encoding 1518s 1518s IO#external_encoding with 'r' mode when Encoding.default_external == Encoding.default_internal 1518s - returns the value of Encoding.default_external when the instance was created 1518s - returns the external encoding specified when the instance was created 1518s - returns the encoding set by #set_encoding 1518s 1518s IO#external_encoding with 'r' mode when Encoding.default_external != Encoding.default_internal 1518s - returns the external encoding specified when the instance was created 1518s - returns the encoding set by #set_encoding 1518s 1518s IO#external_encoding with 'rb' mode 1518s - returns Encoding::BINARY 1518s - returns the external encoding specified by the mode argument 1518s 1518s IO#external_encoding with 'r+' mode when Encoding.default_internal is nil 1518s - returns nil 1518s - returns the external encoding specified when the instance was created 1518s - returns the encoding set by #set_encoding 1518s 1518s IO#external_encoding with 'r+' mode when Encoding.default_external != Encoding.default_internal 1518s - returns the value of Encoding.default_external when the instance was created 1518s - returns the external encoding specified when the instance was created 1518s - returns the encoding set by #set_encoding 1518s 1518s IO#external_encoding with 'r+' mode when Encoding.default_external == Encoding.default_internal 1518s - returns the value of Encoding.default_external when the instance was created 1518s - returns the external encoding specified when the instance was created 1518s - returns the encoding set by #set_encoding 1518s 1518s IO#external_encoding with 'w' mode when Encoding.default_internal is nil 1518s - returns nil 1518s - returns the external encoding specified when the instance was created 1518s - returns the encoding set by #set_encoding 1518s 1518s IO#external_encoding with 'w' mode when Encoding.default_external != Encoding.default_internal 1518s - returns the value of Encoding.default_external when the instance was created 1518s - returns the external encoding specified when the instance was created 1518s - returns the encoding set by #set_encoding 1518s 1518s IO#external_encoding with 'w' mode when Encoding.default_external == Encoding.default_internal 1518s - returns the value of Encoding.default_external when the instance was created 1518s - returns the external encoding specified when the instance was created 1518s - returns the encoding set by #set_encoding 1518s 1518s IO#external_encoding with 'wb' mode 1518s - returns Encoding::BINARY 1518s - returns the external encoding specified by the mode argument 1518s 1518s IO#external_encoding with 'w+' mode when Encoding.default_internal is nil 1518s - returns nil 1518s - returns the external encoding specified when the instance was created 1518s - returns the encoding set by #set_encoding 1518s 1518s IO#external_encoding with 'w+' mode when Encoding.default_external != Encoding.default_internal 1518s - returns the value of Encoding.default_external when the instance was created 1518s - returns the external encoding specified when the instance was created 1518s - returns the encoding set by #set_encoding 1518s 1518s IO#external_encoding with 'w+' mode when Encoding.default_external == Encoding.default_internal 1518s - returns the value of Encoding.default_external when the instance was created 1518s - returns the external encoding specified when the instance was created 1518s - returns the encoding set by #set_encoding 1518s 1518s IO#external_encoding with 'a' mode when Encoding.default_internal is nil 1518s - returns nil 1518s - returns the external encoding specified when the instance was created 1518s - returns the encoding set by #set_encoding 1518s 1518s IO#external_encoding with 'a' mode when Encoding.default_external != Encoding.default_internal 1518s - returns the value of Encoding.default_external when the instance was created 1518s - returns the external encoding specified when the instance was created 1518s - returns the encoding set by #set_encoding 1518s 1518s IO#external_encoding with 'a' mode when Encoding.default_external == Encoding.default_internal 1518s - returns the value of Encoding.default_external when the instance was created 1518s - returns the external encoding specified when the instance was created 1518s - returns the encoding set by #set_encoding 1518s 1518s IO#external_encoding with 'a+' mode when Encoding.default_internal is nil 1518s - returns nil 1518s - returns the external encoding specified when the instance was created 1518s - returns the encoding set by #set_encoding 1518s 1518s IO#external_encoding with 'a+' mode when Encoding.default_external != Encoding.default_internal 1518s - returns the value of Encoding.default_external when the instance was created 1518s - returns the external encoding specified when the instance was created 1518s - returns the encoding set by #set_encoding 1518s 1518s IO#external_encoding with 'a+' mode when Encoding.default_external == Encoding.default_internal 1518s - returns the value of Encoding.default_external when the instance was created 1518s - returns the external encoding specified when the instance was created 1518s - returns the encoding set by #set_encoding 1518s 1518s IO#fcntl 1518s - raises IOError on closed stream 1518s 1518s IO#fdatasync 1518s - needs to be reviewed for spec completeness 1518s 1518s IO#fileno 1518s - returns the numeric file descriptor of the given IO object 1518s - raises IOError on closed stream 1518s 1518s IO#flush 1518s - raises IOError on closed stream 1518s 1518s IO#flush on a pipe 1518s - raises Errno::EPIPE if sync=false and the read end is closed 1518s 1518s IO.for_fd 1518s - creates an IO instance from an Integer argument 1518s - creates an IO instance when STDOUT is closed 1518s - creates an IO instance when STDERR is closed 1518s - calls #to_int on an object to convert to an Integer 1518s - accepts a :mode option 1518s - accepts a mode argument set to nil with a valid :mode option 1518s - accepts a mode argument with a :mode option set to nil 1518s - uses the external encoding specified in the mode argument 1518s - uses the external and the internal encoding specified in the mode argument 1518s - uses the external encoding specified via the :external_encoding option 1518s - uses the internal encoding specified via the :internal_encoding option 1518s - uses the colon-separated encodings specified via the :encoding option 1518s - uses the :encoding option as the external encoding when only one is given 1518s - uses the :encoding options as the external encoding when it's an Encoding object 1518s - uses the encoding specified via the :mode option hash 1518s - ignores the :internal_encoding option when the same as the external encoding 1518s - sets internal encoding to nil when passed '-' 1518s - sets binmode from mode string 1518s - does not set binmode without being asked 1518s - sets binmode from :binmode option 1518s - does not set binmode from false :binmode 1518s - sets external encoding to binary with binmode in mode string 1518s - sets external encoding to binary with :binmode option 1518s - does not use binary encoding when mode encoding is specified 1518s - does not use binary encoding when :encoding option is specified 1518s - does not use binary encoding when :external_encoding option is specified 1518s - does not use binary encoding when :internal_encoding option is specified 1518s - raises ArgumentError for nil options 1518s - coerces mode with #to_str 1518s - coerces mode with #to_int 1518s - coerces mode with #to_str when passed in options 1518s - coerces mode with #to_int when passed in options 1518s - coerces :encoding option with #to_str 1518s - coerces :external_encoding option with #to_str 1518s - coerces :internal_encoding option with #to_str 1518s - coerces options as third argument with #to_hash 1518s - coerces options as second argument with #to_hash 1518s - accepts an :autoclose option 1518s - accepts any truthy option :autoclose 1518s 1518s IO.for_fd 1518s - raises an Errno::EBADF if the file descriptor is not valid 1518s - raises an IOError if passed a closed stream 1518s - raises an Errno::EINVAL if the new mode is not compatible with the descriptor's current mode 1518s - raises ArgumentError if passed an empty mode string 1518s - raises an error if passed modes two ways 1518s - raises an error if passed encodings two ways 1518s - raises an error when trying to set both binmode and textmode 1518s - raises ArgumentError if not passed a hash or nil for options 1518s - raises ArgumentError if passed a hash for mode and nil for options 1518s 1518s IO.foreach 1518s - updates $. with each yield 1518s 1518s IO.foreach when the filename starts with | 1518s - gets data from the standard out of the subprocess 1518s 1518s IO.foreach 1518s - sets $_ to nil 1518s - raises TypeError if the first parameter is nil 1518s - raises an Errno::ENOENT if the file does not exist 1518s - yields a single string with entire content when the separator is nil 1518s - yields a sequence of paragraphs when the separator is an empty string 1518s - yields a sequence of lines without trailing newline characters when chomp is passed 1518s 1518s IO.foreach when no block is given 1518s - returns an Enumerator 1518s 1518s IO.foreach when no block is given returned Enumerator size 1518s - should return nil 1518s 1518s IO.foreach when passed name 1518s - calls #to_path to convert the name 1518s - defaults to $/ as the separator 1518s 1518s IO.foreach when passed name, object 1518s - calls #to_str to convert the object to a separator 1518s 1518s IO.foreach when passed name, object when the object is an Integer 1518s - defaults to $/ as the separator 1518s - uses the object as a limit if it is an Integer 1518s - ignores the object as a limit if it is negative 1518s - does not accept Integers that don't fit in a C off_t 1518s 1518s IO.foreach when passed name, object when the object is a String 1518s - uses the value as the separator 1518s - accepts non-ASCII data as separator 1518s 1518s IO.foreach when passed name, object when the object is neither Integer nor String 1518s - raises TypeError exception 1518s 1518s IO.foreach when passed name, keyword arguments 1518s - uses the keyword arguments as options 1518s 1518s IO.foreach when passed name, object, object when the first object is a String 1518s - uses the second object as a limit if it is an Integer 1518s - calls #to_int to convert the second object 1518s 1518s IO.foreach when passed name, object, object when the first object is not a String or Integer 1518s - calls #to_str to convert the object to a String 1518s - uses the second object as a limit if it is an Integer 1518s - calls #to_int to convert the second object 1518s 1518s IO.foreach when passed name, object, object when the second object is neither Integer nor String 1518s - raises TypeError exception 1518s 1518s IO.foreach when passed name, object, keyword arguments when the first object is an Integer 1518s - uses the keyword arguments as options 1518s 1518s IO.foreach when passed name, object, keyword arguments when the first object is a String 1518s - uses the keyword arguments as options 1518s 1518s IO.foreach when passed name, object, keyword arguments when the first object is not a String or Integer 1518s - uses the keyword arguments as options 1518s 1518s IO.foreach when passed name, separator, limit, keyword arguments 1518s - calls #to_path to convert the name object 1518s - calls #to_str to convert the separator object 1518s - calls #to_int to convert the limit argument 1518s - uses the keyword arguments as options 1518s 1518s IO.foreach when passed name, separator, limit, keyword arguments when passed chomp, nil as a separator, and a limit 1518s - yields each line of limit size without truncating trailing new line character 1518s 1518s IO#fsync 1518s - raises an IOError on closed stream 1518s - writes the buffered data to permanent storage 1518s 1518s IO#getbyte 1518s - returns the next byte from the stream 1518s - returns nil when invoked at the end of the stream 1518s - raises an IOError on closed stream 1518s 1518s IO#getbyte 1518s - returns nil on empty stream 1518s 1518s IO#getbyte 1518s - raises an IOError if the stream is not readable 1518s 1518s IO#getc 1518s - returns the next character from the stream 1518s - returns nil when invoked at the end of the stream 1518s - raises IOError on closed stream 1518s 1518s IO#getc 1518s - returns nil on empty stream 1518s 1518s IO#gets with ASCII separator 1518s - returns the separator's character representation 1518s 1518s IO#gets 1518s - assigns the returned line to $_ 1518s - returns nil if called at the end of the stream 1518s - raises IOError on closed stream 1518s 1518s IO#gets with no separator 1518s - returns the next line of string that is separated by $/ 1518s - updates lineno with each invocation 1518s - updates $. with each invocation 1518s 1518s IO#gets with nil separator 1518s - returns the entire contents 1518s - updates lineno with each invocation 1518s - updates $. with each invocation 1518s 1518s IO#gets with an empty String separator 1518s - returns the next paragraph 1518s - reads until the beginning of the next paragraph 1518s - updates lineno with each invocation 1518s - updates $. with each invocation 1518s 1518s IO#gets with an arbitrary String separator 1518s - reads up to and including the separator 1518s - updates lineno with each invocation 1518s - updates $. with each invocation 1518s 1518s IO#gets with an arbitrary String separator that consists of multiple bytes 1518s - should match the separator even if the buffer is filled over successive reads 1518s 1518s IO#gets when passed chomp 1518s - returns the first line without a trailing newline character 1518s 1518s IO#gets 1518s - raises an IOError if the stream is opened for append only 1518s - raises an IOError if the stream is opened for writing only 1518s 1518s IO#gets 1518s - calls #to_int to convert a single object argument to an Integer limit 1518s - calls #to_int to convert the second object argument to an Integer limit 1518s - calls #to_str to convert the first argument to a String when passed a limit 1518s - reads to the default separator when passed a single argument greater than the number of bytes to the separator 1518s - reads limit bytes when passed a single argument less than the number of bytes to the default separator 1518s - reads limit bytes when passed nil and a limit 1518s - reads all bytes when the limit is higher than the available bytes 1518s - reads until the next paragraph when passed '' and a limit greater than the next paragraph 1518s - reads limit bytes when passed '' and a limit less than the next paragraph 1518s - reads all bytes when pass a separator and reading more than all bytes 1518s - returns empty string when 0 passed as a limit 1518s - does not accept limit that doesn't fit in a C off_t 1518s 1518s IO#gets 1518s - reads limit bytes and extra bytes when limit is reached not at character boundary 1518s - read limit bytes and extra bytes with maximum of 16 1518s 1518s IO#gets 1518s - uses the default external encoding 1518s - uses the IO object's external encoding, when set 1518s - transcodes into the default internal encoding 1518s - transcodes into the IO object's internal encoding, when set 1518s - overwrites the default external encoding with the IO object's own external encoding 1518s - ignores the internal encoding if the default external encoding is BINARY 1518s - transcodes to internal encoding if the IO object's external encoding is BINARY 1518s 1518s IO#initialize 1518s - reassociates the IO instance with the new descriptor when passed an Integer 1518s - calls #to_int to coerce the object passed as an fd 1518s - raises a TypeError when passed an IO 1518s - raises a TypeError when passed nil 1518s - raises a TypeError when passed a String 1518s - raises IOError on closed stream 1518s - raises an Errno::EBADF when given an invalid file descriptor 1518s 1518s IO#inspect 1518s - contains the file descriptor number 1518s - contains "(closed)" if the stream is closed 1518s - reports IO as its Method object's owner 1518s 1518s IO#internal_encoding 1518s - can be retrieved from a closed stream 1518s 1518s IO#internal_encoding with 'r' mode when Encoding.default_internal is not set 1518s - returns nil if the internal encoding is not set 1518s - returns nil if Encoding.default_internal is changed after the instance is created 1518s - returns the value set when the instance was created 1518s - returns the value set by #set_encoding 1518s 1518s IO#internal_encoding with 'r' mode when Encoding.default_internal == Encoding.default_external 1518s - returns nil 1518s - returns nil regardless of Encoding.default_internal changes 1518s 1518s IO#internal_encoding with 'r' mode when Encoding.default_internal != Encoding.default_external 1518s - returns the value of Encoding.default_internal when the instance was created if the internal encoding is not set 1518s - does not change when Encoding.default_internal is changed 1518s - returns the internal encoding set when the instance was created 1518s - does not change when set and Encoding.default_internal is changed 1518s - returns the value set by #set_encoding 1518s - returns nil when Encoding.default_external is BINARY and the internal encoding is not set 1518s - returns nil when the external encoding is BINARY and the internal encoding is not set 1518s 1518s IO#internal_encoding with 'r+' mode when Encoding.default_internal is not set 1518s - returns nil if the internal encoding is not set 1518s - returns nil if Encoding.default_internal is changed after the instance is created 1518s - returns the value set when the instance was created 1518s - returns the value set by #set_encoding 1518s 1518s IO#internal_encoding with 'r+' mode when Encoding.default_internal == Encoding.default_external 1518s - returns nil 1518s - returns nil regardless of Encoding.default_internal changes 1518s 1518s IO#internal_encoding with 'r+' mode when Encoding.default_internal != Encoding.default_external 1518s - returns the value of Encoding.default_internal when the instance was created if the internal encoding is not set 1518s - does not change when Encoding.default_internal is changed 1518s - returns the internal encoding set when the instance was created 1518s - does not change when set and Encoding.default_internal is changed 1518s - returns the value set by #set_encoding 1518s - returns nil when Encoding.default_external is BINARY and the internal encoding is not set 1518s - returns nil when the external encoding is BINARY and the internal encoding is not set 1518s 1518s IO#internal_encoding with 'w' mode when Encoding.default_internal is not set 1518s - returns nil if the internal encoding is not set 1518s - returns nil if Encoding.default_internal is changed after the instance is created 1518s - returns the value set when the instance was created 1518s - returns the value set by #set_encoding 1518s 1518s IO#internal_encoding with 'w' mode when Encoding.default_internal == Encoding.default_external 1518s - returns nil 1518s - returns nil regardless of Encoding.default_internal changes 1518s 1518s IO#internal_encoding with 'w' mode when Encoding.default_internal != Encoding.default_external 1518s - returns the value of Encoding.default_internal when the instance was created if the internal encoding is not set 1518s - does not change when Encoding.default_internal is changed 1518s - returns the internal encoding set when the instance was created 1518s - does not change when set and Encoding.default_internal is changed 1518s - returns the value set by #set_encoding 1518s - returns nil when Encoding.default_external is BINARY and the internal encoding is not set 1518s - returns nil when the external encoding is BINARY and the internal encoding is not set 1518s 1518s IO#internal_encoding with 'w+' mode when Encoding.default_internal is not set 1518s - returns nil if the internal encoding is not set 1518s - returns nil if Encoding.default_internal is changed after the instance is created 1518s - returns the value set when the instance was created 1518s - returns the value set by #set_encoding 1518s 1518s IO#internal_encoding with 'w+' mode when Encoding.default_internal == Encoding.default_external 1518s - returns nil 1518s - returns nil regardless of Encoding.default_internal changes 1518s 1518s IO#internal_encoding with 'w+' mode when Encoding.default_internal != Encoding.default_external 1518s - returns the value of Encoding.default_internal when the instance was created if the internal encoding is not set 1518s - does not change when Encoding.default_internal is changed 1518s - returns the internal encoding set when the instance was created 1518s - does not change when set and Encoding.default_internal is changed 1518s - returns the value set by #set_encoding 1518s - returns nil when Encoding.default_external is BINARY and the internal encoding is not set 1518s - returns nil when the external encoding is BINARY and the internal encoding is not set 1518s 1518s IO#internal_encoding with 'a' mode when Encoding.default_internal is not set 1518s - returns nil if the internal encoding is not set 1518s - returns nil if Encoding.default_internal is changed after the instance is created 1518s - returns the value set when the instance was created 1518s - returns the value set by #set_encoding 1518s 1518s IO#internal_encoding with 'a' mode when Encoding.default_internal == Encoding.default_external 1518s - returns nil 1518s - returns nil regardless of Encoding.default_internal changes 1518s 1518s IO#internal_encoding with 'a' mode when Encoding.default_internal != Encoding.default_external 1518s - returns the value of Encoding.default_internal when the instance was created if the internal encoding is not set 1518s - does not change when Encoding.default_internal is changed 1518s - returns the internal encoding set when the instance was created 1518s - does not change when set and Encoding.default_internal is changed 1518s - returns the value set by #set_encoding 1518s - returns nil when Encoding.default_external is BINARY and the internal encoding is not set 1518s - returns nil when the external encoding is BINARY and the internal encoding is not set 1518s 1518s IO#internal_encoding with 'a+' mode when Encoding.default_internal is not set 1518s - returns nil if the internal encoding is not set 1518s - returns nil if Encoding.default_internal is changed after the instance is created 1518s - returns the value set when the instance was created 1518s - returns the value set by #set_encoding 1518s 1518s IO#internal_encoding with 'a+' mode when Encoding.default_internal == Encoding.default_external 1518s - returns nil 1518s - returns nil regardless of Encoding.default_internal changes 1518s 1518s IO#internal_encoding with 'a+' mode when Encoding.default_internal != Encoding.default_external 1518s - returns the value of Encoding.default_internal when the instance was created if the internal encoding is not set 1518s - does not change when Encoding.default_internal is changed 1518s - returns the internal encoding set when the instance was created 1518s - does not change when set and Encoding.default_internal is changed 1518s - returns the value set by #set_encoding 1518s - returns nil when Encoding.default_external is BINARY and the internal encoding is not set 1518s - returns nil when the external encoding is BINARY and the internal encoding is not set 1518s 1518s IO 1518s - includes File::Constants 1518s - includes Enumerable 1518s 1518s IO#ioctl 1518s - raises IOError on closed stream 1518s 1518s IO#isatty 1518s - returns true if this stream is a terminal device (TTY) 1518s - returns false if this stream is not a terminal device (TTY) 1518s - raises IOError on closed stream 1518s 1518s IO#lineno 1518s - raises an IOError on a closed stream 1518s - returns the current line number 1518s 1518s IO#lineno= 1518s - raises an IOError on a closed stream 1518s - calls #to_int on a non-numeric argument 1518s - truncates a Float argument 1518s - raises TypeError if cannot convert argument to Integer implicitly 1518s - does not accept Integers that don't fit in a C int 1518s - sets the current line number to the given value 1518s - does not change $. 1518s - does not change $. until next read 1518s 1518s IO.new 1518s - creates an IO instance from an Integer argument 1518s - creates an IO instance when STDOUT is closed 1518s - creates an IO instance when STDERR is closed 1518s - calls #to_int on an object to convert to an Integer 1518s - accepts a :mode option 1518s - accepts a mode argument set to nil with a valid :mode option 1518s - accepts a mode argument with a :mode option set to nil 1518s - uses the external encoding specified in the mode argument 1518s - uses the external and the internal encoding specified in the mode argument 1518s - uses the external encoding specified via the :external_encoding option 1518s - uses the internal encoding specified via the :internal_encoding option 1518s - uses the colon-separated encodings specified via the :encoding option 1518s - uses the :encoding option as the external encoding when only one is given 1518s - uses the :encoding options as the external encoding when it's an Encoding object 1518s - ignores the :encoding option when the :external_encoding option is present 1518s - ignores the :encoding option when the :internal_encoding option is present 1518s - uses the encoding specified via the :mode option hash 1518s - ignores the :internal_encoding option when the same as the external encoding 1518s - sets internal encoding to nil when passed '-' 1518s - sets binmode from mode string 1518s - does not set binmode without being asked 1518s - sets binmode from :binmode option 1518s - does not set binmode from false :binmode 1518s - sets external encoding to binary with binmode in mode string 1518s - sets external encoding to binary with :binmode option 1518s - does not use binary encoding when mode encoding is specified 1518s - does not use binary encoding when :encoding option is specified 1518s - does not use binary encoding when :external_encoding option is specified 1518s - does not use binary encoding when :internal_encoding option is specified 1518s - raises ArgumentError for nil options 1518s - coerces mode with #to_str 1518s - coerces mode with #to_int 1518s - coerces mode with #to_str when passed in options 1518s - coerces mode with #to_int when passed in options 1518s - coerces :encoding option with #to_str 1518s - coerces :external_encoding option with #to_str 1518s - coerces :internal_encoding option with #to_str 1518s - coerces options as third argument with #to_hash 1518s - coerces options as second argument with #to_hash 1518s - accepts an :autoclose option 1518s - accepts any truthy option :autoclose 1518s - does not use the given block and warns to use IO::open 1518s 1518s IO.new 1518s - raises an Errno::EBADF if the file descriptor is not valid 1518s - raises an IOError if passed a closed stream 1518s - raises an Errno::EINVAL if the new mode is not compatible with the descriptor's current mode 1518s - raises ArgumentError if passed an empty mode string 1518s - raises an error if passed modes two ways 1518s - raises an error if passed encodings two ways 1518s - raises an error if passed matching binary/text mode two ways 1518s - raises an error if passed conflicting binary/text mode two ways 1518s - raises an error when trying to set both binmode and textmode 1518s - raises ArgumentError if not passed a hash or nil for options 1518s - raises ArgumentError if passed a hash for mode and nil for options 1518s 1518s IO#nonblock? 1518s - returns false for a file by default 1518s 1518s IO#nonblock= 1518s - changes the IO to non-blocking mode 1518s 1518s IO.open 1518s - creates an IO instance from an Integer argument 1518s - creates an IO instance when STDOUT is closed 1518s - creates an IO instance when STDERR is closed 1518s - calls #to_int on an object to convert to an Integer 1518s - accepts a :mode option 1518s - accepts a mode argument set to nil with a valid :mode option 1518s - accepts a mode argument with a :mode option set to nil 1518s - uses the external encoding specified in the mode argument 1518s - uses the external and the internal encoding specified in the mode argument 1518s - uses the external encoding specified via the :external_encoding option 1518s - uses the internal encoding specified via the :internal_encoding option 1518s - uses the colon-separated encodings specified via the :encoding option 1518s - uses the :encoding option as the external encoding when only one is given 1518s - uses the :encoding options as the external encoding when it's an Encoding object 1518s - uses the encoding specified via the :mode option hash 1518s - ignores the :internal_encoding option when the same as the external encoding 1518s - sets internal encoding to nil when passed '-' 1518s - sets binmode from mode string 1518s - does not set binmode without being asked 1518s - sets binmode from :binmode option 1518s - does not set binmode from false :binmode 1518s - sets external encoding to binary with binmode in mode string 1518s - sets external encoding to binary with :binmode option 1518s - does not use binary encoding when mode encoding is specified 1518s - does not use binary encoding when :encoding option is specified 1518s - does not use binary encoding when :external_encoding option is specified 1518s - does not use binary encoding when :internal_encoding option is specified 1518s - raises ArgumentError for nil options 1518s - coerces mode with #to_str 1518s - coerces mode with #to_int 1518s - coerces mode with #to_str when passed in options 1518s - coerces mode with #to_int when passed in options 1518s - coerces :encoding option with #to_str 1518s - coerces :external_encoding option with #to_str 1518s - coerces :internal_encoding option with #to_str 1518s - coerces options as third argument with #to_hash 1518s - coerces options as second argument with #to_hash 1518s - accepts an :autoclose option 1518s - accepts any truthy option :autoclose 1518s 1518s IO.open 1518s - raises an Errno::EBADF if the file descriptor is not valid 1518s - raises an IOError if passed a closed stream 1518s - raises an Errno::EINVAL if the new mode is not compatible with the descriptor's current mode 1518s - raises ArgumentError if passed an empty mode string 1518s - raises an error if passed modes two ways 1518s - raises an error if passed encodings two ways 1518s - raises an error when trying to set both binmode and textmode 1518s - raises ArgumentError if not passed a hash or nil for options 1518s - raises ArgumentError if passed a hash for mode and nil for options 1518s 1518s IO.open 1518s - calls #close after yielding to the block 1518s - propagate an exception in the block after calling #close 1518s - propagates an exception raised by #close that is not a StandardError 1518s - propagates an exception raised by #close that is a StandardError 1518s - does not propagate an IOError with 'closed stream' message raised by #close 1518s - does not set last error when an IOError with 'closed stream' raised by #close 1518s 1518s IO#<< 1518s - writes an object to the IO stream 1518s - calls #to_s on the object to print it 1518s - raises an error if the stream is closed 1518s - returns self 1518s 1518s IO.pipe 1518s - creates a two-ended pipe 1518s - returns two IO objects 1518s - returns instances of a subclass when called on a subclass 1518s 1518s IO.pipe passed a block 1518s - yields two IO objects 1518s - returns the result of the block 1518s - closes both IO objects 1518s - closes both IO objects when the block raises 1518s - allows IO objects to be closed within the block 1518s 1518s IO.pipe 1518s - sets the external encoding of the read end to the default when passed no arguments 1518s - sets the internal encoding of the read end to the default when passed no arguments 1518s - sets the internal encoding to nil if the same as the external 1518s - sets the external encoding of the read end when passed an Encoding argument 1518s - sets the external and internal encodings of the read end when passed two Encoding arguments 1518s - sets the external encoding of the read end when passed the name of an Encoding 1518s - accepts 'bom|' prefix for external encoding 1518s - sets the external and internal encodings specified as a String and separated with a colon 1518s - accepts 'bom|' prefix for external encoding when specifying 'external:internal' 1518s - sets the external and internal encoding when passed two String arguments 1518s - accepts an options Hash with one String encoding argument 1518s - accepts an options Hash with two String encoding arguments 1518s - calls #to_hash to convert an options argument 1518s - calls #to_str to convert the first argument to a String 1518s - calls #to_str to convert the second argument to a String 1518s - sets no external encoding for the write end 1518s - sets no internal encoding for the write end 1518s 1518s IO#pos 1518s - gets the offset 1518s - raises IOError on closed stream 1518s - resets #eof? 1518s 1518s IO#pos= 1518s - sets the offset 1518s - converts arguments to Integers 1518s - raises TypeError when cannot convert implicitly argument to Integer 1518s - does not accept Integers that don't fit in a C off_t 1518s - raises IOError on closed stream 1518s 1518s IO#pread 1518s - accepts a length, and an offset 1518s - accepts a length, an offset, and an output buffer 1518s - shrinks the buffer in case of less bytes read 1518s - grows the buffer in case of more bytes read 1518s - does not advance the file pointer 1518s - ignores the current offset 1518s - returns an empty string for maxlen = 0 1518s - ignores the offset for maxlen = 0, even if it is out of file bounds 1518s - does not reset the buffer when reading with maxlen = 0 1518s - converts offset to Integer using #to_int 1518s - converts a buffer to String using to_str 1518s - raises TypeError if maxlen is not an Integer and cannot be coerced into Integer 1518s - raises TypeError if offset is not an Integer and cannot be coerced into Integer 1518s - raised Errno::EINVAL for negative values of offset 1518s - raises TypeError if the buffer is not a String and cannot be coerced into String 1518s - raises EOFError if end-of-file is reached 1518s - raises IOError when file is not open in read mode 1518s - raises IOError when file is closed 1518s 1518s IO#print 1518s - returns nil 1518s - writes $_.to_s followed by $\ (if any) to the stream if no arguments given 1518s - calls obj.to_s and not obj.to_str then writes the record separator 1518s - writes each obj.to_s to the stream separated by $, (if any) and appends $\ (if any) given multiple objects 1518s - raises IOError on closed stream 1518s 1518s IO#printf 1518s - calls #to_str to convert the format object to a String 1518s - writes the #sprintf formatted string 1518s - raises IOError on closed stream 1518s 1518s IO#putc 1518s - calls #to_int to convert an object to an Integer 1518s - raises IOError on a closed stream 1518s - raises a TypeError when passed nil 1518s - raises a TypeError when passed false 1518s - raises a TypeError when passed true 1518s 1518s IO#putc with an Integer argument 1518s - writes one character as a String 1518s - writes the low byte as a String 1518s 1518s IO#putc with a String argument 1518s - writes one character 1518s - writes the first character 1518s 1518s IO#puts 1518s - writes just a newline when given no args 1518s - writes just a newline when given just a newline 1518s - writes empty string with a newline when given nil as an arg 1518s - writes empty string with a newline when when given nil as multiple args 1518s - calls :to_s before writing non-string objects that don't respond to :to_ary 1518s - returns general object info if :to_s does not return a string 1518s - writes each arg if given several 1518s - flattens a nested array before writing it 1518s - writes nothing for an empty array 1518s - writes [...] for a recursive array arg 1518s - writes a newline after objects that do not end in newlines 1518s - does not write a newline after objects that end in newlines 1518s - ignores the $/ separator global 1518s - raises IOError on closed stream 1518s - writes crlf when IO is opened with newline: :crlf 1518s - writes cr when IO is opened with newline: :cr 1518s - writes lf when IO is opened with newline: :lf 1518s 1518s IO#pwrite 1518s - returns the number of bytes written 1518s - accepts a string and an offset 1518s - does not advance the pointer in the file 1518s - calls #to_int on the offset 1518s - raises IOError when file is not open in write mode 1518s - raises IOError when file is closed 1518s - raises a TypeError if the offset cannot be converted to an Integer 1518s 1518s IO#read_nonblock 1518s - raises an exception extending IO::WaitReadable when there is no data 1518s - sets the IO in nonblock mode 1518s - returns at most the number of bytes requested 1518s - reads after ungetc with data in the buffer 1518s - raises an exception after ungetc with data in the buffer and character conversion enabled 1518s - returns less data if that is all that is available 1518s - allows for reading 0 bytes before any write 1518s - allows for reading 0 bytes after a write 1518s - raises ArgumentError when length is less than 0 1518s - reads into the passed buffer 1518s - returns the passed buffer 1518s - discards the existing buffer content upon successful read 1518s - discards the existing buffer content upon error 1518s - raises IOError on closed stream 1518s - raises EOFError when the end is reached 1518s - preserves the encoding of the given buffer 1518s 1518s IO#read_nonblock when exception option is set to false when there is no data 1518s - returns :wait_readable 1518s 1518s IO#read_nonblock when exception option is set to false when the end is reached 1518s - returns nil 1518s 1518s IO.read 1518s - reads the contents of a file 1518s - calls #to_path on non-String arguments 1518s - accepts an empty options Hash 1518s - accepts a length, and empty options Hash 1518s - accepts a length, offset, and empty options Hash 1518s - raises an IOError if the options Hash specifies write mode 1518s - raises an IOError if the options Hash specifies append only mode 1518s - reads the file if the options Hash includes read mode 1518s - reads the file if the options Hash includes read/write mode 1518s - reads the file if the options Hash includes read/write append mode 1518s - uses an :open_args option 1518s - disregards other options if :open_args is given 1518s - doesn't require mode to be specified in :open_args 1518s - doesn't require mode to be specified in :open_args even if flags option passed 1518s - treats second nil argument as no length limit 1518s - treats third nil argument as 0 1518s - reads the contents of a file up to a certain size when specified 1518s - reads the contents of a file from an offset of a specific size when specified 1518s - returns nil at end-of-file when length is passed 1518s - returns an empty string when reading zero bytes 1518s - returns a String in BINARY when passed a size 1518s - raises an Errno::ENOENT when the requested file does not exist 1518s - raises a TypeError when not passed a String type 1518s - raises an ArgumentError when not passed a valid length 1518s - raises an Errno::EINVAL when not passed a valid offset 1518s - uses the external encoding specified via the :external_encoding option 1518s - uses the external encoding specified via the :encoding option 1518s 1518s IO.read from a pipe 1518s - runs the rest as a subprocess and returns the standard output 1518s - reads only the specified number of bytes requested 1518s - raises Errno::ESPIPE if passed an offset 1518s 1518s IO.read on an empty file 1518s - returns nil when length is passed 1518s - returns an empty string when no length is passed 1518s 1518s IO#read 1518s - can be read from consecutively 1518s - treats first nil argument as no length limit 1518s - raises an ArgumentError when not passed a valid length 1518s - clears the output buffer if there is nothing to read 1518s - raise FrozenError if the output buffer is frozen 1518s - raise FrozenError if the output buffer is frozen (2) 1518s - consumes zero bytes when reading zero bytes 1518s - is at end-of-file when everything has been read 1518s - reads the contents of a file 1518s - places the specified number of bytes in the buffer 1518s - expands the buffer when too small 1518s - overwrites the buffer 1518s - truncates the buffer when too big 1518s - returns the given buffer 1518s - returns the given buffer when there is nothing to read 1518s - coerces the second argument to string and uses it as a buffer 1518s - returns an empty string at end-of-file 1518s - reads the contents of a file when more bytes are specified 1518s - returns an empty string at end-of-file 1518s - returns an empty string when the current pos is bigger than the content size 1518s - returns nil at end-of-file with a length 1518s - with length argument returns nil when the current pos is bigger than the content size 1518s - raises IOError on closed stream 1518s - raises ArgumentError when length is less than 0 1518s - raises IOError when stream is closed by another thread 1518s 1518s IO#read 1518s - ignores unicode encoding 1518s 1518s IO#read in binary mode 1518s - does not transcode file contents when Encoding.default_internal is set 1518s 1518s IO#read in text mode 1518s - reads data according to the internal encoding 1518s 1518s IO.read with BOM 1518s - reads a file without a bom 1518s - reads a file with a utf-8 bom 1518s - reads a file with a utf-16le bom 1518s - reads a file with a utf-16be bom 1518s - reads a file with a utf-32le bom 1518s - reads a file with a utf-32be bom 1518s 1518s IO#read when IO#external_encoding and IO#internal_encoding are nil 1518s - sets the String encoding to Encoding.default_external 1518s 1518s IO#read with internal encoding not specified 1518s - does not transcode the String 1518s - sets the String encoding to the external encoding 1518s - reads bytes when passed a size 1518s - returns a String in BINARY when passed a size 1518s - does not change the buffer's encoding when passed a limit 1518s - truncates the buffer but does not change the buffer's encoding when no data remains 1518s 1518s IO#read with internal encoding specified by open mode 1518s - returns a transcoded String 1518s - sets the String encoding to the internal encoding 1518s - reads bytes when passed a size 1518s - returns a String in BINARY when passed a size 1518s - does not change the buffer's encoding when passed a limit 1518s - truncates the buffer but does not change the buffer's encoding when no data remains 1518s 1518s IO#read with internal encoding specified by open mode when passed nil for limit 1518s - sets the buffer to a transcoded String 1518s - sets the buffer's encoding to the internal encoding 1518s 1518s IO#read with internal encoding specified by mode: option 1518s - returns a transcoded String 1518s - sets the String encoding to the internal encoding 1518s - reads bytes when passed a size 1518s - returns a String in BINARY when passed a size 1518s - does not change the buffer's encoding when passed a limit 1518s - truncates the buffer but does not change the buffer's encoding when no data remains 1518s 1518s IO#read with internal encoding specified by mode: option when passed nil for limit 1518s - sets the buffer to a transcoded String 1518s - sets the buffer's encoding to the internal encoding 1518s 1518s IO#read with internal encoding specified by internal_encoding: option 1518s - returns a transcoded String 1518s - sets the String encoding to the internal encoding 1518s - reads bytes when passed a size 1518s - returns a String in BINARY when passed a size 1518s - does not change the buffer's encoding when passed a limit 1518s - truncates the buffer but does not change the buffer's encoding when no data remains 1518s 1518s IO#read with internal encoding specified by internal_encoding: option when passed nil for limit 1518s - sets the buffer to a transcoded String 1518s - sets the buffer's encoding to the internal encoding 1518s 1518s IO#read with internal encoding specified by encoding: option 1518s - returns a transcoded String 1518s - sets the String encoding to the internal encoding 1518s - reads bytes when passed a size 1518s - returns a String in BINARY when passed a size 1518s - does not change the buffer's encoding when passed a limit 1518s - truncates the buffer but does not change the buffer's encoding when no data remains 1518s 1518s IO#read with internal encoding specified by encoding: option when passed nil for limit 1518s - sets the buffer to a transcoded String 1518s - sets the buffer's encoding to the internal encoding 1518s 1518s IO#read with large data 1518s - reads all the data at once 1518s - reads only the requested number of bytes 1518s 1518s IO#readbyte 1518s - reads one byte from the stream 1518s - raises EOFError on EOF 1518s 1518s IO#readchar 1518s - returns the next string from the stream 1518s - raises an EOFError when invoked at the end of the stream 1518s - raises IOError on closed stream 1518s 1518s IO#readchar with internal encoding not specified 1518s - does not transcode the String 1518s - sets the String encoding to the external encoding 1518s 1518s IO#readchar with internal encoding specified by open mode 1518s - returns a transcoded String 1518s - sets the String encoding to the internal encoding 1518s 1518s IO#readchar with internal encoding specified by mode: option 1518s - returns a transcoded String 1518s - sets the String encoding to the internal encoding 1518s 1518s IO#readchar with internal encoding specified by internal_encoding: option 1518s - returns a transcoded String 1518s - sets the String encoding to the internal encoding 1518s 1518s IO#readchar with internal encoding specified by encoding: option 1518s - returns a transcoded String 1518s - sets the String encoding to the internal encoding 1518s 1518s IO#readchar 1518s - raises EOFError on empty stream 1518s 1518s IO#readline 1518s - returns the next line on the stream 1518s - goes back to first position after a rewind 1518s - returns characters after the position set by #seek 1518s - raises EOFError on end of stream 1518s - raises IOError on closed stream 1518s - assigns the returned line to $_ 1518s 1518s IO#readline when passed limit 1518s - reads limit bytes 1518s - returns an empty string when passed 0 as a limit 1518s - does not accept Integers that don't fit in a C off_t 1518s 1518s IO#readline when passed chomp 1518s - returns the first line without a trailing newline character 1518s 1518s IO#readlines 1518s - raises an IOError if the stream is closed 1518s 1518s IO#readlines when passed no arguments 1518s - returns an Array containing lines based on $/ 1518s 1518s IO#readlines when passed no arguments 1518s - updates self's position 1518s - updates self's lineno based on the number of lines read 1518s - does not change $_ 1518s - returns an empty Array when self is at the end 1518s 1518s IO#readlines when passed nil 1518s - returns the remaining content as one line starting at the current position 1518s 1518s IO#readlines when passed an empty String 1518s - returns an Array containing all paragraphs 1518s 1518s IO#readlines when passed a separator 1518s - returns an Array containing lines based on the separator 1518s - returns an empty Array when self is at the end 1518s - updates self's lineno based on the number of lines read 1518s - updates self's position based on the number of characters read 1518s - does not change $_ 1518s - tries to convert the passed separator to a String using #to_str 1518s 1518s IO#readlines when passed limit 1518s - does not accept Integers that don't fit in a C off_t 1518s 1518s IO#readlines when passed chomp 1518s - returns the first line without a trailing newline character 1518s 1518s IO#readlines when passed arbitrary keyword argument 1518s - tolerates it 1518s 1518s IO#readlines 1518s - raises an IOError if the stream is opened for append only 1518s - raises an IOError if the stream is opened for write only 1518s 1518s IO.readlines 1518s - does not change $_ 1518s - raises TypeError if the first parameter is nil 1518s - raises an Errno::ENOENT if the file does not exist 1518s - yields a single string with entire content when the separator is nil 1518s - yields a sequence of paragraphs when the separator is an empty string 1518s - yields a sequence of lines without trailing newline characters when chomp is passed 1518s 1518s IO.readlines when passed a string that starts with a | 1518s - gets data from the standard out of the subprocess 1518s 1518s IO.readlines when passed name 1518s - calls #to_path to convert the name 1518s - defaults to $/ as the separator 1518s 1518s IO.readlines when passed name, object 1518s - calls #to_str to convert the object to a separator 1518s 1518s IO.readlines when passed name, object when the object is an Integer 1518s - defaults to $/ as the separator 1518s - uses the object as a limit if it is an Integer 1518s - ignores the object as a limit if it is negative 1518s - does not accept Integers that don't fit in a C off_t 1518s 1518s IO.readlines when passed name, object when the object is a String 1518s - uses the value as the separator 1518s - accepts non-ASCII data as separator 1518s 1518s IO.readlines when passed name, object when the object is neither Integer nor String 1518s - raises TypeError exception 1518s 1518s IO.readlines when passed name, keyword arguments 1518s - uses the keyword arguments as options 1518s 1518s IO.readlines when passed name, object, object when the first object is a String 1518s - uses the second object as a limit if it is an Integer 1518s - calls #to_int to convert the second object 1518s 1518s IO.readlines when passed name, object, object when the first object is not a String or Integer 1518s - calls #to_str to convert the object to a String 1518s - uses the second object as a limit if it is an Integer 1518s - calls #to_int to convert the second object 1518s 1518s IO.readlines when passed name, object, object when the second object is neither Integer nor String 1518s - raises TypeError exception 1518s 1518s IO.readlines when passed name, object, keyword arguments when the first object is an Integer 1518s - uses the keyword arguments as options 1518s 1518s IO.readlines when passed name, object, keyword arguments when the first object is a String 1518s - uses the keyword arguments as options 1518s 1518s IO.readlines when passed name, object, keyword arguments when the first object is not a String or Integer 1519s - uses the keyword arguments as options 1519s 1519s IO.readlines when passed name, separator, limit, keyword arguments 1519s - calls #to_path to convert the name object 1519s - calls #to_str to convert the separator object 1519s - calls #to_int to convert the limit argument 1519s - uses the keyword arguments as options 1519s 1519s IO.readlines when passed name, separator, limit, keyword arguments when passed chomp, nil as a separator, and a limit 1519s - yields each line of limit size without truncating trailing new line character 1519s 1519s IO.readlines 1519s - encodes lines using the default external encoding 1519s - encodes lines using the default internal encoding, when set 1519s - ignores the default internal encoding if the external encoding is BINARY 1519s 1519s IO#readpartial 1519s - raises IOError on closed stream 1519s - reads at most the specified number of bytes 1519s - reads after ungetc with data in the buffer 1519s - reads after ungetc with multibyte characters in the buffer 1519s - reads after ungetc without data in the buffer 1519s - discards the existing buffer content upon successful read 1519s - raises EOFError on EOF 1519s - discards the existing buffer content upon error 1519s - raises IOError if the stream is closed 1519s - raises ArgumentError if the negative argument is provided 1519s - immediately returns an empty string if the length argument is 0 1519s - clears and returns the given buffer if the length argument is 0 1519s - preserves the encoding of the given buffer 1519s 1519s IO#reopen 1519s - calls #to_io to convert an object 1519s - changes the class of the instance to the class of the object returned by #to_io 1519s - raises an IOError if the object returned by #to_io is closed 1519s - raises a TypeError if #to_io does not return an IO instance 1519s - raises an IOError when called on a closed stream with an object 1519s - raises an IOError if the IO argument is closed 1519s - raises an IOError when called on a closed stream with an IO 1519s 1519s IO#reopen with a String 1519s - does not raise an exception when called on a closed stream with a path 1519s - returns self 1519s - positions a newly created instance at the beginning of the new stream 1519s - positions an instance that has been read from at the beginning of the new stream 1519s - passes all mode flags through 1519s - calls #to_path on non-String arguments 1519s 1519s IO#reopen with a String 1519s - opens a path after writing to the original file descriptor 1519s - always resets the close-on-exec flag to true on non-STDIO objects 1519s - creates the file if it doesn't exist if the IO is opened in write mode 1519s - creates the file if it doesn't exist if the IO is opened in write mode 1519s 1519s IO#reopen with a String 1519s - raises an Errno::ENOENT if the file does not exist and the IO is not opened in write mode 1519s 1519s IO#reopen with an IO at EOF 1519s - resets the EOF status to false 1519s 1519s IO#reopen with an IO 1519s - does not change the object_id 1519s - reads from the beginning if the other IO has not been read from 1519s - reads from the current position of the other IO's stream 1519s 1519s IO#reopen with an IO 1519s - associates the IO instance with the other IO's stream 1519s - always resets the close-on-exec flag to true on non-STDIO objects 1519s - may change the class of the instance 1519s - sets path equals to the other IO's path if other IO is File 1519s 1519s IO#rewind 1519s - positions the instance to the beginning of input 1519s - positions the instance to the beginning of output for write-only IO 1519s - positions the instance to the beginning of input and clears EOF 1519s - sets lineno to 0 1519s - returns 0 1519s - raises IOError on closed stream 1519s 1519s IO#seek 1519s - sets the offset 1519s - converts arguments to Integers 1519s - raises TypeError when cannot convert implicitly argument to Integer 1519s - does not accept Integers that don't fit in a C off_t 1519s - raises IOError on closed stream 1519s 1519s IO#seek 1519s - moves the read position relative to the current position with SEEK_CUR 1519s - moves the read position relative to the start with SEEK_SET 1519s - moves the read position relative to the end with SEEK_END 1519s - moves the read position and clears EOF with SEEK_SET 1519s - moves the read position and clears EOF with SEEK_CUR 1519s - moves the read position and clears EOF with SEEK_END 1519s 1519s IO.select 1519s - blocks for duration of timeout and returns nil if there are no objects ready for I/O 1519s - returns immediately all objects that are ready for I/O when timeout is 0 1519s - returns nil after timeout if there are no objects ready for I/O 1519s - returns supplied objects when they are ready for I/O 1519s - leaves out IO objects for which there is no I/O ready 1519s - returns supplied objects correctly when monitoring the same object in different arrays 1519s - returns the pipe read end in read set if the pipe write end is closed concurrently 1519s - invokes to_io on supplied objects that are not IO and returns the supplied objects 1519s - raises TypeError if supplied objects are not IO 1519s - raises a TypeError if the specified timeout value is not Numeric 1519s - raises TypeError if the first three arguments are not Arrays 1519s - raises an ArgumentError when passed a negative timeout 1519s 1519s IO.select returns the available descriptors when the file descriptor 1519s - is in both read and error arrays 1519s - is in both write and error arrays 1519s - is in both read and write arrays 1519s 1519s IO.select when passed nil for timeout 1519s - sleeps forever and sets the thread status to 'sleep' 1519s 1519s IO#set_encoding_by_bom 1519s - returns nil if not readable 1519s - returns the result encoding if found BOM UTF-8 sequence 1519s - returns the result encoding if found BOM UTF_16LE sequence 1519s - returns the result encoding if found BOM UTF_16BE sequence 1519s - returns the result encoding if found BOM UTF_32LE sequence 1519s - returns the result encoding if found BOM UTF_32BE sequence 1519s - returns nil if io is empty 1519s - returns nil if UTF-8 BOM sequence is incomplete 1519s - returns nil if UTF-16BE BOM sequence is incomplete 1519s - returns nil if UTF-16LE/UTF-32LE BOM sequence is incomplete 1519s - returns nil if UTF-32BE BOM sequence is incomplete 1519s - returns nil if found BOM sequence not provided 1519s - returns exception if io not in binary mode 1519s - returns exception if encoding already set 1519s - returns exception if encoding conversion is already set 1519s 1519s IO#set_encoding when passed nil, nil with 'r' mode 1519s - sets the encodings to the current Encoding defaults 1519s - prevents the #internal_encoding from changing when Encoding.default_internal is changed 1519s - allows the #external_encoding to change when Encoding.default_external is changed 1519s 1519s IO#set_encoding when passed nil, nil with 'rb' mode 1519s - returns Encoding.default_external 1519s 1519s IO#set_encoding when passed nil, nil with 'r+' mode 1519s - sets the encodings to nil when they were set previously 1519s - sets the encodings to nil when the IO is built with no explicit encoding 1519s - prevents the encodings from changing when Encoding defaults are changed 1519s - sets the encodings to the current Encoding defaults 1519s 1519s IO#set_encoding when passed nil, nil with 'w' mode 1519s - sets the encodings to nil when they were set previously 1519s - sets the encodings to nil when the IO is built with no explicit encoding 1519s - prevents the encodings from changing when Encoding defaults are changed 1519s - sets the encodings to the current Encoding defaults 1519s 1519s IO#set_encoding when passed nil, nil with 'w+' mode 1519s - sets the encodings to nil when they were set previously 1519s - sets the encodings to nil when the IO is built with no explicit encoding 1519s - prevents the encodings from changing when Encoding defaults are changed 1519s - sets the encodings to the current Encoding defaults 1519s 1519s IO#set_encoding when passed nil, nil with 'a' mode 1519s - sets the encodings to nil when they were set previously 1519s - sets the encodings to nil when the IO is built with no explicit encoding 1519s - prevents the encodings from changing when Encoding defaults are changed 1519s - sets the encodings to the current Encoding defaults 1519s 1519s IO#set_encoding when passed nil, nil with 'a+' mode 1519s - sets the encodings to nil when they were set previously 1519s - sets the encodings to nil when the IO is built with no explicit encoding 1519s - prevents the encodings from changing when Encoding defaults are changed 1519s - sets the encodings to the current Encoding defaults 1519s 1519s IO#set_encoding when passed nil, nil with standard IOs 1519s - correctly resets them 1519s 1519s IO#set_encoding 1519s - returns self 1519s - sets the external encoding when passed an Encoding argument 1519s - sets the external and internal encoding when passed two Encoding arguments 1519s - sets the external encoding when passed the name of an Encoding 1519s - ignores the internal encoding if the same as external when passed Encoding objects 1519s - ignores the internal encoding if the same as external when passed encoding names separated by ':' 1519s - sets the external and internal encoding when passed the names of Encodings separated by ':' 1519s - sets the external and internal encoding when passed two String arguments 1519s - calls #to_str to convert an abject to a String 1519s - calls #to_str to convert the second argument to a String 1519s - saves encoding options passed as a hash in the last argument 1519s - raises ArgumentError when no arguments are given 1519s 1519s IO#stat 1519s - raises IOError on closed stream 1519s - returns a File::Stat object for the stream 1519s - can stat pipes 1519s 1519s IO#sync= 1519s - sets the sync mode to true or false 1519s - accepts non-boolean arguments 1519s - raises an IOError on closed stream 1519s 1519s IO#sync 1519s - returns the current sync mode 1519s - raises an IOError on closed stream 1519s 1519s IO#sync 1519s - is false by default for STDIN 1519s - is false by default for STDOUT 1519s - is true by default for STDERR 1519s 1519s IO.sysopen 1519s - returns the file descriptor for a given path 1519s - works on directories 1519s - calls #to_path to convert an object to a path 1519s - accepts a mode as second argument 1519s - accepts permissions as third argument 1519s - accepts mode & permission that are nil 1519s 1519s IO#sysread on a file 1519s - reads the specified number of bytes from the file 1519s - reads the specified number of bytes from the file to the buffer 1519s - coerces the second argument to string and uses it as a buffer 1519s - advances the position of the file by the specified number of bytes 1519s - raises an error when called after buffered reads 1519s - reads normally even when called immediately after a buffered IO#read 1519s - does not raise error if called after IO#read followed by IO#write 1519s - does not raise error if called after IO#read followed by IO#syswrite 1519s - reads updated content after the flushed buffered IO#write 1519s - raises IOError on closed stream 1519s - immediately returns an empty string if the length argument is 0 1519s - immediately returns the given buffer if the length argument is 0 1519s - discards the existing buffer content upon successful read 1519s 1519s IO#sysread 1519s - returns a smaller string if less than size bytes are available 1519s 1519s IO#sysseek 1519s - sets the offset 1519s - converts arguments to Integers 1519s - raises TypeError when cannot convert implicitly argument to Integer 1519s - does not accept Integers that don't fit in a C off_t 1519s - raises IOError on closed stream 1519s 1519s IO#sysseek 1519s - moves the read position relative to the current position with SEEK_CUR 1519s - raises an error when called after buffered reads 1519s - seeks normally even when called immediately after a buffered IO#read 1519s - moves the read position relative to the start with SEEK_SET 1519s - moves the read position relative to the end with SEEK_END 1519s 1519s IO#syswrite on a file 1519s - writes all of the string's bytes but does not buffer them 1519s - does not modify the passed argument 1519s - warns if called immediately after a buffered IO#write 1519s - does not warn if called after IO#write with intervening IO#sysread 1519s - writes to the actual file position when called after buffered IO#read 1519s 1519s IO#syswrite on a pipe 1519s - returns the written bytes if the fd is in nonblock mode and write would block 1519s 1519s IO#syswrite 1519s - coerces the argument to a string using to_s 1519s - checks if the file is writable if writing more than zero bytes 1519s - returns the number of bytes written 1519s - invokes to_s on non-String argument 1519s - writes all of the string's bytes without buffering if mode is sync 1519s - does not warn if called after IO#read 1519s - writes to the current position after IO#read 1519s - advances the file position by the count of given bytes 1519s - raises IOError on closed stream 1519s - does not transcode the given string even when the external encoding is set 1519s 1519s IO#syswrite on a pipe 1519s - writes the given String to the pipe 1519s - raises Errno::EPIPE if the read end is closed and does not die from SIGPIPE 1519s 1519s IO#tell 1519s - gets the offset 1519s - raises IOError on closed stream 1519s - resets #eof? 1519s 1519s IO#to_i 1519s - returns the numeric file descriptor of the given IO object 1519s - raises IOError on closed stream 1519s 1519s IO#to_io 1519s - returns self for open stream 1519s - returns self for closed stream 1519s 1519s IO.try_convert 1519s - returns the passed IO object 1519s - does not call #to_io on an IO instance 1519s - calls #to_io to coerce an object 1519s - returns nil when the passed object does not respond to #to_io 1519s - return nil when BasicObject is passed 1519s - raises a TypeError if the object does not return an IO from #to_io 1519s - propagates an exception raised by #to_io 1519s 1519s IO#tty? 1519s - returns true if this stream is a terminal device (TTY) 1519s - returns false if this stream is not a terminal device (TTY) 1519s - raises IOError on closed stream 1519s 1519s IO#ungetbyte 1519s - does nothing when passed nil 1519s - puts back each byte in a String argument 1519s - calls #to_str to convert the argument 1519s - never raises RangeError 1519s - raises IOError on stream not opened for reading 1519s - raises an IOError if the IO is closed 1519s 1519s IO#ungetc 1519s - pushes back one character onto stream 1519s - interprets the codepoint in the external encoding 1519s - pushes back one character when invoked at the end of the stream 1519s - pushes back one character when invoked at the start of the stream 1519s - pushes back one character when invoked on empty stream 1519s - affects EOF state 1519s - adjusts the stream position 1519s - makes subsequent unbuffered operations to raise IOError 1519s - raises TypeError if passed nil 1519s - puts one or more characters back in the stream 1519s - calls #to_str to convert the argument if it is not an Integer 1519s - returns nil when invoked on stream that was not yet read 1519s - raises IOError on stream not opened for reading 1519s - raises IOError on closed stream 1519s 1519s IO#write_nonblock on a file 1519s - writes all of the string's bytes but does not buffer them 1519s - does not modify the passed argument 1519s - checks if the file is writable if writing zero bytes 1519s 1519s IO#write_nonblock 1519s - coerces the argument to a string using to_s 1519s - checks if the file is writable if writing more than zero bytes 1519s - returns the number of bytes written 1519s - invokes to_s on non-String argument 1519s - writes all of the string's bytes without buffering if mode is sync 1519s - does not warn if called after IO#read 1519s - writes to the current position after IO#read 1519s - advances the file position by the count of given bytes 1519s - raises IOError on closed stream 1519s - does not transcode the given string even when the external encoding is set 1519s 1519s IO#write_nonblock on a pipe 1519s - writes the given String to the pipe 1519s - raises Errno::EPIPE if the read end is closed and does not die from SIGPIPE 1519s 1519s IO#write_nonblock 1519s - raises an exception extending IO::WaitWritable when the write would block 1519s - sets the IO in nonblock mode 1519s 1519s IO#write_nonblock when exception option is set to false 1519s - returns :wait_writable when the operation would block 1519s 1519s IO#write on a file 1519s - does not check if the file is writable if writing zero bytes 1519s - returns a length of 0 when writing a blank string 1519s - returns a length of 0 when writing blank strings 1519s - returns a length of 0 when passed no arguments 1519s - returns the number of bytes written 1519s - does not modify the passed argument 1519s - does not modify arguments when passed multiple arguments and external encoding not set 1519s - uses the encoding from the given option for non-ascii encoding 1519s - uses the encoding from the given option for non-ascii encoding even if in binary mode 1519s - uses the encoding from the given option for non-ascii encoding when multiple arguments passes 1519s - raises a invalid byte sequence error if invalid bytes are being written 1519s - writes binary data if no encoding is given 1519s - writes binary data if no encoding is given and multiple arguments passed 1519s 1519s IO.write 1519s - coerces the argument to a string using to_s 1519s - returns the number of bytes written 1519s - creates a file if missing 1519s - creates file if missing even if offset given 1519s - truncates the file and writes the given string 1519s - doesn't truncate the file and writes the given string if an offset is given 1519s - doesn't truncate and writes at the given offset after passing empty opts 1519s - accepts a :mode option 1519s - accepts a :flags option without :mode one 1519s - raises an error if readonly mode is specified 1519s - truncates if empty :opts provided and offset skipped 1519s - uses an :open_args option 1519s - disregards other options if :open_args is given 1519s - requires mode to be specified in :open_args 1519s - requires mode to be specified in :open_args even if flags option passed 1519s - uses the given encoding and returns the number of bytes written 1519s - raises ArgumentError if encoding is specified in mode parameter and is given as :encoding option 1519s - writes the file with the permissions in the :perm parameter 1519s - writes binary data if no encoding is given 1519s 1519s IO#write 1519s - coerces the argument to a string using to_s 1519s - checks if the file is writable if writing more than zero bytes 1519s - returns the number of bytes written 1519s - invokes to_s on non-String argument 1519s - writes all of the string's bytes without buffering if mode is sync 1519s - does not warn if called after IO#read 1519s - writes to the current position after IO#read 1519s - advances the file position by the count of given bytes 1519s - raises IOError on closed stream 1519s - transcodes the given string when the external encoding is set and neither is BINARY 1519s - transcodes the given string when the external encoding is set and the string encoding is BINARY 1519s - accepts multiple arguments 1519s 1519s IO#write on a pipe 1519s - writes the given String to the pipe 1519s - raises Errno::EPIPE if the read end is closed and does not die from SIGPIPE 1519s 1519s Kernel 1519s - has private instance method Array() 1519s 1519s Kernel.Array 1519s - does not call #to_ary on an Array 1519s - calls #to_ary to convert the argument to an Array 1519s - does not call #to_a on an Array 1519s - calls #to_a if the argument does not respond to #to_ary 1519s - calls #to_a if #to_ary returns nil 1519s - returns an Array containing the argument if #to_a returns nil 1519s - calls #to_ary first, even if it's private 1519s - calls #to_a if #to_ary is not defined, even if it's private 1519s - returns an Array containing the argument if it responds to neither #to_ary nor #to_a 1519s - returns an empty Array when passed nil 1519s - raises a TypeError if #to_ary does not return an Array 1519s - raises a TypeError if #to_a does not return an Array 1519s 1519s Kernel#Array 1519s - does not call #to_ary on an Array 1519s - calls #to_ary to convert the argument to an Array 1519s - does not call #to_a on an Array 1519s - calls #to_a if the argument does not respond to #to_ary 1519s - calls #to_a if #to_ary returns nil 1519s - returns an Array containing the argument if #to_a returns nil 1519s - calls #to_ary first, even if it's private 1519s - calls #to_a if #to_ary is not defined, even if it's private 1519s - returns an Array containing the argument if it responds to neither #to_ary nor #to_a 1519s - returns an empty Array when passed nil 1519s - raises a TypeError if #to_ary does not return an Array 1519s - raises a TypeError if #to_a does not return an Array 1519s 1519s Kernel.Complex() 1519s - freezes its result 1519s 1519s Kernel.Complex() when passed [Complex, Complex] 1519s - returns a new Complex number based on the two given numbers 1519s 1519s Kernel.Complex() when passed [Complex] 1519s - returns the passed Complex number 1519s 1519s Kernel.Complex() when passed [Integer, Integer] 1519s - returns a new Complex number 1519s 1519s Kernel.Complex() when passed [Integer/Float] 1519s - returns a new Complex number with 0 as the imaginary component 1519s 1519s Kernel.Complex() when passed [String] 1519s - returns a Complex object 1519s - understands integers 1519s - understands negative integers 1519s - understands fractions (numerator/denominator) for the real part 1519s - understands fractions (numerator/denominator) for the imaginary part 1519s - understands negative fractions (-numerator/denominator) for the real part 1519s - understands negative fractions (-numerator/denominator) for the imaginary part 1519s - understands floats (a.b) for the real part 1519s - understands floats (a.b) for the imaginary part 1519s - understands negative floats (-a.b) for the real part 1519s - understands negative floats (-a.b) for the imaginary part 1519s - understands an integer followed by 'i' to mean that integer is the imaginary part 1519s - understands a negative integer followed by 'i' to mean that negative integer is the imaginary part 1519s - understands an 'i' by itself as denoting a complex number with an imaginary part of 1 1519s - understands a '-i' by itself as denoting a complex number with an imaginary part of -1 1519s - understands 'a+bi' to mean a complex number with 'a' as the real part, 'b' as the imaginary 1519s - understands 'a-bi' to mean a complex number with 'a' as the real part, '-b' as the imaginary 1519s - understands 'a+i' to mean a complex number with 'a' as the real part, 1i as the imaginary 1519s - understands 'a-i' to mean a complex number with 'a' as the real part, -1i as the imaginary 1519s - understands i, I, j, and J imaginary units 1519s - understands scientific notation for the real part 1519s - understands negative scientific notation for the real part 1519s - understands scientific notation for the imaginary part 1519s - understands negative scientific notation for the imaginary part 1519s - understands scientific notation for the real and imaginary part in the same String 1519s - understands negative scientific notation for the real and imaginary part in the same String 1519s - understands scientific notation with e and E 1519s - understands 'm@a' to mean a complex number in polar form with 'm' as the modulus, 'a' as the argument 1519s - ignores leading whitespaces 1519s - ignores trailing whitespaces 1519s - understands _ 1519s 1519s Kernel.Complex() when passed [String] invalid argument 1519s - raises Encoding::CompatibilityError if String is in not ASCII-compatible encoding 1519s - raises ArgumentError for unrecognised Strings 1519s - raises ArgumentError for trailing garbage 1519s - does not understand Float::INFINITY 1519s - does not understand Float::NAN 1519s - does not understand a sequence of _ 1519s - does not allow null-byte 1519s 1519s Kernel.Complex() when passed [String] invalid argument and exception: false passed 1519s - raises Encoding::CompatibilityError if String is in not ASCII-compatible encoding 1519s - returns nil for unrecognised Strings 1519s - returns nil when trailing garbage 1519s - returns nil for Float::INFINITY 1519s - returns nil for Float::NAN 1519s - returns nil when there is a sequence of _ 1519s - returns nil when String contains null-byte 1519s 1519s Kernel.Complex() when passes [String, String] 1519s - needs to be reviewed for spec completeness 1519s 1519s Kernel.Complex() when passed an Object which responds to #to_c 1519s - returns the passed argument 1519s 1519s Kernel.Complex() when passed a Numeric which responds to #real? with false 1519s - returns the passed argument 1519s 1519s Kernel.Complex() when passed a Numeric which responds to #real? with true 1519s - returns a Complex with the passed argument as the real component and 0 as the imaginary component 1519s 1519s Kernel.Complex() when passed Numerics n1 and n2 and at least one responds to #real? with false 1519s - returns n1 + n2 * Complex(0, 1) 1519s - returns n1 + n2 * Complex(0, 1) 1519s - returns n1 + n2 * Complex(0, 1) 1519s 1519s Kernel.Complex() when passed two Numerics and both respond to #real? with true 1519s - returns a Complex with the passed arguments as real and imaginary components respectively 1519s 1519s Kernel.Complex() when passed a single non-Numeric 1519s - coerces the passed argument using #to_c 1519s 1519s Kernel.Complex() when passed a non-Numeric second argument 1519s - raises TypeError 1519s 1519s Kernel.Complex() when passed nil 1519s - raises TypeError 1519s 1519s Kernel.Complex() when passed exception: false and [Numeric] 1519s - returns a complex number 1519s 1519s Kernel.Complex() when passed exception: false and [non-Numeric] 1519s - swallows an error 1519s 1519s Kernel.Complex() when passed exception: false and [non-Numeric, Numeric] argument 1519s - throws a TypeError 1519s 1519s Kernel.Complex() when passed exception: false and [anything, non-Numeric] argument 1519s - swallows an error 1519s 1519s Kernel.Complex() when passed exception: false and non-numeric String arguments 1519s - swallows an error 1519s 1519s Kernel.Complex() when passed exception: false and nil arguments 1519s - swallows an error 1519s 1519s Kernel.Float 1519s - returns the identical Float for numeric Floats 1519s - returns a Float for Fixnums 1519s - returns a Float for Complex with only a real part 1519s - returns a Float for Bignums 1519s - raises an ArgumentError for nil 1519s - returns the identical NaN for NaN 1519s - returns the same Infinity for Infinity 1519s - converts Strings to floats without calling #to_f 1519s - converts Strings with decimal points into Floats 1519s - raises an ArgumentError for a String of word characters 1519s - raises an ArgumentError for a String with string in error message 1519s - raises an ArgumentError if there are two decimal points in the String 1519s - raises an ArgumentError for a String of numbers followed by word characters 1519s - raises an ArgumentError for a String of word characters followed by numbers 1519s - is strict about the string form even across newlines 1519s - converts String subclasses to floats without calling #to_f 1519s - returns a positive Float if the string is prefixed with + 1519s - returns a negative Float if the string is prefixed with + 1519s - raises an ArgumentError if a + or - is embedded in a String 1519s - raises an ArgumentError if a String has a trailing + or - 1519s - raises an ArgumentError for a String with a leading _ 1519s - returns a value for a String with an embedded _ 1519s - raises an ArgumentError for a String with a trailing _ 1519s - raises an ArgumentError for a String of \0 1519s - raises an ArgumentError for a String with a leading \0 1519s - raises an ArgumentError for a String with an embedded \0 1519s - raises an ArgumentError for a String with a trailing \0 1519s - raises an ArgumentError for a String that is just an empty space 1519s - raises an ArgumentError for a String that with an embedded space 1519s - returns a value for a String with a leading space 1519s - returns a value for a String with a trailing space 1519s - returns a value for a String with any leading whitespace 1519s - returns a value for a String with any trailing whitespace 1519s - raises an ArgumentError if e is the trailing character 1519s - raises an ArgumentError if e is the leading character 1519s - returns Infinity for '2e1000' 1519s - returns 0 for '2e-1000' 1519s - allows embedded _ in a number on either side of the e 1519s - raises an exception if a space is embedded on either side of the 'e' 1519s - raises an exception if there's a leading _ on either side of the 'e' 1519s - raises an exception if there's a trailing _ on either side of the 'e' 1519s - allows decimal points on the left side of the 'e' 1519s - raises an ArgumentError if there's a decimal point on the right side of the 'e' 1519s - raises an ArgumentError if E is the trailing character 1519s - raises an ArgumentError if E is the leading character 1519s - returns Infinity for '2E1000' 1519s - returns 0 for '2E-1000' 1519s - allows embedded _ in a number on either side of the E 1519s - raises an exception if a space is embedded on either side of the 'E' 1519s - raises an exception if there's a leading _ on either side of the 'E' 1519s - raises an exception if there's a trailing _ on either side of the 'E' 1519s - allows decimal points on the left side of the 'E' 1519s - raises an ArgumentError if there's a decimal point on the right side of the 'E' 1519s - returns a Float that can be a parameter to #Float again 1519s - otherwise, converts the given argument to a Float by calling #to_f 1519s - returns the identical NaN if to_f is called and it returns NaN 1519s - returns the identical Infinity if to_f is called and it returns Infinity 1519s - raises a TypeError if #to_f is not provided 1519s - raises a TypeError if #to_f returns a String 1519s - raises a TypeError if #to_f returns an Integer 1519s - raises a RangeError when passed a Complex argument 1519s 1519s Kernel.Float for hexadecimal literals with binary exponent 1519s - interprets the fractional part (on the left side of 'p') in hexadecimal 1519s - interprets the exponent (on the right of 'p') in decimal 1519s - raises an ArgumentError if p is the trailing character 1519s - raises an ArgumentError if p is the leading character 1519s - returns Infinity for '0x1p10000' 1519s - returns 0 for '0x1p-10000' 1519s - allows embedded _ in a number on either side of the p 1519s - raises an exception if a space is embedded on either side of the 'p' 1519s - raises an exception if there's a leading _ on either side of the 'p' 1519s - raises an exception if there's a trailing _ on either side of the 'p' 1519s - allows hexadecimal points on the left side of the 'p' 1519s - raises an ArgumentError if there's a decimal point on the right side of the 'p' 1519s - interprets the fractional part (on the left side of 'P') in hexadecimal 1519s - interprets the exponent (on the right of 'P') in decimal 1519s - raises an ArgumentError if P is the trailing character 1519s - raises an ArgumentError if P is the leading character 1519s - returns Infinity for '0x1P10000' 1519s - returns 0 for '0x1P-10000' 1519s - allows embedded _ in a number on either side of the P 1519s - raises an exception if a space is embedded on either side of the 'P' 1519s - raises an exception if there's a leading _ on either side of the 'P' 1519s - raises an exception if there's a trailing _ on either side of the 'P' 1519s - allows hexadecimal points on the left side of the 'P' 1519s - raises an ArgumentError if there's a decimal point on the right side of the 'P' 1519s 1519s Kernel.Float when passed exception: false and valid input 1519s - returns a Float number 1519s 1519s Kernel.Float when passed exception: false and invalid input 1519s - swallows an error 1519s 1519s Kernel.Float when passed exception: false and nil 1519s - swallows it 1519s 1519s Kernel#Float 1519s - returns the identical Float for numeric Floats 1519s - returns a Float for Fixnums 1519s - returns a Float for Complex with only a real part 1519s - returns a Float for Bignums 1519s - raises an ArgumentError for nil 1519s - returns the identical NaN for NaN 1519s - returns the same Infinity for Infinity 1519s - converts Strings to floats without calling #to_f 1519s - converts Strings with decimal points into Floats 1519s - raises an ArgumentError for a String of word characters 1519s - raises an ArgumentError for a String with string in error message 1519s - raises an ArgumentError if there are two decimal points in the String 1519s - raises an ArgumentError for a String of numbers followed by word characters 1519s - raises an ArgumentError for a String of word characters followed by numbers 1519s - is strict about the string form even across newlines 1519s - converts String subclasses to floats without calling #to_f 1519s - returns a positive Float if the string is prefixed with + 1519s - returns a negative Float if the string is prefixed with + 1519s - raises an ArgumentError if a + or - is embedded in a String 1519s - raises an ArgumentError if a String has a trailing + or - 1519s - raises an ArgumentError for a String with a leading _ 1519s - returns a value for a String with an embedded _ 1519s - raises an ArgumentError for a String with a trailing _ 1519s - raises an ArgumentError for a String of \0 1519s - raises an ArgumentError for a String with a leading \0 1519s - raises an ArgumentError for a String with an embedded \0 1519s - raises an ArgumentError for a String with a trailing \0 1519s - raises an ArgumentError for a String that is just an empty space 1519s - raises an ArgumentError for a String that with an embedded space 1519s - returns a value for a String with a leading space 1519s - returns a value for a String with a trailing space 1519s - returns a value for a String with any leading whitespace 1519s - returns a value for a String with any trailing whitespace 1519s - raises an ArgumentError if e is the trailing character 1519s - raises an ArgumentError if e is the leading character 1519s - returns Infinity for '2e1000' 1519s - returns 0 for '2e-1000' 1519s - allows embedded _ in a number on either side of the e 1519s - raises an exception if a space is embedded on either side of the 'e' 1519s - raises an exception if there's a leading _ on either side of the 'e' 1519s - raises an exception if there's a trailing _ on either side of the 'e' 1519s - allows decimal points on the left side of the 'e' 1519s - raises an ArgumentError if there's a decimal point on the right side of the 'e' 1519s - raises an ArgumentError if E is the trailing character 1519s - raises an ArgumentError if E is the leading character 1519s - returns Infinity for '2E1000' 1519s - returns 0 for '2E-1000' 1519s - allows embedded _ in a number on either side of the E 1519s - raises an exception if a space is embedded on either side of the 'E' 1519s - raises an exception if there's a leading _ on either side of the 'E' 1519s - raises an exception if there's a trailing _ on either side of the 'E' 1519s - allows decimal points on the left side of the 'E' 1519s - raises an ArgumentError if there's a decimal point on the right side of the 'E' 1519s - returns a Float that can be a parameter to #Float again 1519s - otherwise, converts the given argument to a Float by calling #to_f 1519s - returns the identical NaN if to_f is called and it returns NaN 1519s - returns the identical Infinity if to_f is called and it returns Infinity 1519s - raises a TypeError if #to_f is not provided 1519s - raises a TypeError if #to_f returns a String 1519s - raises a TypeError if #to_f returns an Integer 1519s - raises a RangeError when passed a Complex argument 1519s 1519s Kernel#Float for hexadecimal literals with binary exponent 1519s - interprets the fractional part (on the left side of 'p') in hexadecimal 1519s - interprets the exponent (on the right of 'p') in decimal 1519s - raises an ArgumentError if p is the trailing character 1519s - raises an ArgumentError if p is the leading character 1519s - returns Infinity for '0x1p10000' 1519s - returns 0 for '0x1p-10000' 1519s - allows embedded _ in a number on either side of the p 1519s - raises an exception if a space is embedded on either side of the 'p' 1519s - raises an exception if there's a leading _ on either side of the 'p' 1519s - raises an exception if there's a trailing _ on either side of the 'p' 1519s - allows hexadecimal points on the left side of the 'p' 1519s - raises an ArgumentError if there's a decimal point on the right side of the 'p' 1519s - interprets the fractional part (on the left side of 'P') in hexadecimal 1519s - interprets the exponent (on the right of 'P') in decimal 1519s - raises an ArgumentError if P is the trailing character 1519s - raises an ArgumentError if P is the leading character 1519s - returns Infinity for '0x1P10000' 1519s - returns 0 for '0x1P-10000' 1519s - allows embedded _ in a number on either side of the P 1519s - raises an exception if a space is embedded on either side of the 'P' 1519s - raises an exception if there's a leading _ on either side of the 'P' 1519s - raises an exception if there's a trailing _ on either side of the 'P' 1519s - allows hexadecimal points on the left side of the 'P' 1519s - raises an ArgumentError if there's a decimal point on the right side of the 'P' 1519s 1519s Kernel#Float when passed exception: false and valid input 1519s - returns a Float number 1519s 1519s Kernel#Float when passed exception: false and invalid input 1519s - swallows an error 1519s 1519s Kernel#Float when passed exception: false and nil 1519s - swallows it 1519s 1519s Kernel#Float 1519s - is a private method 1519s 1519s Kernel#hash 1519s - is provided 1519s - is stable 1519s 1519s Kernel 1519s - has private instance method Hash() 1519s 1519s Kernel.Hash 1519s - converts nil to a Hash 1519s - converts an empty array to a Hash 1519s - does not call #to_hash on an Hash 1519s - calls #to_hash to convert the argument to an Hash 1519s - raises a TypeError if it doesn't respond to #to_hash 1519s - raises a TypeError if #to_hash does not return an Hash 1519s 1519s Kernel#Hash 1519s - converts nil to a Hash 1519s - converts an empty array to a Hash 1519s - does not call #to_hash on an Hash 1519s - calls #to_hash to convert the argument to an Hash 1519s - raises a TypeError if it doesn't respond to #to_hash 1519s - raises a TypeError if #to_hash does not return an Hash 1519s 1519s Kernel.Integer 1519s - raises an ArgumentError when the String contains digits out of range of radix 2 1519s - raises an ArgumentError when the String contains digits out of range of radix 3 1519s - raises an ArgumentError when the String contains digits out of range of radix 4 1519s - raises an ArgumentError when the String contains digits out of range of radix 5 1519s - raises an ArgumentError when the String contains digits out of range of radix 6 1519s - raises an ArgumentError when the String contains digits out of range of radix 7 1519s - raises an ArgumentError when the String contains digits out of range of radix 8 1519s - raises an ArgumentError when the String contains digits out of range of radix 9 1519s - raises an ArgumentError when the String contains digits out of range of radix 10 1519s - raises an ArgumentError when the String contains digits out of range of radix 11 1519s - raises an ArgumentError when the String contains digits out of range of radix 12 1519s - raises an ArgumentError when the String contains digits out of range of radix 13 1519s - raises an ArgumentError when the String contains digits out of range of radix 14 1519s - raises an ArgumentError when the String contains digits out of range of radix 15 1519s - raises an ArgumentError when the String contains digits out of range of radix 16 1519s - raises an ArgumentError when the String contains digits out of range of radix 17 1519s - raises an ArgumentError when the String contains digits out of range of radix 18 1519s - raises an ArgumentError when the String contains digits out of range of radix 19 1519s - raises an ArgumentError when the String contains digits out of range of radix 20 1519s - raises an ArgumentError when the String contains digits out of range of radix 21 1519s - raises an ArgumentError when the String contains digits out of range of radix 22 1519s - raises an ArgumentError when the String contains digits out of range of radix 23 1519s - raises an ArgumentError when the String contains digits out of range of radix 24 1519s - raises an ArgumentError when the String contains digits out of range of radix 25 1519s - raises an ArgumentError when the String contains digits out of range of radix 26 1519s - raises an ArgumentError when the String contains digits out of range of radix 27 1519s - raises an ArgumentError when the String contains digits out of range of radix 28 1519s - raises an ArgumentError when the String contains digits out of range of radix 29 1519s - raises an ArgumentError when the String contains digits out of range of radix 30 1519s - raises an ArgumentError when the String contains digits out of range of radix 31 1519s - raises an ArgumentError when the String contains digits out of range of radix 32 1519s - raises an ArgumentError when the String contains digits out of range of radix 33 1519s - raises an ArgumentError when the String contains digits out of range of radix 34 1519s - raises an ArgumentError when the String contains digits out of range of radix 35 1519s - raises an ArgumentError when the String contains digits out of range of radix 36 1519s - returns a Bignum for a Bignum 1519s - returns a Fixnum for a Fixnum 1519s - raises a TypeError when to_int returns not-an-Integer object and to_i returns nil 1519s - return a result of to_i when to_int does not return an Integer 1519s - raises a TypeError when passed nil 1519s - returns an Integer object 1519s - truncates Floats 1519s - calls to_i on Rationals 1519s - returns the value of to_int if the result is a Fixnum 1519s - returns the value of to_int if the result is a Bignum 1519s - calls to_i on an object whose to_int returns nil 1519s - raises a TypeError if to_i returns a value that is not an Integer 1519s - raises a TypeError if no to_int or to_i methods exist 1519s - raises a TypeError if to_int returns nil and no to_i exists 1519s - raises a FloatDomainError when passed NaN 1519s - raises a FloatDomainError when passed Infinity 1519s - raises an ArgumentError if the String is a null byte 1519s - raises an ArgumentError if the String starts with a null byte 1519s - raises an ArgumentError if the String ends with a null byte 1519s - raises an ArgumentError if the String contains a null byte 1519s - ignores leading whitespace 1519s - ignores trailing whitespace 1519s - raises an ArgumentError if there are leading _s 1519s - raises an ArgumentError if there are trailing _s 1519s - ignores an embedded _ 1519s - raises an ArgumentError if there are multiple embedded _s 1519s - ignores a single leading + 1519s - raises an ArgumentError if there is a space between the + and number 1519s - raises an ArgumentError if there are multiple leading +s 1519s - raises an ArgumentError if there are trailing +s 1519s - makes the number negative if there's a leading - 1519s - raises an ArgumentError if there are multiple leading -s 1519s - raises an ArgumentError if there are trailing -s 1519s - raises an ArgumentError if there is a period 1519s - raises an ArgumentError for an empty String 1519s - parses the value as 0 if the string consists of a single zero character 1519s - parses the value as a hex number if there's a leading 0x 1519s - is a positive hex number if there's a leading +0x 1519s - is a negative hex number if there's a leading -0x 1519s - raises an ArgumentError if the number cannot be parsed as hex 1519s - parses the value as a hex number if there's a leading 0X 1519s - is a positive hex number if there's a leading +0X 1519s - is a negative hex number if there's a leading -0X 1519s - raises an ArgumentError if the number cannot be parsed as hex 1519s - parses the value as a binary number if there's a leading 0b 1519s - is a positive binary number if there's a leading +0b 1519s - is a negative binary number if there's a leading -0b 1519s - raises an ArgumentError if the number cannot be parsed as binary 1519s - parses the value as a binary number if there's a leading 0B 1519s - is a positive binary number if there's a leading +0B 1519s - is a negative binary number if there's a leading -0B 1519s - raises an ArgumentError if the number cannot be parsed as binary 1519s - parses the value as an octal number if there's a leading 0o 1519s - is a positive octal number if there's a leading +0o 1519s - is a negative octal number if there's a leading -0o 1519s - raises an ArgumentError if the number cannot be parsed as octal 1519s - parses the value as an octal number if there's a leading 0O 1519s - is a positive octal number if there's a leading +0O 1519s - is a negative octal number if there's a leading -0O 1519s - raises an ArgumentError if the number cannot be parsed as octal 1519s - parses the value as an octal number if there's a leading 0 1519s - is a positive octal number if there's a leading +0 1519s - is a negative octal number if there's a leading -0 1519s - raises an ArgumentError if the number cannot be parsed as octal 1519s - parses the value as a decimal number if there's a leading 0D 1519s - is a positive decimal number if there's a leading +0D 1519s - is a negative decimal number if there's a leading -0D 1519s - raises an ArgumentError if the number cannot be parsed as decimal 1519s - parses the value as a decimal number if there's a leading 0d 1519s - is a positive decimal number if there's a leading +0d 1519s - is a negative decimal number if there's a leading -0d 1519s - raises an ArgumentError if the number cannot be parsed as decimal 1519s - raises an ArgumentError if the String is a null byte 1519s - raises an ArgumentError if the String starts with a null byte 1519s - raises an ArgumentError if the String ends with a null byte 1519s - raises an ArgumentError if the String contains a null byte 1519s - ignores leading whitespace 1519s - ignores trailing whitespace 1519s - raises an ArgumentError if there are leading _s 1519s - raises an ArgumentError if there are trailing _s 1519s - ignores an embedded _ 1519s - raises an ArgumentError if there are multiple embedded _s 1519s - ignores a single leading + 1519s - raises an ArgumentError if there is a space between the + and number 1519s - raises an ArgumentError if there are multiple leading +s 1519s - raises an ArgumentError if there are trailing +s 1519s - makes the number negative if there's a leading - 1519s - raises an ArgumentError if there are multiple leading -s 1519s - raises an ArgumentError if there are trailing -s 1519s - raises an ArgumentError if there is a period 1519s - raises an ArgumentError for an empty String 1519s - raises an ArgumentError for a base of 1 1519s - raises an ArgumentError for a base of 37 1519s - accepts wholly lowercase alphabetic strings for bases > 10 1519s - accepts wholly uppercase alphabetic strings for bases > 10 1519s - accepts mixed-case alphabetic strings for bases > 10 1519s - accepts alphanumeric strings for bases > 10 1519s - raises an ArgumentError for letters invalid in the given base 1519s - parses the value as a hex number if there's a leading 0x and a base of 16 1519s - is a positive hex number if there's a leading +0x and base of 16 1519s - is a negative hex number if there's a leading -0x and a base of 16 1519s - raises an ArgumentError if the number begins with 0x and the base is 2 1519s - raises an ArgumentError if the number begins with 0x and the base is 3 1519s - raises an ArgumentError if the number begins with 0x and the base is 4 1519s - raises an ArgumentError if the number begins with 0x and the base is 5 1519s - raises an ArgumentError if the number begins with 0x and the base is 6 1519s - raises an ArgumentError if the number begins with 0x and the base is 7 1519s - raises an ArgumentError if the number begins with 0x and the base is 8 1519s - raises an ArgumentError if the number begins with 0x and the base is 9 1519s - raises an ArgumentError if the number begins with 0x and the base is 10 1519s - raises an ArgumentError if the number begins with 0x and the base is 11 1519s - raises an ArgumentError if the number begins with 0x and the base is 12 1519s - raises an ArgumentError if the number begins with 0x and the base is 13 1519s - raises an ArgumentError if the number begins with 0x and the base is 14 1519s - raises an ArgumentError if the number begins with 0x and the base is 15 1519s - raises an ArgumentError if the number cannot be parsed as hex and the base is 16 1519s - parses the value as a hex number if there's a leading 0X and a base of 16 1519s - is a positive hex number if there's a leading +0X and base of 16 1519s - is a negative hex number if there's a leading -0X and a base of 16 1519s - raises an ArgumentError if the number begins with 0X and the base is 2 1519s - raises an ArgumentError if the number begins with 0X and the base is 3 1519s - raises an ArgumentError if the number begins with 0X and the base is 4 1519s - raises an ArgumentError if the number begins with 0X and the base is 5 1519s - raises an ArgumentError if the number begins with 0X and the base is 6 1519s - raises an ArgumentError if the number begins with 0X and the base is 7 1519s - raises an ArgumentError if the number begins with 0X and the base is 8 1519s - raises an ArgumentError if the number begins with 0X and the base is 9 1519s - raises an ArgumentError if the number begins with 0X and the base is 10 1519s - raises an ArgumentError if the number begins with 0X and the base is 11 1519s - raises an ArgumentError if the number begins with 0X and the base is 12 1519s - raises an ArgumentError if the number begins with 0X and the base is 13 1519s - raises an ArgumentError if the number begins with 0X and the base is 14 1519s - raises an ArgumentError if the number begins with 0X and the base is 15 1519s - raises an ArgumentError if the number cannot be parsed as hex and the base is 16 1519s - parses the value as a binary number if there's a leading 0b and the base is 2 1519s - is a positive binary number if there's a leading +0b and a base of 2 1519s - is a negative binary number if there's a leading -0b and a base of 2 1519s - raises an ArgumentError if the number cannot be parsed as binary and the base is 2 1519s - parses the value as a binary number if there's a leading 0B and the base is 2 1519s - is a positive binary number if there's a leading +0B and a base of 2 1519s - is a negative binary number if there's a leading -0B and a base of 2 1519s - raises an ArgumentError if the number cannot be parsed as binary and the base is 2 1519s - parses the value as an octal number if there's a leading 0o and a base of 8 1519s - is a positive octal number if there's a leading +0o and a base of 8 1519s - is a negative octal number if there's a leading -0o and a base of 8 1519s - raises an ArgumentError if the number cannot be parsed as octal and the base is 8 1519s - raises an ArgumentError if the number begins with 0o and the base is 2 1519s - raises an ArgumentError if the number begins with 0o and the base is 3 1519s - raises an ArgumentError if the number begins with 0o and the base is 4 1519s - raises an ArgumentError if the number begins with 0o and the base is 5 1519s - raises an ArgumentError if the number begins with 0o and the base is 6 1519s - raises an ArgumentError if the number begins with 0o and the base is 7 1519s - parses the value as an octal number if there's a leading 0O and a base of 8 1519s - is a positive octal number if there's a leading +0O and a base of 8 1519s - is a negative octal number if there's a leading -0O and a base of 8 1519s - raises an ArgumentError if the number cannot be parsed as octal and the base is 8 1519s - raises an ArgumentError if the number begins with 0O and the base is 2 1519s - raises an ArgumentError if the number begins with 0O and the base is 3 1519s - raises an ArgumentError if the number begins with 0O and the base is 4 1519s - raises an ArgumentError if the number begins with 0O and the base is 5 1519s - raises an ArgumentError if the number begins with 0O and the base is 6 1519s - raises an ArgumentError if the number begins with 0O and the base is 7 1519s - parses the value as a decimal number if there's a leading 0D and a base of 10 1519s - is a positive decimal number if there's a leading +0D and a base of 10 1519s - is a negative decimal number if there's a leading -0D and a base of 10 1519s - raises an ArgumentError if the number cannot be parsed as decimal and the base is 10 1519s - raises an ArgumentError if the number begins with 0D and the base is 2 1519s - raises an ArgumentError if the number begins with 0D and the base is 3 1519s - raises an ArgumentError if the number begins with 0D and the base is 4 1519s - raises an ArgumentError if the number begins with 0D and the base is 5 1519s - raises an ArgumentError if the number begins with 0D and the base is 6 1519s - raises an ArgumentError if the number begins with 0D and the base is 7 1519s - raises an ArgumentError if the number begins with 0D and the base is 8 1519s - raises an ArgumentError if the number begins with 0D and the base is 9 1519s - parses the value as a decimal number if there's a leading 0d and a base of 10 1519s - is a positive decimal number if there's a leading +0d and a base of 10 1519s - is a negative decimal number if there's a leading -0d and a base of 10 1519s - raises an ArgumentError if the number cannot be parsed as decimal and the base is 10 1519s - raises an ArgumentError if the number begins with 0d and the base is 2 1519s - raises an ArgumentError if the number begins with 0d and the base is 3 1519s - raises an ArgumentError if the number begins with 0d and the base is 4 1519s - raises an ArgumentError if the number begins with 0d and the base is 5 1519s - raises an ArgumentError if the number begins with 0d and the base is 6 1519s - raises an ArgumentError if the number begins with 0d and the base is 7 1519s - raises an ArgumentError if the number begins with 0d and the base is 8 1519s - raises an ArgumentError if the number begins with 0d and the base is 9 1519s - raises an ArgumentError if a base is given for a non-String value 1519s - tries to convert the base to an integer using to_int 1519s - is a public method 1519s 1519s Kernel.Integer when passed exception: false and to_i returns a value that is not an Integer 1519s - swallows an error 1519s 1519s Kernel.Integer when passed exception: false and no to_int or to_i methods exist 1519s - swallows an error 1519s 1519s Kernel.Integer when passed exception: false and to_int returns nil and no to_i exists 1519s - swallows an error 1519s 1519s Kernel.Integer when passed exception: false and passed NaN 1519s - swallows an error 1519s 1519s Kernel.Integer when passed exception: false and passed Infinity 1519s - swallows an error 1519s 1519s Kernel.Integer when passed exception: false and passed nil 1519s - swallows an error 1519s 1519s Kernel.Integer when passed exception: false and passed a String that contains numbers 1519s - normally parses it and returns an Integer 1519s 1519s Kernel.Integer when passed exception: false and passed a String that can't be converted to an Integer 1519s - swallows an error 1519s 1519s Kernel.Integer when passed exception: false and multiple leading -s 1519s - swallows an error 1519s 1519s Kernel.Integer when passed exception: false and multiple trailing -s 1519s - swallows an error 1519s 1519s Kernel.Integer when passed exception: false and an argument that contains a period 1519s - swallows an error 1519s 1519s Kernel.Integer when passed exception: false and an empty string 1519s - swallows an error 1519s 1519s Kernel.Integer when passed exception: false and valid argument 1519s - returns an Integer number 1519s 1519s Kernel.Integer when passed exception: false and invalid argument 1519s - swallows an error 1519s 1519s Kernel#Integer 1519s - raises an ArgumentError when the String contains digits out of range of radix 2 1519s - raises an ArgumentError when the String contains digits out of range of radix 3 1519s - raises an ArgumentError when the String contains digits out of range of radix 4 1519s - raises an ArgumentError when the String contains digits out of range of radix 5 1519s - raises an ArgumentError when the String contains digits out of range of radix 6 1519s - raises an ArgumentError when the String contains digits out of range of radix 7 1519s - raises an ArgumentError when the String contains digits out of range of radix 8 1519s - raises an ArgumentError when the String contains digits out of range of radix 9 1519s - raises an ArgumentError when the String contains digits out of range of radix 10 1519s - raises an ArgumentError when the String contains digits out of range of radix 11 1519s - raises an ArgumentError when the String contains digits out of range of radix 12 1519s - raises an ArgumentError when the String contains digits out of range of radix 13 1519s - raises an ArgumentError when the String contains digits out of range of radix 14 1519s - raises an ArgumentError when the String contains digits out of range of radix 15 1519s - raises an ArgumentError when the String contains digits out of range of radix 16 1519s - raises an ArgumentError when the String contains digits out of range of radix 17 1519s - raises an ArgumentError when the String contains digits out of range of radix 18 1519s - raises an ArgumentError when the String contains digits out of range of radix 19 1519s - raises an ArgumentError when the String contains digits out of range of radix 20 1519s - raises an ArgumentError when the String contains digits out of range of radix 21 1519s - raises an ArgumentError when the String contains digits out of range of radix 22 1519s - raises an ArgumentError when the String contains digits out of range of radix 23 1519s - raises an ArgumentError when the String contains digits out of range of radix 24 1519s - raises an ArgumentError when the String contains digits out of range of radix 25 1519s - raises an ArgumentError when the String contains digits out of range of radix 26 1519s - raises an ArgumentError when the String contains digits out of range of radix 27 1519s - raises an ArgumentError when the String contains digits out of range of radix 28 1519s - raises an ArgumentError when the String contains digits out of range of radix 29 1519s - raises an ArgumentError when the String contains digits out of range of radix 30 1519s - raises an ArgumentError when the String contains digits out of range of radix 31 1519s - raises an ArgumentError when the String contains digits out of range of radix 32 1519s - raises an ArgumentError when the String contains digits out of range of radix 33 1519s - raises an ArgumentError when the String contains digits out of range of radix 34 1519s - raises an ArgumentError when the String contains digits out of range of radix 35 1519s - raises an ArgumentError when the String contains digits out of range of radix 36 1519s - returns a Bignum for a Bignum 1519s - returns a Fixnum for a Fixnum 1519s - raises a TypeError when to_int returns not-an-Integer object and to_i returns nil 1519s - return a result of to_i when to_int does not return an Integer 1519s - raises a TypeError when passed nil 1519s - returns an Integer object 1519s - truncates Floats 1519s - calls to_i on Rationals 1519s - returns the value of to_int if the result is a Fixnum 1519s - returns the value of to_int if the result is a Bignum 1519s - calls to_i on an object whose to_int returns nil 1519s - raises a TypeError if to_i returns a value that is not an Integer 1519s - raises a TypeError if no to_int or to_i methods exist 1519s - raises a TypeError if to_int returns nil and no to_i exists 1519s - raises a FloatDomainError when passed NaN 1519s - raises a FloatDomainError when passed Infinity 1519s - raises an ArgumentError if the String is a null byte 1519s - raises an ArgumentError if the String starts with a null byte 1519s - raises an ArgumentError if the String ends with a null byte 1519s - raises an ArgumentError if the String contains a null byte 1519s - ignores leading whitespace 1519s - ignores trailing whitespace 1519s - raises an ArgumentError if there are leading _s 1519s - raises an ArgumentError if there are trailing _s 1519s - ignores an embedded _ 1519s - raises an ArgumentError if there are multiple embedded _s 1519s - ignores a single leading + 1519s - raises an ArgumentError if there is a space between the + and number 1519s - raises an ArgumentError if there are multiple leading +s 1519s - raises an ArgumentError if there are trailing +s 1519s - makes the number negative if there's a leading - 1519s - raises an ArgumentError if there are multiple leading -s 1519s - raises an ArgumentError if there are trailing -s 1519s - raises an ArgumentError if there is a period 1519s - raises an ArgumentError for an empty String 1519s - parses the value as 0 if the string consists of a single zero character 1519s - parses the value as a hex number if there's a leading 0x 1519s - is a positive hex number if there's a leading +0x 1519s - is a negative hex number if there's a leading -0x 1519s - raises an ArgumentError if the number cannot be parsed as hex 1519s - parses the value as a hex number if there's a leading 0X 1519s - is a positive hex number if there's a leading +0X 1519s - is a negative hex number if there's a leading -0X 1519s - raises an ArgumentError if the number cannot be parsed as hex 1519s - parses the value as a binary number if there's a leading 0b 1519s - is a positive binary number if there's a leading +0b 1519s - is a negative binary number if there's a leading -0b 1519s - raises an ArgumentError if the number cannot be parsed as binary 1519s - parses the value as a binary number if there's a leading 0B 1519s - is a positive binary number if there's a leading +0B 1519s - is a negative binary number if there's a leading -0B 1519s - raises an ArgumentError if the number cannot be parsed as binary 1519s - parses the value as an octal number if there's a leading 0o 1519s - is a positive octal number if there's a leading +0o 1519s - is a negative octal number if there's a leading -0o 1519s - raises an ArgumentError if the number cannot be parsed as octal 1519s - parses the value as an octal number if there's a leading 0O 1519s - is a positive octal number if there's a leading +0O 1519s - is a negative octal number if there's a leading -0O 1519s - raises an ArgumentError if the number cannot be parsed as octal 1519s - parses the value as an octal number if there's a leading 0 1519s - is a positive octal number if there's a leading +0 1519s - is a negative octal number if there's a leading -0 1519s - raises an ArgumentError if the number cannot be parsed as octal 1519s - parses the value as a decimal number if there's a leading 0D 1519s - is a positive decimal number if there's a leading +0D 1519s - is a negative decimal number if there's a leading -0D 1519s - raises an ArgumentError if the number cannot be parsed as decimal 1519s - parses the value as a decimal number if there's a leading 0d 1519s - is a positive decimal number if there's a leading +0d 1519s - is a negative decimal number if there's a leading -0d 1519s - raises an ArgumentError if the number cannot be parsed as decimal 1519s - raises an ArgumentError if the String is a null byte 1519s - raises an ArgumentError if the String starts with a null byte 1519s - raises an ArgumentError if the String ends with a null byte 1519s - raises an ArgumentError if the String contains a null byte 1519s - ignores leading whitespace 1519s - ignores trailing whitespace 1519s - raises an ArgumentError if there are leading _s 1519s - raises an ArgumentError if there are trailing _s 1519s - ignores an embedded _ 1519s - raises an ArgumentError if there are multiple embedded _s 1519s - ignores a single leading + 1519s - raises an ArgumentError if there is a space between the + and number 1519s - raises an ArgumentError if there are multiple leading +s 1519s - raises an ArgumentError if there are trailing +s 1519s - makes the number negative if there's a leading - 1519s - raises an ArgumentError if there are multiple leading -s 1519s - raises an ArgumentError if there are trailing -s 1519s - raises an ArgumentError if there is a period 1519s - raises an ArgumentError for an empty String 1519s - raises an ArgumentError for a base of 1 1519s - raises an ArgumentError for a base of 37 1519s - accepts wholly lowercase alphabetic strings for bases > 10 1519s - accepts wholly uppercase alphabetic strings for bases > 10 1519s - accepts mixed-case alphabetic strings for bases > 10 1519s - accepts alphanumeric strings for bases > 10 1519s - raises an ArgumentError for letters invalid in the given base 1519s - parses the value as a hex number if there's a leading 0x and a base of 16 1519s - is a positive hex number if there's a leading +0x and base of 16 1519s - is a negative hex number if there's a leading -0x and a base of 16 1519s - raises an ArgumentError if the number begins with 0x and the base is 2 1519s - raises an ArgumentError if the number begins with 0x and the base is 3 1519s - raises an ArgumentError if the number begins with 0x and the base is 4 1519s - raises an ArgumentError if the number begins with 0x and the base is 5 1519s - raises an ArgumentError if the number begins with 0x and the base is 6 1519s - raises an ArgumentError if the number begins with 0x and the base is 7 1519s - raises an ArgumentError if the number begins with 0x and the base is 8 1519s - raises an ArgumentError if the number begins with 0x and the base is 9 1519s - raises an ArgumentError if the number begins with 0x and the base is 10 1519s - raises an ArgumentError if the number begins with 0x and the base is 11 1519s - raises an ArgumentError if the number begins with 0x and the base is 12 1519s - raises an ArgumentError if the number begins with 0x and the base is 13 1519s - raises an ArgumentError if the number begins with 0x and the base is 14 1519s - raises an ArgumentError if the number begins with 0x and the base is 15 1519s - raises an ArgumentError if the number cannot be parsed as hex and the base is 16 1519s - parses the value as a hex number if there's a leading 0X and a base of 16 1519s - is a positive hex number if there's a leading +0X and base of 16 1519s - is a negative hex number if there's a leading -0X and a base of 16 1519s - raises an ArgumentError if the number begins with 0X and the base is 2 1519s - raises an ArgumentError if the number begins with 0X and the base is 3 1519s - raises an ArgumentError if the number begins with 0X and the base is 4 1519s - raises an ArgumentError if the number begins with 0X and the base is 5 1519s - raises an ArgumentError if the number begins with 0X and the base is 6 1519s - raises an ArgumentError if the number begins with 0X and the base is 7 1519s - raises an ArgumentError if the number begins with 0X and the base is 8 1519s - raises an ArgumentError if the number begins with 0X and the base is 9 1519s - raises an ArgumentError if the number begins with 0X and the base is 10 1519s - raises an ArgumentError if the number begins with 0X and the base is 11 1519s - raises an ArgumentError if the number begins with 0X and the base is 12 1519s - raises an ArgumentError if the number begins with 0X and the base is 13 1519s - raises an ArgumentError if the number begins with 0X and the base is 14 1519s - raises an ArgumentError if the number begins with 0X and the base is 15 1519s - raises an ArgumentError if the number cannot be parsed as hex and the base is 16 1519s - parses the value as a binary number if there's a leading 0b and the base is 2 1519s - is a positive binary number if there's a leading +0b and a base of 2 1519s - is a negative binary number if there's a leading -0b and a base of 2 1519s - raises an ArgumentError if the number cannot be parsed as binary and the base is 2 1519s - parses the value as a binary number if there's a leading 0B and the base is 2 1519s - is a positive binary number if there's a leading +0B and a base of 2 1519s - is a negative binary number if there's a leading -0B and a base of 2 1519s - raises an ArgumentError if the number cannot be parsed as binary and the base is 2 1519s - parses the value as an octal number if there's a leading 0o and a base of 8 1519s - is a positive octal number if there's a leading +0o and a base of 8 1519s - is a negative octal number if there's a leading -0o and a base of 8 1519s - raises an ArgumentError if the number cannot be parsed as octal and the base is 8 1519s - raises an ArgumentError if the number begins with 0o and the base is 2 1519s - raises an ArgumentError if the number begins with 0o and the base is 3 1519s - raises an ArgumentError if the number begins with 0o and the base is 4 1519s - raises an ArgumentError if the number begins with 0o and the base is 5 1519s - raises an ArgumentError if the number begins with 0o and the base is 6 1519s - raises an ArgumentError if the number begins with 0o and the base is 7 1519s - parses the value as an octal number if there's a leading 0O and a base of 8 1519s - is a positive octal number if there's a leading +0O and a base of 8 1519s - is a negative octal number if there's a leading -0O and a base of 8 1519s - raises an ArgumentError if the number cannot be parsed as octal and the base is 8 1519s - raises an ArgumentError if the number begins with 0O and the base is 2 1519s - raises an ArgumentError if the number begins with 0O and the base is 3 1519s - raises an ArgumentError if the number begins with 0O and the base is 4 1519s - raises an ArgumentError if the number begins with 0O and the base is 5 1519s - raises an ArgumentError if the number begins with 0O and the base is 6 1519s - raises an ArgumentError if the number begins with 0O and the base is 7 1519s - parses the value as a decimal number if there's a leading 0D and a base of 10 1519s - is a positive decimal number if there's a leading +0D and a base of 10 1519s - is a negative decimal number if there's a leading -0D and a base of 10 1519s - raises an ArgumentError if the number cannot be parsed as decimal and the base is 10 1519s - raises an ArgumentError if the number begins with 0D and the base is 2 1519s - raises an ArgumentError if the number begins with 0D and the base is 3 1519s - raises an ArgumentError if the number begins with 0D and the base is 4 1519s - raises an ArgumentError if the number begins with 0D and the base is 5 1519s - raises an ArgumentError if the number begins with 0D and the base is 6 1519s - raises an ArgumentError if the number begins with 0D and the base is 7 1519s - raises an ArgumentError if the number begins with 0D and the base is 8 1519s - raises an ArgumentError if the number begins with 0D and the base is 9 1519s - parses the value as a decimal number if there's a leading 0d and a base of 10 1519s - is a positive decimal number if there's a leading +0d and a base of 10 1519s - is a negative decimal number if there's a leading -0d and a base of 10 1519s - raises an ArgumentError if the number cannot be parsed as decimal and the base is 10 1519s - raises an ArgumentError if the number begins with 0d and the base is 2 1519s - raises an ArgumentError if the number begins with 0d and the base is 3 1519s - raises an ArgumentError if the number begins with 0d and the base is 4 1519s - raises an ArgumentError if the number begins with 0d and the base is 5 1519s - raises an ArgumentError if the number begins with 0d and the base is 6 1519s - raises an ArgumentError if the number begins with 0d and the base is 7 1519s - raises an ArgumentError if the number begins with 0d and the base is 8 1519s - raises an ArgumentError if the number begins with 0d and the base is 9 1519s - raises an ArgumentError if a base is given for a non-String value 1519s - tries to convert the base to an integer using to_int 1519s - is a private method 1519s 1519s Kernel#Integer when passed exception: false and to_i returns a value that is not an Integer 1519s - swallows an error 1519s 1519s Kernel#Integer when passed exception: false and no to_int or to_i methods exist 1519s - swallows an error 1519s 1519s Kernel#Integer when passed exception: false and to_int returns nil and no to_i exists 1519s - swallows an error 1519s 1519s Kernel#Integer when passed exception: false and passed NaN 1519s - swallows an error 1519s 1519s Kernel#Integer when passed exception: false and passed Infinity 1519s - swallows an error 1519s 1519s Kernel#Integer when passed exception: false and passed nil 1519s - swallows an error 1519s 1519s Kernel#Integer when passed exception: false and passed a String that contains numbers 1519s - normally parses it and returns an Integer 1519s 1519s Kernel#Integer when passed exception: false and passed a String that can't be converted to an Integer 1519s - swallows an error 1519s 1519s Kernel#Integer when passed exception: false and multiple leading -s 1519s - swallows an error 1519s 1519s Kernel#Integer when passed exception: false and multiple trailing -s 1519s - swallows an error 1519s 1519s Kernel#Integer when passed exception: false and an argument that contains a period 1519s - swallows an error 1519s 1519s Kernel#Integer when passed exception: false and an empty string 1519s - swallows an error 1519s 1519s Kernel#Integer when passed exception: false and valid argument 1519s - returns an Integer number 1519s 1519s Kernel#Integer when passed exception: false and invalid argument 1519s - swallows an error 1519s 1519s Kernel.Rational 1519s - raises a ZeroDivisionError if the second argument is 0 1519s - raises a TypeError if the first argument is nil 1519s - raises a TypeError if the second argument is nil 1519s - raises a TypeError if the first argument is a Symbol 1519s - raises a TypeError if the second argument is a Symbol 1519s - freezes its result 1519s 1519s Kernel.Rational passed Integer 1519s - returns a new Rational number with 1 as the denominator 1519s 1519s Kernel.Rational passed two integers 1519s - returns a new Rational number 1519s - reduces the Rational 1519s 1519s Kernel.Rational when passed a String 1519s - converts the String to a Rational using the same method as String#to_r 1519s - scales the Rational value of the first argument by the Rational value of the second 1519s - does not use the same method as Float#to_r 1519s 1519s Kernel.Rational when passed a Numeric 1519s - calls #to_r to convert the first argument to a Rational 1519s 1519s Kernel.Rational when passed a Complex 1519s - returns a Rational from the real part if the imaginary part is 0 1519s - raises a RangeError if the imaginary part is not 0 1519s 1519s Kernel.Rational when passed exception: false and [non-Numeric] 1519s - swallows an error 1519s 1519s Kernel.Rational when passed exception: false and [non-Numeric, Numeric] 1519s - swallows an error 1519s 1519s Kernel.Rational when passed exception: false and [anything, non-Numeric] 1519s - swallows an error 1519s 1519s Kernel.Rational when passed exception: false and non-Numeric String arguments 1519s - swallows an error 1519s 1519s Kernel.Rational when passed exception: false and nil arguments 1519s - swallows an error 1519s 1519s Kernel.String 1519s - converts nil to a String 1519s - converts a Float to a String 1519s - converts a boolean to a String 1519s - converts a constant to a String 1519s - calls #to_s to convert an arbitrary object to a String 1519s - raises a TypeError if #to_s does not exist 1519s - raises a TypeError if respond_to? returns false for #to_s 1519s - raises a TypeError if #to_s is not defined, even though #respond_to?(:to_s) returns true 1519s - calls #to_s if #respond_to?(:to_s) returns true 1519s - raises a TypeError if #to_s does not return a String 1519s - returns the same object if it is already a String 1519s - returns the same object if it is an instance of a String subclass 1519s 1519s Kernel#String 1519s - converts nil to a String 1519s - converts a Float to a String 1519s - converts a boolean to a String 1519s - converts a constant to a String 1519s - calls #to_s to convert an arbitrary object to a String 1519s - raises a TypeError if #to_s does not exist 1519s - raises a TypeError if respond_to? returns false for #to_s 1519s - raises a TypeError if #to_s is not defined, even though #respond_to?(:to_s) returns true 1519s - calls #to_s if #respond_to?(:to_s) returns true 1519s - raises a TypeError if #to_s does not return a String 1519s - returns the same object if it is already a String 1519s - returns the same object if it is an instance of a String subclass 1519s - is a private method 1519s 1519s Kernel.__callee__ 1519s - returns the current method, even when aliased 1519s - returns the aliased name when aliased method 1519s - returns the caller from blocks too 1519s - returns the caller from define_method too 1519s - returns the caller from block inside define_method too 1519s - returns method name even from send 1519s - returns method name even from eval 1519s - returns nil from inside a class body 1519s - returns nil when not called from a method 1519s - returns the caller from a define_method called from the same class 1519s 1519s Kernel#__dir__ 1519s - returns the real name of the directory containing the currently-executing file 1522s - returns the expanded path of the directory when used in the main script 1522s 1522s Kernel.__method__ 1522s - returns the current method, even when aliased 1522s - returns the original name when aliased method 1522s - returns the caller from blocks too 1522s - returns the caller from define_method too 1522s - returns the caller from block inside define_method too 1522s - returns method name even from send 1522s - returns method name even from eval 1522s - returns nil from inside a class body 1522s - returns nil when not called from a method 1522s 1522s Kernel#abort 1522s - is a private method 1522s - raises a SystemExit exception 1522s - sets the exception message to the given message 1522s - sets the exception status code of 1 1522s - prints the specified message to STDERR 1522s - coerces the argument with #to_str 1522s - raises TypeError when given a non-String object 1522s 1522s Kernel.abort 1522s - raises a SystemExit exception 1522s - sets the exception message to the given message 1522s - sets the exception status code of 1 1522s - prints the specified message to STDERR 1522s - coerces the argument with #to_str 1522s - raises TypeError when given a non-String object 1522s 1522s Kernel#autoload 1522s - is a private method 1522s - registers a file to load the first time the named constant is accessed 1522s - registers a file to load the first time the named constant is accessed 1522s - sets the autoload constant in Object's constant table 1523s - loads the file when the constant is accessed 1523s - calls main.require(path) to load the file 1523s - can autoload in instance_eval 1523s 1523s Kernel#autoload when Object is frozen 1526s - raises a FrozenError before defining the constant 1526s 1526s Kernel#autoload when called from included module's method 1526s - setups the autoload on the included module 1526s - the autoload is reachable from the class too 1526s - the autoload relative to the included module works 1526s 1526s Kernel#autoload? 1526s - is a private method 1526s - returns the name of the file that will be autoloaded 1526s - returns nil if no file has been registered for a constant 1526s 1526s Kernel.autoload 1526s - registers a file to load the first time the toplevel constant is accessed 1526s - sets the autoload constant in Object's constant table 1526s - calls #to_path on non-String filenames 1526s 1526s Kernel.autoload when called from included module's method 1526s - setups the autoload on the included module 1526s - the autoload is reachable from the class too 1526s - the autoload relative to the included module works 1526s 1526s Kernel.autoload? 1526s - returns the name of the file that will be autoloaded 1526s - returns nil if no file has been registered for a constant 1526s 1526s Kernel#` 1526s - is a private method 1526s - returns the standard output of the executed sub-process 1529s - lets the standard error stream pass through to the inherited stderr 1529s - produces a String in the default external encoding 1529s - sets $? to the exit status of the executed sub-process 1529s 1529s Kernel.` 1529s - tries to convert the given argument to String using #to_str 1529s 1529s Kernel.binding 1529s - returns a binding for the caller 1529s 1529s Kernel#binding 1529s - is a private method 1529s - returns a Binding object 1529s - encapsulates the execution context properly 1529s - raises a NameError on undefined variable 1529s - uses the closure's self as self in the binding 1529s - uses the class as self in a Class.new block 1529s 1529s Kernel#block_given? 1529s - returns true if and only if a block is supplied 1529s - returns false when a method defined by define_method is called with a block 1529s - returns false outside of a method 1529s - is a private method 1529s 1529s Kernel.block_given? 1529s - returns true if and only if a block is supplied 1529s - returns false when a method defined by define_method is called with a block 1529s 1529s self.send(:block_given?) 1529s - returns true if and only if a block is supplied 1529s - returns false when a method defined by define_method is called with a block 1529s 1529s Kernel#caller_locations 1529s - is a private method 1529s - returns an Array of caller locations 1529s - returns an Array of caller locations using a custom offset 1529s - returns an Array of caller locations using a custom limit 1529s - can be called with a range 1529s - works with endless ranges 1529s - works with beginless ranges 1529s - must return [] if omitting exactly the number of locations available 1529s - returns the locations as Thread::Backtrace::Location instances 1529s - includes core library methods defined in Ruby 1529s 1529s Kernel#caller 1529s - is a private method 1529s - returns an Array of caller locations 1529s - returns an Array of caller locations using a custom offset 1529s - returns an Array of caller locations using a custom limit 1529s - returns an Array of caller locations using a range 1529s - returns the locations as String instances 1532s - returns an Array with the block given to #at_exit at the base of the stack 1532s - works with endless ranges 1532s - works with beginless ranges 1532s - includes core library methods defined in Ruby 1532s 1532s Kernel#=== for a class with default #== and #equal? 1532s - returns true if other object has same object id 1532s - returns false if other object does not have same object id 1532s 1532s Kernel#=== for a class with #== overridden to consider other object's class 1532s - returns true if #== returns true even if #equal? is false 1532s - returns true if #equal? returns true 1532s - returns false if neither #== nor #equal? returns true 1532s 1532s Kernel#=== for a class with #equal? overridden to always be false 1532s - returns true if #== returns true even if #equal? is false 1532s - returns false if neither #== nor #equal? returns true 1532s 1532s Kernel#=== for a class with #== and #equal? overridden to always be false 1532s - returns true if the object id is the same even if both #== and #equal? return false 1532s - returns false if the object id is not the same and both #== and #equal? return false 1532s 1532s Kernel#=== does not call #object_id nor #equal? 1532s - but still returns true for #== or #=== on the same object 1532s 1532s Kernel.catch 1532s - executes its block and catches a thrown value matching its argument 1532s - returns the second value passed to throw 1532s - returns the last expression evaluated if throw was not called 1532s - passes the given symbol to its block 1532s - raises an ArgumentError if a Symbol is thrown for a String catch value 1532s - raises an ArgumentError if a String with different identity is thrown 1532s - catches a Symbol when thrown a matching Symbol 1532s - catches a String when thrown a String with the same identity 1532s - accepts an object as an argument 1532s - yields an object when called without arguments 1532s - can be used even in a method different from where throw is called 1532s - raises LocalJumpError if no block is given 1532s 1532s Kernel.catch when nested 1532s - catches across invocation boundaries 1532s - catches in the nested invocation with the same key object 1532s 1532s Kernel#catch 1532s - is a private method 1532s 1532s Kernel.chomp 1532s /tmp/autopkgtest.nFBjtB/autopkgtest_tmp/spec/ruby/core/kernel/catch_spec.rb:23: warning: unused literal ignored 1535s - removes the final newline of $_ 1538s - removes the final carriage return of $_ 1542s - removes the final carriage return, newline of $_ 1545s - removes only the final newline of $_ 1548s - removes the value of $/ from the end of $_ 1548s 1548s Kernel#chomp 1551s - removes the final newline of $_ 1555s - removes the final carriage return of $_ 1558s - removes the final carriage return, newline of $_ 1561s - removes only the final newline of $_ 1564s - removes the value of $/ from the end of $_ 1567s - is a private method 1567s 1567s Kernel.chomp 1570s - removes the final carriage return, newline from a multi-byte $_ 1570s 1570s Kernel#chomp 1573s - removes the final carriage return, newline from a multi-byte $_ 1573s 1573s Kernel.chop 1576s - removes the final character of $_ 1579s - removes the final carriage return, newline of $_ 1579s 1579s Kernel#chop 1582s - is a private method 1585s - removes the final character of $_ 1588s - removes the final carriage return, newline of $_ 1588s 1588s Kernel.chop 1591s - removes the final multi-byte character from $_ 1591s 1591s Kernel#chop 1594s - removes the final multi-byte character from $_ 1594s 1594s Kernel#class 1594s - returns the class of the object 1594s - returns Class for a class 1594s - returns the first non-singleton class 1594s 1594s Kernel#clone 1594s - returns a new object duplicated from the original 1594s - produces a shallow copy, contained objects are not recursively dupped 1594s - calls #initialize_copy on the NEW object if available, passing in original object 1594s - does not preserve the object_id 1594s - returns nil for NilClass 1594s - returns true for TrueClass 1594s - returns false for FalseClass 1594s - returns the same Integer for Integer 1594s - returns the same Symbol for Symbol 1594s - returns self for Complex 1594s - returns self for Rational 1594s - calls #initialize_copy on the new instance 1594s - uses the internal allocator and does not call #allocate 1594s - copies instance variables 1594s - copies singleton methods 1594s - copies modules included in the singleton class 1594s - copies constants defined in the singleton class 1594s - replaces a singleton object's metaclass with a new copy with the same superclass 1594s 1594s Kernel#clone with no arguments 1594s - copies frozen state from the original 1594s - copies frozen? 1594s 1594s Kernel#clone with freeze: nil 1594s - copies frozen state from the original, like #clone without arguments 1594s - copies frozen? 1594s 1594s Kernel#clone with freeze: true 1594s - makes a frozen copy if the original is frozen 1594s - freezes the copy even if the original was not frozen 1594s - calls #initialize_clone with kwargs freeze: true 1594s - calls #initialize_clone with kwargs freeze: true even if #initialize_clone only takes a single argument 1594s 1594s Kernel#clone with freeze: false 1594s - does not freeze the copy if the original is frozen 1594s - does not freeze the copy if the original is not frozen 1594s - calls #initialize_clone with kwargs freeze: false 1594s - calls #initialize_clone with kwargs freeze: false even if #initialize_clone only takes a single argument 1594s 1594s Kernel#clone with freeze: anything else 1594s - raises ArgumentError when passed not true/false/nil 1594s 1594s Kernel#<=> 1594s - returns 0 if self 1594s - returns 0 if self is == to the argument 1594s - returns nil if self is eql? but not == to the argument 1594s - returns nil if self.==(arg) returns nil 1594s - returns nil if self is not == to the argument 1594s 1594s Kernel#define_singleton_method 1594s - defines a new method with the given name and the given block as body in self 1594s - raises a TypeError when the given method is no Method/Proc 1594s - defines a new singleton method for objects 1594s - maintains the Proc's scope 1594s - raises an ArgumentError when no block is given 1594s - does not use the caller block when no block is given 1594s - always defines the method with public visibility 1594s - cannot define a singleton method with a frozen singleton class 1594s 1594s Kernel#define_singleton_method when given an UnboundMethod 1594s - correctly calls the new method 1594s - adds the new method to the methods list 1594s - defines any Child class method from any Parent's class methods 1594s - will raise when attempting to define an object's singleton method from another object's singleton method 1594s 1594s Kernel#display 1594s - needs to be reviewed for spec completeness 1594s 1594s Kernel#dup 1594s - returns a new object duplicated from the original 1594s - produces a shallow copy, contained objects are not recursively dupped 1594s - calls #initialize_copy on the NEW object if available, passing in original object 1594s - does not preserve the object_id 1594s - returns nil for NilClass 1594s - returns true for TrueClass 1594s - returns false for FalseClass 1594s - returns the same Integer for Integer 1594s - returns the same Symbol for Symbol 1594s - returns self for Complex 1594s - returns self for Rational 1594s - calls #initialize_copy on the new instance 1594s - uses the internal allocator and does not call #allocate 1594s - does not copy frozen state from the original 1594s - copies instance variables 1594s - does not copy singleton methods 1594s - does not copy modules included in the singleton class 1594s - does not copy constants defined in the singleton class 1594s 1594s Kernel#enum_for 1594s - needs to be reviewed for spec completeness 1594s 1594s Kernel#eql? 1594s - is a public instance method 1594s - returns true if other is identical to self 1594s - returns false if other is not identical to self 1594s - returns true only if self and other are the same object 1594s - returns true for the same immediate object 1594s - returns false for nil and any other object 1594s - returns false for objects of different classes 1594s - returns true only if self and other are the same boolean 1594s - returns true for integers of initially different ranges 1594s 1594s Kernel#== 1594s - returns true only if obj and other are the same object 1594s 1594s Kernel#eval 1594s - is a private method 1594s - is a module function 1594s - evaluates the code within 1594s - coerces an object to string 1594s - evaluates within the scope of the eval 1594s - evaluates such that constants are scoped to the class of the eval 1594s - finds a local in an enclosing scope 1594s - updates a local in an enclosing scope 1594s - updates a local in a surrounding block scope 1594s - updates a local in a scope above a surrounding block scope 1594s - updates a local in a scope above when modified in a nested block scope 1594s - finds locals in a nested eval 1597s - does not share locals across eval scopes 1597s - doesn't accept a Proc object as a binding 1597s - does not make Proc locals visible to evaluated code 1597s - allows a binding to be captured inside an eval 1597s - uses the same scope for local variables when given the same binding 1597s - allows creating a new class in a binding 1597s - allows creating a new class in a binding created by #eval 1597s - includes file and line information in syntax error 1597s - evaluates string with given filename and negative linenumber 1597s - sets constants at the toplevel from inside a block 1597s - uses (eval) filename if none is provided 1597s - uses (eval) for __FILE__ and 1 for __LINE__ with a binding argument 1597s - does not alter the value of __FILE__ in the binding 1597s - can be aliased 1597s - uses the receiver as self inside the eval 1597s - does not pass the block to the method being eval'ed 1597s - returns from the scope calling #eval when evaluating 'return' 1597s - returns from the method calling #eval when evaluating 'return' 1597s - returns from the method calling #eval when evaluating 'return' in BEGIN 1599s - unwinds through a Proc-style closure and returns from a lambda-style closure in the closure chain 1599s - can be called with Method#call 1599s - has the correct default definee when called through Method#call 1599s - returns nil if given an empty string 1599s 1599s Kernel#eval with a magic encoding comment 1599s - uses the magic comment encoding for the encoding of literal strings 1599s - uses the magic comment encoding for parsing constants 1599s - allows an emacs-style magic comment encoding 1599s - allows spaces before the magic encoding comment 1599s - allows a shebang line before the magic encoding comment 1599s - allows a shebang line and some spaces before the magic encoding comment 1599s - allows a magic encoding comment and a subsequent frozen_string_literal magic comment 1599s - allows a magic encoding comment and a frozen_string_literal magic comment on the same line in emacs style 1599s - ignores the frozen_string_literal magic comment if it appears after a token and warns if $VERBOSE is true 1599s 1599s Kernel#eval with refinements 1599s - activates refinements from the eval scope 1599s - activates refinements from the binding 1599s 1599s Kernel#exec 1599s - is a private method 1602s - runs the specified command, replacing current process 1602s 1602s Kernel.exec 1605s - runs the specified command, replacing current process 1605s 1605s Kernel#exit 1605s - is a private method 1605s - raises a SystemExit with status 0 1605s - raises a SystemExit with the specified status 1605s - raises a SystemExit with the specified boolean status 1605s - raises a SystemExit with message 'exit' 1605s - tries to convert the passed argument to an Integer using #to_int 1605s - converts the passed Float argument to an Integer 1605s - raises TypeError if can't convert the argument to an Integer 1605s - raises the SystemExit in the main thread if it reaches the top-level handler of another thread 1605s 1605s Kernel.exit 1605s - raises a SystemExit with status 0 1605s - raises a SystemExit with the specified status 1605s - raises a SystemExit with the specified boolean status 1605s - raises a SystemExit with message 'exit' 1605s - tries to convert the passed argument to an Integer using #to_int 1605s - converts the passed Float argument to an Integer 1605s - raises TypeError if can't convert the argument to an Integer 1605s - raises the SystemExit in the main thread if it reaches the top-level handler of another thread 1605s 1605s Kernel#exit! 1605s - is a private method 1609s - exits with the given status 1612s - exits when called from a thread 1615s - exits when called from a fiber 1618s - skips at_exit handlers 1621s - skips ensure clauses 1624s - overrides the original exception and exit status when called from #at_exit 1624s 1624s Kernel.exit! 1627s - exits with the given status 1631s - exits when called from a thread 1634s - exits when called from a fiber 1637s - skips at_exit handlers 1639s - skips ensure clauses 1642s - overrides the original exception and exit status when called from #at_exit 1642s 1642s Kernel#extend 1642s - requires multiple arguments 1642s - calls extend_object on argument 1642s - does not calls append_features on arguments metaclass 1642s - calls extended on argument 1642s - makes the class a kind_of? the argument 1642s - raises an ArgumentError when no arguments given 1642s - raises a TypeError when the argument is not a Module 1642s 1642s Kernel#extend on frozen instance 1642s - raises an ArgumentError when no arguments given 1642s - raises a FrozenError 1642s 1642s Kernel#fail 1642s - is a private method 1642s - raises a RuntimeError 1642s - accepts an Object with an exception method returning an Exception 1642s - instantiates the specified exception class 1642s - uses the specified message 1642s 1642s Kernel.fail 1642s - needs to be reviewed for spec completeness 1642s 1642s Kernel#fork 1642s - is a private method 1642s 1642s Kernel#format 1642s - is a private method 1642s 1642s Kernel.format 1642s - is accessible as a module function 1642s 1642s Kernel#freeze 1642s - prevents self from being further modified 1642s - returns self 1642s - causes mutative calls to raise RuntimeError 1642s - causes instance_variable_set to raise RuntimeError 1642s 1642s Kernel#freeze on integers 1642s - has no effect since they are already frozen 1642s 1642s Kernel#freeze on a Float 1642s - has no effect since it is already frozen 1642s 1642s Kernel#freeze on a Symbol 1642s - has no effect since it is already frozen 1642s 1642s Kernel#freeze on true, false and nil 1642s - has no effect since they are already frozen 1642s 1642s Kernel#freeze on a Complex 1642s - has no effect since it is already frozen 1642s 1642s Kernel#freeze on a Rational 1642s - has no effect since it is already frozen 1642s 1642s Kernel#frozen? 1642s - returns true if self is frozen 1642s 1642s Kernel#frozen? on true, false and nil 1642s - returns true 1642s 1642s Kernel#frozen? on integers 1642s - returns true 1642s 1642s Kernel#frozen? on a Float 1642s - returns true 1642s 1642s Kernel#frozen? on a Symbol 1642s - returns true 1642s 1642s Kernel#frozen? on a Complex 1642s - returns true 1642s - literal returns true 1642s 1642s Kernel#frozen? on a Rational 1642s - returns true 1642s - literal returns true 1642s 1642s Kernel#gets 1642s - is a private method 1642s - calls ARGF.gets 1642s 1642s Kernel.gets 1642s - needs to be reviewed for spec completeness 1642s 1642s Kernel.global_variables 1642s - is a private method 1642s - finds subset starting with std 1642s 1642s Kernel#global_variables 1642s - needs to be reviewed for spec completeness 1642s 1642s Kernel#initialize_clone 1642s - is a private instance method 1642s - returns the receiver 1642s - calls #initialize_copy 1642s - accepts a :freeze keyword argument for obj.clone(freeze: value) 1642s 1642s Kernel#initialize_copy 1642s - returns self 1642s - does nothing if the argument is the same as the receiver 1642s - raises FrozenError if the receiver is frozen 1642s - raises TypeError if the objects are of different class 1642s 1642s Kernel#initialize_dup 1642s - is a private instance method 1642s - returns the receiver 1642s - calls #initialize_copy 1642s 1642s Kernel#inspect 1642s - returns a String 1642s - does not call #to_s if it is defined 1642s - returns a String with the object class and object_id encoded 1642s - returns a String for an object without #class method 1642s 1642s Kernel#instance_of? 1642s - returns true if given class is object's class 1642s - returns false if given class is object's ancestor class 1642s - returns false if given class is not object's class nor object's ancestor class 1642s - returns false if given a Module that is included in object's class 1642s - returns false if given a Module that is included one of object's ancestors only 1642s - returns false if given a Module that is not included in object's class 1642s - raises a TypeError if given an object that is not a Class nor a Module 1642s 1642s Kernel#instance_variable_defined? 1642s - raises a TypeError if passed an Object not defining #to_str 1642s - returns false if the instance variable is not defined for different types 1642s 1642s Kernel#instance_variable_defined? when passed a String 1642s - returns false if the instance variable is not defined 1642s - returns true if the instance variable is defined 1642s 1642s Kernel#instance_variable_defined? when passed a Symbol 1642s - returns false if the instance variable is not defined 1642s - returns true if the instance variable is defined 1642s 1642s Kernel#instance_variable_get 1642s - tries to convert the passed argument to a String using #to_str 1642s - returns the value of the passed instance variable that is referred to by the conversion result 1642s - returns nil when the referred instance variable does not exist 1642s - raises a TypeError when the passed argument does not respond to #to_str 1642s - raises a TypeError when the passed argument can't be converted to a String 1642s - raises a NameError when the conversion result does not start with an '@' 1642s - raises a NameError when passed just '@' 1642s 1642s Kernel#instance_variable_get when passed Symbol 1642s - returns the value of the instance variable that is referred to by the passed Symbol 1642s - raises a NameError when passed :@ as an instance variable name 1642s - raises a NameError when the passed Symbol does not start with an '@' 1642s - raises a NameError when the passed Symbol is an invalid instance variable name 1642s - returns nil or raises for frozen objects 1642s 1642s Kernel#instance_variable_get when passed String 1642s - returns the value of the instance variable that is referred to by the passed String 1642s - raises a NameError when the passed String does not start with an '@' 1642s - raises a NameError when the passed String is an invalid instance variable name 1642s - raises a NameError when passed '@' as an instance variable name 1642s 1642s Kernel#instance_variable_get when passed Integer 1642s - raises a TypeError 1642s 1642s Kernel#instance_variable_set 1642s - sets the value of the specified instance variable 1642s - sets the value of the instance variable when no instance variables exist yet 1642s - raises a NameError exception if the argument is not of form '@x' 1642s - raises a NameError exception if the argument is an invalid instance variable name 1642s - raises a NameError when the argument is '@' 1642s - raises a TypeError if the instance variable name is an Integer 1642s - raises a TypeError if the instance variable name is an object that does not respond to to_str 1642s - raises a NameError if the passed object, when coerced with to_str, does not start with @ 1642s - raises a NameError if pass an object that cannot be a symbol 1642s - accepts as instance variable name any instance of a class that responds to to_str 1642s 1642s Kernel#instance_variable_set on frozen objects 1642s - keeps stored object after any exceptions 1642s - raises a FrozenError when passed replacement is identical to stored object 1642s - raises a FrozenError when passed replacement is different from stored object 1642s - accepts unicode instance variable names 1642s - raises for frozen objects 1642s 1642s Kernel#instance_variables immediate values 1642s - returns an empty array if no instance variables are defined 1642s - returns the correct array if an instance variable is added 1642s 1642s Kernel#instance_variables regular objects 1642s - returns an empty array if no instance variables are defined 1642s - returns the correct array if an instance variable is added 1642s - returns the instances variables in the order declared 1642s 1642s Kernel#is_a? 1642s - returns true if given class is the object's class 1642s - returns true if given class is an ancestor of the object's class 1642s - returns false if the given class is not object's class nor an ancestor 1642s - returns true if given a Module that is included in object's class 1642s - returns true if given a Module that is included one of object's ancestors only 1642s - returns true if given a Module that object has been extended with 1642s - returns true if given a Module that object has been prepended with 1642s - returns false if given a Module not included nor prepended in object's class nor ancestors 1642s - raises a TypeError if given an object that is not a Class nor a Module 1642s - does not take into account `class` method overriding 1642s 1642s Kernel#itself 1642s - returns the receiver itself 1642s 1642s Kernel#kind_of? 1642s - returns true if given class is the object's class 1642s - returns true if given class is an ancestor of the object's class 1642s - returns false if the given class is not object's class nor an ancestor 1642s - returns true if given a Module that is included in object's class 1642s - returns true if given a Module that is included one of object's ancestors only 1642s - returns true if given a Module that object has been extended with 1642s - returns true if given a Module that object has been prepended with 1642s - returns false if given a Module not included nor prepended in object's class nor ancestors 1642s - raises a TypeError if given an object that is not a Class nor a Module 1642s - does not take into account `class` method overriding 1642s 1642s Kernel.lambda 1642s - returns a Proc object 1642s - raises an ArgumentError when no block is given 1642s - is a private method 1642s - creates a lambda-style Proc if given a literal block 1642s - creates a lambda-style Proc if given a literal block via #send 1642s - creates a lambda-style Proc if given a literal block via #__send__ 1642s - creates a lambda-style Proc if given a literal block via Kernel.public_send 1642s - returns the passed Proc if given an existing Proc 1642s - creates a lambda-style Proc when called with zsuper 1642s - returns the passed Proc if given an existing Proc through super 1642s - checks the arity of the call when no args are specified 1642s - checks the arity when 1 arg is specified 1642s - does not check the arity when passing a Proc with & 1642s - accepts 0 arguments when used with || 1642s - strictly checks the arity when 0 or 2..inf args are specified 1642s - returns from the lambda itself, not the creation site of the lambda 1642s /tmp/autopkgtest.nFBjtB/autopkgtest_tmp/spec/mspec/lib/mspec/runner/mspec.rb:100: warning: parentheses after method name is interpreted as an argument list, not a decomposed argument 1642s - allows long returns to flow through it 1642s - treats the block as a Proc when lambda is re-defined 1642s 1642s Kernel.lambda when called without a literal block 1642s - warns when proc isn't a lambda 1642s - doesn't warn when proc is lambda 1642s 1642s Kernel#load 1642s - is a private method 1642s 1642s Kernel#load (path resolution) 1642s - loads an absolute path 1642s - loads a non-canonical absolute path 1642s - loads a file defining many methods 1642s - raises a LoadError if the file does not exist 1642s - calls #to_str on non-String objects 1642s - raises a TypeError if passed nil 1642s - raises a TypeError if passed an Integer 1643s - raises a TypeError if passed an Array 1643s - raises a TypeError if passed an object that does not provide #to_str 1643s - raises a TypeError if passed an object that has #to_s but not #to_str 1643s - raises a TypeError if #to_str does not return a String 1643s - calls #to_path on non-String objects 1643s - calls #to_path on a String 1643s - calls #to_str on non-String objects returned by #to_path 1643s - loads a ./ relative path from the current working directory with empty $LOAD_PATH 1643s - loads a ../ relative path from the current working directory with empty $LOAD_PATH 1643s - loads a ./ relative path from the current working directory with non-empty $LOAD_PATH 1643s - loads a ../ relative path from the current working directory with non-empty $LOAD_PATH 1643s - loads a non-canonical path from the current working directory with non-empty $LOAD_PATH 1643s - resolves a filename against $LOAD_PATH entries 1643s - accepts an Object with #to_path in $LOAD_PATH 1643s - does not require file twice after $LOAD_PATH change 1643s - does not resolve a ./ relative path against $LOAD_PATH entries 1643s - does not resolve a ../ relative path against $LOAD_PATH entries 1643s - resolves a non-canonical path against $LOAD_PATH entries 1643s - loads a path with duplicate path separators 1643s 1643s Kernel#load (path resolution) with an unreadable file 1643s - raises a LoadError 1643s 1643s Kernel#load 1643s - loads a file that recursively requires itself 1643s - loads a file that recursively loads itself 1643s - loads a file each time the method is called 1643s - loads a file even when the name appears in $LOADED_FEATURES 1643s - loads a file that has been loaded by #require 1643s - loads file even after $LOAD_PATH change 1643s - does not cause #require with the same path to fail 1643s - does not add the loaded path to $LOADED_FEATURES 1643s - raises a LoadError if passed a non-extensioned path that does not exist but a .rb extensioned path does exist 1643s 1643s Kernel#load (path resolution) 1643s - loads a non-extensioned file as a Ruby source file 1643s - loads a non .rb extensioned file as a Ruby source file 1643s - loads from the current working directory 1643s - does not look for a c-extension file when passed a path without extension (when no .rb is present) 1643s 1643s Kernel#load when passed true for 'wrap' 1643s - loads from an existing path 1643s - sets the enclosing scope to an anonymous module 1643s - allows referencing outside namespaces 1643s - sets self as a copy of the top-level main 1643s - includes modules included in main's singleton class in self's class 1643s 1643s Kernel#load when passed true for 'wrap' with top-level methods 1643s - allows calling top-level methods 1643s - does not pollute the receiver 1643s 1643s Kernel#load when passed a module for 'wrap' 1643s - sets the enclosing scope to the supplied module 1643s - makes constants and instance methods in the source file reachable with the supplied module 1643s - makes instance methods in the source file private 1643s 1643s Kernel#load (shell expansion) 1643s - expands a tilde to the HOME environment variable as the path to load 1643s 1643s Kernel.load (path resolution) 1643s - loads an absolute path 1643s - loads a non-canonical absolute path 1643s - loads a file defining many methods 1643s - raises a LoadError if the file does not exist 1643s - calls #to_str on non-String objects 1643s - raises a TypeError if passed nil 1643s - raises a TypeError if passed an Integer 1643s - raises a TypeError if passed an Array 1643s - raises a TypeError if passed an object that does not provide #to_str 1643s - raises a TypeError if passed an object that has #to_s but not #to_str 1643s - raises a TypeError if #to_str does not return a String 1643s - calls #to_path on non-String objects 1643s - calls #to_path on a String 1643s - calls #to_str on non-String objects returned by #to_path 1643s - loads a ./ relative path from the current working directory with empty $LOAD_PATH 1643s - loads a ../ relative path from the current working directory with empty $LOAD_PATH 1643s - loads a ./ relative path from the current working directory with non-empty $LOAD_PATH 1643s - loads a ../ relative path from the current working directory with non-empty $LOAD_PATH 1643s - loads a non-canonical path from the current working directory with non-empty $LOAD_PATH 1643s - resolves a filename against $LOAD_PATH entries 1643s - accepts an Object with #to_path in $LOAD_PATH 1643s - does not require file twice after $LOAD_PATH change 1643s - does not resolve a ./ relative path against $LOAD_PATH entries 1643s - does not resolve a ../ relative path against $LOAD_PATH entries 1643s - resolves a non-canonical path against $LOAD_PATH entries 1643s - loads a path with duplicate path separators 1643s 1643s Kernel.load (path resolution) with an unreadable file 1643s - raises a LoadError 1643s 1643s Kernel.load 1643s - loads a file that recursively requires itself 1643s - loads a file that recursively loads itself 1643s - loads a file each time the method is called 1643s - loads a file even when the name appears in $LOADED_FEATURES 1643s - loads a file that has been loaded by #require 1643s - loads file even after $LOAD_PATH change 1643s - does not cause #require with the same path to fail 1643s - does not add the loaded path to $LOADED_FEATURES 1643s - raises a LoadError if passed a non-extensioned path that does not exist but a .rb extensioned path does exist 1643s 1643s Kernel.load (path resolution) 1643s - loads a non-extensioned file as a Ruby source file 1643s - loads a non .rb extensioned file as a Ruby source file 1643s - loads from the current working directory 1643s - does not look for a c-extension file when passed a path without extension (when no .rb is present) 1643s 1643s Kernel.load when passed true for 'wrap' 1643s - loads from an existing path 1643s - sets the enclosing scope to an anonymous module 1643s - allows referencing outside namespaces 1643s - sets self as a copy of the top-level main 1643s - includes modules included in main's singleton class in self's class 1643s 1643s Kernel.load when passed true for 'wrap' with top-level methods 1643s - allows calling top-level methods 1643s - does not pollute the receiver 1643s 1643s Kernel.load when passed a module for 'wrap' 1643s - sets the enclosing scope to the supplied module 1643s - makes constants and instance methods in the source file reachable with the supplied module 1643s - makes instance methods in the source file private 1643s 1643s Kernel.load (shell expansion) 1643s - expands a tilde to the HOME environment variable as the path to load 1643s 1643s Kernel#local_variables 1643s - is a private method 1643s - contains locals as they are added 1643s - is accessible from bindings 1643s - is accessible in eval 1643s - includes only unique variable names 1643s 1643s Kernel.loop 1643s - is a private method 1643s - calls block until it is terminated by a break 1643s - returns value passed to break 1643s - returns nil if no value passed to break 1643s - returns an enumerator if no block given 1643s - rescues StopIteration 1643s - rescues StopIteration's subclasses 1643s - does not rescue other errors 1643s - returns StopIteration#result, the result value of a finished iterator 1643s 1643s Kernel.loop when no block is given returned Enumerator size 1643s - returns Float::INFINITY 1643s 1643s Kernel#=~ 1643s - returns nil matching any object 1643s - is deprecated 1643s 1643s Kernel#method 1643s - returns a method object for a valid method 1643s - returns a method object for a valid singleton method 1643s - returns a method object if respond_to_missing?(method) is true 1643s - the returned method object if respond_to_missing?(method) calls #method_missing with a Symbol name 1643s - raises a NameError for an invalid method name 1643s - raises a NameError for an invalid singleton method name 1643s - changes the method called for super on a target aliased method 1643s - can be called on a private method 1643s - can be called on a protected method 1643s - will see an alias of the original method as == when in a derived class 1643s - can call methods created with define_method 1643s - can be called even if we only respond_to_missing? method, true 1643s - can call a #method_missing accepting zero or one arguments 1643s 1643s Kernel#method converts the given name to a String using #to_str 1643s - calls #to_str to convert the given name to a String 1643s - raises a TypeError if the given name can't be converted to a String 1643s - raises a NoMethodError if the given argument raises a NoMethodError during type coercion to a String 1643s 1643s Kernel#methods 1643s - returns singleton methods defined by obj.meth 1643s - returns singleton methods defined in 'class << self' 1643s - returns private singleton methods defined by obj.meth 1643s - returns singleton methods defined in 'class << self' when it follows 'private' 1643s - does not return private singleton methods defined in 'class << self' 1643s - returns the publicly accessible methods of the object 1643s - returns the publicly accessible methods in the object, its ancestors and mixed-in modules 1643s - returns methods added to the metaclass through extend 1643s - does not return undefined singleton methods defined by obj.meth 1643s - does not return superclass methods undefined in the object's class 1643s - does not return superclass methods undefined in a superclass 1643s - does not return included module methods undefined in the object's class 1643s 1643s Kernel#methods when not passed an argument 1643s - returns a unique list for an object extended by a module 1643s - returns a unique list for a class including a module 1643s - returns a unique list for a subclass of a class that includes a module 1643s 1643s Kernel#methods when passed true 1643s - returns a unique list for an object extended by a module 1643s - returns a unique list for a class including a module 1643s - returns a unique list for a subclass of a class that includes a module 1643s 1643s Kernel#nil? 1643s - returns false 1643s 1643s Kernel#!~ 1643s - calls =~ internally and negates the result 1643s - can be overridden in subclasses 1643s 1643s Kernel#object_id 1643s - returns an integer 1643s - returns the same value on all calls to id for a given object 1643s - returns different values for different objects 1643s - returns the same value for two Fixnums with the same value 1643s - returns the same value for two Symbol literals 1643s - returns the same value for two true literals 1643s - returns the same value for two false literals 1643s - returns the same value for two nil literals 1643s - returns a different value for two Bignum literals 1643s - returns a different value for two String literals 1643s - returns a different value for an object and its dup 1643s - returns a different value for two numbers near the 32 bit Fixnum limit 1643s - returns a different value for two numbers near the 64 bit Fixnum limit 1643s 1643s Kernel#open 1643s - is a private method 1643s - opens a file when given a valid filename 1643s - opens a file when called with a block 1643s - opens an io when path starts with a pipe 1643s - opens an io when called with a block 1643s - opens an io for writing 1643s - raises an ArgumentError if not passed one argument 1643s - raises a TypeError if passed a non-String that does not respond to #to_open 1643s - accepts nil for mode and permission 1646s - is not redefined by open-uri 1646s 1646s Kernel#open when given an object that responds to to_open 1646s - calls #to_path to covert the argument to a String before calling #to_str 1646s - calls #to_str to convert the argument to a String 1646s - calls #to_open on argument 1646s - returns the value from #to_open 1646s - passes its arguments onto #to_open 1646s - passes the return value from #to_open to a block 1646s 1646s Kernel.open 1646s - needs to be reviewed for spec completeness 1646s 1646s Kernel#p 1646s - is a private method 1646s - flushes output if receiver is a File 1646s - prints obj.inspect followed by system record separator for each argument given 1646s - is not affected by setting $\, $/ or $, 1646s - prints nothing if no argument is given 1646s - prints nothing if called splatting an empty Array 1646s - does not flush if receiver is not a TTY or a File 1646s 1646s Kernel.p 1646s - needs to be reviewed for spec completeness 1646s 1646s Kernel#pp 1650s - lazily loads the 'pp' library and delegates the call to that library 1650s 1650s Kernel#print 1650s - is a private method 1650s - delegates to $stdout 1650s - prints $_ when no arguments are given 1650s 1650s Kernel.print 1650s - needs to be reviewed for spec completeness 1650s 1650s Kernel#printf 1650s - is a private method 1650s 1650s Kernel.printf 1650s - writes to stdout when a string is the first argument 1650s - calls write on the first argument when it is not a string 1650s - calls #to_str to convert the format object to a String 1650s 1650s Kernel.printf formatting io is specified 1650s - does not raise error when passed more arguments than needed 1650s 1650s Kernel.printf formatting io is specified integer formats 1650s - converts argument into Integer with to_int 1650s - converts argument into Integer with to_i if to_int isn't available 1650s - converts String argument with Kernel#Integer 1650s - raises TypeError exception if cannot convert to Integer 1650s 1650s Kernel.printf formatting io is specified integer formats b 1650s - converts argument as a binary number 1650s - displays negative number as a two's complement prefixed with '..1' 1650s - collapse negative number representation if it equals 1 1650s 1650s Kernel.printf formatting io is specified integer formats B 1650s - converts argument as a binary number 1650s - displays negative number as a two's complement prefixed with '..1' 1650s - collapse negative number representation if it equals 1 1650s 1650s Kernel.printf formatting io is specified integer formats d 1650s - converts argument as a decimal number 1650s - works well with large numbers 1650s 1650s Kernel.printf formatting io is specified integer formats i 1650s - converts argument as a decimal number 1650s - works well with large numbers 1650s 1650s Kernel.printf formatting io is specified integer formats u 1650s - converts argument as a decimal number 1650s - works well with large numbers 1650s 1650s Kernel.printf formatting io is specified integer formats o 1650s - converts argument as an octal number 1650s - displays negative number as a two's complement prefixed with '..7' 1650s - collapse negative number representation if it equals 7 1650s 1650s Kernel.printf formatting io is specified integer formats x 1650s - converts argument as a hexadecimal number 1650s - displays negative number as a two's complement prefixed with '..f' 1650s - collapse negative number representation if it equals f 1650s 1650s Kernel.printf formatting io is specified integer formats X 1650s - converts argument as a hexadecimal number with uppercase letters 1650s - displays negative number as a two's complement prefixed with '..f' 1650s - collapse negative number representation if it equals F 1650s 1650s Kernel.printf formatting io is specified float formats 1650s - converts argument into Float 1650s - raises TypeError exception if cannot convert to Float 1650s 1650s Kernel.printf formatting io is specified float formats e 1650s - converts argument into exponential notation [-]d.dddddde[+-]dd 1650s - cuts excessive digits and keeps only 6 ones 1650s - rounds the last significant digit to the closest one 1650s - displays Float::INFINITY as Inf 1650s - displays Float::NAN as NaN 1650s 1650s Kernel.printf formatting io is specified float formats E 1650s - converts argument into exponential notation [-]d.dddddde[+-]dd 1650s - cuts excessive digits and keeps only 6 ones 1650s - rounds the last significant digit to the closest one 1650s - displays Float::INFINITY as Inf 1650s - displays Float::NAN as NaN 1650s 1650s Kernel.printf formatting io is specified float formats f 1650s - converts floating point argument as [-]ddd.dddddd 1650s - cuts excessive digits and keeps only 6 ones 1650s - rounds the last significant digit to the closest one 1650s - displays Float::INFINITY as Inf 1650s - displays Float::NAN as NaN 1650s 1650s Kernel.printf formatting io is specified float formats g 1650s - displays Float::INFINITY as Inf 1650s - displays Float::NAN as NaN 1650s 1650s Kernel.printf formatting io is specified float formats g the exponent is less than -4 1650s - converts a floating point number using exponential form 1650s 1650s Kernel.printf formatting io is specified float formats g the exponent is greater than or equal to the precision (6 by default) 1650s - converts a floating point number using exponential form 1650s 1650s Kernel.printf formatting io is specified float formats g otherwise 1650s - converts a floating point number in dd.dddd form 1650s - cuts excessive digits in fractional part and keeps only 4 ones 1650s - rounds the last significant digit to the closest one in fractional part 1650s - cuts fraction part to have only 6 digits at all 1650s 1650s Kernel.printf formatting io is specified float formats G 1650s - displays Float::INFINITY as Inf 1650s - displays Float::NAN as NaN 1650s 1650s Kernel.printf formatting io is specified float formats G the exponent is less than -4 1650s - converts a floating point number using exponential form 1650s 1650s Kernel.printf formatting io is specified float formats G the exponent is greater than or equal to the precision (6 by default) 1650s - converts a floating point number using exponential form 1650s 1650s Kernel.printf formatting io is specified float formats G otherwise 1650s - converts a floating point number in dd.dddd form 1650s - cuts excessive digits in fractional part and keeps only 4 ones 1650s - rounds the last significant digit to the closest one in fractional part 1650s - cuts fraction part to have only 6 digits at all 1650s 1650s Kernel.printf formatting io is specified float formats a 1650s - converts floating point argument as [-]0xh.hhhhp[+-]dd 1650s - displays Float::INFINITY as Inf 1650s - displays Float::NAN as NaN 1650s 1650s Kernel.printf formatting io is specified float formats A 1650s - converts floating point argument as [-]0xh.hhhhp[+-]dd and use uppercase X and P 1650s - displays Float::INFINITY as Inf 1650s - displays Float::NAN as NaN 1650s 1650s Kernel.printf formatting io is specified other formats c 1650s - displays character if argument is a numeric code of character 1650s - displays character if argument is a single character string 1650s - raises ArgumentError if argument is a string of several characters 1650s - raises ArgumentError if argument is an empty string 1650s - raises TypeError if argument is not String or Integer and cannot be converted to them 1650s - raises TypeError if argument is nil 1650s - tries to convert argument to String with to_str 1650s - tries to convert argument to Integer with to_int 1650s - raises TypeError if converting to String with to_str returns non-String 1650s - raises TypeError if converting to Integer with to_int returns non-Integer 1650s 1650s Kernel.printf formatting io is specified other formats p 1650s - displays argument.inspect value 1650s 1650s Kernel.printf formatting io is specified other formats s 1650s - substitute argument passes as a string 1650s - substitutes '' for nil 1650s - converts argument to string with to_s 1650s - does not try to convert with to_str 1650s - formats a partial substring without including omitted characters 1650s - formats string with precision 1650s - formats string with width 1650s - formats string with width and precision 1650s - formats nil with width 1650s - formats nil with precision 1650s - formats nil with width and precision 1650s - formats multibyte string with precision 1650s - preserves encoding of the format string 1650s 1650s Kernel.printf formatting io is specified other formats % 1650s - alone raises an ArgumentError 1650s - is escaped by % 1650s 1650s Kernel.printf formatting io is specified flags space applies to numeric formats bBdiouxXeEfgGaA 1650s - leaves a space at the start of non-negative numbers 1650s - does not leave a space at the start of negative numbers 1650s - prevents converting negative argument to two's complement form 1650s - treats several white spaces as one 1650s 1650s Kernel.printf formatting io is specified flags (digit)$ 1650s - specifies the absolute argument number for this field 1650s - raises exception if argument number is bigger than actual arguments list 1650s - ignores '-' sign 1650s - raises ArgumentError exception when absolute and relative argument numbers are mixed 1650s 1650s Kernel.printf formatting io is specified flags # applies to format o 1650s - increases the precision until the first digit will be `0' if it is not formatted as complements 1650s - does nothing for negative argument 1650s 1650s Kernel.printf formatting io is specified flags # applies to formats bBxX 1650s - prefixes the result with 0x, 0X, 0b and 0B respectively for non-zero argument 1650s - does nothing for zero argument 1650s 1650s Kernel.printf formatting io is specified flags # applies to formats aAeEfgG 1650s - forces a decimal point to be added, even if no digits follow 1650s - changes format from dd.dddd to exponential form for gG 1650s 1650s Kernel.printf formatting io is specified flags # applies to gG 1650s - does not remove trailing zeros 1650s 1650s Kernel.printf formatting io is specified flags + applies to numeric formats bBdiouxXaAeEfgG 1650s - adds a leading plus sign to non-negative numbers 1650s - does not use two's complement form for negative numbers for formats bBoxX 1650s 1650s Kernel.printf formatting io is specified flags - 1650s - left-justifies the result of conversion if width is specified 1650s 1650s Kernel.printf formatting io is specified flags 0 (zero) applies to numeric formats bBdiouxXaAeEfgG and width is specified 1650s - pads with zeros, not spaces 1650s - uses radix-1 when displays negative argument as a two's complement 1650s 1650s Kernel.printf formatting io is specified flags * 1650s - uses the previous argument as the field width 1650s - left-justifies the result if width is negative 1650s - uses the specified argument as the width if * is followed by a number and $ 1650s - left-justifies the result if specified with $ argument is negative 1650s - raises ArgumentError when is mixed with width 1650s 1650s Kernel.printf formatting io is specified width 1650s - specifies the minimum number of characters that will be written to the result 1650s - is ignored if argument's actual length is greater 1650s 1650s Kernel.printf formatting io is specified precision integer types 1650s - controls the number of decimal places displayed 1650s 1650s Kernel.printf formatting io is specified precision float types 1650s - controls the number of decimal places displayed in fraction part 1650s - does not affect G format 1650s 1650s Kernel.printf formatting io is specified precision string formats 1650s - determines the maximum number of characters to be copied from the string 1650s 1650s Kernel.printf formatting io is specified reference by name %s style 1650s - uses value passed in a hash argument 1650s - supports flags, width, precision and type 1650s - allows to place name in any position 1650s - cannot be mixed with unnamed style 1650s 1650s Kernel.printf formatting io is specified reference by name %{name} style 1650s - uses value passed in a hash argument 1650s - does not support type style 1650s - supports flags, width and precision 1650s - cannot be mixed with unnamed style 1650s - raises KeyError when there is no matching key 1650s - converts value to String with to_s 1650s 1650s Kernel.printf formatting io is specified faulty key 1650s - raises a KeyError 1650s - sets the Hash as the receiver of KeyError 1650s - sets the unmatched key as the key of KeyError 1650s 1650s Kernel.printf formatting io is not specified 1650s - does not raise error when passed more arguments than needed 1650s 1650s Kernel.printf formatting io is not specified integer formats 1650s - converts argument into Integer with to_int 1650s - converts argument into Integer with to_i if to_int isn't available 1650s - converts String argument with Kernel#Integer 1650s - raises TypeError exception if cannot convert to Integer 1650s 1650s Kernel.printf formatting io is not specified integer formats b 1650s - converts argument as a binary number 1650s - displays negative number as a two's complement prefixed with '..1' 1650s - collapse negative number representation if it equals 1 1650s 1650s Kernel.printf formatting io is not specified integer formats B 1650s - converts argument as a binary number 1650s - displays negative number as a two's complement prefixed with '..1' 1650s - collapse negative number representation if it equals 1 1650s 1650s Kernel.printf formatting io is not specified integer formats d 1650s - converts argument as a decimal number 1650s - works well with large numbers 1650s 1650s Kernel.printf formatting io is not specified integer formats i 1650s - converts argument as a decimal number 1650s - works well with large numbers 1650s 1650s Kernel.printf formatting io is not specified integer formats u 1650s - converts argument as a decimal number 1650s - works well with large numbers 1650s 1650s Kernel.printf formatting io is not specified integer formats o 1650s - converts argument as an octal number 1650s - displays negative number as a two's complement prefixed with '..7' 1650s - collapse negative number representation if it equals 7 1650s 1650s Kernel.printf formatting io is not specified integer formats x 1650s - converts argument as a hexadecimal number 1650s - displays negative number as a two's complement prefixed with '..f' 1650s - collapse negative number representation if it equals f 1650s 1650s Kernel.printf formatting io is not specified integer formats X 1650s - converts argument as a hexadecimal number with uppercase letters 1650s - displays negative number as a two's complement prefixed with '..f' 1650s - collapse negative number representation if it equals F 1650s 1650s Kernel.printf formatting io is not specified float formats 1650s - converts argument into Float 1650s - raises TypeError exception if cannot convert to Float 1650s 1650s Kernel.printf formatting io is not specified float formats e 1650s - converts argument into exponential notation [-]d.dddddde[+-]dd 1650s - cuts excessive digits and keeps only 6 ones 1650s - rounds the last significant digit to the closest one 1650s - displays Float::INFINITY as Inf 1650s - displays Float::NAN as NaN 1650s 1650s Kernel.printf formatting io is not specified float formats E 1650s - converts argument into exponential notation [-]d.dddddde[+-]dd 1650s - cuts excessive digits and keeps only 6 ones 1650s - rounds the last significant digit to the closest one 1650s - displays Float::INFINITY as Inf 1650s - displays Float::NAN as NaN 1650s 1650s Kernel.printf formatting io is not specified float formats f 1650s - converts floating point argument as [-]ddd.dddddd 1650s - cuts excessive digits and keeps only 6 ones 1650s - rounds the last significant digit to the closest one 1650s - displays Float::INFINITY as Inf 1650s - displays Float::NAN as NaN 1650s 1650s Kernel.printf formatting io is not specified float formats g 1650s - displays Float::INFINITY as Inf 1650s - displays Float::NAN as NaN 1650s 1650s Kernel.printf formatting io is not specified float formats g the exponent is less than -4 1650s - converts a floating point number using exponential form 1650s 1650s Kernel.printf formatting io is not specified float formats g the exponent is greater than or equal to the precision (6 by default) 1650s - converts a floating point number using exponential form 1650s 1650s Kernel.printf formatting io is not specified float formats g otherwise 1650s - converts a floating point number in dd.dddd form 1650s - cuts excessive digits in fractional part and keeps only 4 ones 1650s - rounds the last significant digit to the closest one in fractional part 1650s - cuts fraction part to have only 6 digits at all 1650s 1650s Kernel.printf formatting io is not specified float formats G 1650s - displays Float::INFINITY as Inf 1650s - displays Float::NAN as NaN 1650s 1650s Kernel.printf formatting io is not specified float formats G the exponent is less than -4 1650s - converts a floating point number using exponential form 1650s 1650s Kernel.printf formatting io is not specified float formats G the exponent is greater than or equal to the precision (6 by default) 1650s - converts a floating point number using exponential form 1650s 1650s Kernel.printf formatting io is not specified float formats G otherwise 1650s - converts a floating point number in dd.dddd form 1650s - cuts excessive digits in fractional part and keeps only 4 ones 1650s - rounds the last significant digit to the closest one in fractional part 1650s - cuts fraction part to have only 6 digits at all 1650s 1650s Kernel.printf formatting io is not specified float formats a 1650s - converts floating point argument as [-]0xh.hhhhp[+-]dd 1650s - displays Float::INFINITY as Inf 1650s - displays Float::NAN as NaN 1650s 1650s Kernel.printf formatting io is not specified float formats A 1650s - converts floating point argument as [-]0xh.hhhhp[+-]dd and use uppercase X and P 1650s - displays Float::INFINITY as Inf 1650s - displays Float::NAN as NaN 1650s 1650s Kernel.printf formatting io is not specified other formats c 1650s - displays character if argument is a numeric code of character 1650s - displays character if argument is a single character string 1650s - raises ArgumentError if argument is a string of several characters 1650s - raises ArgumentError if argument is an empty string 1650s - raises TypeError if argument is not String or Integer and cannot be converted to them 1650s - raises TypeError if argument is nil 1650s - tries to convert argument to String with to_str 1650s - tries to convert argument to Integer with to_int 1650s - raises TypeError if converting to String with to_str returns non-String 1650s - raises TypeError if converting to Integer with to_int returns non-Integer 1650s 1650s Kernel.printf formatting io is not specified other formats p 1650s - displays argument.inspect value 1650s 1650s Kernel.printf formatting io is not specified other formats s 1650s - substitute argument passes as a string 1650s - substitutes '' for nil 1650s - converts argument to string with to_s 1650s - does not try to convert with to_str 1650s - formats a partial substring without including omitted characters 1650s - formats string with precision 1650s - formats string with width 1650s - formats string with width and precision 1650s - formats nil with width 1650s - formats nil with precision 1650s - formats nil with width and precision 1650s - formats multibyte string with precision 1650s - preserves encoding of the format string 1650s 1650s Kernel.printf formatting io is not specified other formats % 1650s - alone raises an ArgumentError 1650s - is escaped by % 1650s 1650s Kernel.printf formatting io is not specified flags space applies to numeric formats bBdiouxXeEfgGaA 1650s - leaves a space at the start of non-negative numbers 1650s - does not leave a space at the start of negative numbers 1650s - prevents converting negative argument to two's complement form 1650s - treats several white spaces as one 1650s 1650s Kernel.printf formatting io is not specified flags (digit)$ 1650s - specifies the absolute argument number for this field 1650s - raises exception if argument number is bigger than actual arguments list 1650s - ignores '-' sign 1650s - raises ArgumentError exception when absolute and relative argument numbers are mixed 1650s 1650s Kernel.printf formatting io is not specified flags # applies to format o 1650s - increases the precision until the first digit will be `0' if it is not formatted as complements 1650s - does nothing for negative argument 1650s 1650s Kernel.printf formatting io is not specified flags # applies to formats bBxX 1650s - prefixes the result with 0x, 0X, 0b and 0B respectively for non-zero argument 1650s - does nothing for zero argument 1650s 1650s Kernel.printf formatting io is not specified flags # applies to formats aAeEfgG 1650s - forces a decimal point to be added, even if no digits follow 1650s - changes format from dd.dddd to exponential form for gG 1650s 1650s Kernel.printf formatting io is not specified flags # applies to gG 1650s - does not remove trailing zeros 1650s 1650s Kernel.printf formatting io is not specified flags + applies to numeric formats bBdiouxXaAeEfgG 1650s - adds a leading plus sign to non-negative numbers 1650s - does not use two's complement form for negative numbers for formats bBoxX 1650s 1650s Kernel.printf formatting io is not specified flags - 1650s - left-justifies the result of conversion if width is specified 1650s 1650s Kernel.printf formatting io is not specified flags 0 (zero) applies to numeric formats bBdiouxXaAeEfgG and width is specified 1650s - pads with zeros, not spaces 1650s - uses radix-1 when displays negative argument as a two's complement 1650s 1650s Kernel.printf formatting io is not specified flags * 1650s - uses the previous argument as the field width 1650s - left-justifies the result if width is negative 1650s - uses the specified argument as the width if * is followed by a number and $ 1650s - left-justifies the result if specified with $ argument is negative 1650s - raises ArgumentError when is mixed with width 1650s 1650s Kernel.printf formatting io is not specified width 1650s - specifies the minimum number of characters that will be written to the result 1650s - is ignored if argument's actual length is greater 1650s 1650s Kernel.printf formatting io is not specified precision integer types 1650s - controls the number of decimal places displayed 1650s 1650s Kernel.printf formatting io is not specified precision float types 1650s - controls the number of decimal places displayed in fraction part 1650s - does not affect G format 1650s 1650s Kernel.printf formatting io is not specified precision string formats 1650s - determines the maximum number of characters to be copied from the string 1650s 1650s Kernel.printf formatting io is not specified reference by name %s style 1650s - uses value passed in a hash argument 1650s - supports flags, width, precision and type 1650s - allows to place name in any position 1650s - cannot be mixed with unnamed style 1650s 1650s Kernel.printf formatting io is not specified reference by name %{name} style 1650s - uses value passed in a hash argument 1650s - does not support type style 1650s - supports flags, width and precision 1650s - cannot be mixed with unnamed style 1650s - raises KeyError when there is no matching key 1650s - converts value to String with to_s 1650s 1650s Kernel.printf formatting io is not specified faulty key 1650s - raises a KeyError 1650s - sets the Hash as the receiver of KeyError 1650s - sets the unmatched key as the key of KeyError 1650s 1650s Kernel#private_methods 1650s - returns a list of the names of privately accessible methods in the object 1650s - returns a list of the names of privately accessible methods in the object and its ancestors and mixed-in modules 1650s - returns private methods mixed in to the metaclass 1650s 1650s Kernel#private_methods when not passed an argument 1650s - returns a unique list for an object extended by a module 1650s - returns a unique list for a class including a module 1650s - returns a unique list for a subclass of a class that includes a module 1650s 1650s Kernel#private_methods when passed true 1650s - returns a unique list for an object extended by a module 1650s - returns a unique list for a class including a module 1650s - returns a unique list for a subclass of a class that includes a module 1650s 1650s Kernel#private_methods when passed false 1650s - returns a list of private methods in without its ancestors 1650s 1650s Kernel#private_methods when passed nil 1650s - returns a list of private methods in without its ancestors 1650s 1650s Kernel.proc 1650s - is a private method 1650s - creates a proc-style Proc if given a literal block 1650s - returned the passed Proc if given an existing Proc 1650s - returns a Proc object 1650s - raises an ArgumentError when no block is given 1650s - returns from the creation site of the proc, not just the proc itself 1650s 1650s Kernel#proc 1650s - raises an ArgumentError when passed no block 1650s 1650s Kernel#protected_methods 1650s - returns a list of the names of protected methods accessible in the object 1650s - returns a list of the names of protected methods accessible in the object and from its ancestors and mixed-in modules 1650s - returns methods mixed in to the metaclass 1650s 1650s Kernel#protected_methods when not passed an argument 1650s - returns a unique list for an object extended by a module 1650s - returns a unique list for a class including a module 1650s - returns a unique list for a subclass of a class that includes a module 1650s 1650s Kernel#protected_methods when passed true 1650s - returns a unique list for an object extended by a module 1650s - returns a unique list for a class including a module 1650s - returns a unique list for a subclass of a class that includes a module 1650s 1650s Kernel#protected_methods when passed false 1650s - returns a list of protected methods in without its ancestors 1650s 1650s Kernel#protected_methods when passed nil 1650s - returns a list of protected methods in without its ancestors 1650s 1650s Kernel#public_method 1650s - returns a method object for a valid method 1650s - returns a method object for a valid singleton method 1650s - returns a method object if respond_to_missing?(method) is true 1650s - the returned method object if respond_to_missing?(method) calls #method_missing with a Symbol name 1650s - raises a NameError for an invalid method name 1650s - raises a NameError for an invalid singleton method name 1650s - changes the method called for super on a target aliased method 1650s - raises a NameError when called on a private method 1650s - raises a NameError when called on a protected method 1650s - raises a NameError if we only repond_to_missing? method, true 1650s 1650s Kernel#public_methods 1650s - returns a list of the names of publicly accessible methods in the object 1650s - returns a list of names without protected accessible methods in the object 1650s - returns a list of the names of publicly accessible methods in the object and its ancestors and mixed-in modules 1650s - returns methods mixed in to the metaclass 1650s - returns public methods for immediates 1650s 1650s Kernel#public_methods when not passed an argument 1650s - returns a unique list for an object extended by a module 1650s - returns a unique list for a class including a module 1650s - returns a unique list for a subclass of a class that includes a module 1650s 1650s Kernel#public_methods when passed true 1650s - returns a unique list for an object extended by a module 1650s - returns a unique list for a class including a module 1650s - returns a unique list for a subclass of a class that includes a module 1650s 1650s Kernel#public_methods when passed false 1650s - returns a list of public methods in without its ancestors 1650s 1650s Kernel#public_methods when passed nil 1650s - returns a list of public methods in without its ancestors 1650s 1650s Kernel#public_send 1650s - invokes the named public method 1650s - invokes the named alias of a public method 1650s - raises a NoMethodError if the method is protected 1650s - raises a NoMethodError if the named method is private 1650s - raises a NoMethodError if the named method is an alias of a private method 1650s - raises a NoMethodError if the named method is an alias of a protected method 1650s - includes `public_send` in the backtrace when passed not enough arguments 1650s - includes `public_send` in the backtrace when passed a single incorrect argument 1650s - invokes the named method 1650s - accepts a String method name 1650s - invokes a class method if called on a class 1650s - raises a TypeError if the method name is not a string or symbol 1650s - raises a NameError if the corresponding method can't be found 1650s - raises a NameError if the corresponding singleton method can't be found 1650s - raises an ArgumentError if no arguments are given 1650s - raises an ArgumentError if called with more arguments than available parameters 1650s - raises an ArgumentError if called with fewer arguments than required parameters 1650s - succeeds if passed an arbitrary number of arguments as a splat parameter 1650s - succeeds when passing 1 or more arguments as a required and a splat parameter 1650s - succeeds when passing 0 arguments to a method with one parameter with a default 1650s - has a negative arity 1650s - invokes module methods with super correctly 1650s 1650s Kernel#public_send called from own public method 1650s - raises a NoMethodError if the method is protected 1650s - raises a NoMethodError if the method is private 1650s 1650s Kernel#putc 1650s - is a private instance method 1650s 1650s Kernel.putc 1650s - calls #to_int to convert an object to an Integer 1650s - raises IOError on a closed stream 1650s - raises a TypeError when passed nil 1650s - raises a TypeError when passed false 1650s - raises a TypeError when passed true 1650s 1650s Kernel.putc with an Integer argument 1650s - writes one character as a String 1650s - writes the low byte as a String 1650s 1650s Kernel.putc with a String argument 1650s - writes one character 1650s - writes the first character 1650s 1650s Kernel#putc 1650s - calls #to_int to convert an object to an Integer 1650s - raises IOError on a closed stream 1650s - raises a TypeError when passed nil 1650s - raises a TypeError when passed false 1650s - raises a TypeError when passed true 1650s 1650s Kernel#putc with an Integer argument 1650s - writes one character as a String 1650s - writes the low byte as a String 1650s 1650s Kernel#putc with a String argument 1650s - writes one character 1650s - writes the first character 1650s 1650s Kernel#puts 1650s - is a private method 1650s - delegates to $stdout.puts 1650s 1650s Kernel.puts 1650s - needs to be reviewed for spec completeness 1650s 1650s Kernel#raise 1650s - is a private method 1650s - re-raises the previously rescued exception if no exception is specified 1650s - accepts a cause keyword argument that sets the cause 1650s - accepts a cause keyword argument that overrides the last exception 1650s - raises an ArgumentError when only cause is given 1650s 1650s Kernel#raise 1650s - aborts execution 1650s - accepts an exception that implements to_hash 1650s - allows the message parameter to be a hash 1650s - allows extra keyword arguments for compatibility 1650s - does not allow message and extra keyword arguments 1650s - raises RuntimeError if no exception class is given 1650s - raises a given Exception instance 1650s - raises a RuntimeError if string given 1650s - passes no arguments to the constructor when given only an exception class 1650s - raises a TypeError when passed a non-Exception object 1650s - raises a TypeError when passed true 1650s - raises a TypeError when passed false 1650s - raises a TypeError when passed nil 1650s - re-raises a previously rescued exception without overwriting the backtrace 1650s - allows Exception, message, and backtrace parameters 1650s 1650s Kernel.raise 1650s - needs to be reviewed for spec completeness 1650s 1650s Kernel#rand 1650s - is a private method 1650s - returns a float if no argument is passed 1650s - returns an integer for an integer argument 1650s - returns an integer for a float argument greater than 1 1650s - returns a float for an argument between -1 and 1 1650s - ignores the sign of the argument 1650s - never returns a value greater or equal to 1.0 with no arguments 1650s - never returns a value greater or equal to any passed in max argument 1650s - calls to_int on its argument 1650s - returns a numeric for an range argument where max is < 1 1650s - returns nil when range is backwards 1650s - returns the range start/end when Float range is 0 1650s - returns the range start/end when Integer range is 0 1650s - supports custom object types 1654s - is random on boot 1654s 1654s Kernel#rand given an exclusive range 1654s - returns an Integer between the two Integers 1654s - returns a Float between the given Integer and Float 1654s - returns a Float between the given Float and Integer 1654s - returns a Float between the two given Floats 1654s 1654s Kernel#rand given an inclusive range 1654s - returns an Integer between the two Integers 1654s - returns a Float between the given Integer and Float 1654s - returns a Float between the given Float and Integer 1654s - returns a Float between the two given Floats 1654s 1654s Kernel#rand given an inclusive range between 0 and 1 1654s - returns an Integer between the two Integers 1654s - returns a Float if at least one side is Float 1654s 1654s Kernel#rand given an exclusive range between 0 and 1 1654s - returns zero as an Integer 1654s - returns a Float if at least one side is Float 1654s 1654s Kernel.rand 1654s - needs to be reviewed for spec completeness 1654s 1654s Kernel#readline 1654s - is a private method 1654s 1654s Kernel.readline 1654s - needs to be reviewed for spec completeness 1654s 1654s Kernel#readlines 1654s - is a private method 1654s 1654s Kernel.readlines 1654s - needs to be reviewed for spec completeness 1654s 1654s Kernel#remove_instance_variable 1654s - is a public method 1654s - raises a NameError if the instance variable is not defined 1654s - raises a NameError if the argument is not a valid instance variable name 1654s - raises a TypeError if passed an Object not defining #to_str 1654s 1654s Kernel#remove_instance_variable when passed a String 1654s - returns the instance variable's value 1654s - removes the instance variable 1654s 1654s Kernel#remove_instance_variable when passed a Symbol 1654s - returns the instance variable's value 1654s - removes the instance variable 1654s 1654s Kernel#remove_instance_variable when passed an Object 1654s - calls #to_str to convert the argument 1654s 1654s Kernel#require_relative with a relative path 1654s - loads a path relative to the current file 1654s - loads a file defining many methods 1654s - raises a LoadError if the file does not exist 1654s - raises a LoadError that includes the missing path 1654s - raises a LoadError if basepath does not exist 1654s - stores the missing path in a LoadError object 1654s - calls #to_str on non-String objects 1654s - raises a TypeError if argument does not respond to #to_str 1654s - raises a TypeError if passed an object that has #to_s but not #to_str 1654s - raises a TypeError if #to_str does not return a String 1654s - calls #to_path on non-String objects 1654s - calls #to_str on non-String objects returned by #to_path 1654s 1654s Kernel#require_relative with a relative path when file is a symlink 1654s - loads a path relative to current file 1654s 1654s Kernel#require_relative with a relative path in an #instance_eval with a 1654s - absolute file path loads a path relative to the absolute path 1654s - absolute file path loads a path relative to the root directory 1654s 1654s Kernel#require_relative with a relative path (file extensions) 1654s - loads a .rb extensioned file when passed a non-extensioned path 1654s - loads a .rb extensioned file when a C-extension file of the same name is loaded 1655s - does not load a C-extension file if a .rb extensioned file is already loaded 1655s - loads a .rb extensioned file when passed a non-.rb extensioned path 1655s - loads a .rb extensioned file when a complex-extensioned C-extension file of the same name is loaded 1655s - does not load a C-extension file if a complex-extensioned .rb file is already loaded 1655s 1655s Kernel#require_relative with a relative path ($LOADED_FEATURES) 1655s - stores an absolute path 1655s - does not store the path if the load fails 1655s - does not load an absolute path that is already stored 1655s - adds the suffix of the resolved filename 1655s - loads a path for a file already loaded with a relative path 1655s 1655s Kernel#require_relative with a relative path ($LOADED_FEATURES) with symlinks 1655s - stores the same path that __FILE__ returns in the required file 1655s 1655s Kernel#require_relative with an absolute path 1655s - loads a path relative to the current file 1655s - loads a file defining many methods 1655s - raises a LoadError if the file does not exist 1655s - raises a LoadError if basepath does not exist 1655s - stores the missing path in a LoadError object 1655s - calls #to_str on non-String objects 1655s - raises a TypeError if argument does not respond to #to_str 1655s - raises a TypeError if passed an object that has #to_s but not #to_str 1655s - raises a TypeError if #to_str does not return a String 1655s - calls #to_path on non-String objects 1655s - calls #to_str on non-String objects returned by #to_path 1655s 1655s Kernel#require_relative with an absolute path (file extensions) 1655s - loads a .rb extensioned file when passed a non-extensioned path 1655s - loads a .rb extensioned file when a C-extension file of the same name is loaded 1655s - does not load a C-extension file if a .rb extensioned file is already loaded 1655s - loads a .rb extensioned file when passed a non-.rb extensioned path 1655s - loads a .rb extensioned file when a complex-extensioned C-extension file of the same name is loaded 1655s - does not load a C-extension file if a complex-extensioned .rb file is already loaded 1655s 1655s Kernel#require_relative with an absolute path ($LOAD_FEATURES) 1655s - stores an absolute path 1655s - does not store the path if the load fails 1655s - does not load an absolute path that is already stored 1655s - adds the suffix of the resolved filename 1655s - loads a path for a file already loaded with a relative path 1655s 1655s Kernel#require 1655s - is a private method 1655s - stores the missing path in a LoadError object 1655s 1655s Kernel#require (path resolution) 1655s - loads an absolute path 1655s - loads a non-canonical absolute path 1655s - loads a file defining many methods 1655s - raises a LoadError if the file does not exist 1655s - calls #to_str on non-String objects 1655s - raises a TypeError if passed nil 1655s - raises a TypeError if passed an Integer 1655s - raises a TypeError if passed an Array 1655s - raises a TypeError if passed an object that does not provide #to_str 1655s - raises a TypeError if passed an object that has #to_s but not #to_str 1655s - raises a TypeError if #to_str does not return a String 1655s - calls #to_path on non-String objects 1655s - calls #to_path on a String 1655s - calls #to_str on non-String objects returned by #to_path 1655s - loads a ./ relative path from the current working directory with empty $LOAD_PATH 1655s - loads a ../ relative path from the current working directory with empty $LOAD_PATH 1655s - loads a ./ relative path from the current working directory with non-empty $LOAD_PATH 1655s - loads a ../ relative path from the current working directory with non-empty $LOAD_PATH 1655s - loads a non-canonical path from the current working directory with non-empty $LOAD_PATH 1655s - resolves a filename against $LOAD_PATH entries 1655s - accepts an Object with #to_path in $LOAD_PATH 1655s - does not require file twice after $LOAD_PATH change 1655s - does not resolve a ./ relative path against $LOAD_PATH entries 1655s - does not resolve a ../ relative path against $LOAD_PATH entries 1655s - resolves a non-canonical path against $LOAD_PATH entries 1655s - loads a path with duplicate path separators 1655s 1655s Kernel#require (path resolution) with an unreadable file 1655s - raises a LoadError 1655s 1655s Kernel#require (path resolution) 1655s - loads .rb file when passed absolute path without extension 1655s - does not try an extra .rb if the path already ends in .rb 1655s - does not load a bare filename unless the current working directory is in $LOAD_PATH 1655s - does not load a relative path unless the current working directory is in $LOAD_PATH 1655s - loads a file that recursively requires itself 1655s - loads a file concurrently 1655s 1655s Kernel#require (non-extensioned path) 1655s - loads a .rb extensioned file when a C-extension file exists on an earlier load path 1655s - does not load a feature twice when $LOAD_PATH has been modified 1655s 1655s Kernel#require (file extensions) 1655s - loads a .rb extensioned file when passed a non-extensioned path 1655s - loads a .rb extensioned file when a C-extension file of the same name is loaded 1655s - does not load a C-extension file if a .rb extensioned file is already loaded 1655s - loads a .rb extensioned file when passed a non-.rb extensioned path 1655s - loads a .rb extensioned file when a complex-extensioned C-extension file of the same name is loaded 1655s - does not load a C-extension file if a complex-extensioned .rb file is already loaded 1655s 1655s Kernel#require ($LOADED_FEATURES) 1655s - stores an absolute path 1655s - does not store the path if the load fails 1655s - does not load an absolute path that is already stored 1655s - does not load a ./ relative path that is already stored 1655s - does not load a ../ relative path that is already stored 1655s - does not load a non-canonical path that is already stored 1655s - respects being replaced with a new array 1655s - does not load twice the same file with and without extension 1655s - stores ../ relative paths as absolute paths 1655s - stores ./ relative paths as absolute paths 1655s - collapses duplicate path separators 1655s - expands absolute paths containing .. 1655s - adds the suffix of the resolved filename 1655s - does not load a non-canonical path for a file already loaded 1655s - does not load a ./ relative path for a file already loaded 1655s - does not load a ../ relative path for a file already loaded 1655s - does not load a file earlier on the $LOAD_PATH when other similar features were already loaded 1655s 1655s Kernel#require ($LOADED_FEATURES) with symlinks 1655s - stores the same path that __FILE__ returns in the required file 1655s - requires only once when a new matching file added to path 1655s 1655s Kernel#require ($LOADED_FEATURES) when a non-extensioned file is in $LOADED_FEATURES 1655s - loads a .rb extensioned file when a non extensioned file is in $LOADED_FEATURES 1655s - loads a .rb extensioned file from a subdirectory 1655s - returns false if the file is not found 1655s - returns false when passed a path and the file is not found 1655s 1655s Kernel#require (shell expansion) 1655s - performs tilde expansion on a .rb file before storing paths in $LOADED_FEATURES 1655s - performs tilde expansion on a non-extensioned file before storing paths in $LOADED_FEATURES 1655s 1655s Kernel#require (concurrently) 1655s - blocks a second thread from returning while the 1st is still requiring 1655s - blocks based on the path 1655s - allows a 2nd require if the 1st raised an exception 1655s - blocks a 3rd require if the 1st raises an exception and the 2nd is still running 1655s 1655s Kernel.require 1655s - stores the missing path in a LoadError object 1655s 1655s Kernel.require (path resolution) 1655s - loads an absolute path 1655s - loads a non-canonical absolute path 1655s - loads a file defining many methods 1655s - raises a LoadError if the file does not exist 1655s - calls #to_str on non-String objects 1655s - raises a TypeError if passed nil 1655s - raises a TypeError if passed an Integer 1655s - raises a TypeError if passed an Array 1655s - raises a TypeError if passed an object that does not provide #to_str 1655s - raises a TypeError if passed an object that has #to_s but not #to_str 1655s - raises a TypeError if #to_str does not return a String 1655s - calls #to_path on non-String objects 1655s - calls #to_path on a String 1655s - calls #to_str on non-String objects returned by #to_path 1655s - loads a ./ relative path from the current working directory with empty $LOAD_PATH 1655s - loads a ../ relative path from the current working directory with empty $LOAD_PATH 1655s - loads a ./ relative path from the current working directory with non-empty $LOAD_PATH 1655s - loads a ../ relative path from the current working directory with non-empty $LOAD_PATH 1655s - loads a non-canonical path from the current working directory with non-empty $LOAD_PATH 1655s - resolves a filename against $LOAD_PATH entries 1655s - accepts an Object with #to_path in $LOAD_PATH 1655s - does not require file twice after $LOAD_PATH change 1655s - does not resolve a ./ relative path against $LOAD_PATH entries 1655s - does not resolve a ../ relative path against $LOAD_PATH entries 1655s - resolves a non-canonical path against $LOAD_PATH entries 1655s - loads a path with duplicate path separators 1655s 1655s Kernel.require (path resolution) with an unreadable file 1655s - raises a LoadError 1655s 1655s Kernel.require (path resolution) 1655s - loads .rb file when passed absolute path without extension 1655s - does not try an extra .rb if the path already ends in .rb 1655s - does not load a bare filename unless the current working directory is in $LOAD_PATH 1655s - does not load a relative path unless the current working directory is in $LOAD_PATH 1655s - loads a file that recursively requires itself 1655s - loads a file concurrently 1655s 1655s Kernel.require (non-extensioned path) 1655s - loads a .rb extensioned file when a C-extension file exists on an earlier load path 1655s - does not load a feature twice when $LOAD_PATH has been modified 1655s 1655s Kernel.require (file extensions) 1655s - loads a .rb extensioned file when passed a non-extensioned path 1655s - loads a .rb extensioned file when a C-extension file of the same name is loaded 1655s - does not load a C-extension file if a .rb extensioned file is already loaded 1655s - loads a .rb extensioned file when passed a non-.rb extensioned path 1655s - loads a .rb extensioned file when a complex-extensioned C-extension file of the same name is loaded 1655s - does not load a C-extension file if a complex-extensioned .rb file is already loaded 1655s 1655s Kernel.require ($LOADED_FEATURES) 1655s - stores an absolute path 1655s - does not store the path if the load fails 1655s - does not load an absolute path that is already stored 1655s - does not load a ./ relative path that is already stored 1655s - does not load a ../ relative path that is already stored 1655s - does not load a non-canonical path that is already stored 1655s - respects being replaced with a new array 1655s - does not load twice the same file with and without extension 1655s - stores ../ relative paths as absolute paths 1655s - stores ./ relative paths as absolute paths 1656s - collapses duplicate path separators 1656s - expands absolute paths containing .. 1656s - adds the suffix of the resolved filename 1656s - does not load a non-canonical path for a file already loaded 1656s - does not load a ./ relative path for a file already loaded 1656s - does not load a ../ relative path for a file already loaded 1656s - does not load a file earlier on the $LOAD_PATH when other similar features were already loaded 1656s 1656s Kernel.require ($LOADED_FEATURES) with symlinks 1656s - stores the same path that __FILE__ returns in the required file 1656s - requires only once when a new matching file added to path 1656s 1656s Kernel.require ($LOADED_FEATURES) when a non-extensioned file is in $LOADED_FEATURES 1656s - loads a .rb extensioned file when a non extensioned file is in $LOADED_FEATURES 1656s - loads a .rb extensioned file from a subdirectory 1656s - returns false if the file is not found 1656s - returns false when passed a path and the file is not found 1656s 1656s Kernel.require (shell expansion) 1656s - performs tilde expansion on a .rb file before storing paths in $LOADED_FEATURES 1656s - performs tilde expansion on a non-extensioned file before storing paths in $LOADED_FEATURES 1656s 1656s Kernel.require (concurrently) 1656s - blocks a second thread from returning while the 1st is still requiring 1656s - blocks based on the path 1656s - allows a 2nd require if the 1st raised an exception 1656s - blocks a 3rd require if the 1st raises an exception and the 2nd is still running 1656s 1656s Kernel#respond_to_missing? 1656s - is a private method 1656s - is only an instance method 1656s - is not called when #respond_to? would return true 1656s - is called with a 2nd argument of false when #respond_to? is 1656s - is called a 2nd argument of false when #respond_to? is called with only 1 argument 1656s - is called with true as the second argument when #respond_to? is 1656s - is called when #respond_to? would return false 1656s - causes #respond_to? to return true if called and not returning false 1656s - causes #respond_to? to return false if called and returning false 1656s - causes #respond_to? to return false if called and returning nil 1656s - isn't called when obj responds to the given public method 1656s - isn't called when obj responds to the given public method, include_private = true 1656s - is called when obj responds to the given protected method, include_private = false 1656s - isn't called when obj responds to the given protected method, include_private = true 1656s - is called when obj responds to the given private method, include_private = false 1656s - isn't called when obj responds to the given private method, include_private = true 1656s - is called for missing class methods 1656s 1656s Kernel#respond_to? 1656s - is a public method 1656s - is only an instance method 1656s - returns false if the given method was undefined 1656s - returns true if obj responds to the given public method 1656s - throws a type error if argument can't be coerced into a Symbol 1656s - returns false if obj responds to the given protected method 1656s - returns false if obj responds to the given private method 1656s - returns true if obj responds to the given protected method (include_private = true) 1656s - returns false if obj responds to the given protected method (include_private = false) 1656s - returns false even if obj responds to the given private method (include_private = false) 1656s - returns true if obj responds to the given private method (include_private = true) 1656s - does not change method visibility when finding private method 1656s - indicates if an object responds to a particular message 1656s 1656s Kernel#select 1656s - is a private method 1656s 1656s Kernel.select 1656s - does not block when timeout is 0 1656s 1656s Kernel#send 1656s - invokes the named public method 1656s - invokes the named alias of a public method 1656s - invokes the named protected method 1656s - invokes the named private method 1656s - invokes the named alias of a private method 1656s - invokes the named alias of a protected method 1656s - invokes the named method 1656s - accepts a String method name 1656s - invokes a class method if called on a class 1656s - raises a TypeError if the method name is not a string or symbol 1656s - raises a NameError if the corresponding method can't be found 1656s - raises a NameError if the corresponding singleton method can't be found 1656s - raises an ArgumentError if no arguments are given 1656s - raises an ArgumentError if called with more arguments than available parameters 1656s - raises an ArgumentError if called with fewer arguments than required parameters 1656s - succeeds if passed an arbitrary number of arguments as a splat parameter 1656s - succeeds when passing 1 or more arguments as a required and a splat parameter 1656s - succeeds when passing 0 arguments to a method with one parameter with a default 1656s - has a negative arity 1656s - invokes module methods with super correctly 1656s 1656s Kernel#set_trace_func 1656s - is a private method 1656s 1656s Kernel.set_trace_func 1656s - needs to be reviewed for spec completeness 1656s 1656s Kernel#singleton_class 1656s - returns class extended from an object 1656s - returns NilClass for nil 1656s - returns TrueClass for true 1656s - returns FalseClass for false 1656s - raises TypeError for Integer 1656s - raises TypeError for Float 1656s - raises TypeError for Symbol 1656s - returns a frozen singleton class if object is frozen 1656s 1656s Kernel#singleton_method 1656s - find a method defined on the singleton class 1656s - returns a Method which can be called 1656s - only looks at singleton methods and not at methods in the class 1656s - raises a NameError if there is no such method 1656s 1656s Kernel#singleton_methods when not passed an argument 1656s - returns an empty Array for an object with no singleton methods 1656s - returns the names of module methods for a module 1656s - does not return private module methods for a module 1656s - returns the names of class methods for a class 1656s - does not return private class methods for a class 1656s - returns the names of singleton methods for an object 1656s - returns the names of singleton methods for an object extended with a module 1656s - returns a unique list for an object extended with a module 1656s - returns the names of singleton methods for an object extended with two modules 1656s - returns the names of singleton methods for an object extended with a module including a module 1656s - returns the names of inherited singleton methods for a subclass 1656s - returns a unique list for a subclass 1656s - returns the names of inherited singleton methods for a subclass including a module 1656s - returns a unique list for a subclass including a module 1656s - returns the names of inherited singleton methods for a subclass of a class including a module 1656s - returns the names of inherited singleton methods for a subclass of a class that includes a module, where the subclass also includes a module 1656s - returns the names of inherited singleton methods for a class extended with a module 1656s - does not return any included methods for a module including a module 1656s - does not return any included methods for a class including a module 1656s - for a module does not return methods in a module prepended to Module itself 1656s - does not return private singleton methods for an object extended with a module 1656s - does not return private singleton methods for an object extended with two modules 1656s - does not return private singleton methods for an object extended with a module including a module 1656s - does not return private singleton methods for a class extended with a module 1656s - does not return private inherited singleton methods for a module including a module 1656s - does not return private inherited singleton methods for a class including a module 1656s - does not return private inherited singleton methods for a subclass 1656s - does not return private inherited singleton methods for a subclass including a module 1656s - does not return private inherited singleton methods for a subclass of a class including a module 1656s - does not return private inherited singleton methods for a subclass of a class that includes a module, where the subclass also includes a module 1656s 1656s Kernel#singleton_methods when passed true 1656s - returns an empty Array for an object with no singleton methods 1656s - returns the names of module methods for a module 1656s - does not return private module methods for a module 1656s - returns the names of class methods for a class 1656s - does not return private class methods for a class 1656s - returns the names of singleton methods for an object 1656s - returns the names of singleton methods for an object extended with a module 1656s - returns a unique list for an object extended with a module 1656s - returns the names of singleton methods for an object extended with two modules 1656s - returns the names of singleton methods for an object extended with a module including a module 1656s - returns the names of inherited singleton methods for a subclass 1656s - returns a unique list for a subclass 1656s - returns the names of inherited singleton methods for a subclass including a module 1656s - returns a unique list for a subclass including a module 1656s - returns the names of inherited singleton methods for a subclass of a class including a module 1656s - returns the names of inherited singleton methods for a subclass of a class that includes a module, where the subclass also includes a module 1656s - returns the names of inherited singleton methods for a class extended with a module 1656s - does not return any included methods for a module including a module 1656s - does not return any included methods for a class including a module 1656s - for a module does not return methods in a module prepended to Module itself 1656s - does not return private singleton methods for an object extended with a module 1656s - does not return private singleton methods for an object extended with two modules 1656s - does not return private singleton methods for an object extended with a module including a module 1656s - does not return private singleton methods for a class extended with a module 1656s - does not return private inherited singleton methods for a module including a module 1656s - does not return private inherited singleton methods for a class including a module 1656s - does not return private inherited singleton methods for a subclass 1656s - does not return private inherited singleton methods for a subclass including a module 1656s - does not return private inherited singleton methods for a subclass of a class including a module 1656s - does not return private inherited singleton methods for a subclass of a class that includes a module, where the subclass also includes a module 1656s 1656s Kernel#singleton_methods when passed false 1656s - returns an empty Array for an object with no singleton methods 1656s - returns the names of module methods for a module 1656s - does not return private module methods for a module 1656s - returns the names of class methods for a class 1656s - does not return private class methods for a class 1656s - returns the names of singleton methods for an object 1656s - does not return any included methods for a module including a module 1656s - does not return any included methods for a class including a module 1656s - for a module does not return methods in a module prepended to Module itself 1656s - does not return private singleton methods for an object extended with a module 1656s - does not return private singleton methods for an object extended with two modules 1656s - does not return private singleton methods for an object extended with a module including a module 1656s - does not return private singleton methods for a class extended with a module 1656s - does not return private inherited singleton methods for a module including a module 1656s - does not return private inherited singleton methods for a class including a module 1656s - does not return private inherited singleton methods for a subclass 1656s - does not return private inherited singleton methods for a subclass including a module 1656s - does not return private inherited singleton methods for a subclass of a class including a module 1656s - does not return private inherited singleton methods for a subclass of a class that includes a module, where the subclass also includes a module 1656s - returns an empty Array for an object extended with a module 1656s - returns an empty Array for an object extended with two modules 1656s - returns an empty Array for an object extended with a module including a module 1656s - returns the names of singleton methods of the subclass 1656s - does not return names of inherited singleton methods for a subclass 1656s - does not return the names of inherited singleton methods for a class extended with a module 1656s 1656s Kernel#sleep 1656s - is a private method 1656s - returns an Integer 1656s - accepts a Float 1656s - accepts an Integer 1656s - accepts a Rational 1656s - accepts any Object that reponds to divmod 1656s - raises an ArgumentError when passed a negative duration 1656s - raises a TypeError when passed a String 1656s - pauses execution indefinitely if not given a duration 1656s - raises a TypeError when passed nil 1656s 1656s Kernel.sleep 1656s - needs to be reviewed for spec completeness 1656s 1656s Kernel#spawn 1656s - is a private method 1656s - executes the given command 1656s 1656s Kernel.spawn 1656s - executes the given command 1656s 1656s Kernel#sprintf 1656s - does not raise error when passed more arguments than needed 1656s - can produce a string with valid encoding 1656s - can produce a string with invalid encoding 1656s - returns a String in the same encoding as the format String if compatible 1656s - returns a String in the argument's encoding if format encoding is more restrictive 1656s - raises Encoding::CompatibilityError if both encodings are ASCII compatible and there are not ASCII characters 1656s - calls #to_str to convert the format object to a String 1656s 1656s Kernel#sprintf integer formats 1656s - converts argument into Integer with to_int 1656s - converts argument into Integer with to_i if to_int isn't available 1656s - converts String argument with Kernel#Integer 1656s - raises TypeError exception if cannot convert to Integer 1656s 1656s Kernel#sprintf integer formats b 1656s - converts argument as a binary number 1656s - displays negative number as a two's complement prefixed with '..1' 1656s - collapse negative number representation if it equals 1 1656s 1656s Kernel#sprintf integer formats B 1656s - converts argument as a binary number 1656s - displays negative number as a two's complement prefixed with '..1' 1656s - collapse negative number representation if it equals 1 1656s 1656s Kernel#sprintf integer formats d 1656s - converts argument as a decimal number 1656s - works well with large numbers 1656s 1656s Kernel#sprintf integer formats i 1656s - converts argument as a decimal number 1656s - works well with large numbers 1656s 1656s Kernel#sprintf integer formats u 1656s - converts argument as a decimal number 1656s - works well with large numbers 1656s 1656s Kernel#sprintf integer formats o 1656s - converts argument as an octal number 1656s - displays negative number as a two's complement prefixed with '..7' 1656s - collapse negative number representation if it equals 7 1656s 1656s Kernel#sprintf integer formats x 1656s - converts argument as a hexadecimal number 1656s - displays negative number as a two's complement prefixed with '..f' 1656s - collapse negative number representation if it equals f 1656s 1656s Kernel#sprintf integer formats X 1656s - converts argument as a hexadecimal number with uppercase letters 1656s - displays negative number as a two's complement prefixed with '..f' 1656s - collapse negative number representation if it equals F 1656s 1656s Kernel#sprintf float formats 1656s - converts argument into Float 1656s - raises TypeError exception if cannot convert to Float 1656s 1656s Kernel#sprintf float formats e 1656s - converts argument into exponential notation [-]d.dddddde[+-]dd 1656s - cuts excessive digits and keeps only 6 ones 1656s - rounds the last significant digit to the closest one 1656s - displays Float::INFINITY as Inf 1656s - displays Float::NAN as NaN 1656s 1656s Kernel#sprintf float formats E 1656s - converts argument into exponential notation [-]d.dddddde[+-]dd 1656s - cuts excessive digits and keeps only 6 ones 1656s - rounds the last significant digit to the closest one 1656s - displays Float::INFINITY as Inf 1656s - displays Float::NAN as NaN 1656s 1656s Kernel#sprintf float formats f 1656s - converts floating point argument as [-]ddd.dddddd 1656s - cuts excessive digits and keeps only 6 ones 1656s - rounds the last significant digit to the closest one 1656s - displays Float::INFINITY as Inf 1656s - displays Float::NAN as NaN 1656s 1656s Kernel#sprintf float formats g 1656s - displays Float::INFINITY as Inf 1656s - displays Float::NAN as NaN 1656s 1656s Kernel#sprintf float formats g the exponent is less than -4 1656s - converts a floating point number using exponential form 1656s 1656s Kernel#sprintf float formats g the exponent is greater than or equal to the precision (6 by default) 1656s - converts a floating point number using exponential form 1656s 1656s Kernel#sprintf float formats g otherwise 1656s - converts a floating point number in dd.dddd form 1656s - cuts excessive digits in fractional part and keeps only 4 ones 1656s - rounds the last significant digit to the closest one in fractional part 1656s - cuts fraction part to have only 6 digits at all 1656s 1656s Kernel#sprintf float formats G 1656s - displays Float::INFINITY as Inf 1656s - displays Float::NAN as NaN 1656s 1656s Kernel#sprintf float formats G the exponent is less than -4 1656s - converts a floating point number using exponential form 1656s 1656s Kernel#sprintf float formats G the exponent is greater than or equal to the precision (6 by default) 1656s - converts a floating point number using exponential form 1656s 1656s Kernel#sprintf float formats G otherwise 1656s - converts a floating point number in dd.dddd form 1656s - cuts excessive digits in fractional part and keeps only 4 ones 1656s - rounds the last significant digit to the closest one in fractional part 1656s - cuts fraction part to have only 6 digits at all 1656s 1656s Kernel#sprintf float formats a 1656s - converts floating point argument as [-]0xh.hhhhp[+-]dd 1656s - displays Float::INFINITY as Inf 1656s - displays Float::NAN as NaN 1656s 1656s Kernel#sprintf float formats A 1656s - converts floating point argument as [-]0xh.hhhhp[+-]dd and use uppercase X and P 1656s - displays Float::INFINITY as Inf 1656s - displays Float::NAN as NaN 1656s 1656s Kernel#sprintf other formats c 1656s - displays character if argument is a numeric code of character 1656s - displays character if argument is a single character string 1656s - raises ArgumentError if argument is a string of several characters 1656s - raises ArgumentError if argument is an empty string 1656s - raises TypeError if argument is not String or Integer and cannot be converted to them 1656s - raises TypeError if argument is nil 1656s - tries to convert argument to String with to_str 1656s - tries to convert argument to Integer with to_int 1656s - raises TypeError if converting to String with to_str returns non-String 1656s - raises TypeError if converting to Integer with to_int returns non-Integer 1656s 1656s Kernel#sprintf other formats p 1656s - displays argument.inspect value 1656s 1656s Kernel#sprintf other formats s 1656s - substitute argument passes as a string 1656s - substitutes '' for nil 1656s - converts argument to string with to_s 1656s - does not try to convert with to_str 1656s - formats a partial substring without including omitted characters 1656s - formats string with precision 1656s - formats string with width 1656s - formats string with width and precision 1656s - formats nil with width 1656s - formats nil with precision 1656s - formats nil with width and precision 1656s - formats multibyte string with precision 1656s - preserves encoding of the format string 1656s 1656s Kernel#sprintf other formats % 1656s - alone raises an ArgumentError 1656s - is escaped by % 1656s 1656s Kernel#sprintf flags space applies to numeric formats bBdiouxXeEfgGaA 1656s - leaves a space at the start of non-negative numbers 1656s - does not leave a space at the start of negative numbers 1656s - prevents converting negative argument to two's complement form 1656s - treats several white spaces as one 1656s 1656s Kernel#sprintf flags (digit)$ 1656s - specifies the absolute argument number for this field 1656s - raises exception if argument number is bigger than actual arguments list 1656s - ignores '-' sign 1656s - raises ArgumentError exception when absolute and relative argument numbers are mixed 1656s 1656s Kernel#sprintf flags # applies to format o 1656s - increases the precision until the first digit will be `0' if it is not formatted as complements 1656s - does nothing for negative argument 1656s 1656s Kernel#sprintf flags # applies to formats bBxX 1656s - prefixes the result with 0x, 0X, 0b and 0B respectively for non-zero argument 1656s - does nothing for zero argument 1656s 1656s Kernel#sprintf flags # applies to formats aAeEfgG 1656s - forces a decimal point to be added, even if no digits follow 1656s - changes format from dd.dddd to exponential form for gG 1656s 1656s Kernel#sprintf flags # applies to gG 1656s - does not remove trailing zeros 1656s 1656s Kernel#sprintf flags + applies to numeric formats bBdiouxXaAeEfgG 1656s - adds a leading plus sign to non-negative numbers 1656s - does not use two's complement form for negative numbers for formats bBoxX 1656s 1656s Kernel#sprintf flags - 1656s - left-justifies the result of conversion if width is specified 1656s 1656s Kernel#sprintf flags 0 (zero) applies to numeric formats bBdiouxXaAeEfgG and width is specified 1656s - pads with zeros, not spaces 1656s - uses radix-1 when displays negative argument as a two's complement 1656s 1656s Kernel#sprintf flags * 1656s - uses the previous argument as the field width 1656s - left-justifies the result if width is negative 1656s - uses the specified argument as the width if * is followed by a number and $ 1656s - left-justifies the result if specified with $ argument is negative 1656s - raises ArgumentError when is mixed with width 1656s 1656s Kernel#sprintf width 1656s - specifies the minimum number of characters that will be written to the result 1656s - is ignored if argument's actual length is greater 1656s 1656s Kernel#sprintf precision integer types 1656s - controls the number of decimal places displayed 1656s 1656s Kernel#sprintf precision float types 1656s - controls the number of decimal places displayed in fraction part 1656s - does not affect G format 1656s 1656s Kernel#sprintf precision string formats 1656s - determines the maximum number of characters to be copied from the string 1656s 1656s Kernel#sprintf reference by name %s style 1656s - uses value passed in a hash argument 1656s - supports flags, width, precision and type 1656s - allows to place name in any position 1656s - cannot be mixed with unnamed style 1656s 1656s Kernel#sprintf reference by name %{name} style 1656s - uses value passed in a hash argument 1656s - does not support type style 1656s - supports flags, width and precision 1656s - cannot be mixed with unnamed style 1656s - raises KeyError when there is no matching key 1656s - converts value to String with to_s 1656s 1656s Kernel#sprintf faulty key 1656s - raises a KeyError 1656s - sets the Hash as the receiver of KeyError 1656s - sets the unmatched key as the key of KeyError 1656s 1656s Kernel#sprintf %c 1656s - supports Unicode characters 1656s - raises error when a codepoint isn't representable in an encoding of a format string 1656s - uses the encoding of the format string to interpret codepoints 1656s 1656s Kernel.sprintf 1656s - does not raise error when passed more arguments than needed 1656s - can produce a string with valid encoding 1656s - can produce a string with invalid encoding 1656s - returns a String in the same encoding as the format String if compatible 1656s - returns a String in the argument's encoding if format encoding is more restrictive 1656s - raises Encoding::CompatibilityError if both encodings are ASCII compatible and there are not ASCII characters 1656s - calls #to_str to convert the format object to a String 1656s 1656s Kernel.sprintf integer formats 1656s - converts argument into Integer with to_int 1656s - converts argument into Integer with to_i if to_int isn't available 1656s - converts String argument with Kernel#Integer 1656s - raises TypeError exception if cannot convert to Integer 1656s 1656s Kernel.sprintf integer formats b 1656s - converts argument as a binary number 1656s - displays negative number as a two's complement prefixed with '..1' 1656s - collapse negative number representation if it equals 1 1656s 1656s Kernel.sprintf integer formats B 1656s - converts argument as a binary number 1656s - displays negative number as a two's complement prefixed with '..1' 1656s - collapse negative number representation if it equals 1 1656s 1656s Kernel.sprintf integer formats d 1656s - converts argument as a decimal number 1656s - works well with large numbers 1656s 1656s Kernel.sprintf integer formats i 1656s - converts argument as a decimal number 1656s - works well with large numbers 1656s 1656s Kernel.sprintf integer formats u 1656s - converts argument as a decimal number 1656s - works well with large numbers 1656s 1656s Kernel.sprintf integer formats o 1656s - converts argument as an octal number 1656s - displays negative number as a two's complement prefixed with '..7' 1656s - collapse negative number representation if it equals 7 1656s 1656s Kernel.sprintf integer formats x 1656s - converts argument as a hexadecimal number 1656s - displays negative number as a two's complement prefixed with '..f' 1656s - collapse negative number representation if it equals f 1656s 1656s Kernel.sprintf integer formats X 1656s - converts argument as a hexadecimal number with uppercase letters 1656s - displays negative number as a two's complement prefixed with '..f' 1656s - collapse negative number representation if it equals F 1656s 1656s Kernel.sprintf float formats 1656s - converts argument into Float 1656s - raises TypeError exception if cannot convert to Float 1656s 1656s Kernel.sprintf float formats e 1656s - converts argument into exponential notation [-]d.dddddde[+-]dd 1656s - cuts excessive digits and keeps only 6 ones 1656s - rounds the last significant digit to the closest one 1656s - displays Float::INFINITY as Inf 1656s - displays Float::NAN as NaN 1656s 1656s Kernel.sprintf float formats E 1656s - converts argument into exponential notation [-]d.dddddde[+-]dd 1656s - cuts excessive digits and keeps only 6 ones 1656s - rounds the last significant digit to the closest one 1656s - displays Float::INFINITY as Inf 1656s - displays Float::NAN as NaN 1656s 1656s Kernel.sprintf float formats f 1656s - converts floating point argument as [-]ddd.dddddd 1656s - cuts excessive digits and keeps only 6 ones 1656s - rounds the last significant digit to the closest one 1656s - displays Float::INFINITY as Inf 1656s - displays Float::NAN as NaN 1656s 1656s Kernel.sprintf float formats g 1656s - displays Float::INFINITY as Inf 1656s - displays Float::NAN as NaN 1656s 1656s Kernel.sprintf float formats g the exponent is less than -4 1656s - converts a floating point number using exponential form 1656s 1656s Kernel.sprintf float formats g the exponent is greater than or equal to the precision (6 by default) 1656s - converts a floating point number using exponential form 1656s 1656s Kernel.sprintf float formats g otherwise 1656s - converts a floating point number in dd.dddd form 1656s - cuts excessive digits in fractional part and keeps only 4 ones 1656s - rounds the last significant digit to the closest one in fractional part 1656s - cuts fraction part to have only 6 digits at all 1656s 1656s Kernel.sprintf float formats G 1656s - displays Float::INFINITY as Inf 1656s - displays Float::NAN as NaN 1656s 1656s Kernel.sprintf float formats G the exponent is less than -4 1656s - converts a floating point number using exponential form 1656s 1656s Kernel.sprintf float formats G the exponent is greater than or equal to the precision (6 by default) 1656s - converts a floating point number using exponential form 1656s 1656s Kernel.sprintf float formats G otherwise 1656s - converts a floating point number in dd.dddd form 1656s - cuts excessive digits in fractional part and keeps only 4 ones 1656s - rounds the last significant digit to the closest one in fractional part 1656s - cuts fraction part to have only 6 digits at all 1656s 1656s Kernel.sprintf float formats a 1656s - converts floating point argument as [-]0xh.hhhhp[+-]dd 1656s - displays Float::INFINITY as Inf 1656s - displays Float::NAN as NaN 1656s 1656s Kernel.sprintf float formats A 1656s - converts floating point argument as [-]0xh.hhhhp[+-]dd and use uppercase X and P 1656s - displays Float::INFINITY as Inf 1656s - displays Float::NAN as NaN 1656s 1656s Kernel.sprintf other formats c 1656s - displays character if argument is a numeric code of character 1656s - displays character if argument is a single character string 1656s - raises ArgumentError if argument is a string of several characters 1656s - raises ArgumentError if argument is an empty string 1656s - raises TypeError if argument is not String or Integer and cannot be converted to them 1656s - raises TypeError if argument is nil 1656s - tries to convert argument to String with to_str 1656s - tries to convert argument to Integer with to_int 1656s - raises TypeError if converting to String with to_str returns non-String 1656s - raises TypeError if converting to Integer with to_int returns non-Integer 1656s 1656s Kernel.sprintf other formats p 1656s - displays argument.inspect value 1656s 1656s Kernel.sprintf other formats s 1656s - substitute argument passes as a string 1656s - substitutes '' for nil 1656s - converts argument to string with to_s 1656s - does not try to convert with to_str 1656s - formats a partial substring without including omitted characters 1656s - formats string with precision 1656s - formats string with width 1656s - formats string with width and precision 1656s - formats nil with width 1656s - formats nil with precision 1656s - formats nil with width and precision 1656s - formats multibyte string with precision 1656s - preserves encoding of the format string 1656s 1656s Kernel.sprintf other formats % 1656s - alone raises an ArgumentError 1656s - is escaped by % 1656s 1656s Kernel.sprintf flags space applies to numeric formats bBdiouxXeEfgGaA 1656s - leaves a space at the start of non-negative numbers 1656s - does not leave a space at the start of negative numbers 1656s - prevents converting negative argument to two's complement form 1656s - treats several white spaces as one 1656s 1656s Kernel.sprintf flags (digit)$ 1656s - specifies the absolute argument number for this field 1656s - raises exception if argument number is bigger than actual arguments list 1656s - ignores '-' sign 1656s - raises ArgumentError exception when absolute and relative argument numbers are mixed 1656s 1656s Kernel.sprintf flags # applies to format o 1656s - increases the precision until the first digit will be `0' if it is not formatted as complements 1656s - does nothing for negative argument 1656s 1656s Kernel.sprintf flags # applies to formats bBxX 1656s - prefixes the result with 0x, 0X, 0b and 0B respectively for non-zero argument 1656s - does nothing for zero argument 1656s 1656s Kernel.sprintf flags # applies to formats aAeEfgG 1656s - forces a decimal point to be added, even if no digits follow 1656s - changes format from dd.dddd to exponential form for gG 1656s 1656s Kernel.sprintf flags # applies to gG 1656s - does not remove trailing zeros 1656s 1656s Kernel.sprintf flags + applies to numeric formats bBdiouxXaAeEfgG 1656s - adds a leading plus sign to non-negative numbers 1656s - does not use two's complement form for negative numbers for formats bBoxX 1656s 1656s Kernel.sprintf flags - 1656s - left-justifies the result of conversion if width is specified 1656s 1656s Kernel.sprintf flags 0 (zero) applies to numeric formats bBdiouxXaAeEfgG and width is specified 1656s - pads with zeros, not spaces 1656s - uses radix-1 when displays negative argument as a two's complement 1656s 1656s Kernel.sprintf flags * 1656s - uses the previous argument as the field width 1656s - left-justifies the result if width is negative 1656s - uses the specified argument as the width if * is followed by a number and $ 1656s - left-justifies the result if specified with $ argument is negative 1656s - raises ArgumentError when is mixed with width 1656s 1656s Kernel.sprintf width 1656s - specifies the minimum number of characters that will be written to the result 1656s - is ignored if argument's actual length is greater 1656s 1656s Kernel.sprintf precision integer types 1656s - controls the number of decimal places displayed 1656s 1656s Kernel.sprintf precision float types 1656s - controls the number of decimal places displayed in fraction part 1656s - does not affect G format 1656s 1656s Kernel.sprintf precision string formats 1656s - determines the maximum number of characters to be copied from the string 1656s 1656s Kernel.sprintf reference by name %s style 1656s - uses value passed in a hash argument 1656s - supports flags, width, precision and type 1656s - allows to place name in any position 1656s - cannot be mixed with unnamed style 1656s 1656s Kernel.sprintf reference by name %{name} style 1656s - uses value passed in a hash argument 1656s - does not support type style 1656s - supports flags, width and precision 1656s - cannot be mixed with unnamed style 1656s - raises KeyError when there is no matching key 1656s - converts value to String with to_s 1656s 1656s Kernel.sprintf faulty key 1656s - raises a KeyError 1656s - sets the Hash as the receiver of KeyError 1656s - sets the unmatched key as the key of KeyError 1656s 1656s Kernel.sprintf %c 1656s - supports Unicode characters 1656s - raises error when a codepoint isn't representable in an encoding of a format string 1656s - uses the encoding of the format string to interpret codepoints 1656s 1656s Kernel#srand 1656s - is a private method 1656s - returns the previous seed value 1658s - returns the system-initialized seed value on the first call 1658s - seeds the RNG correctly and repeatably 1658s - defaults number to a random value 1658s - accepts and uses a seed of 0 1658s - accepts a negative seed 1658s - accepts an Integer as a seed 1658s - calls #to_int on seed 1658s - raises a TypeError when passed nil 1658s - raises a TypeError when passed a String 1658s 1658s Kernel.srand 1658s - needs to be reviewed for spec completeness 1658s 1658s Kernel#syscall 1658s - is a private method 1658s 1658s Kernel.syscall 1658s - needs to be reviewed for spec completeness 1658s 1658s Kernel#system 1658s - is a private method 1658s - executes the specified command in a subprocess 1661s - returns true when the command exits with a zero exit status 1664s - returns false when the command exits with a non-zero exit status 1667s - raises RuntimeError when `exception: true` is given and the command exits with a non-zero exit status 1667s - raises Errno::ENOENT when `exception: true` is given and the specified command does not exist 1667s - returns nil when command execution fails 1667s - does not write to stderr when command execution fails 1667s - executes with `sh` if the command contains shell characters 1667s - ignores SHELL env var and always uses `sh` 1667s - expands shell variables when given a single string argument 1667s - does not expand shell variables when given multiples arguments 1667s 1667s Kernel.system 1667s - executes the specified command in a subprocess 1670s - returns true when the command exits with a zero exit status 1673s - returns false when the command exits with a non-zero exit status 1676s - raises RuntimeError when `exception: true` is given and the command exits with a non-zero exit status 1676s - raises Errno::ENOENT when `exception: true` is given and the specified command does not exist 1676s - returns nil when command execution fails 1676s - does not write to stderr when command execution fails 1676s - executes with `sh` if the command contains shell characters 1676s - ignores SHELL env var and always uses `sh` 1676s - expands shell variables when given a single string argument 1676s - does not expand shell variables when given multiples arguments 1676s 1676s Kernel#taint 1676s - is a no-op 1676s - warns in verbose mode 1676s 1676s Kernel#tainted? 1676s - is a no-op 1676s - warns in verbose mode 1676s 1676s Kernel#tap 1676s - always yields self and returns self 1676s - raises a LocalJumpError when no block given 1676s 1676s Kernel#test 1676s - is a private method 1676s - returns true when passed ?f if the argument is a regular file 1676s - returns true when passed ?e if the argument is a file 1676s - returns true when passed ?d if the argument is a directory 1676s - returns true when passed ?l if the argument is a symlink 1676s - returns true when passed ?r if the argument is readable by the effective uid 1676s - returns true when passed ?R if the argument is readable by the real uid 1676s - calls #to_path on second argument when passed ?f and a filename 1676s - calls #to_path on second argument when passed ?e and a filename 1676s - calls #to_path on second argument when passed ?d and a directory 1676s 1676s Kernel#test writable test 1676s - returns true when passed ?w if the argument is readable by the effective uid 1676s - returns true when passed ?W if the argument is readable by the real uid 1676s 1676s Kernel.test 1676s - needs to be reviewed for spec completeness 1676s 1676s Kernel#then 1676s - yields self 1676s - returns the block return value 1676s - returns a sized Enumerator when no block given 1676s 1676s Kernel.throw 1676s - transfers control to the end of the active catch block waiting for symbol 1676s - transfers control to the innermost catch block waiting for the same symbol 1676s - sets the return value of the catch block to nil by default 1676s - sets the return value of the catch block to a value specified as second parameter 1676s - raises an ArgumentError if there is no catch block for the symbol 1676s - raises an UncaughtThrowError if there is no catch block for the symbol 1676s - raises ArgumentError if 3 or more arguments provided 1676s - can throw an object 1676s 1676s Kernel#throw 1676s - is a private method 1676s 1676s Kernel#to_enum 1676s - needs to be reviewed for spec completeness 1676s 1676s Kernel#to_s 1676s - returns a String containing the name of self's class 1676s 1676s Kernel#trace_var 1676s - is a private method 1676s - hooks assignments to a global variable 1676s - accepts a proc argument instead of a block 1676s - raises ArgumentError if no block or proc is provided 1676s 1676s Kernel#trap 1676s - is a private method 1676s 1676s Kernel#trust 1676s - is a no-op 1676s - warns in verbose mode 1676s 1676s Kernel#untaint 1676s - is a no-op 1676s - warns in verbose mode 1676s 1676s Kernel#untrace_var 1676s - is a private method 1676s 1676s Kernel.untrace_var 1676s - needs to be reviewed for spec completeness 1676s 1676s Kernel#untrust 1676s - is a no-op 1676s - warns in verbose mode 1676s 1676s Kernel#untrusted? 1676s - is a no-op 1676s - warns in verbose mode 1676s 1676s Kernel#warn 1676s - is a private method 1676s - accepts multiple arguments 1676s - does not append line-end if last character is line-end 1676s - calls #write on $stderr if $VERBOSE is true 1676s - calls #write on $stderr if $VERBOSE is false 1676s - does not call #write on $stderr if $VERBOSE is nil 1676s - writes each argument on a line when passed multiple arguments 1676s - writes each array element on a line when passes an array 1676s - does not write strings when passed no arguments 1676s - writes the default record separator and NOT $/ to $stderr after the warning message 1676s - writes to_s representation if passed a non-string 1676s - treats empty hash as no keyword argument 1676s - calls Warning.warn without keyword arguments if Warning.warn does not accept keyword arguments 1676s - calls Warning.warn with category: nil if Warning.warn accepts keyword arguments 1676s - calls Warning.warn with given category keyword converted to a symbol 1678s - does not call Warning.warn if self is the Warning module 1680s - avoids recursion if Warning#warn is redefined and calls super 1680s 1680s Kernel#warn :uplevel keyword argument 1680s - prepends a message with specified line from the backtrace 1682s - shows the caller of #require and not #require itself without RubyGems 1685s - shows the caller of #require and not #require itself with RubyGems loaded 1689s - skips 31 bits as a Bignum 1689s - dumps a negative Fixnum > 31 bits as a Bignum 1689s 1689s Marshal.dump with a Symbol 1689s - dumps a Symbol 1689s - dumps a big Symbol 1689s - dumps an encoded Symbol 1689s 1689s Marshal.dump with an object responding to #marshal_dump 1689s - dumps the object returned by #marshal_dump 1689s - does not use Class#name 1689s 1689s Marshal.dump with an object responding to #_dump 1689s - dumps the String returned by #_dump 1689s - ignores overridden name method 1689s - raises a TypeError if _dump returns a non-string 1689s - favors marshal_dump over _dump 1689s - indexes instance variables of a String returned by #_dump at first and then indexes the object itself 1689s 1689s Marshal.dump with a Class 1689s - dumps a builtin Class 1689s - dumps a user Class 1689s - dumps a nested Class 1689s - ignores overridden name method 1689s - raises TypeError with an anonymous Class 1689s - raises TypeError with a singleton Class 1689s 1689s Marshal.dump with a Module 1689s - dumps a builtin Module 1689s - ignores overridden name method 1689s - raises TypeError with an anonymous Module 1689s 1689s Marshal.dump with a Float 1689s - dumps a Float 1689s 1689s Marshal.dump with a Bignum 1689s - dumps a Bignum 1689s - dumps a Bignum 1689s - increases the object links counter 1689s 1689s Marshal.dump with a Rational 1689s - dumps a Rational 1689s 1689s Marshal.dump with a Complex 1689s - dumps a Complex 1689s 1689s Marshal.dump with a String 1689s - dumps a blank String 1689s - dumps a short String 1689s - dumps a long String 1689s - dumps a String extended with a Module 1689s - dumps a String subclass 1689s - dumps a String subclass extended with a Module 1689s - ignores overridden name method when dumps a String subclass 1689s - dumps a String with instance variables 1689s - dumps a US-ASCII String 1689s - dumps a UTF-8 String 1689s - dumps a String in another encoding 1689s - dumps multiple strings using symlinks for the :E (encoding) symbol 1689s 1689s Marshal.dump with a Regexp 1689s - dumps a Regexp 1689s - dumps a Regexp with flags 1689s - dumps a Regexp with instance variables 1689s - dumps an extended Regexp 1689s - dumps a Regexp subclass 1689s - dumps a binary Regexp 1689s - dumps an ascii-compatible Regexp 1689s - dumps a UTF-8 Regexp 1689s - dumps a Regexp in another encoding 1689s - ignores overridden name method when dumps a Regexp subclass 1689s 1689s Marshal.dump with an Array 1689s - dumps an empty Array 1689s - dumps a non-empty Array 1689s - dumps an Array subclass 1689s - dumps a recursive Array 1689s - dumps an Array with instance variables 1689s - dumps an extended Array 1689s - ignores overridden name method when dumps an Array subclass 1689s 1689s Marshal.dump with a Hash 1689s - dumps a Hash 1689s - dumps a non-empty Hash 1689s - dumps a Hash subclass 1689s - dumps a Hash with a default value 1689s - raises a TypeError with hash having default proc 1689s - dumps a Hash with instance variables 1689s - dumps an extended Hash 1689s - dumps an Hash subclass with a parameter to initialize 1689s - ignores overridden name method when dumps a Hash subclass 1689s 1689s Marshal.dump with a Struct 1689s - dumps a Struct 1689s - dumps a Struct 1689s - dumps a Struct with instance variables 1689s - dumps an extended Struct 1689s - ignores overridden name method 1689s - raises TypeError with an anonymous Struct 1689s 1689s Marshal.dump with an Object 1689s - dumps an Object 1689s - dumps an extended Object 1689s - dumps an Object with an instance variable 1689s - dumps an Object that has had an instance variable added and removed as though it was never set 1689s - dumps an Object if it has a singleton class but no singleton methods and no singleton instance variables 1689s - ignores overridden name method 1689s - raises TypeError if an Object has a singleton class and singleton methods 1689s - raises TypeError if an Object has a singleton class and singleton instance variables 1689s - raises TypeError if an Object is an instance of an anonymous class 1689s - dumps a BasicObject subclass if it defines respond_to? 1689s - dumps without marshaling any attached finalizer 1689s 1689s Marshal.dump with a Range 1689s - dumps a Range inclusive of end (with indeterminant order) 1689s - dumps a Range exclusive of end (with indeterminant order) 1689s - raises TypeError with an anonymous Range subclass 1689s 1689s Marshal.dump with a Time 1689s - ignores overridden name method 1689s 1689s Marshal.dump with an Exception 1689s - dumps an empty Exception 1689s - dumps the message for the exception 1689s - contains the filename in the backtrace 1689s - dumps the message for the raised NoMethodError exception 1689s - raises TypeError if an Object is an instance of an anonymous class 1689s 1689s Marshal.dump when passed an IO 1689s - writes the serialized data to the IO-Object 1689s - returns the IO-Object 1689s - raises an Error when the IO-Object does not respond to #write 1689s - calls binmode when it's defined 1689s 1689s Marshal.dump when passed a StringIO 1689s - should raise an error 1689s 1689s Marshal.dump with Float 1689s - represents NaN 1689s - represents +Infinity 1689s - represents -Infinity 1689s - represents zero 1689s - represents a Float less than 1 1689s - represents a Float greater than 1 1689s - represents a Float much greater than 1 1689s - represents a Float much greater than 1 with a very small fractional part 1689s 1689s Marshal.load with Float 1689s - loads NaN 1689s - loads +Infinity 1689s - loads -Infinity 1689s - loads zero 1689s - loads a Float less than 1 1689s - loads a Float much less than 1 1689s - loads a Float greater than 1 1689s - loads a Float much greater than 1 1689s - loads a Float much greater than 1 with a very small fractional part 1689s 1689s Marshal.load 1689s - raises an ArgumentError when the dumped data is truncated 1689s - raises an ArgumentError when the argument is empty String 1689s - raises an ArgumentError when the dumped class is missing 1689s - loads an array containing objects having _dump method, and with proc 1689s - loads an array containing objects having marshal_dump method, and with proc 1689s - assigns classes to nested subclasses of Array correctly 1689s - loads subclasses of Array with overridden << and push correctly 1689s - raises a TypeError with bad Marshal version 1689s - raises EOFError on loading an empty file 1689s - loads a nil 1689s - loads a 1..2 1689s - loads a 1...2 1689s - loads a 'a'..'b' 1689s - loads a Struct 1689s - loads a Symbol 1689s - loads a true 1689s - loads a false 1689s - loads a String empty 1689s - loads a String small 1689s - loads a String big 1689s - loads a String extended 1689s - loads a String subclass 1689s - loads a String subclass extended 1689s - loads a Symbol small 1689s - loads a Symbol big 1689s - loads a Integer -2**64 1689s - loads a Integer -2**63 1689s - loads a Integer -2**24 1689s - loads a Integer -4516727 1689s - loads a Integer -2**16 1689s - loads a Integer -2**8 1689s - loads a Integer -123 1689s - loads a Integer -124 1689s - loads a Integer 0 1689s - loads a Integer 5 1689s - loads a Integer 122 1689s - loads a Integer 123 1689s - loads a Integer 2**8 1689s - loads a Integer 2**16 1689s - loads a Integer 2**24 1689s - loads a Integer 2**64 1689s - loads a Integer 2**90 1689s - loads a Class String 1689s - loads a Module Marshal 1689s - loads a Module nested 1689s - loads a _dump object 1689s - loads a _dump object extended 1689s - loads a marshal_dump object 1689s - loads a Regexp 1689s - loads a Regexp subclass /i 1689s - loads a Float 0.0 1689s - loads a Float -0.0 1689s - loads a Float Infinity 1689s - loads a Float -Infinity 1689s - loads a Float 1.0 1689s - loads a Float 8323434.342 1689s - loads a Float 1.0799999999999912 1689s - loads a Hash 1689s - loads a Hash subclass 1689s - loads a Array 1689s - loads a Array subclass 1689s - loads a Struct Pyramid 1689s - loads a nil 1689s - loads a 1..2 1689s - loads a 1...2 1689s - loads a 'a'..'b' 1689s - loads a Struct 1689s - loads a Symbol 1689s - loads a true 1689s - loads a false 1689s - loads a String empty 1689s - loads a String small 1689s - loads a String big 1689s - loads a String extended 1689s - loads a String subclass 1689s - loads a String subclass extended 1689s - loads a Symbol small 1689s - loads a Symbol big 1689s - loads a Integer -2**64 1689s - loads a Integer -2**63 1689s - loads a Integer -2**24 1689s - loads a Integer -2**16 1689s - loads a Integer -2**8 1689s - loads a Integer -123 1689s - loads a Integer 0 1689s - loads a Integer 5 1689s - loads a Integer 2**8 1689s - loads a Integer 2**16 1689s - loads a Integer 2**24 1689s - loads a Integer 2**64 1689s - loads a Integer 2**90 1689s - loads a Class String 1689s - loads a Module Marshal 1689s - loads a Module nested 1689s - loads a _dump object 1689s - loads a _dump object extended 1689s - loads a marshal_dump object 1689s - loads a Regexp 1689s - loads a Regexp subclass /i 1689s - loads a Float 0.0 1689s - loads a Float -0.0 1689s - loads a Float Infinity 1689s - loads a Float -Infinity 1689s - loads a Float 1.0 1689s - loads a Hash 1689s - loads a Hash subclass 1689s - loads a Array 1689s - loads a Array subclass 1689s - loads a Struct Pyramid 1689s - loads a Random 1689s - raises an ArgumentError with full constant name when the dumped constant is missing 1689s 1689s Marshal.load when called with freeze: true 1689s - returns frozen strings 1689s - returns frozen arrays 1689s - returns frozen hashes 1689s - returns frozen regexps 1689s - returns frozen structs 1689s - returns frozen objects 1689s - does not freeze modules 1689s - does not freeze classes 1689s - does not call freeze method 1689s - returns frozen object even if object does not respond to freeze method 1689s - returns a frozen object when is an instance of String/Array/Regexp/Hash subclass and has instance variables 1689s 1689s Marshal.load when called with freeze: true deep freezing 1689s - returns hashes with frozen keys and values 1689s - returns arrays with frozen elements 1689s - returns structs with frozen members 1689s - returns objects with frozen instance variables 1689s - deduplicates frozen strings 1689s 1689s Marshal.load when called with freeze: true when called with a proc 1689s - call the proc with frozen objects 1689s - does not freeze the object returned by the proc 1689s 1689s Marshal.load when called with a proc 1689s - call the proc with fully initialized strings 1689s - no longer mutate the object after it was passed to the proc 1689s - returns the value of the proc 1689s - calls the proc for recursively visited data 1689s - loads an Array with proc 1689s 1689s Marshal.load when called with nil for the proc argument 1689s - behaves as if no proc argument was passed 1689s 1689s Marshal.load when called on objects with custom _dump methods 1689s - does not set instance variables of an object with user-defined _dump/_load 1689s - loads the String in non US-ASCII and non UTF-8 encoding 1689s 1689s Marshal.load when called on objects with custom _dump methods that returns an immediate value 1689s - loads an array containing an instance of the object, followed by multiple instances of another object 1689s - loads any structure with multiple references to the same object, followed by multiple instances of another object 1689s - loads an array containing references to multiple instances of the object, followed by multiple instances of another object 1689s 1689s Marshal.load for an Array 1689s - loads an array containing the same objects 1689s - loads an array having ivar 1689s - loads an extended Array object containing a user-marshaled object 1689s 1689s Marshal.load for a Hash 1689s - loads an extended_user_hash with a parameter to initialize 1689s - loads an extended hash object containing a user-marshaled object 1689s - preserves hash ivars when hash contains a string having ivar 1689s - allocates an instance of the proper class when Hash subclass with compare_by_identity behaviour 1689s 1689s Marshal.load for a Symbol 1689s - loads a Symbol 1689s - loads a big Symbol 1689s - loads an encoded Symbol 1689s - loads multiple Symbols sharing the same encoding 1689s - raises ArgumentError when end of byte sequence reached before symbol characters end 1689s 1689s Marshal.load for a String 1689s - loads a string having ivar with ref to self 1689s - loads a string through StringIO stream 1689s - sets binmode if it is loading through StringIO stream 1689s - loads a string with an ivar 1689s - loads a String subclass with custom constructor 1689s - loads a US-ASCII String 1689s - loads a UTF-8 String 1689s - loads a String in another encoding 1689s - loads a String as BINARY if no encoding is specified at the end 1689s - raises ArgumentError when end of byte sequence reached before string characters end 1689s 1689s Marshal.load for a Struct 1689s - loads a extended_struct having fields with same objects 1689s - loads a struct having ivar 1689s - loads a struct having fields 1689s - does not call initialize on the unmarshaled struct 1689s 1689s Marshal.load for an Exception 1689s - loads a marshalled exception with no message 1689s - loads a marshalled exception with a message 1689s - loads a marshalled exception with a backtrace 1689s - loads an marshalled exception with ivars 1689s 1689s Marshal.load for an Object 1689s - loads an object 1689s - loads an extended Object 1689s - loads an object having ivar 1689s - loads an Object with a non-US-ASCII instance variable 1689s - raises ArgumentError when end of byte sequence reached before class name end 1689s 1689s Marshal.load for an object responding to #marshal_dump and #marshal_load 1689s - loads a user-marshaled object 1689s 1689s Marshal.load for a user object 1689s - loads a user-marshaled extended object 1689s - loads a UserObject 1689s 1689s Marshal.load for a user object that extends a core type other than Object or BasicObject 1689s - raises ArgumentError if the resulting class does not extend the same type 1689s 1689s Marshal.load for a Regexp 1689s - loads an extended Regexp 1689s - loads a Regexp subclass instance variables when it is extended with a module 1689s - restore the regexp instance variables 1689s - preserves Regexp encoding 1689s - raises ArgumentError when end of byte sequence reached before source string end 1689s 1689s Marshal.load for a Float 1689s - loads a Float NaN 1689s - loads a Float 1.3 1689s - loads a Float -5.1867345e-22 1689s - loads a Float 1.1867345e+22 1689s - raises ArgumentError when end of byte sequence reached before float string representation end 1689s 1689s Marshal.load for an Integer 1689s - loads 0 1689s - loads an Integer 8 1689s - loads and Integer -8 1689s - loads an Integer 1234 1689s - loads an Integer -1234 1689s - loads an Integer 4611686018427387903 1689s - loads an Integer -4611686018427387903 1689s - loads an Integer 2361183241434822606847 1689s - loads an Integer -2361183241434822606847 1689s - raises ArgumentError if the input is too short 1689s - roundtrips 4611686018427387903 from dump/load correctly 1689s 1689s Marshal.load for a Bignum that is Bignum on 32-bit platforms but Fixnum on 64-bit 1689s - dumps a Fixnum 1689s - dumps an array containing multiple references to the Bignum as an array of Fixnum 1689s 1689s Marshal.load for a Time 1689s - loads 1689s - loads serialized instance variables 1689s - loads Time objects stored as links 1689s - keeps the local zone 1689s - keeps UTC zone 1689s - keeps the zone 1689s - keeps utc offset 1689s - keeps nanoseconds 1689s - does not add any additional instance variable 1689s 1689s Marshal.load for nil 1689s - loads 1689s 1689s Marshal.load for true 1689s - loads 1689s 1689s Marshal.load for false 1689s - loads 1689s 1689s Marshal.load for a Class 1689s - loads 1689s - raises ArgumentError if given the name of a non-Module 1689s - raises ArgumentError if given a nonexistent class 1689s - raises ArgumentError when end of byte sequence reached before class name end 1689s 1689s Marshal.load for a Module 1689s - loads a module 1689s - raises ArgumentError if given the name of a non-Class 1689s - loads an old module 1689s - raises ArgumentError when end of byte sequence reached before module name end 1689s 1689s Marshal.load for a wrapped C pointer 1689s - loads 1689s - raises TypeError when the local class is missing _load_data 1689s 1689s Marshal.load when a class does not exist in the namespace 1689s - raises an ArgumentError 1689s 1689s Marshal::MAJOR_VERSION 1689s - is 4 1689s 1689s Marshal::MINOR_VERSION 1689s - is 8 1689s 1689s Marshal.restore 1689s - raises an ArgumentError when the dumped data is truncated 1689s - raises an ArgumentError when the argument is empty String 1689s - raises an ArgumentError when the dumped class is missing 1689s - loads an array containing objects having _dump method, and with proc 1689s - loads an array containing objects having marshal_dump method, and with proc 1689s - assigns classes to nested subclasses of Array correctly 1689s - loads subclasses of Array with overridden << and push correctly 1689s - raises a TypeError with bad Marshal version 1689s - raises EOFError on loading an empty file 1689s - loads a nil 1689s - loads a 1..2 1689s - loads a 1...2 1689s - loads a 'a'..'b' 1689s - loads a Struct 1689s - loads a Symbol 1689s - loads a true 1689s - loads a false 1689s - loads a String empty 1689s - loads a String small 1689s - loads a String big 1689s - loads a String extended 1689s - loads a String subclass 1689s - loads a String subclass extended 1689s - loads a Symbol small 1689s - loads a Symbol big 1689s - loads a Integer -2**64 1689s - loads a Integer -2**63 1689s - loads a Integer -2**24 1689s - loads a Integer -4516727 1689s - loads a Integer -2**16 1689s - loads a Integer -2**8 1689s - loads a Integer -123 1689s - loads a Integer -124 1689s - loads a Integer 0 1689s - loads a Integer 5 1689s - loads a Integer 122 1689s - loads a Integer 123 1689s - loads a Integer 2**8 1689s - loads a Integer 2**16 1689s - loads a Integer 2**24 1689s - loads a Integer 2**64 1689s - loads a Integer 2**90 1689s - loads a Class String 1689s - loads a Module Marshal 1689s - loads a Module nested 1689s - loads a _dump object 1689s - loads a _dump object extended 1689s - loads a marshal_dump object 1689s - loads a Regexp 1689s - loads a Regexp subclass /i 1689s - loads a Float 0.0 1689s - loads a Float -0.0 1689s - loads a Float Infinity 1689s - loads a Float -Infinity 1689s - loads a Float 1.0 1689s - loads a Float 8323434.342 1689s - loads a Float 1.0799999999999912 1689s - loads a Hash 1689s - loads a Hash subclass 1689s - loads a Array 1689s - loads a Array subclass 1689s - loads a Struct Pyramid 1689s - loads a nil 1689s - loads a 1..2 1689s - loads a 1...2 1689s - loads a 'a'..'b' 1689s - loads a Struct 1689s - loads a Symbol 1689s - loads a true 1689s - loads a false 1689s - loads a String empty 1689s - loads a String small 1689s - loads a String big 1689s - loads a String extended 1689s - loads a String subclass 1689s - loads a String subclass extended 1689s - loads a Symbol small 1689s - loads a Symbol big 1689s - loads a Integer -2**64 1689s - loads a Integer -2**63 1689s - loads a Integer -2**24 1689s - loads a Integer -2**16 1689s - loads a Integer -2**8 1689s - loads a Integer -123 1689s - loads a Integer 0 1689s - loads a Integer 5 1689s - loads a Integer 2**8 1689s - loads a Integer 2**16 1689s - loads a Integer 2**24 1689s - loads a Integer 2**64 1689s - loads a Integer 2**90 1689s - loads a Class String 1689s - loads a Module Marshal 1689s - loads a Module nested 1689s - loads a _dump object 1689s - loads a _dump object extended 1689s - loads a marshal_dump object 1689s - loads a Regexp 1689s - loads a Regexp subclass /i 1689s - loads a Float 0.0 1689s - loads a Float -0.0 1689s - loads a Float Infinity 1689s - loads a Float -Infinity 1689s - loads a Float 1.0 1689s - loads a Hash 1689s - loads a Hash subclass 1689s - loads a Array 1689s - loads a Array subclass 1689s - loads a Struct Pyramid 1689s - loads a Random 1689s - raises an ArgumentError with full constant name when the dumped constant is missing 1689s 1689s Marshal.restore when called with freeze: true 1689s - returns frozen strings 1689s - returns frozen arrays 1689s - returns frozen hashes 1689s - returns frozen regexps 1689s - returns frozen structs 1689s - returns frozen objects 1689s - does not freeze modules 1689s - does not freeze classes 1689s - does not call freeze method 1689s - returns frozen object even if object does not respond to freeze method 1689s - returns a frozen object when is an instance of String/Array/Regexp/Hash subclass and has instance variables 1689s 1689s Marshal.restore when called with freeze: true deep freezing 1689s - returns hashes with frozen keys and values 1689s - returns arrays with frozen elements 1689s - returns structs with frozen members 1689s - returns objects with frozen instance variables 1689s - deduplicates frozen strings 1689s 1689s Marshal.restore when called with freeze: true when called with a proc 1689s - call the proc with frozen objects 1689s - does not freeze the object returned by the proc 1689s 1689s Marshal.restore when called with a proc 1689s - call the proc with fully initialized strings 1689s - no longer mutate the object after it was passed to the proc 1689s - returns the value of the proc 1689s - calls the proc for recursively visited data 1689s - loads an Array with proc 1689s 1689s Marshal.restore when called with nil for the proc argument 1689s - behaves as if no proc argument was passed 1689s 1689s Marshal.restore when called on objects with custom _dump methods 1689s - does not set instance variables of an object with user-defined _dump/_load 1689s - loads the String in non US-ASCII and non UTF-8 encoding 1689s 1689s Marshal.restore when called on objects with custom _dump methods that returns an immediate value 1689s - loads an array containing an instance of the object, followed by multiple instances of another object 1689s - loads any structure with multiple references to the same object, followed by multiple instances of another object 1689s - loads an array containing references to multiple instances of the object, followed by multiple instances of another object 1689s 1689s Marshal.restore for an Array 1689s - loads an array containing the same objects 1689s - loads an array having ivar 1689s - loads an extended Array object containing a user-marshaled object 1689s 1689s Marshal.restore for a Hash 1689s - loads an extended_user_hash with a parameter to initialize 1689s - loads an extended hash object containing a user-marshaled object 1689s - preserves hash ivars when hash contains a string having ivar 1689s - allocates an instance of the proper class when Hash subclass with compare_by_identity behaviour 1689s 1689s Marshal.restore for a Symbol 1689s - loads a Symbol 1689s - loads a big Symbol 1689s - loads an encoded Symbol 1689s - loads multiple Symbols sharing the same encoding 1689s - raises ArgumentError when end of byte sequence reached before symbol characters end 1689s 1689s Marshal.restore for a String 1689s - loads a string having ivar with ref to self 1689s - loads a string through StringIO stream 1689s - sets binmode if it is loading through StringIO stream 1689s - loads a string with an ivar 1689s - loads a String subclass with custom constructor 1689s - loads a US-ASCII String 1689s - loads a UTF-8 String 1689s - loads a String in another encoding 1689s - loads a String as BINARY if no encoding is specified at the end 1689s - raises ArgumentError when end of byte sequence reached before string characters end 1689s 1689s Marshal.restore for a Struct 1689s - loads a extended_struct having fields with same objects 1689s - loads a struct having ivar 1689s - loads a struct having fields 1689s - does not call initialize on the unmarshaled struct 1689s 1689s Marshal.restore for an Exception 1689s - loads a marshalled exception with no message 1689s - loads a marshalled exception with a message 1689s - loads a marshalled exception with a backtrace 1689s - loads an marshalled exception with ivars 1689s 1689s Marshal.restore for an Object 1689s - loads an object 1689s - loads an extended Object 1689s - loads an object having ivar 1689s - loads an Object with a non-US-ASCII instance variable 1689s - raises ArgumentError when end of byte sequence reached before class name end 1689s 1689s Marshal.restore for an object responding to #marshal_dump and #marshal_load 1689s - loads a user-marshaled object 1689s 1689s Marshal.restore for a user object 1689s - loads a user-marshaled extended object 1689s - loads a UserObject 1689s 1689s Marshal.restore for a user object that extends a core type other than Object or BasicObject 1689s - raises ArgumentError if the resulting class does not extend the same type 1689s 1689s Marshal.restore for a Regexp 1689s - loads an extended Regexp 1689s - loads a Regexp subclass instance variables when it is extended with a module 1689s - restore the regexp instance variables 1689s - preserves Regexp encoding 1689s - raises ArgumentError when end of byte sequence reached before source string end 1689s 1689s Marshal.restore for a Float 1689s - loads a Float NaN 1689s - loads a Float 1.3 1689s - loads a Float -5.1867345e-22 1689s - loads a Float 1.1867345e+22 1689s - raises ArgumentError when end of byte sequence reached before float string representation end 1689s 1689s Marshal.restore for an Integer 1689s - loads 0 1689s - loads an Integer 8 1689s - loads and Integer -8 1689s - loads an Integer 1234 1689s - loads an Integer -1234 1689s - loads an Integer 4611686018427387903 1689s - loads an Integer -4611686018427387903 1689s - loads an Integer 2361183241434822606847 1689s - loads an Integer -2361183241434822606847 1689s - raises ArgumentError if the input is too short 1689s - roundtrips 4611686018427387903 from dump/load correctly 1689s 1689s Marshal.restore for a Bignum that is Bignum on 32-bit platforms but Fixnum on 64-bit 1689s - dumps a Fixnum 1689s - dumps an array containing multiple references to the Bignum as an array of Fixnum 1689s 1689s Marshal.restore for a Time 1689s - loads 1689s - loads serialized instance variables 1689s - loads Time objects stored as links 1689s - keeps the local zone 1689s - keeps UTC zone 1689s - keeps the zone 1689s - keeps utc offset 1689s - keeps nanoseconds 1689s - does not add any additional instance variable 1689s 1689s Marshal.restore for nil 1689s - loads 1689s 1689s Marshal.restore for true 1689s - loads 1689s 1689s Marshal.restore for false 1689s - loads 1689s 1689s Marshal.restore for a Class 1689s - loads 1689s - raises ArgumentError if given the name of a non-Module 1689s - raises ArgumentError if given a nonexistent class 1689s - raises ArgumentError when end of byte sequence reached before class name end 1689s 1689s Marshal.restore for a Module 1689s - loads a module 1689s - raises ArgumentError if given the name of a non-Class 1689s - loads an old module 1689s - raises ArgumentError when end of byte sequence reached before module name end 1689s 1689s Marshal.restore for a wrapped C pointer 1689s - loads 1689s - raises TypeError when the local class is missing _load_data 1689s 1689s Marshal.restore when a class does not exist in the namespace 1689s - raises an ArgumentError 1689s 1689s MatchData.allocate 1689s - is undefined 1689s 1689s MatchData#begin when passed an integer argument 1689s - returns the character offset of the start of the nth element 1689s - returns nil when the nth match isn't found 1689s - returns the character offset for multi-byte strings 1689s - returns the character offset for multi-byte strings with unicode regexp 1689s - tries to convert the passed argument to an Integer using #to_int 1689s - raises IndexError if index is out of bounds 1689s 1689s MatchData#begin when passed a String argument 1689s - return the character offset of the start of the named capture 1689s - returns the character offset for multi byte strings 1689s - returns the character offset for multi byte strings with unicode regexp 1689s - returns the character offset for the farthest match when multiple named captures use the same name 1689s - returns the character offset for multi-byte names 1689s - raises IndexError if there is no group with the provided name 1689s 1689s MatchData#begin when passed a Symbol argument 1689s - return the character offset of the start of the named capture 1689s - returns the character offset for multi byte strings 1689s - returns the character offset for multi byte strings with unicode regexp 1689s - returns the character offset for the farthest match when multiple named captures use the same name 1689s - returns the character offset for multi-byte names 1689s - raises IndexError if there is no group with the provided name 1689s 1689s MatchData#captures 1689s - returns an array of the match captures 1689s - returns instances of String when given a String subclass 1689s 1689s MatchData#dup 1689s - duplicates the match data 1689s 1689s MatchData#[] 1689s - acts as normal array indexing [index] 1689s - supports accessors [start, length] 1689s - supports ranges [start..end] 1689s - supports endless ranges [start..] 1689s - supports beginningless ranges [..end] 1689s - supports beginningless endless ranges [nil..nil] 1689s - returns instances of String when given a String subclass 1689s 1689s MatchData#[Symbol] 1689s - returns the corresponding named match when given a Symbol 1689s - returns the corresponding named match when given a String 1689s - returns the matching version of multiple corresponding named match 1689s - returns the last match when multiple named matches exist with the same name 1689s - returns nil on non-matching named matches 1689s - raises an IndexError if there is no named match corresponding to the Symbol 1689s - raises an IndexError if there is no named match corresponding to the String 1689s - returns matches in the String's encoding 1689s 1689s MatchData#end when passed an integer argument 1689s - returns the character offset of the end of the nth element 1689s - returns nil when the nth match isn't found 1689s - returns the character offset for multi-byte strings 1689s - returns the character offset for multi-byte strings with unicode regexp 1689s - tries to convert the passed argument to an Integer using #to_int 1689s 1689s MatchData#end when passed a String argument 1689s - return the character offset of the start of the named capture 1689s - returns the character offset for multi byte strings 1689s - returns the character offset for multi byte strings with unicode regexp 1689s - returns the character offset for the farthest match when multiple named captures use the same name 1689s - returns the character offset for multi-byte names 1689s 1689s MatchData#end when passed a Symbol argument 1689s - return the character offset of the start of the named capture 1689s - returns the character offset for multi byte strings 1689s - returns the character offset for multi byte strings with unicode regexp 1689s - returns the character offset for the farthest match when multiple named captures use the same name 1689s - returns the character offset for multi-byte names 1689s 1689s MatchData#eql? 1689s - returns true if both operands have equal target strings, patterns, and match positions 1689s - returns false if the operands have different target strings 1689s - returns false if the operands have different patterns 1689s - returns false if the argument is not a MatchData object 1689s 1689s MatchData#== 1689s - returns true if both operands have equal target strings, patterns, and match positions 1689s - returns false if the operands have different target strings 1689s - returns false if the operands have different patterns 1689s - returns false if the argument is not a MatchData object 1689s 1689s MatchData#hash 1689s - needs to be reviewed for spec completeness 1689s 1689s MatchData#inspect 1689s - returns a String 1689s - returns a human readable representation that contains entire matched string and the captures 1689s - returns a human readable representation of named captures 1689s 1689s MatchData#length 1689s - length should return the number of elements in the match array 1689s 1689s MatchData#match_length 1689s - returns the length of the corresponding match when given an Integer 1689s - returns nil on non-matching index matches 1689s - returns the length of the corresponding named match when given a Symbol 1689s - returns nil on non-matching index matches 1689s 1689s MatchData#match 1689s - returns the corresponding match when given an Integer 1689s - returns nil on non-matching index matches 1689s - returns the corresponding named match when given a Symbol 1689s - returns nil on non-matching index matches 1689s 1689s MatchData#named_captures 1689s - returns a Hash that has captured name and the matched string pairs 1689s - prefers later captures 1689s - returns the latest matched capture, even if a later one that does not match exists 1689s 1689s MatchData#names 1689s - returns an Array 1689s - sets each element to a String 1689s - returns the names of the named capture groups 1689s - returns [] if there were no named captures 1689s - returns each name only once 1689s - equals Regexp#names 1689s 1689s MatchData#offset 1689s - returns a two element array with the begin and end of the nth match 1689s - returns [nil, nil] when the nth match isn't found 1689s - returns the offset for multi byte strings 1689s - returns the offset for multi byte strings with unicode regexp 1689s 1689s MatchData#post_match 1689s - returns the string after the match equiv. special var $' 1689s - sets the encoding to the encoding of the source String 1689s - sets an empty result to the encoding of the source String 1689s - returns an instance of String when given a String subclass 1689s 1689s MatchData#pre_match 1689s - returns the string before the match, equiv. special var $` 1689s - sets the encoding to the encoding of the source String 1689s - sets an empty result to the encoding of the source String 1689s - returns an instance of String when given a String subclass 1689s 1689s MatchData#regexp 1689s - returns a Regexp object 1689s - returns the pattern used in the match 1689s - returns the same Regexp used to match 1689s - returns a Regexp for the result of gsub(String) 1689s 1689s MatchData#size 1689s - length should return the number of elements in the match array 1689s 1689s MatchData#string 1689s - returns a copy of the match string 1689s - returns a frozen copy of the match string 1689s - returns the same frozen string for every call 1689s - returns a frozen copy of the matched string for gsub(String) 1689s 1689s MatchData#to_a 1689s - returns an array of matches 1689s - returns instances of String when given a String subclass 1689s 1689s MatchData#to_s 1689s - returns the entire matched string 1689s - returns an instance of String when given a String subclass 1689s 1689s MatchData#values_at 1689s - supports multiple integer Ranges 1689s - supports mixing integer Ranges and Integers 1689s - supports mixing of names and indices 1689s - returns a new empty Array if no arguments given 1689s - fails when passed arguments of unsupported types 1689s 1689s MatchData#values_at when passed a list of Integers 1689s - returns an array containing each value given by one of integers 1689s - returns nil value for any integer that is out of range 1689s 1689s MatchData#values_at when passed an integer Range 1689s - returns an array containing each value given by the elements of the range 1689s - fills with nil values for range elements larger than the captured values number 1689s - raises RangeError if any element of the range is negative and out of range 1689s - supports endless Range 1689s - supports beginningless Range 1689s - returns an empty Array when Range is empty 1689s 1689s MatchData#values_at when passed names 1689s - slices captures with the given names 1689s - slices captures with the given String names 1689s 1689s Math.acos 1689s - returns a float 1689s - returns the arccosine of the argument 1689s - raises an Math::DomainError if the argument is greater than 1.0 1689s - raises an Math::DomainError if the argument is less than -1.0 1689s - raises a TypeError if the string argument cannot be coerced with Float() 1689s - returns NaN given NaN 1689s - raises a TypeError if the argument cannot be coerced with Float() 1689s - raises a TypeError if the argument is nil 1689s - accepts any argument that can be coerced with Float() 1689s 1689s Math#acos 1689s - is accessible as a private instance method 1689s 1689s Math.acosh 1689s - returns a float 1689s - returns the principle value of the inverse hyperbolic cosine of the argument 1689s - raises Math::DomainError if the passed argument is less than -1.0 or greater than 1.0 1689s - raises a TypeError if the argument cannot be coerced with Float() 1689s - returns NaN given NaN 1689s - raises a TypeError if the argument is nil 1689s - accepts any argument that can be coerced with Float() 1689s 1689s Math#acosh 1689s - is accessible as a private instance method 1689s 1689s Math.asin 1689s - returns a float 1689s - returns the arcsine of the argument 1689s - raises an Math::DomainError if the argument is greater than 1.0 1689s - raises an Math::DomainError if the argument is less than -1.0 1689s - raises a TypeError if the argument cannot be coerced with Float() 1689s - returns NaN given NaN 1689s - raises a TypeError if the argument is nil 1689s - accepts any argument that can be coerced with Float() 1689s 1689s Math#asin 1689s - is accessible as a private instance method 1689s 1689s Math.asinh 1689s - returns a float 1689s - returns the inverse hyperbolic sin of the argument 1689s - raises a TypeError if the argument cannot be coerced with Float() 1689s - returns NaN given NaN 1689s - raises a TypeError if the argument is nil 1689s - accepts any argument that can be coerced with Float() 1689s 1689s Math#asinh 1689s - is accessible as a private instance method 1689s 1689s Math.atan2 1689s - returns a float 1689s - returns the arc tangent of y, x 1689s - raises a TypeError if the argument cannot be coerced with Float() 1689s - raises a TypeError if the argument is nil 1689s - accepts any argument that can be coerced with Float() 1689s - returns positive zero when passed 0.0, 0.0 1689s - returns negative zero when passed -0.0, 0.0 1689s - returns Pi when passed 0.0, -0.0 1689s - returns -Pi when passed -0.0, -0.0 1689s 1689s Math#atan2 1689s - is accessible as a private instance method 1689s 1689s Math.atan 1689s - returns a float 1689s - returns the arctangent of the argument 1689s - raises a TypeError if the argument cannot be coerced with Float() 1689s - returns NaN given NaN 1689s - raises a TypeError if the argument is nil 1689s - accepts any argument that can be coerced with Float() 1689s 1689s Math#atan 1689s - is accessible as a private instance method 1689s 1689s Math.atanh 1689s - returns a float 1689s - returns the inverse hyperbolic tangent of the argument 1689s - raises a TypeError if the argument is nil 1689s - raises a TypeError if the argument is not a Numeric 1689s - returns Infinity if x == 1.0 1689s - return -Infinity if x == -1.0 1689s - raises a Math::DomainError for arguments greater than 1.0 1689s - raises a Math::DomainError for arguments less than -1.0 1689s 1689s Math#atanh 1689s - is a private instance method 1689s - returns a float 1689s - returns the inverse hyperbolic tangent of the argument 1689s - raises a TypeError if the argument is nil 1689s - raises a TypeError if the argument is not a Numeric 1689s - returns Infinity if x == 1.0 1689s - return -Infinity if x == -1.0 1689s - raises a Math::DomainError for arguments greater than 1.0 1689s - raises a Math::DomainError for arguments less than -1.0 1689s 1689s Math.cbrt 1689s - returns a float 1689s - returns the cubic root of the argument 1689s - raises a TypeError if the argument cannot be coerced with Float() 1689s - raises a TypeError if the argument is nil 1689s - accepts any argument that can be coerced with Float() 1689s 1689s Math::PI 1689s - approximates the value of pi 1689s - is accessible to a class that includes Math 1689s 1689s Math::E 1689s - approximates the value of Napier's constant 1689s - is accessible to a class that includes Math 1689s 1689s Math.cos 1689s - returns a float 1689s - returns the cosine of the argument expressed in radians 1689s - raises a TypeError unless the argument is Numeric and has #to_f 1689s - returns NaN given NaN 1689s 1689s Math.cos coerces its argument with #to_f 1689s - coerces its argument with #to_f 1689s - raises a TypeError if the given argument can't be converted to a Float 1689s - raises a NoMethodError if the given argument raises a NoMethodError during type coercion to a Float 1689s 1689s Math#cos 1689s - is accessible as a private instance method 1689s 1689s Math.cosh 1689s - returns a float 1689s - returns the hyperbolic cosine of the argument 1689s - raises a TypeError if the argument cannot be coerced with Float() 1689s - returns NaN given NaN 1689s - raises a TypeError if the argument is nil 1689s - accepts any argument that can be coerced with Float() 1689s 1689s Math#cosh 1689s - is accessible as a private instance method 1689s 1689s Math.erf 1689s - returns a float 1689s - returns the error function of the argument 1689s - raises a TypeError if the argument cannot be coerced with Float() 1689s - returns NaN given NaN 1689s - raises a TypeError if the argument is nil 1689s - accepts any argument that can be coerced with Float() 1689s 1689s Math#erf 1689s - is accessible as a private instance method 1689s 1689s Math.erfc 1689s - returns a float 1689s - returns the complementary error function of the argument 1689s - raises a TypeError if the argument cannot be coerced with Float() 1689s - returns NaN given NaN 1689s - raises a TypeError if the argument is nil 1689s - accepts any argument that can be coerced with Float() 1689s 1689s Math#erfc 1689s - is accessible as a private instance method 1689s 1689s Math.exp 1689s - returns a float 1689s - returns the base-e exponential of the argument 1689s - raises a TypeError if the argument cannot be coerced with Float() 1689s - returns NaN given NaN 1689s - raises a TypeError if the argument is nil 1689s - accepts any argument that can be coerced with Float() 1689s 1689s Math#exp 1689s - is accessible as a private instance method 1689s 1689s Math.frexp 1689s - returns the normalized fraction and exponent 1689s - raises a TypeError if the argument cannot be coerced with Float() 1689s - returns NaN given NaN 1689s - raises a TypeError if the argument is nil 1689s - accepts any argument that can be coerced with Float() 1689s 1689s Math#frexp 1689s - is accessible as a private instance method 1689s 1689s Math.gamma 1689s - returns +infinity given 0 1689s - returns -infinity given -0.0 1689s - returns Math.sqrt(Math::PI) given 0.5 1689s - returns exactly (n-1)! given n for n between 2 and 23 1689s - returns approximately (n-1)! given n for n between 24 and 30 1689s - returns good numerical approximation for gamma(3.2) 1689s - returns good numerical approximation for gamma(-2.15) 1689s - returns good numerical approximation for gamma(0.00001) 1689s - returns good numerical approximation for gamma(-0.00001) 1689s - raises Math::DomainError given -1 1689s - returns +infinity given +infinity 1689s - raises Math::DomainError given negative infinity 1689s - returns NaN given NaN 1689s 1689s Math.hypot 1689s - returns a float 1689s - returns the length of the hypotenuse of a right triangle with legs given by the arguments 1689s - raises a TypeError if the argument cannot be coerced with Float() 1689s - returns NaN given NaN 1689s - raises a TypeError if the argument is nil 1689s - accepts any argument that can be coerced with Float() 1689s 1689s Math#hypot 1689s - is accessible as a private instance method 1689s 1689s Math.ldexp 1689s - returns a float 1689s - returns the argument multiplied by 2**n 1689s - raises a TypeError if the first argument cannot be coerced with Float() 1689s - returns NaN given NaN 1689s - raises RangeError if NaN is given as the second arg 1689s - raises a TypeError if the second argument cannot be coerced with Integer() 1689s - raises a TypeError if the first argument is nil 1689s - raises a TypeError if the second argument is nil 1689s - accepts any first argument that can be coerced with Float() 1689s - accepts any second argument that can be coerced with Integer() 1689s - returns correct value that closes to the max value of double type 1689s 1689s Math#ldexp 1689s - is accessible as a private instance method 1689s 1689s Math.lgamma 1689s - returns [Infinity, 1] when passed 0 1689s - returns [Infinity, 1] when passed -1 1689s - returns [Infinity, -1] when passed -0.0 1689s - returns [log(sqrt(PI)), 1] when passed 0.5 1689s - returns [log(2/3*PI, 1] when passed 6.0 1689s - returns an approximate value when passed -0.5 1689s - returns an approximate value when passed -1.5 1689s - raises Math::DomainError when passed -Infinity 1689s - returns [Infinity, 1] when passed Infinity 1689s - returns [NaN, 1] when passed NaN 1689s 1689s Math.log10 1689s - returns a float 1689s - returns the base-10 logarithm of the argument 1689s - raises an Math::DomainError if the argument is less than 0 1689s - raises a TypeError if the argument cannot be coerced with Float() 1689s - returns NaN given NaN 1689s - raises a TypeError if the argument is nil 1689s - accepts any argument that can be coerced with Float() 1689s 1689s Math#log10 1689s - is accessible as a private instance method 1689s 1689s Math.log2 1689s - returns a float 1689s - returns the natural logarithm of the argument 1689s - raises Math::DomainError if the argument is less than 0 1689s - raises a TypeError if the argument cannot be coerced with Float() 1689s - raises a TypeError if passed a numerical argument as a string 1689s - returns NaN given NaN 1689s - raises a TypeError if the argument is nil 1689s - accepts any argument that can be coerced with Float() 1689s 1689s Math.log 1689s - returns a float 1689s - returns the natural logarithm of the argument 1689s - raises an Math::DomainError if the argument is less than 0 1689s - raises a TypeError if the argument cannot be coerced with Float() 1689s - raises a TypeError for numerical values passed as string 1689s - accepts a second argument for the base 1689s - raises a TypeError when the numerical base cannot be coerced to a float 1689s - returns NaN given NaN 1689s - raises a TypeError if the argument is nil 1689s - accepts any argument that can be coerced with Float() 1689s 1689s Math#log 1689s - is accessible as a private instance method 1689s 1689s Math.sin 1689s - returns a float 1689s - returns the sine of the argument expressed in radians 1689s - raises a TypeError if the argument cannot be coerced with Float() 1689s - returns NaN given NaN 1689s - raises a TypeError if the argument is nil 1689s - accepts any argument that can be coerced with Float() 1689s 1689s Math#sin 1689s - is accessible as a private instance method 1689s 1689s Math.sinh 1689s - returns a float 1689s - returns the hyperbolic sin of the argument 1689s - raises a TypeError if the argument cannot be coerced with Float() 1689s - returns NaN given NaN 1689s - raises a TypeError if the argument is nil 1689s - accepts any argument that can be coerced with Float() 1689s 1689s Math#sinh 1689s - is accessible as a private instance method 1689s 1689s Math.sqrt 1689s - returns a float 1689s - returns the square root of the argument 1689s - raises a TypeError if the argument cannot be coerced with Float() 1689s - returns NaN given NaN 1689s - raises a TypeError if the argument is nil 1689s - accepts any argument that can be coerced with Float() 1689s - raises a Math::DomainError when given a negative number 1689s 1689s Math#sqrt 1689s - is accessible as a private instance method 1689s 1689s Math.tan 1689s - returns a float 1689s - returns the tangent of the argument 1689s - returns NaN if called with +-Infinity 1689s - raises a TypeError if the argument cannot be coerced with Float() 1689s - returns NaN given NaN 1689s - raises a TypeError if the argument is nil 1689s - accepts any argument that can be coerced with Float() 1689s 1689s Math#tan 1689s - is accessible as a private instance method 1689s 1689s Math.tanh 1689s - returns a float 1689s - returns the hyperbolic tangent of the argument 1689s - raises a TypeError if the argument cannot be coerced with Float() 1689s - returns NaN given NaN 1689s - raises a TypeError if the argument is nil 1689s - accepts any argument that can be coerced with Float() 1689s 1689s Math#tanh 1689s - is accessible as a private instance method 1689s 1689s Method#arity returns zero 1689s - for method definition 'def m() end' 1689s - for method definition 'def n(&b) end' 1689s 1689s Method#arity returns positive values 1689s - for method definition 1689s def m(a) end 1689s def n(a, b) end 1689s def o(a, b, c) end 1689s def p(a, b, c, d) end 1689s - for method definition 1689s def m(a:) end 1689s def n(a:, b:) end 1689s def o(a: 1, b:, c:, d: 2) end 1689s - for method definition 1689s def m(a, b:) end 1689s def n(a, b:, &l) end 1689s - for method definition 1689s def m(a, b, c:, d: 1) end 1689s def n(a, b, c:, d: 1, **k, &l) end 1689s 1689s Method#arity returns negative values 1689s - for method definition 1689s def m(a=1) end 1689s def n(a=1, b=2) end 1689s - for method definition 1689s def m(a, b=1) end 1689s def n(a, b, c=1, d=2) end 1689s - for method definition 1689s def m(a=1, *b) end 1689s def n(a=1, b=2, *c) end 1689s - for method definition 1689s def m(*) end 1689s def n(*a) end 1689s - for method definition 1689s def m(a, *) end 1689s def n(a, *b) end 1689s def o(a, b, *c) end 1689s def p(a, b, c, *d) end 1689s - for method definition 1689s def m(*a, b) end 1689s def n(*a, b, c) end 1689s def o(*a, b, c, d) end 1689s - for method definition 1689s def m(a, *b, c) end 1689s def n(a, b, *c, d, e) end 1689s - for method definition 1689s def m(a, b=1, c=2, *d, e, f) end 1689s def n(a, b, c=1, *d, e, f, g) end 1689s - for method definition 1689s def m(a: 1) end 1689s def n(a: 1, b: 2) end 1689s - for method definition 1689s def m(a=1, b: 2) end 1689s def n(*a, b: 1) end 1689s def o(a=1, b: 2) end 1689s def p(a=1, *b, c: 2, &l) end 1689s - for method definition 1689s def m(**k, &l) end 1689s def n(*a, **k) end 1689s def o(a: 1, b: 2, **k) end 1689s - for method definition 'def m(a=1, *b, c:, d: 2, **k, &l) end' 1689s - for method definition 1689s def m(a, b=1, *c, d, e:, f: 2, **k, &l) end 1689s def n(a, b=1, *c, d:, e:, f: 2, **k, &l) end 1689s def o(a=0, b=1, *c, d, e:, f: 2, **k, &l) end 1689s def p(a=0, b=1, *c, d:, e:, f: 2, **k, &l) end 1689s 1689s Method#arity for a Method generated by respond_to_missing? 1689s - returns -1 1689s 1689s Method#arity for a Method generated by attr_reader 1689s - return 0 1689s 1689s Method#arity for a Method generated by attr_writer 1689s - returns 1 1689s 1689s Method#call 1689s - invokes the method with the specified arguments, returning the method's return value 1689s - raises an ArgumentError when given incorrect number of arguments 1689s 1689s Method#call for a Method generated by respond_to_missing? 1689s - invokes method_missing with the specified arguments and returns the result 1689s - invokes method_missing with the method name and the specified arguments 1689s - invokes method_missing dynamically 1689s - does not call the original method name even if it now exists 1689s 1689s Method#=== 1689s - invokes the method with the specified arguments, returning the method's return value 1689s - raises an ArgumentError when given incorrect number of arguments 1689s 1689s Method#=== for a Method generated by respond_to_missing? 1689s - invokes method_missing with the specified arguments and returns the result 1689s - invokes method_missing with the method name and the specified arguments 1689s - invokes method_missing dynamically 1689s - does not call the original method name even if it now exists 1689s 1689s Method#clone 1689s - returns a copy of the method 1689s 1689s Method#<< 1689s - returns a Proc that is the composition of self and the passed Proc 1689s - calls passed Proc with arguments and then calls self with result 1689s - accepts any callable object 1689s - raises TypeError if passed not callable object 1689s - does not try to coerce argument with #to_proc 1689s 1689s Method#<< composition 1689s - is a lambda 1689s - may accept multiple arguments 1689s 1689s Method#>> 1689s - returns a Proc that is the composition of self and the passed Proc 1689s - calls passed Proc with arguments and then calls self with result 1689s - accepts any callable object 1689s - raises TypeError if passed not callable object 1689s - does not try to coerce argument with #to_proc 1689s 1689s Method#>> composition 1689s - is a lambda 1689s - may accept multiple arguments 1689s 1689s Method#curry 1689s - returns a curried proc 1689s 1689s Method#curry with optional arity argument 1689s - returns a curried proc when given correct arity 1689s - raises ArgumentError when the method requires less arguments than the given arity 1689s - raises ArgumentError when the method requires more arguments than the given arity 1689s 1689s Method#[] 1689s - invokes the method with the specified arguments, returning the method's return value 1689s - raises an ArgumentError when given incorrect number of arguments 1689s 1689s Method#[] for a Method generated by respond_to_missing? 1689s - invokes method_missing with the specified arguments and returns the result 1689s - invokes method_missing with the method name and the specified arguments 1689s - invokes method_missing dynamically 1689s - does not call the original method name even if it now exists 1689s 1689s Method#eql? 1689s - returns true if methods are the same 1689s - returns true on aliased methods 1689s - returns true if the two core methods are aliases 1689s - returns false on a method which is neither aliased nor the same method 1689s - returns false for a method which is not bound to the same object 1689s - returns false if the two methods are bound to the same object but were defined independently 1689s - returns true if a method was defined using the other one 1689s - returns false if comparing a method defined via define_method and def 1689s - returns false if the two methods are bound to different objects, have the same names, and identical bodies 1689s - returns false if the argument is not a Method object 1689s - returns false if the argument is an unbound version of self 1689s 1689s Method#eql? missing methods 1689s - returns true for the same method missing 1689s - calls respond_to_missing? with true to include private methods 1689s 1689s Method#== 1689s - returns true if methods are the same 1689s - returns true on aliased methods 1689s - returns true if the two core methods are aliases 1689s - returns false on a method which is neither aliased nor the same method 1689s - returns false for a method which is not bound to the same object 1689s - returns false if the two methods are bound to the same object but were defined independently 1689s - returns true if a method was defined using the other one 1689s - returns false if comparing a method defined via define_method and def 1689s - returns false if the two methods are bound to different objects, have the same names, and identical bodies 1689s - returns false if the argument is not a Method object 1689s - returns false if the argument is an unbound version of self 1689s 1689s Method#== missing methods 1689s - returns true for the same method missing 1689s - calls respond_to_missing? with true to include private methods 1689s 1689s Method#hash 1689s - returns the same value for user methods that are eql? 1689s - returns the same value for builtin methods that are eql? 1689s 1689s Method#inspect 1689s - returns a String 1689s - returns a String for methods defined with attr_accessor 1689s - returns a String containing 'Method' 1689s - returns a String containing the method name 1689s - returns a String containing method arguments 1689s - returns a String containing the Module the method is defined in 1689s - returns a String containing the Module the method is referenced from 1689s - returns a String including all details 1689s - does not show the defining module if it is the same as the receiver class 1689s - returns a String containing the Module containing the method if object has a singleton class but method is not defined in the singleton class 1689s - returns a String containing the singleton class if method is defined in the singleton class 1689s - shows the metaclass and the owner for a Module instance method retrieved from a class 1689s 1689s Method#name 1689s - returns the name of the method 1689s - returns the name even when aliased 1689s 1689s Method#name for a Method generated by respond_to_missing? 1689s - returns the name passed to respond_to_missing? 1689s 1689s Method#original_name 1689s - returns the name of the method 1689s - returns the original name when aliased 1689s - returns the original name even when aliased twice 1689s 1689s Method#owner 1689s - returns the owner of the method 1689s - returns the same owner when aliased in the same classes 1689s - returns the class/module it was defined in 1689s 1689s Method#owner for a Method generated by respond_to_missing? 1689s - returns the owner of the method 1689s 1689s Method#parameters 1689s - returns an empty Array when the method expects no arguments 1689s - returns [[:req,:name]] for a method expecting one required argument called 'name' 1689s - returns [[:req,:a],[:req,:b]] for a method expecting two required arguments called 'a' and 'b'' 1689s - returns [[:block,:blk]] for a method expecting one block argument called 'a' 1689s - returns [[:req,:a],[:block,:b] for a method expecting a required argument ('a') and a block argument ('b') 1689s - returns [[:req,:a],[:req,:b],[:block,:c] for a method expecting two required arguments ('a','b') and a block argument ('c') 1689s - returns [[:opt,:a]] for a method expecting one optional argument ('a') 1689s - returns [[:req,:a],[:opt,:b]] for a method expecting one required argument ('a') and one optional argument ('b') 1689s - returns [[:req,:a],[:opt,:b]] for a method expecting one required argument ('a') and one optional argument ('b') 1689s - returns [[:req,:a],[:opt,:b],[:opt,:c]] for a method expecting one required argument ('a') and two optional arguments ('b','c') 1689s - returns [[:req,:a],[:req,:b],[:opt,:c]] for a method expecting two required arguments ('a','b') and one optional arguments ('c') 1689s - returns [[:opt,:a],[:block,:b]] for a method expecting one required argument ('a') and one block argument ('b') 1689s - returns [[:req,:a],[:opt,:b],[:block,:c]] for a method expecting one required argument ('a'), one optional argument ('b'), and a block ('c') 1689s - returns [[:req,:a],[:opt,:b],[:opt,:c],[:block,:d]] for a method expecting one required argument ('a'), two optional arguments ('b','c'), and a block ('d') 1689s - returns [[:rest,:a]] for a method expecting a single splat argument ('a') 1689s - returns [[:req,:a],[:rest,:b]] for a method expecting a splat argument ('a') and a required argument ('b') 1689s - returns [[:req,:a],[:req,:b],[:rest,:c]] for a method expecting two required arguments ('a','b') and a splat argument ('c') 1689s - returns [[:req,:a],[:opt,:b],[:rest,:c]] for a method expecting a required argument ('a','b'), an optional argument ('b'), and a splat argument ('c') 1689s - returns [[:req,:a],[:req,:b],[:opt,:b],[:rest,:d]] for a method expecting two required arguments ('a','b'), an optional argument ('c'), and a splat argument ('d') 1689s - returns [[:req,:a],[:opt,:b],[:opt,:c],[:rest,:d]] for a method expecting a required argument ('a'), two optional arguments ('b','c'), and a splat argument ('d') 1689s - returns [[:rest,:a],[:block,:b]] for a method expecting a splat argument ('a') and a block argument ('b') 1689s - returns [[:req,:a],[:rest,:b],[:block,:c]] for a method expecting a required argument ('a'), a splat argument ('b'), and a block ('c') 1689s - returns [[:req,:a],[:req,:b],[:rest,:c],[:block,:d]] for a method expecting two required arguments ('a','b'), a splat argument ('c'), and a block ('d') 1689s - returns [[:req,:a],[:opt,:b],[:rest,:c],[:block,:d]] for a method expecting a required argument ('a'), a splat argument ('c'), and a block ('d') 1689s - returns [[:req,:a],[:req,:b],[:opt,:c],[:block,:d]] for a method expecting two required arguments ('a','b'), an optional argument ('c'), a splat argument ('d'), and a block ('e') 1689s - returns [[:rest,:a],[:req,:b]] for a method expecting a splat argument ('a') and a required argument ('b') 1689s - returns [[:rest,:a],[:req,:b],[:req,:c]] for a method expecting a splat argument ('a') and two required arguments ('b','c') 1689s - returns [[:rest,:a],[:req,:b],[:block,:c]] for a method expecting a splat argument ('a'), a required argument ('b'), and a block ('c') 1689s - returns [[:key,:a]] for a method with a single optional keyword argument 1689s - returns [[:keyrest,:a]] for a method with a keyword rest argument 1689s - returns [[:keyreq,:a]] for a method with a single required keyword argument 1689s - works with ->(){} as the value of an optional argument 1689s - returns [] for a define_method method with explicit no-args || specification 1689s - returns [[:rest, :x]] for a define_method method with rest arg 'x' only 1689s - returns [[:req, :x]] for a define_method method expecting one required argument 'x' 1689s - returns [[:req, :x], [:req, :y]] for a define_method method expecting two required arguments 'x' and 'y' 1689s - returns [] for a define_method method with no args specification 1689s - returns [[:req]] for a define_method method with a grouping as its only argument 1689s - returns [[:opt, :x]] for a define_method method with an optional argument 'x' 1689s - returns [[:rest]] for a Method generated by respond_to_missing? 1689s - adds nameless rest arg for "star" argument 1689s - adds nameless keyrest arg for "double star" argument 1689s - adds block arg with name & for anonymous block argument 1689s - returns the args and block for a splat and block argument 1689s - returns [] for a Method generated by attr_reader 1689s - return [[:req]] for a Method generated by attr_writer 1689s - returns all parameters defined with the name _ as _ 1689s - returns [[:rest]] for core methods with variable-length argument lists 1689s - returns [[:rest]] or [[:opt]] for core methods with optional arguments 1689s - returns [[:req]] for each parameter for core methods with fixed-length argument lists 1689s 1689s Method#private? 1689s - returns false when the method is public 1689s - returns false when the method is protected 1689s - returns true when the method is private 1689s 1689s Method#protected? 1689s - returns false when the method is public 1689s - returns true when the method is protected 1689s - returns false when the method is private 1689s 1689s Method#public? 1689s - returns true when the method is public 1689s - returns false when the method is protected 1689s - returns false when the method is private 1689s 1689s Method#receiver 1689s - returns the receiver of the method 1689s - returns the right receiver even when aliased 1689s 1689s Method#receiver for a Method generated by respond_to_missing? 1689s - returns the receiver of the method 1689s 1689s Method#source_location 1689s - returns an Array 1689s - sets the first value to the path of the file in which the method was defined 1689s - sets the last value to an Integer representing the line on which the method was defined 1689s - returns the last place the method was defined 1689s - returns the location of the original method even if it was aliased 1689s - works for methods defined with a block 1689s - works for methods defined with a Method 1689s - works for methods defined with an UnboundMethod 1689s - works for methods whose visibility has been overridden in a subclass 1689s - works for core methods where it returns nil or 1691s - returns -1 if self is a subclass of or includes the given module 1691s - returns 0 if self is the same as the given module 1691s - returns +1 if self is a superclass of or included by the given module 1691s - returns nil if self and the given module are not related 1691s - returns nil if the argument is not a class/module 1691s 1691s Module#const_defined? 1691s - returns true if the given Symbol names a constant defined in the receiver 1691s - returns true if the constant is defined in the receiver's superclass 1691s - returns true if the constant is defined in a mixed-in module of the receiver's parent 1691s - returns true if the constant is defined in a mixed-in module (with prepends) of the receiver 1691s - returns true if the constant is defined in Object and the receiver is a module 1691s - returns true if the constant is defined in Object and the receiver is a class that has Object among its ancestors 1691s - returns false if the constant is defined in the receiver's superclass and the inherit flag is false 1691s - returns true if the constant is defined in the receiver's superclass and the inherit flag is true 1691s - coerces the inherit flag to a boolean 1691s - returns true if the given String names a constant defined in the receiver 1691s - returns true when passed a constant name with unicode characters 1691s - returns true when passed a constant name with EUC-JP characters 1691s - returns false if the constant is not defined in the receiver, its superclass, or any included modules 1691s - does not call #const_missing if the constant is not defined in the receiver 1691s - special cases Object and checks it's included Modules 1691s - returns true for toplevel constant when the name begins with '::' 1691s - returns true when passed a scoped constant name 1691s - returns true when passed a scoped constant name for a constant in the inheritance hierarchy and the inherited flag is default 1691s - returns true when passed a scoped constant name for a constant in the inheritance hierarchy and the inherited flag is true 1691s - returns false when passed a scoped constant name for a constant in the inheritance hierarchy and the inherited flag is false 1691s - returns false when the name begins with '::' and the toplevel constant does not exist 1691s - raises a NameError if the name does not start with a capital letter 1691s - raises a NameError if the name starts with '_' 1691s - raises a NameError if the name starts with '@' 1691s - raises a NameError if the name starts with '!' 1691s - returns true or false for the nested name 1691s - raises a NameError if the name contains non-alphabetic characters except '_' 1691s - raises a TypeError if conversion to a String by calling #to_str fails 1691s 1691s Module#const_defined? converts the given name to a String using #to_str 1691s - calls #to_str to convert the given name to a String 1691s - raises a TypeError if the given name can't be converted to a String 1691s - raises a NoMethodError if the given argument raises a NoMethodError during type coercion to a String 1691s 1691s Module#const_get 1691s - accepts a String or Symbol name 1691s - raises a NameError if no constant is defined in the search path 1691s - raises a NameError with the not found constant symbol 1691s - raises a NameError if the name does not start with a capital letter 1691s - raises a NameError if the name starts with a non-alphabetic character 1691s - raises a NameError if the name contains non-alphabetic characters except '_' 1691s - calls #to_str to convert the given name to a String 1691s - raises a TypeError if conversion to a String by calling #to_str fails 1691s - calls #const_missing on the receiver if unable to locate the constant 1691s - does not search the singleton class of a Class or Module 1691s - does not search the containing scope 1691s - raises a NameError if the constant is defined in the receiver's superclass and the inherit flag is false 1691s - searches into the receiver superclasses if the inherit flag is true 1691s - raises a NameError when the receiver is a Module, the constant is defined at toplevel and the inherit flag is false 1691s - raises a NameError when the receiver is a Class, the constant is defined at toplevel and the inherit flag is false 1691s - coerces the inherit flag to a boolean 1691s - accepts a toplevel scope qualifier 1691s - accepts a toplevel scope qualifier when inherit is false 1691s - returns a constant whose module is defined the toplevel 1691s - accepts a scoped constant name 1691s - raises a NameError if the name includes two successive scope separators 1691s - raises a NameError if only '::' is passed 1691s - raises a NameError if a Symbol has a toplevel scope qualifier 1691s - raises a NameError if a Symbol is a scoped constant name 1691s - does read private constants 1691s - does autoload a constant 1691s - does autoload a constant with a toplevel scope qualifier 1691s - does autoload a module and resolve a constant within 1691s - does autoload a non-toplevel module 1691s - raises a NameError when the nested constant does not exist on the module but exists in Object 1691s 1691s Module#const_get with statically assigned constants 1691s - searches the immediate class or module first 1691s - searches a module included in the immediate class before the superclass 1691s - searches the superclass before a module included in the superclass 1691s - searches a module included in the superclass 1691s - searches the superclass chain 1691s - returns a toplevel constant when the receiver is a Class 1691s - returns a toplevel constant when the receiver is a Module 1691s 1691s Module#const_get with dynamically assigned constants 1691s - searches the immediate class or module first 1691s - searches a module included in the immediate class before the superclass 1691s - searches the superclass before a module included in the superclass 1691s - searches a module included in the superclass 1691s - searches the superclass chain 1691s - returns a toplevel constant when the receiver is a Class 1691s - returns a toplevel constant when the receiver is a Module 1691s - returns the updated value of a constant 1691s 1691s Module#const_missing 1691s - is called when an undefined constant is referenced via literal form 1691s - is called when an undefined constant is referenced via #const_get 1691s - raises NameError and includes the name of the value that wasn't found 1691s - raises NameError and does not include toplevel Object 1691s - is called regardless of visibility 1691s 1691s Module#const_set 1691s - sets the constant specified by a String or Symbol to the given value 1691s - returns the value set 1691s - sets the name of an anonymous module 1691s - sets the name of a module scoped by an anonymous module 1691s - sets the name of contained modules when assigning a toplevel anonymous module 1691s - raises a NameError if the name does not start with a capital letter 1691s - raises a NameError if the name starts with a non-alphabetic character 1691s - raises a NameError if the name contains non-alphabetic characters except '_' 1691s - calls #to_str to convert the given name to a String 1691s - raises a TypeError if conversion to a String by calling #to_str fails 1691s 1691s Module#const_set when overwriting an existing constant 1691s - warns if the previous value was a normal value 1691s - does not warn if the previous value was an autoload 1691s - does not warn after a failed autoload 1691s - does not warn if the new value is an autoload 1691s 1691s Module#const_set on a frozen module 1691s - raises a FrozenError before setting the name 1691s 1691s Module#const_source_location 1691s - return empty path if constant defined in C code 1691s - accepts a String or Symbol name 1691s - returns nil if no constant is defined in the search path 1691s - raises a NameError if the name does not start with a capital letter 1691s - raises a NameError if the name starts with a non-alphabetic character 1691s - raises a NameError if the name contains non-alphabetic characters except '_' 1691s - calls #to_str to convert the given name to a String 1691s - raises a TypeError if conversion to a String by calling #to_str fails 1691s - does not search the singleton class of a Class or Module 1691s - does not search the containing scope 1691s - returns nil if the constant is defined in the receiver's superclass and the inherit flag is false 1691s - searches into the receiver superclasses if the inherit flag is true 1691s - returns nil when the receiver is a Module, the constant is defined at toplevel and the inherit flag is false 1691s - returns nil when the receiver is a Class, the constant is defined at toplevel and the inherit flag is false 1691s - accepts a toplevel scope qualifier 1691s - accepts a scoped constant name 1691s - returns updated location from const_set 1691s - raises a NameError if the name includes two successive scope separators 1691s - raises a NameError if only '::' is passed 1691s - raises a NameError if a Symbol has a toplevel scope qualifier 1691s - raises a NameError if a Symbol is a scoped constant name 1691s - does search private constants path 1691s - works for eval with a given line 1691s 1691s Module#const_source_location with dynamically assigned constants 1691s - searches a path in the immediate class or module first 1691s - searches a path in a module included in the immediate class before the superclass 1691s - searches a path in the superclass before a module included in the superclass 1691s - searches a path in a module included in the superclass 1691s - searches a path in the superclass chain 1691s - returns path to a toplevel constant when the receiver is a Class 1691s - returns path to a toplevel constant when the receiver is a Module 1691s - returns path to the updated value of a constant 1691s 1691s Module#const_source_location with statically assigned constants 1691s - works for the module and class keywords 1691s - searches location path the immediate class or module first 1691s - searches location path a module included in the immediate class before the superclass 1691s - searches location path the superclass before a module included in the superclass 1691s - searches location path a module included in the superclass 1691s - searches location path the superclass chain 1691s - returns location path a toplevel constant when the receiver is a Class 1691s - returns location path a toplevel constant when the receiver is a Module 1691s 1691s Module#const_source_location autoload 1691s - returns the autoload location while not resolved 1691s - returns where the constant was resolved when resolved 1691s 1691s Module.constants 1691s - returns an array of the names of all toplevel constants 1691s - returns an array of Symbol names 1691s - returns Module's constants when given a parameter 1691s 1691s Module#constants 1691s - returns an array of Symbol names of all constants defined in the module and all included modules 1691s - returns all constants including inherited when passed true 1691s - returns all constants including inherited when passed some object 1691s - doesn't returns inherited constants when passed false 1691s - doesn't returns inherited constants when passed nil 1691s - returns only public constants 1691s - returns only constants starting with an uppercase letter 1691s 1691s Module#constants 1691s - includes names of constants defined after a module is included 1691s 1691s passed { |a, b = 1| } creates a method that 1691s - raises an ArgumentError when passed zero arguments 1691s - has a default value for b when passed one argument 1691s - overrides the default argument when passed two arguments 1691s - raises an ArgumentError when passed three arguments 1691s 1691s Module#define_method when given an UnboundMethod 1691s - passes the given arguments to the new method 1691s - adds the new method to the methods list 1691s - sets the new method's visibility to the current frame's visibility 1691s 1691s Module#define_method when given an UnboundMethod defining a method on a singleton class 1691s - doesn't raise TypeError when calling the method 1691s 1691s Module#define_method when name is not a special private name given an UnboundMethod 1691s - sets the method owner for a dynamically added method with a different original owner 1691s 1691s Module#define_method when name is not a special private name given an UnboundMethod and called from the target module 1691s - sets the visibility of the method to the current visibility 1691s 1691s Module#define_method when name is not a special private name given an UnboundMethod and called from another module 1691s - sets the visibility of the method to public 1691s 1691s Module#define_method when name is not a special private name passed a block and called from the target module 1691s - sets the visibility of the method to the current visibility 1691s 1691s Module#define_method when name is not a special private name passed a block and called from another module 1691s - sets the visibility of the method to public 1691s 1691s Module#define_method when name is :initialize passed a block 1691s - sets visibility to private when method name is :initialize 1691s 1691s Module#define_method when name is :initialize given an UnboundMethod 1691s - sets the visibility to private when method is named :initialize 1691s 1691s Module#define_method 1691s - defines the given method as an instance method with the given name in self 1691s - calls #method_added after the method is added to the Module 1691s - defines a new method with the given name and the given block as body in self 1691s - raises TypeError if name cannot converted to String 1691s - converts non-String name to String with #to_str 1691s - raises TypeError when #to_str called on non-String name returns non-String value 1691s - raises a TypeError when the given method is no Method/Proc 1691s - uses provided Method/Proc even if block is specified 1691s - raises an ArgumentError when no block is given 1691s - does not use the caller block when no block is given 1691s - does not change the arity check style of the original proc 1691s - raises a FrozenError if frozen 1691s - accepts a Method (still bound) 1691s - raises a TypeError when a Method from a singleton class is defined on another class 1691s - raises a TypeError when a Method from one class is defined on an unrelated class 1691s - accepts an UnboundMethod from an attr_accessor method 1691s - accepts a proc from a method 1691s - accepts a proc from a Symbol 1691s - maintains the Proc's scope 1691s - accepts a String method name 1691s - is a public method 1691s - returns its symbol 1691s - allows an UnboundMethod from a module to be defined on a class 1691s - allows an UnboundMethod from a parent class to be defined on a child class 1691s - allows an UnboundMethod from a module to be defined on another unrelated module 1691s - allows an UnboundMethod of a Kernel method retrieved from Object to defined on a BasicObject subclass 1691s - raises a TypeError when an UnboundMethod from a child class is defined on a parent class 1691s - raises a TypeError when an UnboundMethod from one class is defined on an unrelated class 1691s - raises a TypeError when an UnboundMethod from a singleton class is defined on another class 1691s - defines a new method with public visibility when a Method passed and the class/module of the context isn't equal to the receiver of #define_method 1691s - defines the new method according to the scope visibility when a Method passed and the class/module of the context is equal to the receiver of #define_method 1691s 1691s Module#define_method passed { } creates a method that 1691s - returns the value computed by the block when passed zero arguments 1691s - raises an ArgumentError when passed one argument 1691s - raises an ArgumentError when passed two arguments 1691s 1691s Module#define_method passed { || } creates a method that 1691s - returns the value computed by the block when passed zero arguments 1691s - raises an ArgumentError when passed one argument 1691s - raises an ArgumentError when passed two arguments 1691s 1691s Module#define_method passed { |a| } creates a method that 1691s - raises an ArgumentError when passed zero arguments 1691s - raises an ArgumentError when passed zero arguments and a block 1691s - raises an ArgumentError when passed two arguments 1691s - receives the value passed as the argument when passed one argument 1691s 1691s Module#define_method passed { |a,| } creates a method that 1691s - raises an ArgumentError when passed zero arguments 1691s - raises an ArgumentError when passed zero arguments and a block 1691s - raises an ArgumentError when passed two arguments 1691s - receives the value passed as the argument when passed one argument 1691s - does not destructure the passed argument 1691s 1691s Module#define_method passed { |*a| } creates a method that 1691s - receives an empty array as the argument when passed zero arguments 1691s - receives the value in an array when passed one argument 1691s - receives the values in an array when passed two arguments 1691s 1691s Module#define_method passed { |a, *b| } creates a method that 1691s - raises an ArgumentError when passed zero arguments 1691s - returns the value computed by the block when passed one argument 1691s - returns the value computed by the block when passed two arguments 1691s - returns the value computed by the block when passed three arguments 1691s 1691s Module#define_method passed { |a, b| } creates a method that 1691s - returns the value computed by the block when passed two arguments 1691s - raises an ArgumentError when passed zero arguments 1691s - raises an ArgumentError when passed one argument 1691s - raises an ArgumentError when passed one argument and a block 1691s - raises an ArgumentError when passed three arguments 1691s 1691s Module#define_method passed { |a, b, *c| } creates a method that 1691s - raises an ArgumentError when passed zero arguments 1691s - raises an ArgumentError when passed one argument 1691s - raises an ArgumentError when passed one argument and a block 1691s - receives an empty array as the third argument when passed two arguments 1691s - receives the third argument in an array when passed three arguments 1691s 1691s Module#define_method when passed a Method object 1691s - defines a method with the same #arity as the original 1691s - defines a method with the same #parameters as the original 1691s 1691s Module#define_method when passed an UnboundMethod object 1691s - defines a method with the same #arity as the original 1691s - defines a method with the same #parameters as the original 1691s 1691s Module#define_method when passed a block behaves exactly like a lambda 1691s - for return 1691s - for redo 1691s 1691s Module#define_singleton_method 1691s - defines the given method as an class method with the given name in self 1691s 1691s Module#deprecate_constant 1691s - accepts multiple symbols and strings as constant names 1691s - returns self 1691s - raises a NameError when given an undefined name 1691s 1691s Module#deprecate_constant when accessing the deprecated module 1691s - passes the accessing 1691s - warns with a message 1691s - does not warn if Warning[:deprecated] is false 1691s 1691s Module#eql? 1691s - returns true if self and the given module are the same 1691s 1691s Module#equal? 1691s - returns true if self and the given module are the same 1691s 1691s Module#== 1691s - returns true if self and the given module are the same 1691s 1691s Module#extend_object 1691s - is a private method 1691s - is called when #extend is called on an object 1691s - extends the given object with its constants and methods by default 1691s - is called even when private 1691s 1691s Module#extend_object on Class 1691s - is undefined 1691s - raises a TypeError if calling after rebinded to Class 1691s 1691s Module#extend_object when given a frozen object 1691s - raises a RuntimeError before extending the object 1691s 1691s Module#extended 1691s - is called when an object gets extended with self 1691s - is called after Module#extend_object 1691s - is private in its default implementation 1691s 1691s Module#freeze 1691s - needs to be reviewed for spec completeness 1691s 1691s Module#> 1691s - returns false if self is a subclass of or includes the given module 1691s - returns true if self is a superclass of or included by the given module 1691s - returns false if self is the same as the given module 1691s - returns nil if self is not related to the given module 1691s - raises a TypeError if the argument is not a class/module 1691s 1691s Module#>= 1691s - returns true if self is a superclass of, the same as or included by given module 1691s - returns nil if self is not related to the given module 1691s - returns false if self is a subclass of or includes the given module 1691s - raises a TypeError if the argument is not a class/module 1691s 1691s Module#include 1691s - is a public method 1691s - calls #append_features(self) in reversed order on each module 1691s - adds all ancestor modules when a previously included module is included again 1691s - raises a TypeError when the argument is not a Module 1691s - does not raise a TypeError when the argument is an instance of a subclass of Module 1691s - imports constants to modules and classes 1691s - shadows constants from ancestors 1691s - does not override existing constants in modules and classes 1691s - imports instance methods to modules and classes 1691s - does not import methods to modules and classes 1691s - attaches the module as the caller's immediate ancestor 1691s - doesn't include module if it is included in a super class 1691s - recursively includes new mixins 1691s - preserves ancestor order 1691s - detects cyclic includes 1691s - doesn't accept no-arguments 1691s - returns the class it's included into 1691s - ignores modules it has already included via module mutual inclusion 1691s - clears any caches 1691s - updates the method when an included module is updated 1691s - updates the method when a module included after a call is later updated 1691s - updates the method when a nested included module is updated 1691s - updates the method when a new module is included 1691s - updates the method when a new module with nested module is included 1691s - updates the constant when an included module is updated 1691s - updates the constant when a module included after a call is later updated 1691s - updates the constant when a module included in another module after a call is later updated 1691s - updates the constant when a nested included module is updated 1691s - updates the constant when a new module is included 1691s - updates the constant when a new module with nested module is included 1691s - overrides a previous super method call 1691s 1691s Module#include? 1691s - returns true if the given module is included by self or one of it's ancestors 1691s - returns false if given module is equal to self 1691s - raises a TypeError when no module was given 1691s 1691s Module#included_modules 1691s - returns a list of modules included in self 1691s 1691s Module#included 1691s - is invoked when self is included in another module or class 1691s - allows extending self with the object into which it is being included 1691s - is private in its default implementation 1691s - works with super using a singleton class 1691s 1691s Module#initialize_copy 1691s - should retain singleton methods when duped 1691s - should produce a duped module with inspectable class methods 1691s 1691s Module#initialize 1691s - accepts a block 1691s - is called on subclasses 1691s 1691s Module#instance_method 1691s - is a public method 1691s - requires an argument 1691s - returns an UnboundMethod corresponding to the given name 1691s - returns an UnboundMethod corresponding to the given name from a superclass 1691s - returns an UnboundMethod corresponding to the given name from an included Module 1691s - returns an UnboundMethod when given a protected method name 1691s - returns an UnboundMethod when given a private method name 1691s - gives UnboundMethod method name, Module defined in and Module extracted from 1691s - raises a TypeError if the given name is not a String/Symbol 1691s - accepts String name argument 1691s - accepts Symbol name argument 1691s - converts non-String name by calling #to_str method 1691s - raises TypeError when passed non-String name and #to_str returns non-String value 1691s - raises a NameError if the method has been undefined 1691s - raises a NameError if the method does not exist 1691s - sets the NameError#name attribute to the name of the missing method 1691s 1691s Module#instance_methods 1691s - does not return methods undefined in a superclass 1691s - only includes module methods on an included module 1691s - does not return methods undefined in a subclass 1691s - does not return methods undefined in the current class 1691s - does not return methods from an included module that are undefined in the class 1691s - returns the public and protected methods of self if include_super is false 1691s - returns the public and protected methods of self and it's ancestors 1691s - makes a private Object instance method public in Kernel 1691s 1691s Module#< 1691s - returns true if self is a subclass of or includes the given module 1691s - returns false if self is a superclass of or included by the given module 1691s - returns false if self is the same as the given module 1691s - returns nil if self is not related to the given module 1691s - raises a TypeError if the argument is not a class/module 1691s 1691s Module#<= 1691s - returns true if self is a subclass of, the same as or includes the given module 1691s - returns nil if self is not related to the given module 1691s - returns false if self is a superclass of or is included by the given module 1691s - raises a TypeError if the argument is not a class/module 1691s 1691s Module#method_added 1691s - is a private instance method 1691s - returns nil in the default implementation 1691s - is called when a new instance method is defined in self 1691s - is not called when a singleton method is added 1691s - is not called when a method is undefined in self 1691s - is not called when a method changes visibility 1691s - is not called when a method is copied via module_function, rather #singleton_method_added is called 1691s - is called with a precise caller location with the line of the 'def' 1691s 1691s Module#method_defined? 1691s - returns true if a public or private method with the given name is defined in self, self's ancestors or one of self's included modules 1691s - does not search Object or Kernel when called on a module 1691s - raises a TypeError when the given object is not a string/symbol 1691s - converts the given name to a string using to_str 1691s 1691s Module#method_defined? when passed true as a second optional argument 1691s - performs a lookup in ancestors 1691s 1691s Module#method_defined? when passed false as a second optional argument 1691s - checks only the class itself 1691s 1691s Module#method_removed 1691s - is a private instance method 1691s - returns nil in the default implementation 1691s - is called when a method is removed from self 1691s 1691s Module#method_undefined 1691s - is a private instance method 1691s - returns nil in the default implementation 1691s - is called when a method is undefined from self 1691s 1691s Module#module_eval 1691s - evaluates a given string in the context of self 1691s - does not add defined methods to other classes 1691s - resolves constants in the caller scope 1691s - resolves constants in the caller scope ignoring send 1691s - resolves constants in the receiver's scope 1691s - defines constants in the receiver's scope 1691s - evaluates a given block in the context of self 1691s - passes the module as the first argument of the block 1691s - uses the optional filename and lineno parameters for error messages 1691s - converts a non-string filename to a string using to_str 1691s - raises a TypeError when the given filename can't be converted to string using to_str 1691s - converts non string eval-string to string using to_str 1691s - raises a TypeError when the given eval-string can't be converted to string using to_str 1691s - raises an ArgumentError when no arguments and no block are given 1691s - raises an ArgumentError when more than 3 arguments are given 1691s - raises an ArgumentError when a block and normal arguments are given 1691s - adds methods respecting the lexical constant scope 1691s - activates refinements from the eval scope 1691s - activates refinements from the eval scope with block 1691s 1691s Module#module_exec 1691s - does not add defined methods to other classes 1691s - defines method in the receiver's scope 1691s - evaluates a given block in the context of self 1691s - raises a LocalJumpError when no block is given 1691s - passes arguments to the block 1691s 1691s Module#module_function 1691s - is a private method 1691s 1691s Module#module_function on Class 1691s - is undefined 1691s - raises a TypeError if calling after rebinded to Class 1691s 1691s Module#module_function with specific method names 1691s - creates duplicates of the given instance methods on the Module object 1691s - returns argument or arguments if given 1691s - creates an independent copy of the method, not a redirect 1691s - makes the instance methods private 1691s - makes the new Module methods public 1691s - tries to convert the given names to strings using to_str 1691s - raises a TypeError when the given names can't be converted to string using to_str 1691s - can make accessible private methods 1691s - creates Module methods that super up the singleton class of the module 1691s 1691s Module#module_function with specific method names methods created with define_method passed a block 1691s - creates duplicates of the given instance methods 1691s 1691s Module#module_function with specific method names methods created with define_method passed a method 1691s - creates duplicates of the given instance methods 1691s 1691s Module#module_function with specific method names methods created with define_method passed an unbound method 1691s - creates duplicates of the given instance methods 1691s 1691s Module#module_function as a toggle (no arguments) in a Module body 1691s - makes any subsequently defined methods module functions with the normal semantics 1691s - returns nil 1691s - stops creating module functions if the body encounters another toggle like public/protected/private without arguments 1691s - does not stop creating module functions if the body encounters public/protected/private WITH arguments 1691s - does not affect module_evaled method definitions also if outside the eval itself 1691s - has no effect if inside a module_eval if the definitions are outside of it 1691s - functions normally if both toggle and definitions inside a module_eval 1691s - affects eval'ed method definitions also even when outside the eval itself 1691s - functions normally if both toggle and definitions inside a eval 1691s 1691s Module#module_function as a toggle (no arguments) in a Module body methods are defined with define_method passed a block 1691s - makes any subsequently defined methods module functions with the normal semantics 1691s 1691s Module#module_function as a toggle (no arguments) in a Module body methods are defined with define_method passed a method 1691s - makes any subsequently defined methods module functions with the normal semantics 1691s 1691s Module#module_function as a toggle (no arguments) in a Module body methods are defined with define_method passed an unbound method 1691s - makes any subsequently defined methods module functions with the normal semantics 1691s 1691s Module#name 1691s - is nil for an anonymous module 1691s - is not nil when assigned to a constant in an anonymous module 1691s - is not nil for a nested module created with the module keyword 1691s - returns nil for a singleton class 1691s - may be the repeated in different module objects 1691s - is set after it is removed from a constant 1691s - is set after it is removed from a constant under an anonymous module 1691s - is set when opened with the module keyword 1691s - is set when a nested module is opened with the module keyword 1691s - is set when assigning to a constant (constant path matches outer module name) 1691s - is set when assigning to a constant (constant path does not match outer module name) 1691s - is not modified when assigning to a new constant after it has been accessed 1691s - is not modified when assigned to a different anonymous module 1691s - is set with a conditional assignment to a nested constant 1691s - is set with a conditional assignment to a constant 1691s - preserves the encoding in which the class was defined 1691s - is set when the anonymous outer module name is set (module in one single constant) 1691s - is set when the anonymous outer module name is set (module in several constants) 1691s - returns a frozen String 1691s - always returns the same String for a given Module 1691s 1691s Module::Nesting 1691s - returns the list of Modules nested at the point of call 1691s - returns the nesting for module/class declaring the called method 1691s 1691s Module.nesting 1691s - needs to be reviewed for spec completeness 1691s 1691s Module.new 1691s - creates a new anonymous Module 1691s - creates a new Module and passes it to the provided block 1691s - evaluates a passed block in the context of the module 1691s 1691s Module#prepend_features 1691s - is a private method 1691s - gets called when self is included in another module/class 1691s - raises an ArgumentError on a cyclic prepend 1691s - clears caches of the given module 1691s 1691s Module#prepend_features on Class 1691s - is undefined 1691s - raises a TypeError if calling after rebinded to Class 1691s 1691s Module#prepend 1691s - is a public method 1691s - does not affect the superclass 1691s - calls #prepend_features(self) in reversed order on each module 1691s - updates the method when a module is prepended 1691s - updates the method when a prepended module is updated 1691s - updates the method when there is a base included method and the prepended module overrides it 1691s - updates the method when there is a base included method and the prepended module is later updated 1691s - updates the method when a module prepended after a call is later updated 1691s - updates the method when a module is prepended after another and the method is defined later on that module 1691s - updates the method when a module is included in a prepended module and the method is defined later 1691s - updates the method when a new module with an included module is prepended 1691s - updates the constant when a module is prepended 1691s - updates the constant when a prepended module is updated 1691s - updates the constant when there is a base included constant and the prepended module overrides it 1691s - updates the constant when there is a base included constant and the prepended module is later updated 1691s - updates the constant when a module prepended after a constant is later updated 1691s - updates the constant when a module is prepended after another and the constant is defined later on that module 1691s - updates the constant when a module is included in a prepended module and the constant is defined later 1691s - updates the constant when a new module with an included module is prepended 1691s - raises a TypeError when the argument is not a Module 1691s - does not raise a TypeError when the argument is an instance of a subclass of Module 1691s - imports constants 1691s - imports instance methods 1691s - does not import methods to modules and classes 1691s - allows wrapping methods 1691s - also prepends included modules 1691s - prepends multiple modules in the right order 1691s - includes prepended modules in ancestors 1691s - reports the prepended module as the method owner 1691s - reports the prepended module as the unbound method owner 1691s - causes the prepended module's method to be aliased by alias_method 1691s - reports the class for the owner of an aliased method on the class 1691s - reports the class for the owner of a method aliased from the prepended module 1691s - sees an instance of a prepended class as kind of the prepended module 1691s - keeps the module in the chain when dupping the class 1691s - depends on prepend_features to add the module 1691s - adds the module in the subclass chains 1691s - inserts a later prepended module into the chain 1691s - works with subclasses 1691s - throws a NoMethodError when there is no more superclass 1691s - calls prepended after prepend_features 1691s - prepends a module if it is included in a super class 1691s - detects cyclic prepends 1691s - doesn't accept no-arguments 1691s - returns the class it's included into 1691s - clears any caches 1691s - supports super when the module is prepended into a singleton class 1691s - supports super when the module is prepended into a singleton class with a class super 1691s - does not interfere with a define_method super in the original class 1691s - does not prepend a second copy if the module already indirectly exists in the hierarchy 1691s 1691s Module#prepend called on a module 1691s - does not obscure the module's methods from reflective access 1691s 1691s Module#prepended 1691s - is a private method 1691s - is invoked when self is prepended to another module or class 1691s 1691s Module#private_class_method 1691s - makes an existing class method private 1691s - makes an existing class method private up the inheritance tree 1691s - accepts more than one method at a time 1691s - raises a NameError if class method doesn't exist 1691s - makes a class method private 1691s - raises a NameError when the given name is not a method 1691s - raises a NameError when the given name is an instance method 1691s 1691s Module#private_class_method when single argument is passed and is an array 1691s - sets the visibility of the given methods to private 1691s 1691s Module#private_constant 1691s - can only be passed constant names defined in the target (self) module 1691s - accepts strings as constant names 1691s - accepts multiple names 1691s 1691s Module#private_instance_methods 1691s - returns a list of private methods in module and its ancestors 1691s - when passed false as a parameter, should return only methods defined in that module 1691s - default list should be the same as passing true as an argument 1691s 1691s Module#private_instance_methods when not passed an argument 1691s - returns a unique list for a class including a module 1691s - returns a unique list for a subclass 1691s 1692s Module#private_instance_methods when passed true 1692s - returns a unique list for a class including a module 1692s - returns a unique list for a subclass 1692s 1692s Module#private_method_defined? 1692s - returns true if the named private method is defined by module or its ancestors 1692s - returns false if method is not a private method 1692s - returns false if the named method is not defined by the module or its ancestors 1692s - accepts symbols for the method name 1692s - raises a TypeError if passed an Integer 1692s - raises a TypeError if passed nil 1692s - raises a TypeError if passed false 1692s - raises a TypeError if passed an object that does not defined #to_str 1692s - raises a TypeError if passed an object that defines #to_sym 1692s - calls #to_str to convert an Object 1692s 1692s Module#private_method_defined? when passed true as a second optional argument 1692s - performs a lookup in ancestors 1692s 1692s Module#private_method_defined? when passed false as a second optional argument 1692s - checks only the class itself 1692s 1692s Module#private 1692s - is a private method 1692s - makes the target method uncallable from other types 1692s - makes a public Object instance method private in a new module 1692s - makes a public Object instance method private in Kernel 1692s - returns argument or arguments if given 1692s - raises a NameError when given an undefined name 1692s - only makes the method private in the class it is called on 1692s - continues to allow a prepended module method to call super 1692s 1692s Module#private with argument 1692s - does not clone method from the ancestor when setting to the same visibility in a child 1692s 1692s Module#private with argument one or more arguments 1692s - sets visibility of given method names 1692s 1692s Module#private with argument array as a single argument 1692s - sets visibility of given method names 1692s 1692s Module#private without arguments 1692s - sets visibility to following method definitions 1692s - stops setting visibility if the body encounters other visibility setters without arguments 1692s - continues setting visibility if the body encounters other visibility setters with arguments 1692s - does not affect module_evaled method definitions when itself is outside the eval 1692s - does not affect outside method definitions when itself is inside a module_eval 1692s - affects normally if itself and method definitions are inside a module_eval 1692s - affects evaled method definitions when itself is outside the eval 1692s - affects normally if itself and following method definitions are inside a eval 1692s 1692s Module#protected_instance_methods 1692s - returns a list of protected methods in module and its ancestors 1692s - when passed false as a parameter, should return only methods defined in that module 1692s - default list should be the same as passing true as an argument 1692s 1692s Module#protected_instance_methods when not passed an argument 1692s - returns a unique list for a class including a module 1692s - returns a unique list for a subclass 1692s 1692s Module#protected_instance_methods when passed true 1692s - returns a unique list for a class including a module 1692s - returns a unique list for a subclass 1692s 1692s Module#protected_method_defined? 1692s - returns true if the named protected method is defined by module or its ancestors 1692s - returns false if method is not a protected method 1692s - returns false if the named method is not defined by the module or its ancestors 1692s - accepts symbols for the method name 1692s - raises a TypeError if passed an Integer 1692s - raises a TypeError if passed nil 1692s - raises a TypeError if passed false 1692s - raises a TypeError if passed an object that does not defined #to_str 1692s - raises a TypeError if passed an object that defines #to_sym 1692s - calls #to_str to convert an Object 1692s 1692s Module#protected_method_defined? when passed true as a second optional argument 1692s - performs a lookup in ancestors 1692s 1692s Module#protected_method_defined? when passed false as a second optional argument 1692s - checks only the class itself 1692s 1692s Module#protected 1692s - is a private method 1692s - makes an existing class method protected 1692s - makes a public Object instance method protected in a new module 1692s - makes a public Object instance method protected in Kernel 1692s - returns argument or arguments if given 1692s - raises a NameError when given an undefined name 1692s 1692s Module#protected with argument 1692s - does not clone method from the ancestor when setting to the same visibility in a child 1692s 1692s Module#protected with argument one or more arguments 1692s - sets visibility of given method names 1692s 1692s Module#protected with argument array as a single argument 1692s - sets visibility of given method names 1692s 1692s Module#protected without arguments 1692s - sets visibility to following method definitions 1692s - stops setting visibility if the body encounters other visibility setters without arguments 1692s - continues setting visibility if the body encounters other visibility setters with arguments 1692s - does not affect module_evaled method definitions when itself is outside the eval 1692s - does not affect outside method definitions when itself is inside a module_eval 1692s - affects normally if itself and method definitions are inside a module_eval 1692s - affects evaled method definitions when itself is outside the eval 1692s - affects normally if itself and following method definitions are inside a eval 1692s 1692s Module#public_class_method 1692s - makes an existing class method public 1692s - makes an existing class method public up the inheritance tree 1692s - accepts more than one method at a time 1692s - raises a NameError if class method doesn't exist 1692s - makes a class method public 1692s - raises a NameError when the given name is not a method 1692s - raises a NameError when the given name is an instance method 1692s 1692s Module#public_class_method when single argument is passed and is an array 1692s - makes a class method public 1692s 1692s Module#public_constant 1692s - can only be passed constant names defined in the target (self) module 1692s - accepts strings as constant names 1692s - accepts multiple names 1692s 1692s Module#public_instance_method 1692s - is a public method 1692s - requires an argument 1692s - raises a TypeError when given a name is not Symbol or String 1692s - raises a NameError when given a protected method name 1692s - raises a NameError if the method is private 1692s - raises a NameError if the method has been undefined 1692s - raises a NameError if the method does not exist 1692s - sets the NameError#name attribute to the name of the missing method 1692s 1692s Module#public_instance_method when given a public method name 1692s - returns an UnboundMethod corresponding to the defined Module 1692s - accepts if the name is a Symbol or String 1692s 1692s Module#public_instance_methods 1692s - returns a list of public methods in module and its ancestors 1692s - when passed false as a parameter, should return only methods defined in that module 1692s - default list should be the same as passing true as an argument 1692s 1692s Module#public_instance_methods when not passed an argument 1692s - returns a unique list for a class including a module 1692s - returns a unique list for a subclass 1692s 1692s Module#public_instance_methods when passed true 1692s - returns a unique list for a class including a module 1692s - returns a unique list for a subclass 1692s 1692s Module#public_method_defined? 1692s - returns true if the named public method is defined by module or its ancestors 1692s - returns false if method is not a public method 1692s - returns false if the named method is not defined by the module or its ancestors 1692s - accepts symbols for the method name 1692s - raises a TypeError if passed an Integer 1692s - raises a TypeError if passed nil 1692s - raises a TypeError if passed false 1692s - raises a TypeError if passed an object that does not defined #to_str 1692s - raises a TypeError if passed an object that defines #to_sym 1692s - calls #to_str to convert an Object 1692s 1692s Module#public 1692s - is a private method 1692s - makes a private Object instance method public in a new module 1692s - makes a private Object instance method public in Kernel 1692s - returns argument or arguments if given 1692s - raises a NameError when given an undefined name 1692s 1692s Module#public with argument 1692s - does not clone method from the ancestor when setting to the same visibility in a child 1692s 1692s Module#public with argument one or more arguments 1692s - sets visibility of given method names 1692s 1692s Module#public with argument array as a single argument 1692s - sets visibility of given method names 1692s 1692s Module#public without arguments 1692s - sets visibility to following method definitions 1692s - stops setting visibility if the body encounters other visibility setters without arguments 1692s - continues setting visibility if the body encounters other visibility setters with arguments 1692s - does not affect module_evaled method definitions when itself is outside the eval 1692s - does not affect outside method definitions when itself is inside a module_eval 1692s - affects normally if itself and method definitions are inside a module_eval 1692s - affects evaled method definitions when itself is outside the eval 1692s - affects normally if itself and following method definitions are inside a eval 1692s 1692s Module#public without arguments within a closure 1692s - sets the visibility outside the closure 1692s 1692s Module#refine 1692s - runs its block in an anonymous module 1692s - uses the same anonymous module for future refines of the same class 1692s - adds methods defined in its block to the anonymous module's public instance methods 1692s - returns created anonymous module 1692s - raises ArgumentError if not passed an argument 1692s - raises TypeError if not passed a class 1692s - accepts a module as argument 1692s - applies refinements to the module 1692s - raises ArgumentError if not given a block 1692s - applies refinements to calls in the refine block 1692s - doesn't apply refinements outside the refine block 1692s - does not apply refinements to external scopes not using the module 1692s - makes available all refinements from the same module 1692s - does not make available methods from another refinement module 1692s - does not override methods in subclasses 1692s - and alias aliases a method within a refinement module, but not outside it 1692s - and alias_method aliases a method within a refinement module, but not outside it 1692s - and instance_methods returns a list of methods including those of the refined module 1692s - does not list methods defined only in refinement 1692s 1692s Module#refine method lookup 1692s - looks in the object singleton class first 1695s - looks in the included modules for builtin methods 1695s - looks in later included modules of the refined module first 1695s - looks in the class then 1695s 1695s Module#refine for methods accessed indirectly 1695s - is honored by Kernel#send 1695s - is honored by BasicObject#__send__ 1695s - is honored by Symbol#to_proc 1695s - is honored by Kernel#public_send 1695s - is honored by string interpolation 1695s - is honored by Kernel#binding 1695s - is honored by Kernel#method 1695s - is honored by Kernel#instance_method 1695s - is honored by Kernel#respond_to? 1695s 1695s Module#refine when super is called in a refinement 1695s - looks in the refined class 1695s - looks in the refined class first if called from refined method 1695s - looks only in the refined class even if there is another active refinement 1695s 1695s Module#refine module inclusion 1695s - activates all refinements from all ancestors 1695s - overrides methods of ancestors by methods in descendants 1695s 1695s Module#remove_class_variable 1695s - removes class variable 1695s - returns the value of removing class variable 1695s - removes a class variable defined in a metaclass 1695s - raises a NameError when removing class variable declared in included module 1695s - raises a NameError when passed a symbol with one leading @ 1695s - raises a NameError when passed a symbol with no leading @ 1695s - raises a NameError when an uninitialized class variable is given 1695s - is public 1695s 1695s Module#remove_const 1695s - removes the constant specified by a String or Symbol from the receiver's constant table 1695s - returns the value of the removed constant 1695s - raises a NameError and does not call #const_missing if the constant is not defined 1695s - raises a NameError and does not call #const_missing if the constant is not defined directly in the module 1695s - raises a NameError if the name does not start with a capital letter 1695s - raises a NameError if the name starts with a non-alphabetic character 1695s - raises a NameError if the name contains non-alphabetic characters except '_' 1695s - calls #to_str to convert the given name to a String 1695s - raises a TypeError if conversion to a String by calling #to_str fails 1695s - is a private method 1695s - returns nil when removing autoloaded constant 1695s - updates the constant value 1695s 1695s Module#remove_method 1695s - is a public method 1695s - removes the method from a class 1695s - removes method from subclass, but not parent 1695s - updates the method implementation 1695s - removes multiple methods with 1 call 1695s - accepts multiple arguments 1695s - does not remove any instance methods when argument not given 1695s - returns self 1695s - raises a NameError when attempting to remove method further up the inheritance tree 1695s - raises a NameError when attempting to remove a missing method 1695s 1695s Module#remove_method on frozen instance 1695s - raises a FrozenError when passed a name 1695s - raises a FrozenError when passed a missing name 1695s - raises a TypeError when passed a not name 1695s - does not raise exceptions when no arguments given 1695s 1695s Module#ruby2_keywords 1695s - marks the final hash argument as keyword hash 1695s - makes a copy of the hash and only marks the copy as keyword hash 1695s - makes a copy and unmark the Hash when calling a method taking (**kw) 1695s - applies to the underlying method and applies across aliasing 1695s - returns nil 1695s - raises NameError when passed not existing method name 1695s - accepts String as well 1695s - raises TypeError when passed not Symbol or String 1695s - prints warning when a method does not accept argument splat 1695s - prints warning when a method accepts keywords 1695s - prints warning when a method accepts keyword splat 1695s 1695s Module#singleton_class? 1695s - returns true for singleton classes 1695s - returns false for other classes 1695s 1695s Module#singleton_class? with singleton values 1695s - returns false for nil's singleton class 1695s - returns false for true's singleton class 1695s - returns false for false's singleton class 1695s 1695s Module#to_s 1695s - returns the name of the module if it has a name 1695s - returns the full constant path leading to the module 1695s - works with an anonymous module 1695s - works with an anonymous class 1695s - for the singleton class of an object of an anonymous class 1695s - for a singleton class of a module includes the module name 1695s - for a metaclass includes the class name 1695s - for objects includes class name and object ID 1695s - always show the refinement name, even if the module is named 1695s - does not call #inspect or #to_s for singleton classes 1695s 1695s Module#undef_method 1695s - is a public method 1695s - requires multiple arguments 1695s - allows multiple methods to be removed at once 1695s - does not undef any instance methods when argument not given 1695s - returns self 1695s - raises a NameError when passed a missing name for a module 1695s - raises a NameError when passed a missing name for a class 1695s - raises a NameError when passed a missing name for a singleton class 1695s - raises a NameError when passed a missing name for a metaclass 1695s 1695s Module#undef_method on frozen instance 1695s - raises a FrozenError when passed a name 1695s - raises a FrozenError when passed a missing name 1695s - raises a TypeError when passed a not name 1695s - does not raise exceptions when no arguments given 1695s 1695s Module#undef_method with symbol 1695s - removes a method defined in a class 1695s - removes a method defined in a super class 1695s - does not remove a method defined in a super class when removed from a subclass 1695s 1695s Module#undef_method with string 1695s - removes a method defined in a class 1695s - removes a method defined in a super class 1695s - does not remove a method defined in a super class when removed from a subclass 1695s 1695s Module#using 1695s - imports class refinements from module into the current class/module 1695s - accepts module as argument 1695s - accepts module without refinements 1695s - does not accept class 1695s - raises TypeError if passed something other than module 1695s - returns self 1695s - works in classes too 1695s - raises error in method scope 1695s - activates refinement even for existed objects 1695s - activates updates when refinement reopens later 1695s 1695s Module#using scope of refinement 1695s - is active until the end of current class/module 1695s - is not active before the `using` call 1695s - is not active for code defined outside the current scope 1695s - is active for method defined in a scope wherever it's called 1695s - is active for module defined via Module.new {} 1695s - is active for class defined via Class.new {} 1695s - is active for block called via instance_exec 1695s - is active for block called via instance_eval 1695s - is not active if `using` call is not evaluated 1695s - is not active when class/module reopens 1695s 1695s Mutex#lock 1695s - returns self 1695s - blocks the caller if already locked 1695s - does not block the caller if not locked 1695s - raises a ThreadError when used recursively 1695s 1695s Mutex#locked? 1695s - returns true if locked 1695s - returns false if unlocked 1695s - returns the status of the lock 1695s 1695s Mutex#owned? 1695s - is held per Fiber 1695s 1695s Mutex#owned? when unlocked 1695s - returns false 1695s 1695s Mutex#owned? when locked by the current thread 1695s - returns true 1695s 1695s Mutex#owned? when locked by another thread 1695s - returns false 1695s 1695s Mutex#sleep 1695s - raises an ArgumentError if passed a negative duration 1695s - pauses execution for approximately the duration requested 1695s - unlocks the mutex while sleeping 1695s - relocks the mutex when woken 1695s - relocks the mutex when woken by an exception being raised 1695s - returns the rounded number of seconds asleep 1695s - wakes up when requesting sleep times near or equal to zero 1695s 1695s Mutex#sleep when not locked by the current thread 1695s - raises a ThreadError 1695s - raises an ArgumentError if passed a negative duration 1695s 1695s Mutex#synchronize 1695s - wraps the lock/unlock pair in an ensure 1695s - blocks the caller if already locked 1695s - does not block the caller if not locked 1695s - blocks the caller if another thread is also in the synchronize block 1695s - is not recursive 1695s 1695s Mutex#try_lock when unlocked 1695s - returns true 1695s - locks the mutex 1695s 1695s Mutex#try_lock when locked by the current thread 1695s - returns false 1695s 1695s Mutex#try_lock when locked by another thread 1695s - returns false 1695s 1695s Mutex#unlock 1695s - raises ThreadError unless Mutex is locked 1695s - raises ThreadError unless thread owns Mutex 1695s - raises ThreadError if previously locking thread is gone 1695s 1695s NilClass#& 1695s - returns false 1695s 1695s NilClass#=== 1695s - returns true for nil 1695s - returns false for non-nil object 1695s 1695s NilClass#dup 1695s - returns self 1695s 1695s NilClass#inspect 1695s - returns the string 'nil' 1695s 1695s NilClass#=~ 1695s - returns nil matching any object 1695s - should not warn 1695s 1695s NilClass#nil? 1695s - returns true 1695s 1695s NilClass 1695s - .allocate raises a TypeError 1695s - .new is undefined 1695s 1695s NilClass#| 1695s - returns false if other is nil or false, otherwise true 1695s 1695s NilClass#rationalize 1695s - returns 0/1 1695s - ignores a single argument 1695s - raises ArgumentError when passed more than one argument 1695s 1695s NilClass#to_a 1695s - returns an empty array 1695s 1695s NilClass#to_c 1695s - returns Complex(0, 0) 1695s 1695s NilClass#to_f 1695s - returns 0.0 1695s - does not cause NilClass to be coerced to Float 1695s 1695s NilClass#to_h 1695s - returns an empty hash 1695s 1695s NilClass#to_i 1695s - returns 0 1695s - does not cause NilClass to be coerced to Integer 1695s 1695s NilClass#to_r 1695s - returns 0/1 1695s 1695s NilClass#to_s 1695s - returns the string '' 1695s - returns a frozen string 1695s - always returns the same string 1695s 1695s NilClass#^ 1695s - returns false if other is nil or false, otherwise true 1695s 1695s Numeric#abs2 1695s - returns the square of the absolute value of self 1695s - calls #* on self 1695s - returns NaN when self is NaN 1695s 1695s Numeric#abs 1695s - returns self when self is greater than 0 1695s - returns self#@- when self is less than 0 1695s 1695s Numeric#angle 1695s - returns 0 if positive 1695s - returns Pi if negative 1695s 1695s Numeric#angle with a Numeric subclass 1695s - returns 0 if self#<(0) returns false 1695s - returns Pi if self#<(0) returns true 1695s 1695s Numeric#arg 1695s - returns 0 if positive 1695s - returns Pi if negative 1695s 1695s Numeric#arg with a Numeric subclass 1695s - returns 0 if self#<(0) returns false 1695s - returns Pi if self#<(0) returns true 1695s 1695s Numeric#ceil 1695s - converts self to a Float (using #to_f) and returns the #ceil'ed result 1695s 1695s Numeric#clone 1695s - returns self 1695s - does not change frozen status 1695s - accepts optional keyword argument :freeze 1695s - raises ArgumentError if passed freeze: false 1695s - does not change frozen status if passed freeze: nil 1695s 1695s Numeric#coerce 1695s - returns [other, self] if self and other are instances of the same class 1695s - returns [other.to_f, self.to_f] if self and other are instances of different classes 1695s - raise TypeError if they are instances of different classes and other does not respond to #to_f 1695s - raises a TypeError when passed nil 1695s - raises a TypeError when passed a boolean 1695s - raises a TypeError when passed a Symbol 1695s - raises an ArgumentError when passed a non-numeric String 1695s 1695s Numeric#<=> 1695s - returns 0 if self equals other 1695s - returns nil if self does not equal other 1695s 1695s Numeric#<=> with subclasses of Numeric 1695s - is called when instances are compared with #< 1695s - is called when instances are compared with #<= 1695s - is called when instances are compared with #> 1695s - is called when instances are compared with #>= 1695s 1695s Numeric#conj 1695s - returns self 1695s 1695s Numeric#conjugate 1695s - returns self 1695s 1695s Numeric#denominator 1695s - returns 1 1695s - works with Numeric subclasses 1695s 1695s Numeric#div 1695s - calls self#/ with other, then returns the #floor'ed result 1695s - raises ZeroDivisionError for 0 1695s 1695s Numeric#divmod 1695s - returns [quotient, modulus], with quotient being obtained as in Numeric#div then #floor and modulus being obtained by calling self#- with quotient * other 1695s 1695s Numeric#dup 1695s - returns self 1695s - does not change frozen status 1695s 1695s Numeric#eql? 1695s - returns false if self's and other's types don't match 1695s - returns the result of calling self#== with other when self's and other's types match 1695s 1695s Numeric#fdiv 1695s - coerces self with #to_f 1695s - coerces other with #to_f 1695s - performs floating-point division 1695s - returns a Float 1695s - returns Infinity if other is 0 1695s - returns NaN if other is NaN 1695s 1695s Numeric#finite? 1695s - returns true by default 1695s 1695s Numeric#floor 1695s - converts self to a Float (using #to_f) and returns the #floor'ed result 1695s 1695s Numeric#i 1695s - returns a Complex object 1695s - sets the real part to 0 1695s - sets the imaginary part to self 1695s 1695s Numeric#imag 1695s - returns 0 1695s - raises an ArgumentError if given any arguments 1695s 1695s Numeric#imaginary 1695s - returns 0 1695s - raises an ArgumentError if given any arguments 1695s 1695s Numeric#infinite? 1695s - returns nil by default 1695s 1695s Numeric#integer? 1695s - returns false 1695s 1695s Numeric#magnitude 1695s - returns self when self is greater than 0 1695s - returns self#@- when self is less than 0 1695s 1695s Numeric#modulo 1695s - returns self - other * self.div(other) 1695s 1695s Numeric#% 1695s - returns self - other * self.div(other) 1695s 1695s Numeric#negative? on positive numbers 1695s - returns false 1695s 1695s Numeric#negative? on zero 1695s - returns false 1695s 1695s Numeric#negative? on negative numbers 1695s - returns true 1695s 1695s Numeric#negative? 1695s - returns true if self is less than 0 1695s - returns false if self is greater than 0 1695s 1695s Numeric#nonzero? 1695s - returns self if self#zero? is false 1695s - returns nil if self#zero? is true 1695s 1695s Numeric#numerator 1695s - converts self to a Rational object then returns its numerator 1695s - works with Numeric subclasses 1695s 1695s Numeric 1695s - includes Comparable 1695s 1695s Numeric#phase 1695s - returns 0 if positive 1695s - returns Pi if negative 1695s 1695s Numeric#phase with a Numeric subclass 1695s - returns 0 if self#<(0) returns false 1695s - returns Pi if self#<(0) returns true 1695s 1695s Numeric#polar 1695s - returns a two-element Array 1695s - sets the first value to the absolute value of self 1695s - sets the last value to 0 if self is positive 1695s - sets the last value to Pi if self is negative 1695s - returns [NaN, NaN] if self is NaN 1695s 1695s Numeric#positive? on positive numbers 1695s - returns true 1695s 1695s Numeric#positive? on zero 1695s - returns false 1695s 1695s Numeric#positive? on negative numbers 1695s - returns false 1695s 1695s Numeric#positive? 1695s - returns true if self is greater than 0 1695s - returns false if self is less than 0 1695s 1695s Numeric#quo 1695s - returns the result of self divided by the given Integer as a Rational 1695s - returns the result of self divided by the given Float as a Float 1695s - returns the result of self divided by the given Bignum as a Float 1695s - raises a ZeroDivisionError when the given Integer is 0 1695s - calls #to_r to convert the object to a Rational 1695s - raises a TypeError of #to_r does not return a Rational 1695s - raises a TypeError when given a non-Integer 1695s - returns the result of calling self#/ with other 1695s - raises a ZeroDivisionError if the given argument is zero and not a Float 1695s - returns infinity if the given argument is zero and is a Float 1695s 1695s Numeric#real 1695s - returns self 1695s - raises an ArgumentError if given any arguments 1695s 1695s Numeric#real? 1695s - returns true 1695s 1695s Numeric#rect 1695s - returns an Array 1695s - returns a two-element Array 1695s - returns self as the first element 1695s - returns 0 as the last element 1695s - raises an ArgumentError if given any arguments 1695s 1695s Numeric#rectangular 1695s - returns an Array 1695s - returns a two-element Array 1695s - returns self as the first element 1695s - returns 0 as the last element 1695s - raises an ArgumentError if given any arguments 1695s 1695s Numeric#remainder 1695s - returns the result of calling self#% with other if self is 0 1695s - returns the result of calling self#% with other if self and other are greater than 0 1695s - returns the result of calling self#% with other if self and other are less than 0 1695s - returns the result of calling self#% with other - other if self is greater than 0 and other is less than 0 1695s - returns the result of calling self#% with other - other if self is less than 0 and other is greater than 0 1695s 1695s Numeric#round 1695s - converts self to a Float (using #to_f) and returns the #round'ed result 1695s 1695s Numeric#singleton_method_added 1695s - raises a TypeError when trying to define a singleton method on a Numeric 1695s 1695s Numeric#step with positional args 1695s - raises an ArgumentError when step is 0 1695s - raises an ArgumentError when step is 0.0 1695s - defaults to step = 1 1695s - defaults to an infinite limit with a step size of 1 for Integers 1695s - defaults to an infinite limit with a step size of 1.0 for Floats 1695s - does not rescue ArgumentError exceptions 1695s - does not rescue TypeError exceptions 1695s 1695s Numeric#step with positional args when self, stop and step are Integers 1695s - yields only Integers 1695s 1695s Numeric#step with positional args when self, stop and step are Integers with a positive step 1695s - yields while increasing self by step until stop is reached 1695s - yields once when self equals stop 1695s - does not yield when self is greater than stop 1695s 1695s Numeric#step with positional args when self, stop and step are Integers with a negative step 1695s - yields while decreasing self by step until stop is reached 1695s - yields once when self equals stop 1695s - does not yield when self is less than stop 1695s 1695s Numeric#step with positional args when at least one of self, stop or step is a Float 1695s - yields Floats even if only self is a Float 1695s - yields Floats even if only stop is a Float 1695s - yields Floats even if only step is a Float 1695s 1695s Numeric#step with positional args when at least one of self, stop or step is a Float with a positive step 1695s - yields while increasing self by step while < stop 1695s - yields once when self equals stop 1695s - does not yield when self is greater than stop 1695s - is careful about not yielding a value greater than limit 1695s 1695s Numeric#step with positional args when at least one of self, stop or step is a Float with a negative step 1695s - yields while decreasing self by step while self > stop 1695s - yields once when self equals stop 1695s - does not yield when self is less than stop 1695s - is careful about not yielding a value smaller than limit 1695s 1695s Numeric#step with positional args when at least one of self, stop or step is a Float with a positive Infinity step 1695s - yields once if self < stop 1695s - yields once when stop is Infinity 1695s - yields once when self equals stop 1695s - yields once when self and stop are Infinity 1695s - does not yield when self > stop 1695s - does not yield when stop is -Infinity 1695s 1695s Numeric#step with positional args when at least one of self, stop or step is a Float with a negative Infinity step 1695s - yields once if self > stop 1695s - yields once if stop is -Infinity 1695s - yields once when self equals stop 1695s - yields once when self and stop are Infinity 1695s - does not yield when self > stop 1695s - does not yield when stop is Infinity 1695s 1695s Numeric#step with positional args when at least one of self, stop or step is a Float with a Infinity stop and a positive step 1695s - does not yield when self is infinity 1695s 1695s Numeric#step with positional args when at least one of self, stop or step is a Float with a Infinity stop and a negative step 1695s - does not yield when self is negative infinity 1695s - does not yield when self is positive infinity 1695s 1695s Numeric#step with positional args when at least one of self, stop or step is a Float with a negative Infinity stop and a positive step 1695s - does not yield when self is negative infinity 1695s 1695s Numeric#step with positional args when at least one of self, stop or step is a Float with a negative Infinity stop and a negative step 1695s - does not yield when self is negative infinity 1695s 1695s Numeric#step with positional args when step is a String with self and stop as Integers 1695s - raises an ArgumentError when step is a numeric representation 1695s - raises an ArgumentError with step as an alphanumeric string 1695s 1695s Numeric#step with positional args when step is a String with self and stop as Floats 1695s - raises an ArgumentError when step is a numeric representation 1695s - raises an ArgumentError with step as an alphanumeric string 1695s 1695s Numeric#step with positional args when no block is given 1695s - returns an Enumerator::ArithmeticSequence when not passed a block and self > stop 1695s - returns an Enumerator::ArithmeticSequence when not passed a block and self < stop 1695s - returns an Enumerator::ArithmeticSequence that uses the given step 1695s 1695s Numeric#step with positional args when no block is given when step is a String with self and stop as Integers 1695s - returns an Enumerator 1695s 1695s Numeric#step with positional args when no block is given when step is a String with self and stop as Floats 1695s - returns an Enumerator 1695s 1695s Numeric#step with positional args when no block is given returned Enumerator size when step is a String with self and stop as Integers 1695s - raises an ArgumentError when step is a numeric representation 1695s - raises an ArgumentError with step as an alphanumeric string 1695s 1695s Numeric#step with positional args when no block is given returned Enumerator size when step is a String with self and stop as Floats 1695s - raises an ArgumentError when step is a numeric representation 1695s - raises an ArgumentError with step as an alphanumeric string 1695s 1695s Numeric#step with positional args when no block is given returned Enumerator size when self, stop and step are Integers and step is positive 1695s - returns the difference between self and stop divided by the number of steps 1695s - returns 0 if value > limit 1695s 1695s Numeric#step with positional args when no block is given returned Enumerator size when self, stop and step are Integers and step is negative 1695s - returns the difference between self and stop divided by the number of steps 1695s - returns 0 if value < limit 1695s 1695s Numeric#step with positional args when no block is given returned Enumerator size when self, stop or step is a Float and step is positive 1695s - returns the difference between self and stop divided by the number of steps 1695s - returns 0 if value > limit 1695s - returns 1 if step is infinity_value 1695s 1695s Numeric#step with positional args when no block is given returned Enumerator size when self, stop or step is a Float and step is negative 1695s - returns the difference between self and stop divided by the number of steps 1695s - returns 0 if value < limit 1695s - returns 1 if step is infinity_value 1695s 1695s Numeric#step with positional args when no block is given returned Enumerator size when stop is not passed 1695s - returns infinity_value 1695s 1695s Numeric#step with positional args when no block is given returned Enumerator size when stop is nil 1695s - returns infinity_value 1695s 1695s Numeric#step with positional args when no block is given returned Enumerator::ArithmeticSequence size 1695s - defaults to an infinite size 1695s 1695s Numeric#step with positional args when no block is given returned Enumerator::ArithmeticSequence type 1695s - returns an instance of Enumerator::ArithmeticSequence 1695s 1695s Numeric#step with keyword arguments 1695s - defaults to step = 1 1695s - defaults to an infinite limit with a step size of 1 for Integers 1695s - defaults to an infinite limit with a step size of 1.0 for Floats 1695s - does not rescue ArgumentError exceptions 1695s - does not rescue TypeError exceptions 1695s 1695s Numeric#step with keyword arguments when no block is given returned Enumerator size 1695s - should return infinity_value when limit is nil 1695s - should return infinity_value when ascending towards a limit of Float::INFINITY 1695s - should return infinity_value when descending towards a limit of -Float::INFINITY 1695s - should return 1 when the both limit and step are Float::INFINITY 1695s - should return 1 when the both limit and step are -Float::INFINITY 1695s 1695s Numeric#step with keyword arguments when self, stop and step are Integers 1695s - yields only Integers 1695s 1695s Numeric#step with keyword arguments when self, stop and step are Integers with a positive step 1695s - yields while increasing self by step until stop is reached 1695s - yields once when self equals stop 1695s - does not yield when self is greater than stop 1695s 1695s Numeric#step with keyword arguments when self, stop and step are Integers with a negative step 1695s - yields while decreasing self by step until stop is reached 1695s - yields once when self equals stop 1695s - does not yield when self is less than stop 1695s 1695s Numeric#step with keyword arguments when at least one of self, stop or step is a Float 1695s - yields Floats even if only self is a Float 1695s - yields Floats even if only stop is a Float 1695s - yields Floats even if only step is a Float 1695s 1695s Numeric#step with keyword arguments when at least one of self, stop or step is a Float with a positive step 1695s - yields while increasing self by step while < stop 1695s - yields once when self equals stop 1695s - does not yield when self is greater than stop 1695s - is careful about not yielding a value greater than limit 1695s 1695s Numeric#step with keyword arguments when at least one of self, stop or step is a Float with a negative step 1695s - yields while decreasing self by step while self > stop 1695s - yields once when self equals stop 1695s - does not yield when self is less than stop 1695s - is careful about not yielding a value smaller than limit 1695s 1695s Numeric#step with keyword arguments when at least one of self, stop or step is a Float with a positive Infinity step 1695s - yields once if self < stop 1695s - yields once when stop is Infinity 1695s - yields once when self equals stop 1695s - yields once when self and stop are Infinity 1695s - does not yield when self > stop 1695s - does not yield when stop is -Infinity 1695s 1695s Numeric#step with keyword arguments when at least one of self, stop or step is a Float with a negative Infinity step 1695s - yields once if self > stop 1695s - yields once if stop is -Infinity 1695s - yields once when self equals stop 1695s - yields once when self and stop are Infinity 1695s - does not yield when self > stop 1695s - does not yield when stop is Infinity 1695s 1695s Numeric#step with keyword arguments when at least one of self, stop or step is a Float with a Infinity stop and a positive step 1695s - does not yield when self is infinity 1695s 1695s Numeric#step with keyword arguments when at least one of self, stop or step is a Float with a Infinity stop and a negative step 1695s - does not yield when self is negative infinity 1695s - does not yield when self is positive infinity 1695s 1695s Numeric#step with keyword arguments when at least one of self, stop or step is a Float with a negative Infinity stop and a positive step 1695s - does not yield when self is negative infinity 1695s 1695s Numeric#step with keyword arguments when at least one of self, stop or step is a Float with a negative Infinity stop and a negative step 1695s - does not yield when self is negative infinity 1695s 1695s Numeric#step with keyword arguments when step is a String with self and stop as Integers 1695s - raises an ArgumentError when step is a numeric representation 1695s - raises an ArgumentError with step as an alphanumeric string 1695s 1695s Numeric#step with keyword arguments when step is a String with self and stop as Floats 1695s - raises an ArgumentError when step is a numeric representation 1695s - raises an ArgumentError with step as an alphanumeric string 1695s 1695s Numeric#step with keyword arguments when no block is given 1695s - returns an Enumerator::ArithmeticSequence when not passed a block and self > stop 1695s - returns an Enumerator::ArithmeticSequence when not passed a block and self < stop 1695s - returns an Enumerator::ArithmeticSequence that uses the given step 1695s 1695s Numeric#step with keyword arguments when no block is given when step is a String with self and stop as Integers 1695s - returns an Enumerator 1695s 1695s Numeric#step with keyword arguments when no block is given when step is a String with self and stop as Floats 1695s - returns an Enumerator 1695s 1695s Numeric#step with keyword arguments when no block is given returned Enumerator size when step is a String with self and stop as Integers 1695s - raises an ArgumentError when step is a numeric representation 1695s - raises an ArgumentError with step as an alphanumeric string 1695s 1695s Numeric#step with keyword arguments when no block is given returned Enumerator size when step is a String with self and stop as Floats 1695s - raises an ArgumentError when step is a numeric representation 1695s - raises an ArgumentError with step as an alphanumeric string 1695s 1695s Numeric#step with keyword arguments when no block is given returned Enumerator size when self, stop and step are Integers and step is positive 1695s - returns the difference between self and stop divided by the number of steps 1695s - returns 0 if value > limit 1695s 1695s Numeric#step with keyword arguments when no block is given returned Enumerator size when self, stop and step are Integers and step is negative 1695s - returns the difference between self and stop divided by the number of steps 1695s - returns 0 if value < limit 1695s 1695s Numeric#step with keyword arguments when no block is given returned Enumerator size when self, stop or step is a Float and step is positive 1695s - returns the difference between self and stop divided by the number of steps 1695s - returns 0 if value > limit 1695s - returns 1 if step is infinity_value 1695s 1695s Numeric#step with keyword arguments when no block is given returned Enumerator size when self, stop or step is a Float and step is negative 1695s - returns the difference between self and stop divided by the number of steps 1695s - returns 0 if value < limit 1695s - returns 1 if step is infinity_value 1695s 1695s Numeric#step with keyword arguments when no block is given returned Enumerator size when stop is not passed 1695s - returns infinity_value 1695s 1695s Numeric#step with keyword arguments when no block is given returned Enumerator size when stop is nil 1695s - returns infinity_value 1695s 1695s Numeric#step with mixed arguments 1695s - raises an ArgumentError when step is 0 1695s - raises an ArgumentError when step is 0.0 1695s - raises a ArgumentError when limit and to are defined 1695s - raises a ArgumentError when step and by are defined 1695s - defaults to step = 1 1695s - defaults to an infinite limit with a step size of 1 for Integers 1695s - defaults to an infinite limit with a step size of 1.0 for Floats 1695s - does not rescue ArgumentError exceptions 1695s - does not rescue TypeError exceptions 1695s 1695s Numeric#step with mixed arguments when self, stop and step are Integers 1695s - yields only Integers 1695s 1695s Numeric#step with mixed arguments when self, stop and step are Integers with a positive step 1695s - yields while increasing self by step until stop is reached 1695s - yields once when self equals stop 1695s - does not yield when self is greater than stop 1695s 1695s Numeric#step with mixed arguments when self, stop and step are Integers with a negative step 1695s - yields while decreasing self by step until stop is reached 1695s - yields once when self equals stop 1695s - does not yield when self is less than stop 1695s 1695s Numeric#step with mixed arguments when at least one of self, stop or step is a Float 1695s - yields Floats even if only self is a Float 1695s - yields Floats even if only stop is a Float 1695s - yields Floats even if only step is a Float 1695s 1695s Numeric#step with mixed arguments when at least one of self, stop or step is a Float with a positive step 1695s - yields while increasing self by step while < stop 1695s - yields once when self equals stop 1695s - does not yield when self is greater than stop 1695s - is careful about not yielding a value greater than limit 1695s 1695s Numeric#step with mixed arguments when at least one of self, stop or step is a Float with a negative step 1695s - yields while decreasing self by step while self > stop 1695s - yields once when self equals stop 1695s - does not yield when self is less than stop 1695s - is careful about not yielding a value smaller than limit 1695s 1695s Numeric#step with mixed arguments when at least one of self, stop or step is a Float with a positive Infinity step 1695s - yields once if self < stop 1695s - yields once when stop is Infinity 1695s - yields once when self equals stop 1695s - yields once when self and stop are Infinity 1695s - does not yield when self > stop 1695s - does not yield when stop is -Infinity 1695s 1695s Numeric#step with mixed arguments when at least one of self, stop or step is a Float with a negative Infinity step 1695s - yields once if self > stop 1695s - yields once if stop is -Infinity 1695s - yields once when self equals stop 1695s - yields once when self and stop are Infinity 1695s - does not yield when self > stop 1695s - does not yield when stop is Infinity 1695s 1695s Numeric#step with mixed arguments when at least one of self, stop or step is a Float with a Infinity stop and a positive step 1695s - does not yield when self is infinity 1695s 1695s Numeric#step with mixed arguments when at least one of self, stop or step is a Float with a Infinity stop and a negative step 1695s - does not yield when self is negative infinity 1695s - does not yield when self is positive infinity 1695s 1695s Numeric#step with mixed arguments when at least one of self, stop or step is a Float with a negative Infinity stop and a positive step 1695s - does not yield when self is negative infinity 1695s 1695s Numeric#step with mixed arguments when at least one of self, stop or step is a Float with a negative Infinity stop and a negative step 1695s - does not yield when self is negative infinity 1695s 1695s Numeric#step with mixed arguments when step is a String with self and stop as Integers 1695s - raises an ArgumentError when step is a numeric representation 1695s - raises an ArgumentError with step as an alphanumeric string 1695s 1695s Numeric#step with mixed arguments when step is a String with self and stop as Floats 1695s - raises an ArgumentError when step is a numeric representation 1695s - raises an ArgumentError with step as an alphanumeric string 1695s 1695s Numeric#step with mixed arguments when no block is given 1695s - returns an Enumerator::ArithmeticSequence when not passed a block and self > stop 1695s - returns an Enumerator::ArithmeticSequence when not passed a block and self < stop 1695s - returns an Enumerator::ArithmeticSequence that uses the given step 1695s 1695s Numeric#step with mixed arguments when no block is given when step is a String with self and stop as Integers 1695s - returns an Enumerator 1695s 1695s Numeric#step with mixed arguments when no block is given when step is a String with self and stop as Floats 1695s - returns an Enumerator 1695s 1695s Numeric#step with mixed arguments when no block is given returned Enumerator size when step is a String with self and stop as Integers 1695s - raises an ArgumentError when step is a numeric representation 1695s - raises an ArgumentError with step as an alphanumeric string 1695s 1695s Numeric#step with mixed arguments when no block is given returned Enumerator size when step is a String with self and stop as Floats 1695s - raises an ArgumentError when step is a numeric representation 1695s - raises an ArgumentError with step as an alphanumeric string 1695s 1695s Numeric#step with mixed arguments when no block is given returned Enumerator size when self, stop and step are Integers and step is positive 1695s - returns the difference between self and stop divided by the number of steps 1695s - returns 0 if value > limit 1695s 1695s Numeric#step with mixed arguments when no block is given returned Enumerator size when self, stop and step are Integers and step is negative 1695s - returns the difference between self and stop divided by the number of steps 1695s - returns 0 if value < limit 1695s 1695s Numeric#step with mixed arguments when no block is given returned Enumerator size when self, stop or step is a Float and step is positive 1695s - returns the difference between self and stop divided by the number of steps 1695s - returns 0 if value > limit 1695s - returns 1 if step is infinity_value 1695s 1695s Numeric#step with mixed arguments when no block is given returned Enumerator size when self, stop or step is a Float and step is negative 1695s - returns the difference between self and stop divided by the number of steps 1695s - returns 0 if value < limit 1695s - returns 1 if step is infinity_value 1695s 1695s Numeric#step with mixed arguments when no block is given returned Enumerator size when stop is not passed 1695s - returns infinity_value 1695s 1695s Numeric#step with mixed arguments when no block is given returned Enumerator size when stop is nil 1695s - returns infinity_value 1695s 1695s Numeric#to_c 1695s - returns a Complex object 1695s - uses self as the real component 1695s - uses 0 as the imaginary component 1695s 1695s Numeric#to_int 1695s - returns self#to_i 1695s 1695s Numeric#truncate 1695s - converts self to a Float (using #to_f) and returns the #truncate'd result 1695s 1695s Numeric#-@ 1695s - returns the same value with opposite sign (integers) 1695s - returns the same value with opposite sign (floats) 1695s - returns the same value with opposite sign (two complement) 1695s 1695s Numeric#-@ with a Numeric subclass 1695s - calls #coerce(0) on self, then subtracts the second element of the result from the first 1695s 1695s Numeric#+@ 1695s - returns self 1695s 1695s Numeric#zero? 1695s - returns true if self is 0 1695s - returns false if self is not 0 1695s 1695s ObjectSpace._id2ref 1695s - converts an object id to a reference to the object 1695s - retrieves true by object_id 1695s - retrieves false by object_id 1695s - retrieves nil by object_id 1695s - retrieves a small Integer by object_id 1695s - retrieves a large Integer by object_id 1695s - retrieves a Symbol by object_id 1695s - retrieves a String by object_id 1695s - retrieves a frozen literal String by object_id 1695s - retrieves an Encoding by object_id 1695s 1695s ObjectSpace.add_finalizer 1695s - needs to be reviewed for spec completeness 1695s 1695s ObjectSpace.call_finalizer 1695s - needs to be reviewed for spec completeness 1695s 1695s ObjectSpace.count_objects 1695s - needs to be reviewed for spec completeness 1695s 1695s ObjectSpace.define_finalizer 1695s - raises an ArgumentError if the action does not respond to call 1695s - accepts an object and a proc 1695s - accepts an object and a bound method 1695s - accepts an object and a callable 1695s - accepts an object and a block 1699s - calls finalizer on process termination 1702s - warns if the finalizer has the object as the receiver 1705s - warns if the finalizer is a method bound to the receiver 1709s - warns if the finalizer was a block in the receiver 1712s - calls a finalizer at exit even if it is self-referencing 1715s - calls a finalizer at exit even if it is indirectly self-referencing 1718s - allows multiple finalizers with different 'callables' to be defined 1718s 1718s ObjectSpace.define_finalizer when $VERBOSE is nil 1721s - does not warn even if an exception is raised in finalizer 1721s 1721s ObjectSpace.finalizers 1721s - needs to be reviewed for spec completeness 1721s 1721s ObjectSpace.garbage_collect 1721s - can be invoked without any exceptions 1721s - accepts keyword arguments 1721s - ignores the supplied block 1721s - always returns nil 1721s 1721s ObjectSpace.remove_finalizer 1721s - needs to be reviewed for spec completeness 1721s 1721s ObjectSpace.undefine_finalizer 1721s - needs to be reviewed for spec completeness 1721s 1721s ObjectSpace::WeakMap#each_key 1721s - is correct 1721s 1721s ObjectSpace::WeakMap#each_key 1721s - must take a block, except when empty 1721s 1721s ObjectSpace::WeakMap#each_pair 1721s - is correct 1721s 1721s ObjectSpace::WeakMap#each_key 1721s - must take a block, except when empty 1721s 1721s ObjectSpace::WeakMap#each 1721s - is correct 1721s 1721s ObjectSpace::WeakMap#each_key 1721s - must take a block, except when empty 1721s 1721s ObjectSpace::WeakMap#each_value 1721s - is correct 1721s 1721s ObjectSpace::WeakMap#each_key 1721s - must take a block, except when empty 1721s 1721s ObjectSpace::WeakMap#[] 1721s - is faithful to the map's content 1721s - matches using identity semantics 1721s 1721s ObjectSpace::WeakMap#[]= 1721s - is correct 1721s - accepts primitive or frozen keys or values 1721s 1721s ObjectSpace::WeakMap#include? 1721s - recognizes keys in use 1721s - matches using identity semantics 1721s - reports true if the pair exists and the value is nil 1721s 1721s ObjectSpace::WeakMap#inspect 1721s - displays object pointers in output 1721s 1721s ObjectSpace::WeakMap#key? 1721s - recognizes keys in use 1721s - matches using identity semantics 1721s - reports true if the pair exists and the value is nil 1721s 1721s ObjectSpace::WeakMap#keys 1721s - is correct 1721s 1721s ObjectSpace::WeakMap#length 1721s - is correct 1721s 1721s ObjectSpace::WeakMap#member? 1721s - recognizes keys in use 1721s - matches using identity semantics 1721s - reports true if the pair exists and the value is nil 1721s 1721s ObjectSpace::WeakMap#size 1721s - is correct 1721s 1721s ObjectSpace::WeakMap#values 1721s - is correct 1721s 1721s Proc.allocate 1721s - raises a TypeError 1721s 1721s Proc#arity for instances created with -> () { } returns zero 1721s - for definition '@a = -> () {}' 1721s - for definition '@a = -> (&b) {}' 1721s 1721s Proc#arity for instances created with -> () { } returns positive values 1721s - for definition 1721s @a = -> (a) { } 1721s @b = -> (a, b) { } 1721s @c = -> (a, b, c) { } 1721s @d = -> (a, b, c, d) { } 1721s - for definition 1721s @a = -> (a:) { } 1721s @b = -> (a:, b:) { } 1721s @c = -> (a: 1, b:, c:, d: 2) { } 1721s - for definition 1721s @a = -> (a, b:) { } 1721s @b = -> (a, b:, &l) { } 1721s - for definition 1721s @a = -> (a, b, c:, d: 1) { } 1721s @b = -> (a, b, c:, d: 1, **k, &l) { } 1721s - for definition 1721s @a = -> ((a, (*b, c))) { } 1721s @b = -> (a, (*b, c), d, (*e), (*)) { } 1721s 1721s Proc#arity for instances created with -> () { } returns negative values 1721s - for definition 1721s @a = -> (a=1) { } 1721s @b = -> (a=1, b=2) { } 1721s - for definition 1721s @a = -> (a, b=1) { } 1721s @b = -> (a, b, c=1, d=2) { } 1721s - for definition 1721s @a = -> (a=1, *b) { } 1721s @b = -> (a=1, b=2, *c) { } 1721s - for definition 1721s @a = -> (*) { } 1721s @b = -> (*a) { } 1721s - for definition 1721s @a = -> (a, *) { } 1721s @b = -> (a, *b) { } 1721s @c = -> (a, b, *c) { } 1721s @d = -> (a, b, c, *d) { } 1721s - for definition 1721s @a = -> (*a, b) { } 1721s @b = -> (*a, b, c) { } 1721s @c = -> (*a, b, c, d) { } 1721s - for definition 1721s @a = -> (a, *b, c) { } 1721s @b = -> (a, b, *c, d, e) { } 1721s - for definition 1721s @a = -> (a, b=1, c=2, *d, e, f) { } 1721s @b = -> (a, b, c=1, *d, e, f, g) { } 1721s - for definition 1721s @a = -> (a: 1) { } 1721s @b = -> (a: 1, b: 2) { } 1721s - for definition 1721s @a = -> (a=1, b: 2) { } 1721s @b = -> (*a, b: 1) { } 1721s @c = -> (a=1, b: 2) { } 1721s @d = -> (a=1, *b, c: 2, &l) { } 1721s - for definition 1721s @a = -> (**k, &l) { } 1721s @b= -> (*a, **k) { } 1721s @c = ->(a: 1, b: 2, **k) { } 1721s - for definition '@a = -> (a=1, *b, c:, d: 2, **k, &l) { }' 1721s - for definition 1721s @a = -> (a, b=1, *c, d, e:, f: 2, **k, &l) { } 1721s @b = -> (a, b=1, *c, d:, e:, f: 2, **k, &l) { } 1721s @c = -> (a=0, b=1, *c, d, e:, f: 2, **k, &l) { } 1721s @d = -> (a=0, b=1, *c, d:, e:, f: 2, **k, &l) { } 1721s 1721s Proc#arity for instances created with lambda { || } returns zero 1721s - for definition 1721s @a = lambda { } 1721s @b = lambda { || } 1721s - for definition '@a = lambda { |&b| }' 1721s 1721s Proc#arity for instances created with lambda { || } returns positive values 1721s - for definition 1721s @a = lambda { |a| } 1721s @b = lambda { |a, b| } 1721s @c = lambda { |a, b, c| } 1721s @d = lambda { |a, b, c, d| } 1721s - for definition 1721s @a = lambda { |a:| } 1721s @b = lambda { |a:, b:| } 1721s @c = lambda { |a: 1, b:, c:, d: 2| } 1721s - for definition 1721s @a = lambda { |a, b:| } 1721s @b = lambda { |a, b:, &l| } 1721s - for definition 1721s @a = lambda { |a, b, c:, d: 1| } 1721s @b = lambda { |a, b, c:, d: 1, **k, &l| } 1721s 1721s Proc#arity for instances created with lambda { || } returns negative values 1721s - for definition 1721s @a = lambda { |a=1| } 1721s @b = lambda { |a=1, b=2| } 1721s - for definition 1721s @a = lambda { |a, b=1| } 1721s @b = lambda { |a, b, c=1, d=2| } 1721s - for definition 1721s @a = lambda { |a=1, *b| } 1721s @b = lambda { |a=1, b=2, *c| } 1721s - for definition 1721s @a = lambda { |*| } 1721s @b = lambda { |*a| } 1721s - for definition 1721s @a = lambda { |a, *| } 1721s @b = lambda { |a, *b| } 1721s @c = lambda { |a, b, *c| } 1721s @d = lambda { |a, b, c, *d| } 1721s - for definition 1721s @a = lambda { |*a, b| } 1721s @b = lambda { |*a, b, c| } 1721s @c = lambda { |*a, b, c, d| } 1721s - for definition 1721s @a = lambda { |a, *b, c| } 1721s @b = lambda { |a, b, *c, d, e| } 1721s - for definition 1721s @a = lambda { |a, b=1, c=2, *d, e, f| } 1721s @b = lambda { |a, b, c=1, *d, e, f, g| } 1721s - for definition 1721s @a = lambda { |a: 1| } 1721s @b = lambda { |a: 1, b: 2| } 1721s - for definition 1721s @a = lambda { |a=1, b: 2| } 1721s @b = lambda { |*a, b: 1| } 1721s @c = lambda { |a=1, b: 2| } 1721s @d = lambda { |a=1, *b, c: 2, &l| } 1721s - for definition 1721s @a = lambda { |**k, &l| } 1721s @b = lambda { |*a, **k| } 1721s @c = lambda { |a: 1, b: 2, **k| } 1721s - for definition '@a = lambda { |a=1, *b, c:, d: 2, **k, &l| }' 1721s - for definition 1721s @a = lambda { |(a, (*b, c)), d=1| } 1721s @b = lambda { |a, (*b, c), d, (*e), (*), **k| } 1721s @c = lambda { |a, (b, c), *, d:, e: 2, **| } 1721s - for definition 1721s @a = lambda { |a, b=1, *c, d, e:, f: 2, **k, &l| } 1721s @b = lambda { |a, b=1, *c, d:, e:, f: 2, **k, &l| } 1721s @c = lambda { |a=0, b=1, *c, d, e:, f: 2, **k, &l| } 1721s @d = lambda { |a=0, b=1, *c, d:, e:, f: 2, **k, &l| } 1721s 1721s Proc#arity for instances created with proc { || } returns zero 1721s - for definition 1721s @a = proc { } 1721s @b = proc { || } 1721s - for definition '@a = proc { |&b| }' 1721s - for definition 1721s @a = proc { |a=1| } 1721s @b = proc { |a=1, b=2| } 1721s - for definition 1721s @a = proc { |a: 1| } 1721s @b = proc { |a: 1, b: 2| } 1721s - for definition 1721s @a = proc { |**k, &l| } 1721s @b = proc { |a: 1, b: 2, **k| } 1721s - for definition 1721s @a = proc { |a=1, b: 2| } 1721s @b = proc { |a=1, b: 2| } 1721s 1721s Proc#arity for instances created with proc { || } returns positive values 1721s - for definition 1721s @a = proc { |a| } 1721s @b = proc { |a, b| } 1721s @c = proc { |a, b, c| } 1721s @d = proc { |a, b, c, d| } 1721s - for definition 1721s @a = proc { |a, b=1| } 1721s @b = proc { |a, b, c=1, d=2| } 1721s - for definition 1721s @a = lambda { |a:| } 1721s @b = lambda { |a:, b:| } 1721s @c = lambda { |a: 1, b:, c:, d: 2| } 1721s - for definition 1721s @a = proc { |a, b:| } 1721s @b = proc { |a, b:, &l| } 1721s - for definition 1721s @a = proc { |a, b, c:, d: 1| } 1721s @b = proc { |a, b, c:, d: 1, **k, &l| } 1721s - for definition 1721s @a = proc { |(a, (*b, c)), d=1| } 1721s @b = proc { |a, (*b, c), d, (*e), (*), **k| } 1721s 1721s Proc#arity for instances created with proc { || } returns negative values 1721s - for definition 1721s @a = proc { |a=1, *b| } 1721s @b = proc { |a=1, b=2, *c| } 1721s - for definition 1721s @a = proc { |*| } 1721s @b = proc { |*a| } 1721s - for definition 1721s @a = proc { |a, *| } 1721s @b = proc { |a, *b| } 1721s @c = proc { |a, b, *c| } 1721s @d = proc { |a, b, c, *d| } 1721s - for definition 1721s @a = proc { |*a, b| } 1721s @b = proc { |*a, b, c| } 1721s @c = proc { |*a, b, c, d| } 1721s - for definition 1721s @a = proc { |a, *b, c| } 1721s @b = proc { |a, b, *c, d, e| } 1721s - for definition 1721s @a = proc { |a, b=1, c=2, *d, e, f| } 1721s @b = proc { |a, b, c=1, *d, e, f, g| } 1721s - for definition 1721s @a = proc { |*a, b: 1| } 1721s @b = proc { |a=1, *b, c: 2, &l| } 1721s - for definition '@a = proc { |*a, **k| }' 1721s - for definition '@a = proc { |a=1, *b, c:, d: 2, **k, &l| }' 1721s - for definition '@a = proc { |a, (b, c), *, d:, e: 2, **| }' 1721s - for definition 1721s @a = proc { |a, b=1, *c, d, e:, f: 2, **k, &l| } 1721s @b = proc { |a, b=1, *c, d:, e:, f: 2, **k, &l| } 1721s @c = proc { |a=0, b=1, *c, d, e:, f: 2, **k, &l| } 1721s @d = proc { |a=0, b=1, *c, d:, e:, f: 2, **k, &l| } 1721s 1721s Proc#binding 1721s - returns a Binding instance 1721s - returns the binding associated with self 1721s 1721s Proc as a block pass argument 1721s - remains the same object if re-vivified by the target method 1721s - remains the same object if reconstructed with Proc.new 1721s 1721s Proc#call 1721s - invokes self 1721s - sets self's parameters to the given values 1721s - can receive block arguments 1721s - yields to the block given at declaration and not to the block argument 1721s - can call its block argument declared with a block argument 1721s 1721s Proc#call on a Proc created with Proc.new 1721s - replaces missing arguments with nil 1721s - silently ignores extra arguments 1721s - auto-explodes a single Array argument 1721s 1721s Proc#call on a Proc created with Kernel#lambda or Kernel#proc 1721s - ignores excess arguments when self is a proc 1721s - will call #to_ary on argument and return self if return is nil 1721s - substitutes nil for missing arguments when self is a proc 1721s - raises an ArgumentError on excess arguments when self is a lambda 1721s - raises an ArgumentError on missing arguments when self is a lambda 1721s - treats a single Array argument as a single argument when self is a lambda 1721s - treats a single Array argument as a single argument when self is a proc 1721s 1721s Proc#=== 1721s - invokes self 1721s - sets self's parameters to the given values 1721s - can receive block arguments 1721s - yields to the block given at declaration and not to the block argument 1721s - can call its block argument declared with a block argument 1721s 1721s Proc#=== on a Proc created with Proc.new 1721s - replaces missing arguments with nil 1721s - silently ignores extra arguments 1721s - auto-explodes a single Array argument 1721s 1721s Proc#=== on a Proc created with Kernel#lambda or Kernel#proc 1721s - ignores excess arguments when self is a proc 1721s - will call #to_ary on argument and return self if return is nil 1721s - substitutes nil for missing arguments when self is a proc 1721s - raises an ArgumentError on excess arguments when self is a lambda 1721s - raises an ArgumentError on missing arguments when self is a lambda 1721s - treats a single Array argument as a single argument when self is a lambda 1721s - treats a single Array argument as a single argument when self is a proc 1721s 1721s Proc#clone 1721s - returns a copy of self 1721s 1721s Proc#<< 1721s - returns a Proc that is the composition of self and the passed Proc 1721s - calls passed Proc with arguments and then calls self with result 1721s - accepts any callable object 1721s - raises TypeError if passed not callable object 1721s - does not try to coerce argument with #to_proc 1721s 1721s Proc#<< composition 1721s - is a Proc 1721s - is a lambda when parameter is lambda 1721s - may accept multiple arguments 1721s - passes blocks to the second proc 1721s 1721s Proc#>> 1721s - returns a Proc that is the composition of self and the passed Proc 1721s - calls passed Proc with arguments and then calls self with result 1721s - accepts any callable object 1721s - raises TypeError if passed not callable object 1721s - does not try to coerce argument with #to_proc 1721s 1721s Proc#>> composition 1721s - is a Proc 1721s - is a Proc when other is lambda 1721s - is a lambda when self is lambda 1721s - may accept multiple arguments 1721s - passes blocks to the first proc 1721s 1721s Proc#curry 1721s - returns a Proc when called on a proc 1721s - returns a Proc when called on a lambda 1721s - calls the curried proc with the arguments if sufficient arguments have been given 1721s - returns a Proc that consumes the remainder of the arguments unless sufficient arguments have been given 1721s - can be called multiple times on the same Proc 1721s - can be passed superfluous arguments if created from a proc 1721s - raises an ArgumentError if passed superfluous arguments when created from a lambda 1721s - returns Procs with arities of -1 1721s - produces Procs that raise ArgumentError for #binding 1721s - produces Procs that return [[:rest]] for #parameters 1721s - produces Procs that return nil for #source_location 1721s - produces Procs that can be passed as the block for instance_exec 1721s - combines arguments and calculates incoming arity accurately for successively currying 1721s 1721s Proc#curry with arity argument 1721s - accepts an optional Integer argument for the arity 1721s - returns a Proc when called on a proc 1721s - returns a Proc when called on a lambda 1721s - retains the lambda-ness of the Proc on which its called 1721s - raises an ArgumentError if called on a lambda that requires more than _arity_ arguments 1721s - returns a Proc if called on a lambda that requires fewer than _arity_ arguments but may take more 1721s - raises an ArgumentError if called on a lambda that requires fewer than _arity_ arguments 1721s - calls the curried proc with the arguments if _arity_ arguments have been given 1721s - returns a Proc that consumes the remainder of the arguments when fewer than _arity_ arguments are given 1721s - can be specified multiple times on the same Proc 1721s - can be passed more than _arity_ arguments if created from a proc 1721s - raises an ArgumentError if passed more than _arity_ arguments when created from a lambda 1721s - returns Procs with arities of -1 regardless of the value of _arity_ 1721s 1721s Proc#dup 1721s - returns a copy of self 1721s 1721s Proc#[] 1721s - invokes self 1721s - sets self's parameters to the given values 1721s - can receive block arguments 1721s - yields to the block given at declaration and not to the block argument 1721s - can call its block argument declared with a block argument 1721s 1721s Proc#call on a Proc created with Proc.new 1721s - replaces missing arguments with nil 1721s - silently ignores extra arguments 1721s - auto-explodes a single Array argument 1721s 1721s Proc#call on a Proc created with Kernel#lambda or Kernel#proc 1721s - ignores excess arguments when self is a proc 1721s - will call #to_ary on argument and return self if return is nil 1721s - substitutes nil for missing arguments when self is a proc 1721s - raises an ArgumentError on excess arguments when self is a lambda 1721s - raises an ArgumentError on missing arguments when self is a lambda 1721s - treats a single Array argument as a single argument when self is a lambda 1721s - treats a single Array argument as a single argument when self is a proc 1721s 1721s Proc#[] with frozen_string_literals 1721s - doesn't duplicate frozen strings 1721s 1721s Proc#eql? 1721s - is a public method 1721s - returns true if self and other are the same object 1721s - returns true if other is a dup of the original 1721s - returns false when bodies are the same but capture env is not identical 1721s - returns false if procs are distinct but have the same body and environment 1721s - returns false if lambdas are distinct but have same body and environment 1721s - returns false if using comparing lambda to proc, even with the same body and env 1721s - returns false if other is not a Proc 1721s - returns false if self and other are both procs but have different bodies 1721s - returns false if self and other are both lambdas but have different bodies 1721s 1721s Proc#== 1721s - is a public method 1721s - returns true if self and other are the same object 1721s - returns true if other is a dup of the original 1721s - returns false when bodies are the same but capture env is not identical 1721s - returns false if procs are distinct but have the same body and environment 1721s - returns false if lambdas are distinct but have same body and environment 1721s - returns false if using comparing lambda to proc, even with the same body and env 1721s - returns false if other is not a Proc 1721s - returns false if self and other are both procs but have different bodies 1721s - returns false if self and other are both lambdas but have different bodies 1721s 1721s Proc#hash 1721s - is provided 1721s - returns an Integer 1721s - is stable 1721s 1721s Proc#inspect for a proc created with Proc.new 1721s - returns a description including file and line number 1721s - has a binary encoding 1721s 1721s Proc#inspect for a proc created with lambda 1721s - returns a description including '(lambda)' and including file and line number 1721s - has a binary encoding 1721s 1721s Proc#inspect for a proc created with proc 1721s - returns a description including file and line number 1721s - has a binary encoding 1721s 1721s Proc#inspect for a proc created with UnboundMethod#to_proc 1721s - returns a description including '(lambda)' and optionally including file and line number 1721s - has a binary encoding 1721s 1721s Proc#inspect for a proc created with Symbol#to_proc 1721s - returns a description including '(&:symbol)' 1721s - has a binary encoding 1721s 1721s Proc#lambda? 1721s - returns true if the Proc was created from a block with the lambda keyword 1721s - returns false if the Proc was created from a block with the proc keyword 1721s - returns false if the Proc was created from a block with Proc.new 1721s - is preserved when passing a Proc with & to the lambda keyword 1721s - is preserved when passing a Proc with & to the proc keyword 1721s - is preserved when passing a Proc with & to Proc.new 1721s - returns false if the Proc was created from a block with & 1721s - is preserved when the Proc was passed using & 1721s - returns true for a Method converted to a Proc 1721s - is preserved when a Proc is curried 1721s - is preserved when a curried Proc is called without enough arguments 1721s 1721s Proc.new with an associated block 1721s - returns a proc that represents the block 1721s - raises a LocalJumpError when context of the block no longer exists 1721s - returns from within enclosing method when 'return' is used in the block 1721s - returns a subclass of Proc 1721s - calls initialize on the Proc object 1721s 1721s Proc.new with an associated block called on a subclass of Proc 1721s - returns an instance of the subclass 1721s 1721s Proc.new with an associated block called on a subclass of Proc using a reified block parameter 1721s - returns an instance of the subclass 1721s 1721s Proc.new with an associated block called on a subclass of Proc that does not 'super' in 'initialize' 1721s - still constructs a functional proc 1721s 1721s Proc.new with a block argument 1721s - returns the passed proc created from a block 1721s - returns the passed proc created from a method 1721s - returns the passed proc created from a symbol 1721s 1721s Proc.new with a block argument called indirectly from a subclass 1721s - returns the passed proc created from a block 1721s - returns the passed proc created from a method 1721s - returns the passed proc created from a symbol 1721s 1721s Proc.new without a block 1721s - raises an ArgumentError 1721s - raises an ArgumentError if invoked from within a method with no block 1721s - raises an ArgumentError if invoked on a subclass from within a method with no block 1721s - raises an ArgumentError when passed no block 1721s 1721s Proc#parameters 1721s - returns an empty Array for a proc expecting no parameters 1721s - returns an Array of Arrays for a proc expecting parameters 1721s - sets the first element of each sub-Array to :opt for optional arguments 1721s - regards named parameters in procs as optional 1721s - regards optional keyword parameters in procs as optional 1721s - regards parameters with default values as optional 1721s - sets the first element of each sub-Array to :req for required arguments 1721s - regards named parameters in lambdas as required 1721s - regards keyword parameters in lambdas as required 1721s - sets the first element of each sub-Array to :rest for parameters prefixed with asterisks 1721s - sets the first element of each sub-Array to :keyrest for parameters prefixed with double asterisks 1721s - sets the first element of each sub-Array to :block for parameters prefixed with ampersands 1721s - sets the second element of each sub-Array to the name of the argument 1721s - ignores unnamed rest arguments 1721s - ignores implicit rest arguments 1721s - adds nameless rest arg for "star" argument 1721s - adds nameless keyrest arg for "double star" argument 1721s - adds block arg with name & for anonymous block argument 1721s - does not add locals as block options with a block and splat 1721s - returns all parameters defined with the name _ as _ 1721s 1721s Proc#ruby2_keywords 1721s - marks the final hash argument as keyword hash 1721s - applies to the underlying method and applies across duplication 1721s - returns self 1721s - prints warning when a proc does not accept argument splat 1721s - prints warning when a proc accepts keywords 1721s - prints warning when a proc accepts keyword splat 1721s 1721s Proc#source_location 1721s - returns an Array 1721s - sets the first value to the path of the file in which the proc was defined 1721s - sets the last value to an Integer representing the line on which the proc was defined 1721s - works even if the proc was created on the same line 1721s - returns the first line of a multi-line proc (i.e. the line containing 'proc do') 1721s - returns the location of the proc's body; not necessarily the proc itself 1721s - returns the same value for a proc-ified method as the method reports 1721s - returns nil for a core method that has been proc-ified 1721s - works for eval with a given line 1721s 1721s Proc#to_proc 1721s - returns self 1721s 1721s Proc#to_s for a proc created with Proc.new 1721s - returns a description including file and line number 1721s - has a binary encoding 1721s 1721s Proc#to_s for a proc created with lambda 1721s - returns a description including '(lambda)' and including file and line number 1721s - has a binary encoding 1721s 1721s Proc#to_s for a proc created with proc 1721s - returns a description including file and line number 1721s - has a binary encoding 1721s 1721s Proc#to_s for a proc created with UnboundMethod#to_proc 1721s - returns a description including '(lambda)' and optionally including file and line number 1721s - has a binary encoding 1721s 1721s Proc#to_s for a proc created with Symbol#to_proc 1721s - returns a description including '(&:symbol)' 1721s - has a binary encoding 1721s 1721s Proc#yield 1721s - invokes self 1721s - sets self's parameters to the given values 1721s - can receive block arguments 1721s - yields to the block given at declaration and not to the block argument 1721s - can call its block argument declared with a block argument 1721s 1721s Proc#yield on a Proc created with Proc.new 1721s - replaces missing arguments with nil 1721s - silently ignores extra arguments 1721s - auto-explodes a single Array argument 1721s 1721s Proc#yield on a Proc created with Kernel#lambda or Kernel#proc 1721s - ignores excess arguments when self is a proc 1721s - will call #to_ary on argument and return self if return is nil 1721s - substitutes nil for missing arguments when self is a proc 1721s - raises an ArgumentError on excess arguments when self is a lambda 1721s - raises an ArgumentError on missing arguments when self is a lambda 1721s - treats a single Array argument as a single argument when self is a lambda 1721s - treats a single Array argument as a single argument when self is a proc 1721s 1721s Queue#<< 1721s - adds an element to the Queue 1721s - is an error for a closed queue 1721s 1721s Queue#clear 1721s - removes all objects from the queue 1721s 1721s Queue#close 1721s - may be called multiple times 1721s - returns self 1721s 1721s Queue#closed? 1721s - returns false initially 1721s - returns true when the queue is closed 1721s 1721s Queue#deq 1721s - removes an item from the queue 1721s - returns items in the order they were added 1721s - blocks the thread until there are items in the queue 1721s - removes an item from a closed queue 1721s - converts false-ish for non_blocking to boolean 1721s - returns nil for a closed empty queue 1721s - returns nil for an empty queue that becomes closed 1721s 1721s Queue#deq in non-blocking mode 1721s - removes an item from the queue 1721s - raises a ThreadError if the queue is empty 1721s - removes an item from a closed queue 1721s - raises a ThreadError for a closed empty queue 1721s - converts true-ish non_blocking argument to true 1721s 1721s Queue#empty? 1721s - returns true on an empty Queue 1721s - returns false when Queue is not empty 1721s 1721s Queue#enq 1721s - adds an element to the Queue 1721s - is an error for a closed queue 1721s 1721s Queue#initialize 1721s - can be passed no arguments for an empty Queue 1721s - is a private method 1721s - adds all elements of the passed Enumerable to self 1721s - raises TypeError if the provided Enumerable does not respond to #to_a 1721s - raises TypeError if #to_a does not return Array 1721s 1721s Queue#initialize converts the given argument to an Array using #to_a 1721s - uses #to_a on the provided Enumerable 1721s - raises a TypeError if the given argument can't be converted to an Array 1721s - raises a NoMethodError if the given argument raises a NoMethodError during type coercion to an Array 1721s 1721s Queue#length 1721s - returns the number of elements 1721s 1721s Queue#num_waiting 1721s - reports the number of threads waiting on the queue 1721s 1721s Queue#pop 1721s - removes an item from the queue 1721s - returns items in the order they were added 1721s - blocks the thread until there are items in the queue 1721s - removes an item from a closed queue 1721s - converts false-ish for non_blocking to boolean 1721s - returns nil for a closed empty queue 1721s - returns nil for an empty queue that becomes closed 1721s 1721s Queue#pop in non-blocking mode 1721s - removes an item from the queue 1721s - raises a ThreadError if the queue is empty 1721s - removes an item from a closed queue 1721s - raises a ThreadError for a closed empty queue 1721s - converts true-ish non_blocking argument to true 1721s 1721s Queue#push 1721s - adds an element to the Queue 1721s - is an error for a closed queue 1721s 1721s Queue#shift 1721s - removes an item from the queue 1721s - returns items in the order they were added 1721s - blocks the thread until there are items in the queue 1721s - removes an item from a closed queue 1721s - converts false-ish for non_blocking to boolean 1721s - returns nil for a closed empty queue 1721s - returns nil for an empty queue that becomes closed 1721s 1721s Queue#shift in non-blocking mode 1721s - removes an item from the queue 1721s - raises a ThreadError if the queue is empty 1721s - removes an item from a closed queue 1721s - raises a ThreadError for a closed empty queue 1721s - converts true-ish non_blocking argument to true 1721s 1721s Queue#size 1721s - returns the number of elements 1721s 1721s Random#bytes 1721s - returns a String 1721s - returns a String of the length given as argument 1721s - returns a binary String 1721s - returns a random binary String 1721s - returns the same output for a given seed 1721s - returns the same numeric output for a given seed across all implementations and platforms 1721s - returns the same numeric output for a given huge seed across all implementations and platforms 1721s 1721s Random.bytes 1721s - returns a String 1721s - returns a String of the length given as argument 1721s - returns a binary String 1721s - returns a random binary String 1721s 1721s Random::DEFAULT 1721s - returns a random number generator 1725s - changes seed on reboot 1725s - refers to the Random class 1725s - is deprecated 1725s 1725s Random#== 1725s - returns true if the two objects have the same state 1725s - returns false if the two objects have different state 1725s - returns true if the two objects have the same seed 1725s - returns false if the two objects have a different seed 1725s - returns false if the other object is not a Random 1725s 1725s Random.new_seed 1725s - returns an Integer 1725s - returns an arbitrary seed value each time 1725s - is not affected by Kernel#srand 1725s 1725s Random.new 1725s - returns a new instance of Random 1725s - uses a random seed value if none is supplied 1725s - returns Random instances initialized with different seeds 1725s - accepts an Integer seed value as an argument 1725s - accepts (and truncates) a Float seed value as an argument 1725s - accepts (and converts to Integer) a Rational seed value as an argument 1725s - accepts (and converts to Integer) a Complex (without imaginary part) seed value as an argument 1725s - raises a RangeError if passed a Complex (with imaginary part) seed value as an argument 1725s 1725s Random.rand 1725s - returns a Float if no max argument is passed 1725s - returns an Integer if an Integer argument is passed 1725s - returns a Float if no max argument is passed 1725s - returns an Integer if an Integer argument is passed 1725s - returns a Float >= 0 if no max argument is passed 1725s - returns a Float < 1 if no max argument is passed 1725s - returns the same sequence for a given seed if no max argument is passed 1725s - returns an Integer >= 0 if an Integer argument is passed 1725s - returns an Integer < the max argument if an Integer argument is passed 1725s - returns the same sequence for a given seed if an Integer argument is passed 1725s - coerces arguments to Integers with #to_int 1725s 1725s Random#rand with Fixnum 1725s - returns an Integer 1725s - returns a Fixnum greater than or equal to 0 1725s - returns a Fixnum less than the argument 1725s - returns the same sequence for a given seed 1725s - eventually returns all possible values 1725s - raises an ArgumentError when the argument is 0 1725s - raises an ArgumentError when the argument is negative 1725s 1725s Random#rand with Bignum 1725s - typically returns a Bignum 1725s - returns a Bignum greater than or equal to 0 1725s - returns a Bignum less than the argument 1725s - returns the same sequence for a given seed 1725s - raises an ArgumentError when the argument is negative 1725s 1725s Random#rand with Float 1725s - returns a Float 1725s - returns a Float greater than or equal to 0.0 1725s - returns a Float less than the argument 1725s - returns the same sequence for a given seed 1725s - raises an ArgumentError when the argument is negative 1725s 1725s Random#rand with Range 1725s - returns an element from the Range 1725s - supports custom object types 1725s - returns an object that is a member of the Range 1725s - works with inclusive ranges 1725s - works with exclusive ranges 1725s - returns the same sequence for a given seed 1725s - eventually returns all possible values 1725s - considers Integers as Floats if one end point is a float 1725s - returns a float within a given float range 1725s - raises an ArgumentError when the startpoint lacks #+ and #- methods 1725s - raises an ArgumentError when the endpoint lacks #+ and #- methods 1725s 1725s Random.random_number 1725s - returns a Float if no max argument is passed 1725s - returns an Integer if an Integer argument is passed 1725s - returns a Float if no max argument is passed 1725s - returns an Integer if an Integer argument is passed 1725s 1725s Random#seed 1725s - returns an Integer 1725s - returns an arbitrary seed if the constructor was called without arguments 1725s - returns the same generated seed when repeatedly called on the same object 1725s - returns the seed given in the constructor 1725s - returns the given seed coerced with #to_int 1725s 1725s Random.srand 1725s - returns an arbitrary seed if .srand wasn't called previously with an argument and no argument is supplied this time 1725s - returns the previous argument to .srand if one was given and no argument is supplied 1725s - returns an arbitrary seed if .srand wasn't called previously with an argument and 0 is supplied this time 1725s - returns the previous argument to .srand if one was given and 0 is supplied 1725s - seeds Random.rand such that its return value is deterministic 1725s - seeds Kernel.rand such that its return value is deterministic 1725s 1725s Random.urandom 1725s - returns a String 1725s - returns a String of the length given as argument 1725s - raises an ArgumentError on a negative size 1725s - returns a binary String 1725s - returns a random binary String 1725s 1725s Range#begin 1725s - returns the first element of self 1725s 1725s Range#bsearch 1725s - returns an Enumerator when not passed a block 1725s - raises a TypeError if the block returns an Object 1725s - raises a TypeError if the block returns a String and boundaries are Integer values 1725s - raises a TypeError if the block returns a String and boundaries are Float values 1725s - raises a TypeError if the Range has Object values 1725s - raises a TypeError if the Range has String values 1725s 1725s Range#bsearch when no block is given returned Enumerator 1725s - size returns nil 1725s 1725s Range#bsearch with Integer values 1725s - returns nil for empty ranges 1725s - returns enumerator when block not passed 1725s 1725s Range#bsearch with Integer values with a block returning true or false 1725s - returns nil if the block returns false for every element 1725s - returns nil if the block returns nil for every element 1725s - returns minimum element if the block returns true for every element 1725s - returns the smallest element for which block returns true 1725s - returns the last element if the block returns true for the last element 1725s 1725s Range#bsearch with Integer values with a block returning negative, zero, positive numbers 1725s - returns nil if the block returns less than zero for every element 1725s - returns nil if the block returns greater than zero for every element 1725s - returns nil if the block never returns zero 1725s - accepts (+/-)Float::INFINITY from the block 1725s - returns an element at an index for which block returns 0.0 1725s - returns an element at an index for which block returns 0 1725s 1725s Range#bsearch with Float values 1725s - returns enumerator when block not passed 1725s 1725s Range#bsearch with Float values with a block returning true or false 1725s - returns nil if the block returns false for every element 1725s - returns nil if the block returns nil for every element 1725s - returns minimum element if the block returns true for every element 1725s - returns the smallest element for which block returns true 1725s - returns a boundary element if appropriate 1725s - works with infinity bounds 1725s 1725s Range#bsearch with Float values with a block returning negative, zero, positive numbers 1725s - returns nil if the block returns less than zero for every element 1725s - returns nil if the block returns greater than zero for every element 1725s - returns nil if the block never returns zero 1725s - accepts (+/-)Float::INFINITY from the block 1725s - returns an element at an index for which block returns 0.0 1725s - returns an element at an index for which block returns 0 1725s - returns an element at an index for which block returns 0 (small numbers) 1725s - returns a boundary element if appropriate 1725s - works with infinity bounds 1725s 1725s Range#bsearch with endless ranges and Integer values 1725s - returns enumerator when block not passed 1725s 1725s Range#bsearch with endless ranges and Integer values with a block returning true or false 1725s - returns minimum element if the block returns true for every element 1725s - returns the smallest element for which block returns true 1725s 1725s Range#bsearch with endless ranges and Integer values with a block returning negative, zero, positive numbers 1725s - returns nil if the block returns less than zero for every element 1725s - returns nil if the block never returns zero 1725s - accepts -Float::INFINITY from the block 1725s - returns an element at an index for which block returns 0.0 1725s - returns an element at an index for which block returns 0 1725s 1725s Range#bsearch with endless ranges and Float values 1725s - returns enumerator when block not passed 1725s 1725s Range#bsearch with endless ranges and Float values with a block returning true or false 1725s - returns nil if the block returns false for every element 1725s - returns nil if the block returns nil for every element 1725s - returns minimum element if the block returns true for every element 1725s - returns the smallest element for which block returns true 1725s - works with infinity bounds 1725s 1725s Range#bsearch with endless ranges and Float values with a block returning negative, zero, positive numbers 1725s - returns nil if the block returns less than zero for every element 1725s - returns nil if the block returns greater than zero for every element 1725s - returns nil if the block never returns zero 1725s - accepts (+/-)Float::INFINITY from the block 1725s - returns an element at an index for which block returns 0.0 1725s - returns an element at an index for which block returns 0 1725s - works with infinity bounds 1725s 1725s Range#bsearch with beginless ranges and Integer values 1725s - returns enumerator when block not passed 1725s 1725s Range#bsearch with beginless ranges and Integer values with a block returning true or false 1725s - returns the smallest element for which block returns true 1725s 1725s Range#bsearch with beginless ranges and Integer values with a block returning negative, zero, positive numbers 1725s - returns nil if the block returns greater than zero for every element 1725s - returns nil if the block never returns zero 1725s - accepts Float::INFINITY from the block 1725s - returns an element at an index for which block returns 0.0 1725s - returns an element at an index for which block returns 0 1725s 1725s Range#bsearch with beginless ranges and Float values 1725s - returns enumerator when block not passed 1725s 1725s Range#bsearch with beginless ranges and Float values with a block returning true or false 1725s - returns nil if the block returns true for every element 1725s - returns nil if the block returns nil for every element 1725s - returns the smallest element for which block returns true 1725s - works with infinity bounds 1725s 1725s Range#bsearch with beginless ranges and Float values with a block returning negative, zero, positive numbers 1725s - returns nil if the block returns less than zero for every element 1725s - returns nil if the block returns greater than zero for every element 1725s - returns nil if the block never returns zero 1725s - accepts (+/-)Float::INFINITY from the block 1725s - returns an element at an index for which block returns 0.0 1725s - returns an element at an index for which block returns 0 1725s - works with infinity bounds 1725s 1725s Range#=== 1725s - returns the result of calling #cover? on self 1725s - returns true if other is an element of self 1725s - returns true if other is an element of self for endless ranges 1725s - returns true if other is an element of self for beginless ranges 1725s - compares values using <=> 1725s - raises an ArgumentError without exactly one argument 1725s - returns true if argument is equal to the first value of the range 1725s - returns true if argument is equal to the last value of the range 1725s - returns true if argument is less than the last value of the range and greater than the first value 1725s - returns true if argument is sole element in the range 1725s - returns false if range is empty 1725s - returns false if the range does not contain the argument 1725s - uses the range element's <=> to make the comparison 1725s - uses a continuous inclusion test 1725s - returns true on any value if begin and end are both nil 1725s 1725s Range#=== on string elements 1725s - returns true if other is matched by element.succ 1725s - returns true if other is not matched by element.succ 1725s 1725s Range#=== with weird succ when included end value 1725s - returns false if other is less than first element 1725s - returns true if other is equal as first element 1725s - returns true if other is matched by element.succ 1725s - returns true if other is not matched by element.succ 1725s - returns true if other is equal as last element but not matched by element.succ 1725s - returns false if other is greater than last element but matched by element.succ 1725s 1725s Range#=== with weird succ when excluded end value 1725s - returns false if other is less than first element 1725s - returns true if other is equal as first element 1725s - returns true if other is matched by element.succ 1725s - returns true if other is not matched by element.succ 1725s - returns false if other is equal as last element but not matched by element.succ 1725s - returns false if other is greater than last element but matched by element.succ 1725s 1725s Range#clone 1725s - duplicates the range 1725s - maintains the frozen state 1725s 1725s Range#count 1725s - returns Infinity for beginless ranges without arguments or blocks 1725s 1725s Range#cover? 1725s - returns true if other is an element of self 1725s - returns true if other is an element of self for endless ranges 1725s - returns true if other is an element of self for beginless ranges 1725s - compares values using <=> 1725s - raises an ArgumentError without exactly one argument 1725s - returns true if argument is equal to the first value of the range 1725s - returns true if argument is equal to the last value of the range 1725s - returns true if argument is less than the last value of the range and greater than the first value 1725s - returns true if argument is sole element in the range 1725s - returns false if range is empty 1725s - returns false if the range does not contain the argument 1725s - uses the range element's <=> to make the comparison 1725s - uses a continuous inclusion test 1725s - allows self to be a beginless range 1725s - allows self to be a endless range 1725s - accepts beginless range argument 1725s - accepts endless range argument 1725s - covers U+9995 in the range U+0999..U+9999 1725s 1725s Range#cover? on string elements 1725s - returns true if other is matched by element.succ 1725s - returns true if other is not matched by element.succ 1725s 1725s Range#cover? with weird succ when included end value 1725s - returns false if other is less than first element 1725s - returns true if other is equal as first element 1725s - returns true if other is matched by element.succ 1725s - returns true if other is not matched by element.succ 1725s - returns true if other is equal as last element but not matched by element.succ 1725s - returns false if other is greater than last element but matched by element.succ 1725s 1725s Range#cover? with weird succ when excluded end value 1725s - returns false if other is less than first element 1725s - returns true if other is equal as first element 1725s - returns true if other is matched by element.succ 1725s - returns true if other is not matched by element.succ 1725s - returns false if other is equal as last element but not matched by element.succ 1725s - returns false if other is greater than last element but matched by element.succ 1725s 1725s Range#cover? range argument 1725s - accepts range argument 1725s - supports boundaries of different comparable types 1725s - returns false if types are not comparable 1725s - honors exclusion of right boundary (:exclude_end option) 1725s 1725s Range#dup 1725s - duplicates the range 1725s - creates an unfrozen range 1725s 1725s Range#each 1725s - passes each element to the given block by using #succ 1725s - works for non-ASCII ranges 1725s - works with endless ranges 1725s - works with String endless ranges 1725s - raises a TypeError beginless ranges 1725s - raises a TypeError if the first element does not respond to #succ 1725s - returns self 1725s - returns an enumerator when no block given 1725s - supports Time objects that respond to #succ 1725s - passes each Symbol element by using #succ 1725s 1725s Range#each when no block is given returned Enumerator 1725s - size returns the enumerable size 1725s 1725s Range#end 1725s - end returns the last element of self 1725s 1725s Range#eql? 1725s - returns true if other has same begin, end, and exclude_end? values 1725s - returns false if one of the attributes differs 1725s - returns false if other is not a Range 1725s - returns true for subclasses of Range 1725s - works for endless Ranges 1725s - returns false if the endpoints are not eql? 1725s 1725s Range#== 1725s - returns true if other has same begin, end, and exclude_end? values 1725s - returns false if one of the attributes differs 1725s - returns false if other is not a Range 1725s - returns true for subclasses of Range 1725s - works for endless Ranges 1725s - returns true if the endpoints are == 1725s - returns true if the endpoints are == for endless ranges 1725s - returns true if the endpoints are == for beginless ranges 1725s 1725s Range#exclude_end? 1725s - returns false if the range does not exclude the end value 1725s - returns true if the range excludes the end value 1725s 1725s Range#first 1725s - returns the first element of self 1725s - returns the specified number of elements from the beginning 1725s - returns an empty array for an empty Range 1725s - returns an empty array when passed zero 1725s - returns all elements in the range when count exceeds the number of elements 1725s - raises an ArgumentError when count is negative 1725s - calls #to_int to convert the argument 1725s - raises a TypeError if #to_int does not return an Integer 1725s - truncates the value when passed a Float 1725s - raises a TypeError when passed nil 1725s - raises a TypeError when passed a String 1725s - raises a RangeError when called on an beginless range 1725s 1725s Range#frozen? 1725s - is true for literal ranges 1725s - is true for Range.new 1725s - is false for instances of a subclass of Range 1725s - is false for Range.allocate 1725s 1725s Range#hash 1725s - is provided 1725s - generates the same hash values for Ranges with the same start, end and exclude_end? values 1725s - generates an Integer for the hash value 1725s 1725s Range#include? 1725s - returns true if other is an element of self 1725s - returns true if other is an element of self for endless ranges 1725s - returns true if other is an element of self for beginless ranges 1725s - compares values using <=> 1725s - raises an ArgumentError without exactly one argument 1725s - returns true if argument is equal to the first value of the range 1725s - returns true if argument is equal to the last value of the range 1725s - returns true if argument is less than the last value of the range and greater than the first value 1725s - returns true if argument is sole element in the range 1725s - returns false if range is empty 1725s - returns false if the range does not contain the argument 1725s - does not include U+9995 in the range U+0999..U+9999 1725s 1725s Range#include? on string elements 1725s - returns true if other is matched by element.succ 1725s - returns false if other is not matched by element.succ 1725s 1725s Range#include? with weird succ when included end value 1725s - returns false if other is less than first element 1725s - returns true if other is equal as first element 1725s - returns true if other is matched by element.succ 1725s - returns false if other is not matched by element.succ 1725s - returns false if other is equal as last element but not matched by element.succ 1725s - returns false if other is greater than last element but matched by element.succ 1725s 1725s Range#include? with weird succ when excluded end value 1725s - returns false if other is less than first element 1725s - returns true if other is equal as first element 1725s - returns true if other is matched by element.succ 1725s - returns false if other is not matched by element.succ 1725s - returns false if other is equal as last element but not matched by element.succ 1725s - returns false if other is greater than last element but matched by element.succ 1725s 1725s Range#include? with Time endpoints 1725s - uses cover? logic 1725s 1725s Range#initialize 1725s - is private 1725s - initializes correctly the Range object when given 2 arguments 1725s - initializes correctly the Range object when given 3 arguments 1725s - raises an ArgumentError if passed without or with only one argument 1725s - raises an ArgumentError if passed with four or more arguments 1725s - raises a FrozenError if called on an already initialized Range 1725s - raises an ArgumentError if arguments don't respond to <=> 1725s 1725s Range#inspect 1725s - provides a printable form, using #inspect to convert the start and end objects 1725s - works for endless ranges 1725s - works for beginless ranges 1725s - works for nil ... nil ranges 1725s 1725s Range#last 1725s - end returns the last element of self 1725s - returns the specified number of elements from the end 1725s - returns the specified number if elements for single element inclusive range 1725s - returns an empty array for an empty Range 1725s - returns an empty array when passed zero 1725s - returns all elements in the range when count exceeds the number of elements 1725s - raises an ArgumentError when count is negative 1725s - calls #to_int to convert the argument 1725s - raises a TypeError if #to_int does not return an Integer 1725s - truncates the value when passed a Float 1725s - raises a TypeError when passed nil 1725s - raises a TypeError when passed a String 1725s - raises a RangeError when called on an endless range 1725s 1725s Range#max 1725s - returns the maximum value in the range when called with no arguments 1725s - returns the maximum value in the Float range when called with no arguments 1725s - raises TypeError when called on an exclusive range and a non Integer value 1725s - returns nil when the endpoint is less than the start point 1725s - returns nil when the endpoint equals the start point and the range is exclusive 1725s - returns the endpoint when the endpoint equals the start point and the range is inclusive 1725s - returns nil when the endpoint is less than the start point in a Float range 1725s - returns end point when the range is Time..Time(included end point) 1725s - raises TypeError when called on a Time...Time(excluded end point) 1725s - raises RangeError when called on an endless range 1725s - returns the end point for beginless ranges 1725s - raises for an exclusive beginless range 1725s 1725s Range#max given a block 1725s - passes each pair of values in the range to the block 1725s - passes each pair of elements to the block in reversed order 1725s - calls #> and #< on the return value of the block 1725s - returns the element the block determines to be the maximum 1725s - returns nil when the endpoint is less than the start point 1725s - raises RangeError when called with custom comparison method on an beginless range 1725s 1725s Range#member? 1725s - returns true if other is an element of self 1725s - returns true if other is an element of self for endless ranges 1725s - returns true if other is an element of self for beginless ranges 1725s - compares values using <=> 1725s - raises an ArgumentError without exactly one argument 1725s - returns true if argument is equal to the first value of the range 1725s - returns true if argument is equal to the last value of the range 1725s - returns true if argument is less than the last value of the range and greater than the first value 1725s - returns true if argument is sole element in the range 1725s - returns false if range is empty 1725s - returns false if the range does not contain the argument 1725s 1725s Range#member? on string elements 1725s - returns true if other is matched by element.succ 1725s - returns false if other is not matched by element.succ 1725s 1725s Range#member? with weird succ when included end value 1725s - returns false if other is less than first element 1725s - returns true if other is equal as first element 1725s - returns true if other is matched by element.succ 1725s - returns false if other is not matched by element.succ 1725s - returns false if other is equal as last element but not matched by element.succ 1725s - returns false if other is greater than last element but matched by element.succ 1725s 1725s Range#member? with weird succ when excluded end value 1725s - returns false if other is less than first element 1725s - returns true if other is equal as first element 1725s - returns true if other is matched by element.succ 1725s - returns false if other is not matched by element.succ 1725s - returns false if other is equal as last element but not matched by element.succ 1725s - returns false if other is greater than last element but matched by element.succ 1725s 1725s Range#member? with Time endpoints 1725s - uses cover? logic 1725s 1725s Range#min 1725s - returns the minimum value in the range when called with no arguments 1725s - returns the minimum value in the Float range when called with no arguments 1725s - returns nil when the start point is greater than the endpoint 1725s - returns nil when the endpoint equals the start point and the range is exclusive 1725s - returns the start point when the endpoint equals the start point and the range is inclusive 1725s - returns nil when the start point is greater than the endpoint in a Float range 1725s - returns start point when the range is Time..Time(included end point) 1725s - returns start point when the range is Time...Time(excluded end point) 1725s - returns the start point for endless ranges 1725s - raises RangeError when called on an beginless range 1725s 1725s Range#min given a block 1725s - passes each pair of values in the range to the block 1725s - passes each pair of elements to the block where the first argument is the current element, and the last is the first element 1725s - calls #> and #< on the return value of the block 1725s - returns the element the block determines to be the minimum 1725s - returns nil when the start point is greater than the endpoint 1725s - raises RangeError when called with custom comparison method on an endless range 1725s 1725s Range#minmax on an inclusive range 1725s - should raise RangeError on an endless range without iterating the range 1725s - raises RangeError or ArgumentError on a beginless range 1725s - should return beginning of range if beginning and end are equal without iterating the range 1725s - should return nil pair if beginning is greater than end without iterating the range 1725s - should return the minimum and maximum values for a non-numeric range without iterating the range 1725s - should return the minimum and maximum values for a numeric range 1725s - should return the minimum and maximum values for a numeric range without iterating the range 1725s - should return the minimum and maximum values according to the provided block by iterating the range 1725s 1725s Range#minmax on an exclusive range 1725s - should raise RangeError on an endless range 1725s - should raise RangeError on a beginless range 1725s - should return nil pair if beginning and end are equal without iterating the range 1725s - should return nil pair if beginning is greater than end without iterating the range 1725s - should return the minimum and maximum values for a non-numeric range by iterating the range 1725s - should return the minimum and maximum values for a numeric range 1725s - should return the minimum and maximum values for a numeric range without iterating the range 1725s - raises TypeError if the end value is not an integer 1725s - should return the minimum and maximum values according to the provided block by iterating the range 1725s 1725s Range.new 1725s - constructs a range using the given start and end 1725s - includes the end object when the third parameter is omitted or false 1725s - raises an ArgumentError when the given start and end can't be compared by using #<=> 1725s - does not rescue exception raised in #<=> when compares the given start and end 1725s 1725s Range.new beginless/endless range 1725s - allows beginless left boundary 1725s - distinguishes ranges with included and excluded right boundary 1725s - allows endless right boundary 1725s - distinguishes ranges with included and excluded right boundary 1725s - creates a frozen range if the class is Range.class 1725s - does not create a frozen range if the class is not Range.class 1725s 1725s Range#% 1725s - works as a Range#step 1725s - produces an arithmetic sequence with a percent sign in #inspect 1726s 1726s Range 1726s - includes Enumerable 1726s 1726s Range#size 1726s - returns the number of elements in the range 1726s - returns 0 if last is less than first 1726s - returns Float::INFINITY for increasing, infinite ranges 1726s - returns Float::INFINITY for endless ranges if the start is numeric 1726s - returns nil for endless ranges if the start is not numeric 1726s - returns Float::INFINITY for all beginless ranges 1726s - returns nil if first and last are not Numeric 1726s 1726s Range#step 1726s - returns self 1726s - raises TypeError if step 1726s - calls #to_int to coerce step to an Integer 1726s - raises a TypeError if step does not respond to #to_int 1726s - raises a TypeError if #to_int does not return an Integer 1726s - coerces the argument to integer by invoking to_int 1726s - raises a TypeError if the first element does not respond to #succ 1726s - raises an ArgumentError if step is 0 1726s - raises an ArgumentError if step is 0.0 1726s - raises an ArgumentError if step is negative 1726s 1726s Range#step with inclusive end and Integer values 1726s - yields Integer values incremented by 1 and less than or equal to end when not passed a step 1726s - yields Integer values incremented by an Integer step 1726s - yields Float values incremented by a Float step 1726s 1726s Range#step with inclusive end and Float values 1726s - yields Float values incremented by 1 and less than or equal to end when not passed a step 1726s - yields Float values incremented by an Integer step 1726s - yields Float values incremented by a Float step 1726s - returns Float values of 'step * n + begin <= end' 1726s - handles infinite values at either end 1726s 1726s Range#step with inclusive end and Integer, Float values 1726s - yields Float values incremented by 1 and less than or equal to end when not passed a step 1726s - yields Float values incremented by an Integer step 1726s - yields Float values incremented by a Float step 1726s 1726s Range#step with inclusive end and Float, Integer values 1726s - yields Float values incremented by 1 and less than or equal to end when not passed a step 1726s - yields Float values incremented by an Integer step 1726s - yields Float values incremented by a Float step 1726s 1726s Range#step with inclusive end and String values 1726s - yields String values incremented by #succ and less than or equal to end when not passed a step 1726s - yields String values incremented by #succ called Integer step times 1726s - raises a TypeError when passed a Float step 1726s - calls #succ on begin and each element returned by #succ 1726s 1726s Range#step with exclusive end and Integer values 1726s - yields Integer values incremented by 1 and less than end when not passed a step 1726s - yields Integer values incremented by an Integer step 1726s - yields Float values incremented by a Float step 1726s 1726s Range#step with exclusive end and Float values 1726s - yields Float values incremented by 1 and less than end when not passed a step 1726s - yields Float values incremented by an Integer step 1726s - yields Float values incremented by a Float step 1726s - returns Float values of 'step * n + begin < end' 1726s - correctly handles values near the upper limit 1726s - handles infinite values at either end 1726s 1726s Range#step with exclusive end and Integer, Float values 1726s - yields Float values incremented by 1 and less than end when not passed a step 1726s - yields Float values incremented by an Integer step 1726s - yields an Float and then Float values incremented by a Float step 1726s 1726s Range#step with exclusive end and Float, Integer values 1726s - yields Float values incremented by 1 and less than end when not passed a step 1726s - yields Float values incremented by an Integer step 1726s - yields Float values incremented by a Float step 1726s 1726s Range#step with exclusive end and String values 1726s - yields String values incremented by #succ and less than or equal to end when not passed a step 1726s - yields String values incremented by #succ called Integer step times 1726s - raises a TypeError when passed a Float step 1726s 1726s Range#step with an endless range and Integer values 1726s - yield Integer values incremented by 1 when not passed a step 1726s - yields Integer values incremented by an Integer step 1726s - yields Float values incremented by a Float step 1726s 1726s Range#step with an endless range and Float values 1726s - yields Float values incremented by 1 and less than end when not passed a step 1726s - yields Float values incremented by an Integer step 1726s - yields Float values incremented by a Float step 1726s - handles infinite values at the start 1726s 1726s Range#step with an endless range and String values 1726s - yields String values incremented by #succ and less than or equal to end when not passed a step 1726s - yields String values incremented by #succ called Integer step times 1726s - raises a TypeError when passed a Float step 1726s 1726s Range#step when no block is given 1726s - raises an ArgumentError if step is 0 1726s 1726s Range#step when no block is given returned Enumerator size 1726s - raises a TypeError if step does not respond to #to_int 1726s - raises a TypeError if #to_int does not return an Integer 1726s - returns the ceil of range size divided by the number of steps 1726s - returns the ceil of range size divided by the number of steps even if step is negative 1726s - returns the correct number of steps when one of the arguments is a float 1726s - returns the range size when there's no step_size 1726s - returns nil with begin and end are String 1726s - return nil and not raises a TypeError if the first element does not respond to #succ 1726s 1726s Range#step when no block is given returned Enumerator type when both begin and end are numerics 1726s - returns an instance of Enumerator::ArithmeticSequence 1726s 1726s Range#step when no block is given returned Enumerator type when begin is not defined and end is numeric 1726s - returns an instance of Enumerator::ArithmeticSequence 1726s 1726s Range#step when no block is given returned Enumerator type when range is endless 1726s - returns an instance of Enumerator::ArithmeticSequence when begin is numeric 1726s - returns an instance of Enumerator when begin is not numeric 1726s 1726s Range#step when no block is given returned Enumerator type when range is beginless and endless 1726s - returns an instance of Enumerator 1726s 1726s Range#step when no block is given returned Enumerator type when begin and end are not numerics 1726s - returns an instance of Enumerator 1726s 1726s Range#to_a 1726s - converts self to an array 1726s - returns empty array for descending-ordered 1726s - works with Ranges of 64-bit integers 1726s - works with Ranges of Symbols 1726s - works for non-ASCII ranges 1726s - throws an exception for endless ranges 1726s - throws an exception for beginless ranges 1726s 1726s Range#to_s 1726s - provides a printable form of self 1726s - can show endless ranges 1726s - can show beginless ranges 1726s 1726s Rational#abs 1726s - returns self's absolute value 1726s 1726s Rational#ceil with no arguments (precision = 0) 1726s - returns an Integer 1726s - returns the truncated value toward positive infinity 1726s 1726s Rational#ceil with a precision < 0 1726s - returns an Integer 1726s - moves the truncation point n decimal places left 1726s 1726s Rational#ceil with precision > 0 1726s - returns a Rational 1726s - moves the truncation point n decimal places right 1726s 1726s Rational#coerce 1726s - returns the passed argument, self as Float, when given a Float 1726s - returns the passed argument, self as Rational, when given an Integer 1726s - coerces to Rational, when given a Complex 1726s - returns [argument, self] when given a Rational 1726s - raises an error when passed a BigDecimal 1726s 1726s Rational#<=> when passed a Rational object 1726s - returns 1 when self is greater than the passed argument 1726s - returns 0 when self is equal to the passed argument 1726s - returns -1 when self is less than the passed argument 1726s 1726s Rational#<=> when passed an Integer object 1726s - returns 1 when self is greater than the passed argument 1726s - returns 0 when self is equal to the passed argument 1726s - returns -1 when self is less than the passed argument 1726s 1726s Rational#<=> when passed a Float object 1726s - returns 1 when self is greater than the passed argument 1726s - returns 0 when self is equal to the passed argument 1726s - returns -1 when self is less than the passed argument 1726s 1726s Rational#<=> when passed an Object that responds to #coerce 1726s - calls #coerce on the passed argument with self 1726s - calls #<=> on the coerced Rational with the coerced Object 1726s - does not rescue exception raised in other#coerce 1726s 1726s Rational#<=> when passed a non-Numeric Object that doesn't respond to #coerce 1726s - returns nil 1726s 1726s Rational#denominator 1726s - returns the denominator 1726s - returns 1 if no denominator was given 1726s 1726s Rational#div 1726s - returns an Integer 1726s - raises an ArgumentError if passed more than one argument 1726s - raises a TypeError if passed a non-numeric argument 1726s 1726s Rational#div passed a Rational 1726s - performs integer division and returns the result 1726s - raises a ZeroDivisionError when the argument has a numerator of 0 1726s - raises a ZeroDivisionError when the argument has a numerator of 0.0 1726s 1726s Rational#div passed an Integer 1726s - performs integer division and returns the result 1726s - raises a ZeroDivisionError when the argument is 0 1726s 1726s Rational#div passed a Float 1726s - performs integer division and returns the result 1726s - raises a ZeroDivisionError when the argument is 0.0 1726s 1726s Rational#/ 1726s - calls #coerce on the passed argument with self 1726s - calls #/ on the coerced Rational with the coerced Object 1726s - does not rescue exception raised in other#coerce 1726s 1726s Rational#/ when passed an Integer 1726s - returns self divided by other as a Rational 1726s - raises a ZeroDivisionError when passed 0 1726s 1726s Rational#/ when passed a Rational 1726s - returns self divided by other as a Rational 1726s - raises a ZeroDivisionError when passed a Rational with a numerator of 0 1726s 1726s Rational#/ when passed a Float 1726s - returns self divided by other as a Float 1726s - returns infinity when passed 0 1726s 1726s Rational#divmod when passed a Rational 1726s - returns the quotient as Integer and the remainder as Rational 1726s - raises a ZeroDivisionError when passed a Rational with a numerator of 0 1726s 1726s Rational#divmod when passed an Integer 1726s - returns the quotient as Integer and the remainder as Rational 1726s - raises a ZeroDivisionError when passed 0 1726s 1726s Rational#divmod when passed a Float 1726s - returns the quotient as Integer and the remainder as Float 1726s - returns the quotient as Integer and the remainder as Float 1726s - raises a ZeroDivisionError when passed 0 1726s 1726s Rational#== 1726s - returns the result of calling #== with self on the passed argument 1726s 1726s Rational#== when passed a Rational 1726s - returns true if self has the same numerator and denominator as the passed argument 1726s 1726s Rational#== when passed a Float 1726s - converts self to a Float and compares it with the passed argument 1726s 1726s Rational#== when passed an Integer 1726s - returns true if self has the passed argument as numerator and a denominator of 1 1726s 1726s Rational#** 1726s - calls #coerce on the passed argument with self 1726s - calls #** on the coerced Rational with the coerced Object 1726s - raises ZeroDivisionError for Rational(0, 1) passed a negative Integer 1726s - raises ZeroDivisionError for Rational(0, 1) passed a negative Rational with denominator 1 1726s - raises ZeroDivisionError for Rational(0, 1) passed a negative Rational 1726s - returns Infinity for Rational(0, 1) passed a negative Float 1726s 1726s Rational#** when passed Rational 1726s - returns Rational(1) if the exponent is Rational(0) 1726s - returns self raised to the argument as a Rational if the exponent's denominator is 1 1726s - returns self raised to the argument as a Float if the exponent's denominator is not 1 1726s - returns a complex number when self is negative and the passed argument is not 0 1726s 1726s Rational#** when passed Integer 1726s - returns the Rational value of self raised to the passed argument 1726s - returns Rational(1, 1) when the passed argument is 0 1726s 1726s Rational#** when passed Bignum 1726s - returns Rational(0) when self is Rational(0) and the exponent is positive 1726s - raises ZeroDivisionError when self is Rational(0) and the exponent is negative 1726s - returns Rational(1) when self is Rational(1) 1726s - returns Rational(1) when self is Rational(-1) and the exponent is positive and even 1726s - returns Rational(-1) when self is Rational(-1) and the exponent is positive and odd 1726s - returns positive Infinity when self is > 1 1726s - returns 0.0 when self is > 1 and the exponent is negative 1726s 1726s Rational#** when passed Float 1726s - returns self converted to Float and raised to the passed argument 1726s - returns a complex number if self is negative and the passed argument is not 0 1726s - returns Complex(1.0) when the passed argument is 0.0 1726s 1726s Rational#fdiv 1726s - needs to be reviewed for spec completeness 1726s 1726s Rational#floor with no arguments (precision = 0) 1726s - returns an integer 1726s - returns the truncated value toward negative infinity 1726s 1726s Rational#floor with a precision < 0 1726s - returns an integer 1726s - moves the truncation point n decimal places left 1726s 1726s Rational#floor with a precision > 0 1726s - returns a Rational 1726s - moves the truncation point n decimal places right 1726s 1726s Rational#hash 1726s - is static 1726s 1726s Rational#inspect 1726s - returns a string representation of self 1726s 1726s Rational#integer? 1726s - returns false for a rational with a numerator and no denominator 1726s - returns false for a rational with a numerator and a denominator 1726s 1726s Rational#abs 1726s - returns self's absolute value 1726s 1726s Rational#marshal_dump 1726s - is a private method 1726s - dumps numerator and denominator 1726s 1726s Rational#- 1726s - does not rescue exception raised in other#coerce 1726s - calls #coerce on the passed argument with self 1726s - calls #- on the coerced Rational with the coerced Object 1726s 1726s Rational#- passed a Rational 1726s - returns the result of subtracting other from self as a Rational 1726s 1726s Rational#- passed a Float 1726s - returns the result of subtracting other from self as a Float 1726s 1726s Rational#- passed an Integer 1726s - returns the result of subtracting other from self as a Rational 1726s 1726s Rational#% 1726s - returns the remainder when this value is divided by other 1726s - returns a Float value when the argument is Float 1726s - raises ZeroDivisionError on zero denominator 1726s - raises a ZeroDivisionError when the argument is 0.0 1726s 1726s Rational#* 1726s - calls #coerce on the passed argument with self 1726s - calls #* on the coerced Rational with the coerced Object 1726s - does not rescue exception raised in other#coerce 1726s 1726s Rational#* passed a Rational 1726s - returns self divided by other as a Rational 1726s 1726s Rational#* passed a Float 1726s - returns self divided by other as a Float 1726s 1726s Rational#* passed an Integer 1726s - returns self divided by other as a Rational 1726s 1726s Rational#numerator 1726s - returns the numerator 1726s 1726s Rational#+ 1726s - calls #coerce on the passed argument with self 1726s - calls #+ on the coerced Rational with the coerced Object 1726s - does not rescue exception raised in other#coerce 1726s 1726s Rational#+ with a Rational 1726s - returns the result of subtracting other from self as a Rational 1726s 1726s Rational#+ with a Float 1726s - returns the result of subtracting other from self as a Float 1726s 1726s Rational#+ with an Integer 1726s - returns the result of subtracting other from self as a Rational 1726s 1726s Rational#quo 1726s - calls #coerce on the passed argument with self 1726s - calls #/ on the coerced Rational with the coerced Object 1726s 1726s Rational 1726s - includes Comparable 1726s - does not respond to new 1726s 1726s Rational#rationalize 1726s - returns self with no argument 1726s - simplifies self to the degree specified by a Rational argument 1726s - simplifies self to the degree specified by a Float argument 1726s - raises ArgumentError when passed more than one argument 1726s 1726s Rational#remainder 1726s - needs to be reviewed for spec completeness 1726s 1726s Rational#round with no arguments (precision = 0) 1726s - returns an integer 1726s - returns the truncated value toward the nearest integer 1726s - returns the rounded value toward the nearest integer 1726s 1726s Rational#round with a precision < 0 1726s - returns an integer 1726s - moves the truncation point n decimal places left 1726s 1726s Rational#round with a precision > 0 1726s - returns a Rational 1726s - moves the truncation point n decimal places right 1726s - doesn't alter the value if the precision is too great 1726s - doesn't fail when rounding to an absurdly large positive precision 1726s 1726s Rational#round with half option 1726s - returns an Integer when precision is not passed 1726s - returns a Rational when the precision is greater than 0 1726s - raise for a non-existent round mode 1726s 1726s Rational#to_f 1726s - returns self converted to a Float 1726s - converts to a Float for large numerator and denominator 1726s 1726s Rational#to_i 1726s - converts self to an Integer by truncation 1726s - converts self to an Integer by truncation 1726s 1726s Rational#to_r 1726s - returns self 1726s - raises TypeError trying to convert BasicObject 1726s - works when a BasicObject has to_r 1726s - fails when a BasicObject's to_r does not return a Rational 1726s 1726s Rational#to_s 1726s - returns a string representation of self 1726s 1726s Rational#truncate with no arguments (precision = 0) 1726s - returns an integer 1726s - returns the truncated value toward 0 1726s 1726s Rational#truncate with an explicit precision = 0 1726s - returns an integer 1726s - returns the truncated value toward 0 1726s 1726s Rational#truncate with a precision < 0 1726s - returns an integer 1726s - moves the truncation point n decimal places left 1726s 1726s Rational#truncate with a precision > 0 1726s - returns a Rational 1726s - moves the truncation point n decimal places right 1726s 1726s Rational#truncate with an invalid value for precision 1726s - raises a TypeError 1726s - does not call to_int on the argument 1726s 1726s Rational#zero? 1726s - returns true if the numerator is 0 1726s - returns true if the numerator is 0.0 1726s - returns false if the numerator isn't 0 1726s 1726s Refinement#import_methods 1726s - warns if a module includes/prepends some other module 1726s - doesn't import methods from included/prepended modules 1726s - doesn't import module's class methods 1726s - imports module methods with super 1726s 1726s Refinement#import_methods when methods are defined in Ruby code 1726s - imports methods 1726s - imports methods from multiple modules 1726s - imports a method defined in the last module if method with same name is defined in multiple modules 1726s - still imports methods of modules listed before a module that contains method not defined in Ruby 1726s 1726s Refinement#import_methods when methods are not defined in Ruby code 1726s - raises ArgumentError 1726s - raises ArgumentError when importing methods from C extension 1726s 1726s Regexp#=== 1726s - is true if there is a match 1726s - is false if there is no match 1726s - returns true if it matches a Symbol 1726s - returns false if it does not match a Symbol 1726s - returns false if the other value cannot be coerced to a string 1726s - uses #to_str on string-like objects 1726s 1726s Regexp#casefold? 1726s - returns the value of the case-insensitive flag 1726s 1726s Regexp.compile 1726s - requires one argument and creates a new regular expression object 1726s - works by default for subclasses with overridden #initialize 1726s 1726s Regexp.compile given a String 1726s - uses the String argument as an unescaped literal to construct a Regexp object 1726s - raises a RegexpError when passed an incorrect regexp 1726s - does not set Regexp options if only given one argument 1726s - does not set Regexp options if second argument is nil or false 1726s - sets options from second argument if it is true 1726s - sets options from second argument if it is one of the Integer option constants 1726s - accepts an Integer of two or more options ORed together as the second argument 1726s - does not try to convert the second argument to Integer with #to_int method call 1726s - treats any non-Integer, non-nil, non-false second argument as IGNORECASE 1726s - ignores the third argument if it is 'e' or 'euc' (case-insensitive) 1726s - ignores the third argument if it is 's' or 'sjis' (case-insensitive) 1726s - ignores the third argument if it is 'u' or 'utf8' (case-insensitive) 1726s - uses US_ASCII encoding if third argument is 'n' or 'none' (case insensitive) and only ascii characters 1726s - uses ASCII_8BIT encoding if third argument is 'n' or 'none' (case insensitive) and non-ascii characters 1726s 1726s Regexp.compile given a String with escaped characters 1726s - raises a Regexp error if there is a trailing backslash 1726s - does not raise a Regexp error if there is an escaped trailing backslash 1726s - accepts a backspace followed by a character 1726s - accepts a one-digit octal value 1726s - accepts a two-digit octal value 1726s - accepts a one-digit hexadecimal value 1726s - accepts a two-digit hexadecimal value 1726s - interprets a digit following a two-digit hexadecimal value as a character 1726s - raises a RegexpError if \x is not followed by any hexadecimal digits 1726s - accepts an escaped string interpolation 1726s - accepts '\n' 1726s - accepts '\t' 1726s - accepts '\r' 1726s - accepts '\f' 1726s - accepts '\v' 1726s - accepts '\a' 1726s - accepts '\e' 1726s - accepts '\C-\n' 1726s - accepts '\C-\t' 1726s - accepts '\C-\r' 1726s - accepts '\C-\f' 1726s - accepts '\C-\v' 1726s - accepts '\C-\a' 1726s - accepts '\C-\e' 1726s - accepts multiple consecutive '\' characters 1726s - accepts characters and escaped octal digits 1726s - accepts escaped octal digits and characters 1726s - accepts characters and escaped hexadecimal digits 1726s - accepts escaped hexadecimal digits and characters 1726s - accepts escaped hexadecimal and octal digits 1726s - accepts \u{H} for a single Unicode codepoint 1726s - accepts \u{HH} for a single Unicode codepoint 1726s - accepts \u{HHH} for a single Unicode codepoint 1726s - accepts \u{HHHH} for a single Unicode codepoint 1726s - accepts \u{HHHHH} for a single Unicode codepoint 1726s - accepts \u{HHHHHH} for a single Unicode codepoint 1726s - accepts characters followed by \u{HHHH} 1726s - accepts \u{HHHH} followed by characters 1726s - accepts escaped hexadecimal digits followed by \u{HHHH} 1726s - accepts escaped octal digits followed by \u{HHHH} 1726s - accepts a combination of escaped octal and hexadecimal digits and \u{HHHH} 1726s - accepts \uHHHH for a single Unicode codepoint 1726s - accepts characters followed by \uHHHH 1726s - accepts \uHHHH followed by characters 1726s - accepts escaped hexadecimal digits followed by \uHHHH 1726s - accepts escaped octal digits followed by \uHHHH 1726s - accepts a combination of escaped octal and hexadecimal digits and \uHHHH 1726s - accepts a multiple byte character which need not be escaped 1726s - raises a RegexpError if less than four digits are given for \uHHHH 1726s - raises a RegexpError if the \u{} escape is empty 1726s - raises a RegexpError if more than six hexadecimal digits are given 1726s - returns a Regexp with US-ASCII encoding if only 7-bit ASCII characters are present regardless of the input String's encoding 1726s - returns a Regexp with source String having US-ASCII encoding if only 7-bit ASCII characters are present regardless of the input String's encoding 1726s - returns a Regexp with US-ASCII encoding if UTF-8 escape sequences using only 7-bit ASCII are present 1726s - returns a Regexp with source String having US-ASCII encoding if UTF-8 escape sequences using only 7-bit ASCII are present 1726s - returns a Regexp with UTF-8 encoding if any UTF-8 escape sequences outside 7-bit ASCII are present 1726s - returns a Regexp with source String having UTF-8 encoding if any UTF-8 escape sequences outside 7-bit ASCII are present 1726s - returns a Regexp with the input String's encoding 1726s - returns a Regexp with source String having the input String's encoding 1726s 1726s Regexp.compile given a String with escaped characters 1726s - accepts a three-digit octal value 1726s - interprets a digit following a three-digit octal value as a character 1726s - accepts '\M-\n' 1726s - accepts '\M-\t' 1726s - accepts '\M-\r' 1726s - accepts '\M-\f' 1726s - accepts '\M-\v' 1726s - accepts '\M-\a' 1726s - accepts '\M-\e' 1726s - accepts '\M-\C-\n' 1726s - accepts '\M-\C-\t' 1726s - accepts '\M-\C-\r' 1726s - accepts '\M-\C-\f' 1726s - accepts '\M-\C-\v' 1726s - accepts '\M-\C-\a' 1726s - accepts '\M-\C-\e' 1726s 1726s Regexp.compile given a Regexp 1726s - uses the argument as a literal to construct a Regexp object 1726s - preserves any options given in the Regexp literal 1726s - does not honour options given as additional arguments 1726s - sets the encoding to UTF-8 if the Regexp literal has the 'u' option 1726s - sets the encoding to EUC-JP if the Regexp literal has the 'e' option 1726s - sets the encoding to Windows-31J if the Regexp literal has the 's' option 1726s - sets the encoding to US-ASCII if the Regexp literal has the 'n' option and the source String is ASCII only 1726s - sets the encoding to source String's encoding if the Regexp literal has the 'n' option and the source String is not ASCII only 1726s 1726s Regexp.new given a non-String/Regexp 1726s - calls #to_str method for non-String/Regexp argument 1726s - raises TypeError if there is no #to_str method for non-String/Regexp argument 1726s - raises TypeError if #to_str returns non-String value 1726s 1726s Regexp#encoding 1726s - returns an Encoding object 1726s /tmp/autopkgtest.nFBjtB/autopkgtest_tmp/spec/ruby/core/refinement/import_methods_spec.rb:211: warning: # has ancestors, but Refinement#import_methods doesn't import their methods 1726s /tmp/autopkgtest.nFBjtB/autopkgtest_tmp/spec/ruby/core/refinement/import_methods_spec.rb:236: warning: # has ancestors, but Refinement#import_methods doesn't import their methods 1726s /tmp/autopkgtest.nFBjtB/autopkgtest_tmp/spec/ruby/core/refinement/import_methods_spec.rb:16: warning: # has ancestors, but Refinement#import_methods doesn't import their methods 1726s /tmp/autopkgtest.nFBjtB/autopkgtest_tmp/spec/ruby/core/refinement/import_methods_spec.rb:47: warning: # has ancestors, but Refinement#import_methods doesn't import their methods 1726s /tmp/autopkgtest.nFBjtB/autopkgtest_tmp/spec/ruby/core/refinement/import_methods_spec.rb:47: warning: # has ancestors, but Refinement#import_methods doesn't import their methods 1726s /tmp/autopkgtest.nFBjtB/autopkgtest_tmp/spec/ruby/core/refinement/import_methods_spec.rb:69: warning: # has ancestors, but Refinement#import_methods doesn't import their methods 1726s /tmp/autopkgtest.nFBjtB/autopkgtest_tmp/spec/ruby/core/refinement/import_methods_spec.rb:69: warning: # has ancestors, but Refinement#import_methods doesn't import their methods 1726s /tmp/autopkgtest.nFBjtB/autopkgtest_tmp/spec/ruby/core/refinement/import_methods_spec.rb:85: warning: # has ancestors, but Refinement#import_methods doesn't import their methods 1726s /tmp/autopkgtest.nFBjtB/autopkgtest_tmp/spec/ruby/core/refinement/import_methods_spec.rb:85: warning: Kernel has ancestors, but Refinement#import_methods doesn't import their methods 1726s /tmp/autopkgtest.nFBjtB/autopkgtest_tmp/spec/ruby/core/refinement/import_methods_spec.rb:251: warning: Kernel has ancestors, but Refinement#import_methods doesn't import their methods 1726s /tmp/autopkgtest.nFBjtB/autopkgtest_tmp/spec/ruby/core/refinement/import_methods_spec.rb:262: warning: Zlib has ancestors, but Refinement#import_methods doesn't import their methods 1726s /tmp/autopkgtest.nFBjtB/autopkgtest_tmp/spec/ruby/core/regexp/shared/new.rb:272: warning: Unknown escape \N is ignored 1726s /tmp/autopkgtest.nFBjtB/autopkgtest_tmp/spec/ruby/core/regexp/shared/new.rb:360: warning: Unknown escape \N is ignored 1726s - defaults to US-ASCII if the Regexp contains only US-ASCII character 1726s - returns US_ASCII if the 'n' modifier is supplied and only US-ASCII characters are present 1726s - returns BINARY if the 'n' modifier is supplied and non-US-ASCII characters are present 1726s - defaults to UTF-8 if \u escapes appear 1726s - defaults to UTF-8 if a literal UTF-8 character appears 1726s - returns UTF-8 if the 'u' modifier is supplied 1726s - returns Windows-31J if the 's' modifier is supplied 1726s - returns EUC_JP if the 'e' modifier is supplied 1726s - upgrades the encoding to that of an embedded String 1726s - ignores the encoding and uses US-ASCII if the string has only ASCII characters 1726s - ignores the default_internal encoding 1726s - allows otherwise invalid characters if NOENCODING is specified 1726s 1726s Regexp#eql? 1726s - is true if self and other have the same pattern 1726s - is true if self and other have the same character set code 1726s - is true if other has the same #casefold? values 1726s - is true if self does not specify /n option and other does 1726s - is true if self specifies /n option and other does not 1726s 1726s Regexp#== 1726s - is true if self and other have the same pattern 1726s - is true if self and other have the same character set code 1726s - is true if other has the same #casefold? values 1726s - is true if self does not specify /n option and other does 1726s - is true if self specifies /n option and other does not 1726s 1726s Regexp.escape 1726s - escapes any characters with special meaning in a regular expression 1726s - works with symbols 1726s - works with substrings 1726s - works for broken strings 1726s - sets the encoding of the result to US-ASCII if there are only US-ASCII characters present in the input String 1726s - sets the encoding of the result to the encoding of the String if any non-US-ASCII characters are present in an input String with valid encoding 1726s - sets the encoding of the result to BINARY if any non-US-ASCII characters are present in an input String with invalid encoding 1726s 1726s Regexp#fixed_encoding? 1726s - returns false by default 1726s - returns false if the 'n' modifier was supplied to the Regexp 1726s - returns true if the 'u' modifier was supplied to the Regexp 1726s - returns true if the 's' modifier was supplied to the Regexp 1726s - returns true if the 'e' modifier was supplied to the Regexp 1726s - returns true if the Regexp contains a \u escape 1726s - returns true if the Regexp contains a UTF-8 literal 1726s - returns true if the Regexp was created with the Regexp::FIXEDENCODING option 1726s 1726s Regexp#hash 1726s - is provided 1726s - is based on the text and options of Regexp 1726s - returns the same value for two Regexps differing only in the /n option 1726s 1726s Regexp#initialize 1726s - is a private method 1726s - raises a FrozenError on a Regexp literal 1726s - raises a TypeError on an initialized non-literal Regexp 1726s 1726s Regexp#inspect 1726s - returns a formatted string that would eval to the same regexp 1726s - returns options in the order 'mixn' 1726s - does not include the 'o' option 1726s - does not include a character set code 1726s - correctly escapes forward slashes / 1726s - doesn't over escape forward slashes 1726s - escapes 2 slashes in a row properly 1726s - does not over escape 1726s 1726s Regexp.last_match 1726s - returns MatchData instance when not passed arguments 1726s - returns the nth field in this MatchData when passed an Integer 1726s - returns nil when there is no match 1726s 1726s Regexp.last_match when given a Symbol 1726s - returns a named capture 1726s - raises an IndexError when given a missing name 1726s 1726s Regexp.last_match when given a String 1726s - returns a named capture 1726s 1726s Regexp.last_match when given an Object 1726s - coerces argument to an index using #to_int 1726s - raises a TypeError when unable to coerce 1726s 1726s Regexp#=~ 1726s - returns nil if there is no match 1726s - returns nil if the object is nil 1726s - returns the index of the first character of the matching region 1726s - returns the index too, when argument is a Symbol 1726s 1726s Regexp#match 1726s - returns nil if there is no match 1726s - returns nil if the object is nil 1726s - returns a MatchData object 1726s - returns a MatchData object, when argument is a Symbol 1726s - raises a TypeError on an uninitialized Regexp 1726s - raises TypeError on an uninitialized Regexp 1726s - resets $~ if passed nil 1726s - raises TypeError when the given argument cannot be coerced to String 1726s - raises TypeError when the given argument is an Exception 1726s 1726s Regexp#match with [string, position] when given a positive position 1726s - matches the input at a given position 1726s - uses the start as a character offset 1726s - raises an ArgumentError for an invalid encoding 1726s 1726s Regexp#match with [string, position] when given a negative position 1726s - matches the input at a given position 1726s - uses the start as a character offset 1726s - raises an ArgumentError for an invalid encoding 1726s 1726s Regexp#match with [string, position] when passed a block 1726s - yields the MatchData 1726s - returns the block result 1726s - does not yield if there is no match 1726s 1726s Regexp#match? 1726s - returns false when does not match the given value 1726s - takes matching position as the 2nd argument 1726s - returns false when given nil 1726s 1726s Regexp#match? when matches the given value 1726s - returns true but does not set Regexp.last_match 1726s 1726s Regexp#~ 1726s - matches against the contents of $_ 1726s 1726s Regexp#named_captures 1726s - returns a Hash 1726s - returns an empty Hash when there are no capture groups 1726s - sets the keys of the Hash to the names of the capture groups 1726s - sets the values of the Hash to Arrays 1726s - sets each element of the Array to the corresponding group's index 1726s - works with duplicate capture group names 1726s 1726s Regexp#names 1726s - returns an Array 1726s - returns an empty Array if there are no named captures 1726s - returns each named capture as a String 1726s - returns all of the named captures 1726s - works with nested named captures 1726s - returns each capture name only once 1726s 1726s Regexp.new 1726s - requires one argument and creates a new regular expression object 1726s - works by default for subclasses with overridden #initialize 1726s 1726s Regexp.new given a String 1726s - uses the String argument as an unescaped literal to construct a Regexp object 1726s - raises a RegexpError when passed an incorrect regexp 1726s - does not set Regexp options if only given one argument 1726s - does not set Regexp options if second argument is nil or false 1726s - sets options from second argument if it is true 1726s - sets options from second argument if it is one of the Integer option constants 1726s - accepts an Integer of two or more options ORed together as the second argument 1726s - does not try to convert the second argument to Integer with #to_int method call 1726s - treats any non-Integer, non-nil, non-false second argument as IGNORECASE 1726s - ignores the third argument if it is 'e' or 'euc' (case-insensitive) 1726s - ignores the third argument if it is 's' or 'sjis' (case-insensitive) 1726s - ignores the third argument if it is 'u' or 'utf8' (case-insensitive) 1726s - uses US_ASCII encoding if third argument is 'n' or 'none' (case insensitive) and only ascii characters 1726s - uses ASCII_8BIT encoding if third argument is 'n' or 'none' (case insensitive) and non-ascii characters 1726s 1726s Regexp.new given a String with escaped characters 1726s - raises a Regexp error if there is a trailing backslash 1726s - does not raise a Regexp error if there is an escaped trailing backslash 1726s - accepts a backspace followed by a character 1726s - accepts a one-digit octal value 1726s - accepts a two-digit octal value 1726s - accepts a one-digit hexadecimal value 1726s - accepts a two-digit hexadecimal value 1726s - interprets a digit following a two-digit hexadecimal value as a character 1726s - raises a RegexpError if \x is not followed by any hexadecimal digits 1726s - accepts an escaped string interpolation 1726s - accepts '\n' 1726s - accepts '\t' 1726s - accepts '\r' 1726s - accepts '\f' 1726s - accepts '\v' 1726s - accepts '\a' 1726s - accepts '\e' 1726s - accepts '\C-\n' 1726s - accepts '\C-\t' 1726s - accepts '\C-\r' 1726s - accepts '\C-\f' 1726s - accepts '\C-\v' 1726s - accepts '\C-\a' 1726s - accepts '\C-\e' 1726s - accepts multiple consecutive '\' characters 1726s - accepts characters and escaped octal digits 1726s - accepts escaped octal digits and characters 1726s - accepts characters and escaped hexadecimal digits 1726s - accepts escaped hexadecimal digits and characters 1726s - accepts escaped hexadecimal and octal digits 1726s - accepts \u{H} for a single Unicode codepoint 1726s - accepts \u{HH} for a single Unicode codepoint 1726s - accepts \u{HHH} for a single Unicode codepoint 1726s - accepts \u{HHHH} for a single Unicode codepoint 1726s - accepts \u{HHHHH} for a single Unicode codepoint 1726s - accepts \u{HHHHHH} for a single Unicode codepoint 1726s - accepts characters followed by \u{HHHH} 1726s - accepts \u{HHHH} followed by characters 1726s - accepts escaped hexadecimal digits followed by \u{HHHH} 1726s - accepts escaped octal digits followed by \u{HHHH} 1726s - accepts a combination of escaped octal and hexadecimal digits and \u{HHHH} 1726s - accepts \uHHHH for a single Unicode codepoint 1726s - accepts characters followed by \uHHHH 1726s - accepts \uHHHH followed by characters 1726s - accepts escaped hexadecimal digits followed by \uHHHH 1726s - accepts escaped octal digits followed by \uHHHH 1726s - accepts a combination of escaped octal and hexadecimal digits and \uHHHH 1727s - accepts a multiple byte character which need not be escaped 1727s - raises a RegexpError if less than four digits are given for \uHHHH 1727s - raises a RegexpError if the \u{} escape is empty 1727s - raises a RegexpError if more than six hexadecimal digits are given 1727s - returns a Regexp with US-ASCII encoding if only 7-bit ASCII characters are present regardless of the input String's encoding 1727s - returns a Regexp with source String having US-ASCII encoding if only 7-bit ASCII characters are present regardless of the input String's encoding 1727s - returns a Regexp with US-ASCII encoding if UTF-8 escape sequences using only 7-bit ASCII are present 1727s - returns a Regexp with source String having US-ASCII encoding if UTF-8 escape sequences using only 7-bit ASCII are present 1727s - returns a Regexp with UTF-8 encoding if any UTF-8 escape sequences outside 7-bit ASCII are present 1727s - returns a Regexp with source String having UTF-8 encoding if any UTF-8 escape sequences outside 7-bit ASCII are present 1727s - returns a Regexp with the input String's encoding 1727s - returns a Regexp with source String having the input String's encoding 1727s 1727s Regexp.new given a Regexp 1727s - uses the argument as a literal to construct a Regexp object 1727s - preserves any options given in the Regexp literal 1727s - does not honour options given as additional arguments 1727s - sets the encoding to UTF-8 if the Regexp literal has the 'u' option 1727s - sets the encoding to EUC-JP if the Regexp literal has the 'e' option 1727s - sets the encoding to Windows-31J if the Regexp literal has the 's' option 1727s - sets the encoding to US-ASCII if the Regexp literal has the 'n' option and the source String is ASCII only 1727s - sets the encoding to source String's encoding if the Regexp literal has the 'n' option and the source String is not ASCII only 1727s 1727s Regexp.new given a Regexp with escaped characters 1727s - accepts a three-digit octal value 1727s - interprets a digit following a three-digit octal value as a character 1727s - accepts '\M-\n' 1727s - accepts '\M-\t' 1727s - accepts '\M-\r' 1727s - accepts '\M-\f' 1727s - accepts '\M-\v' 1727s - accepts '\M-\a' 1727s - accepts '\M-\e' 1727s - accepts '\M-\C-\n' 1727s - accepts '\M-\C-\t' 1727s - accepts '\M-\C-\r' 1727s - accepts '\M-\C-\f' 1727s - accepts '\M-\C-\v' 1727s - accepts '\M-\C-\a' 1727s - accepts '\M-\C-\e' 1727s 1727s Regexp.new given a non-String/Regexp 1727s - calls #to_str method for non-String/Regexp argument 1727s - raises TypeError if there is no #to_str method for non-String/Regexp argument 1727s - raises TypeError if #to_str returns non-String value 1727s 1727s Regexp#options 1727s - returns an Integer bitvector of regexp options for the Regexp object 1727s - allows checking for presence of a certain option with bitwise & 1727s - returns 0 for a Regexp literal without options 1727s - raises a TypeError on an uninitialized Regexp 1727s - includes Regexp::FIXEDENCODING for a Regexp literal with the 'u' option 1727s - includes Regexp::FIXEDENCODING for a Regexp literal with the 'e' option 1727s - includes Regexp::FIXEDENCODING for a Regexp literal with the 's' option 1727s - does not include Regexp::FIXEDENCODING for a Regexp literal with the 'n' option 1727s - includes Regexp::NOENCODING for a Regexp literal with the 'n' option 1727s 1727s Regexp.quote 1727s - escapes any characters with special meaning in a regular expression 1727s - works with symbols 1727s - works with substrings 1727s - works for broken strings 1727s - sets the encoding of the result to US-ASCII if there are only US-ASCII characters present in the input String 1727s - sets the encoding of the result to the encoding of the String if any non-US-ASCII characters are present in an input String with valid encoding 1727s - sets the encoding of the result to BINARY if any non-US-ASCII characters are present in an input String with invalid encoding 1727s 1727s Regexp#source 1727s - returns the original string of the pattern 1727s - keeps escape sequences as is 1727s - has US-ASCII encoding when created from an ASCII-only \u{} literal 1727s - has UTF-8 encoding when created from a non-ASCII-only \u{} literal 1727s 1727s Regexp#source escaping 1727s - keeps escaping of metacharacter 1727s - keeps escaping of metacharacter used as a terminator 1727s - removes escaping of non-metacharacter used as a terminator 1727s - keeps escaping of non-metacharacter not used as a terminator 1727s 1727s Regexp#to_s 1727s - displays options if included 1727s - shows non-included options after a - sign 1727s - shows all options as excluded if none are selected 1727s - shows the pattern after the options 1727s - displays groups with options 1727s - displays single group with same options as main regex as the main regex 1727s - deals properly with uncaptured groups 1727s - deals properly with the two types of lookahead groups 1727s - returns a string in (?xxx:yyy) notation 1727s - handles abusive option groups 1727s 1727s Regexp.try_convert 1727s - returns the argument if given a Regexp 1727s - returns nil if given an argument that can't be converted to a Regexp 1727s - tries to coerce the argument by calling #to_regexp 1727s - raises a TypeError if the object does not return an Regexp from #to_regexp 1727s 1727s Regexp.union 1727s - returns /(?!)/ when passed no arguments 1727s - returns a regular expression that will match passed arguments 1727s - quotes any string arguments 1727s - returns a Regexp with the encoding of an ASCII-incompatible String argument 1727s - returns a Regexp with the encoding of a String containing non-ASCII-compatible characters 1727s - returns a Regexp with US-ASCII encoding if all arguments are ASCII-only 1727s - returns a Regexp with the encoding of multiple non-conflicting Strings containing non-ASCII-compatible characters 1727s - returns a Regexp with the encoding of a String containing non-ASCII-compatible characters and another ASCII-only String 1727s - returns ASCII-8BIT if the regexp encodings are ASCII-8BIT and at least one has non-ASCII characters 1727s - return US-ASCII if all patterns are ASCII-only 1727s - returns a Regexp with UTF-8 if one part is UTF-8 1727s - returns a Regexp if an array of string with special characters is passed 1727s - raises ArgumentError if the arguments include conflicting ASCII-incompatible Strings 1727s - raises ArgumentError if the arguments include conflicting ASCII-incompatible Regexps 1727s - raises ArgumentError if the arguments include conflicting fixed encoding Regexps 1727s - raises ArgumentError if the arguments include a fixed encoding Regexp and a String containing non-ASCII-compatible characters in a different encoding 1727s - raises ArgumentError if the arguments include a String containing non-ASCII-compatible characters and a fixed encoding Regexp in a different encoding 1727s - raises ArgumentError if the arguments include an ASCII-incompatible String and an ASCII-only String 1727s - raises ArgumentError if the arguments include an ASCII-incompatible Regexp and an ASCII-only String 1727s - raises ArgumentError if the arguments include an ASCII-incompatible String and an ASCII-only Regexp 1727s - raises ArgumentError if the arguments include an ASCII-incompatible Regexp and an ASCII-only Regexp 1727s - raises ArgumentError if the arguments include an ASCII-incompatible String and a String containing non-ASCII-compatible characters in a different encoding 1727s - raises ArgumentError if the arguments include an ASCII-incompatible Regexp and a String containing non-ASCII-compatible characters in a different encoding 1727s - raises ArgumentError if the arguments include an ASCII-incompatible String and a Regexp containing non-ASCII-compatible characters in a different encoding 1727s - raises ArgumentError if the arguments include an ASCII-incompatible Regexp and a Regexp containing non-ASCII-compatible characters in a different encoding 1727s - uses to_str to convert arguments (if not Regexp) 1727s - uses to_regexp to convert argument 1727s - accepts a Symbol as argument 1727s - accepts a single array of patterns as arguments 1727s 1727s Signal.list 1727s - doesn't contain other signals than the known list 1727s - redefines CLD with CHLD if defined 1727s - includes the EXIT key with a value of zero 1727s - includes the KILL key with a value of nine 1727s 1727s Signal.signame 1727s - takes a signal name with a well known signal number 1727s - calls #to_int on an object to convert to an Integer 1727s - raises a TypeError when the passed argument can't be coerced to Integer 1727s - raises a TypeError when the passed argument responds to #to_int but does not return an Integer 1727s 1727s Signal.trap 1727s - returns the previous handler 1727s - accepts a block 1727s - accepts a proc 1727s - accepts a method 1727s - accepts anything you can call 1727s - raises an exception for a non-callable at the point of use 1727s - accepts a non-callable that becomes callable when used 1727s - registers an handler doing nothing with :IGNORE 1727s - can register a new handler after :IGNORE 1727s - accepts :DEFAULT in place of a proc 1727s - accepts :SIG_DFL in place of a proc 1727s - accepts :SIG_IGN in place of a proc 1727s - accepts :IGNORE in place of a proc 1727s - accepts 'SIG_DFL' in place of a proc 1727s - accepts 'DEFAULT' in place of a proc 1727s - accepts 'SIG_IGN' in place of a proc 1727s - accepts 'IGNORE' in place of a proc 1727s - accepts long names as Strings 1727s - accepts short names as Strings 1727s - accepts long names as Symbols 1727s - accepts short names as Symbols 1727s - accepts Integer values 1727s - does not call #to_int on an object to convert to an Integer 1727s - raises ArgumentError when passed signal is not Integer, String or Symbol 1727s - raises ArgumentError for SIGSEGV which is reserved by Ruby 1727s - raises ArgumentError for SIGBUS which is reserved by Ruby 1727s - raises ArgumentError for SIGILL which is reserved by Ruby 1727s - raises ArgumentError for SIGFPE which is reserved by Ruby 1727s - raises ArgumentError for SIGVTALRM which is reserved by Ruby 1730s - returns 'DEFAULT' for the initial SIGINT handler 1730s 1730s Signal.trap the special EXIT signal code 1733s - accepts the EXIT code 1736s - can unset the handler 1736s 1736s SizedQueue#<< 1736s - adds an element to the Queue 1736s - is an error for a closed queue 1736s 1736s SizedQueue#<< 1736s - blocks if queued elements exceed size 1736s - raises a ThreadError if queued elements exceed size when not blocking 1736s - interrupts enqueuing threads with ClosedQueueError when the queue is closed 1736s 1736s SizedQueue#clear 1736s - removes all objects from the queue 1736s 1736s SizedQueue#close 1736s - may be called multiple times 1736s - returns self 1736s 1736s SizedQueue#closed? 1736s - returns false initially 1736s - returns true when the queue is closed 1736s 1736s SizedQueue#deq 1736s - removes an item from the queue 1736s - returns items in the order they were added 1736s - blocks the thread until there are items in the queue 1736s - removes an item from a closed queue 1736s - converts false-ish for non_blocking to boolean 1736s - returns nil for a closed empty queue 1736s - returns nil for an empty queue that becomes closed 1736s 1736s SizedQueue#deq in non-blocking mode 1736s - removes an item from the queue 1736s - raises a ThreadError if the queue is empty 1736s - removes an item from a closed queue 1736s - raises a ThreadError for a closed empty queue 1736s - converts true-ish non_blocking argument to true 1736s 1736s SizedQueue#empty? 1736s - returns true on an empty Queue 1736s - returns false when Queue is not empty 1736s 1736s SizedQueue#enq 1736s - adds an element to the Queue 1736s - is an error for a closed queue 1736s 1736s SizedQueue#enq 1736s - blocks if queued elements exceed size 1736s - raises a ThreadError if queued elements exceed size when not blocking 1736s - interrupts enqueuing threads with ClosedQueueError when the queue is closed 1736s 1736s SizedQueue#length 1736s - returns the number of elements 1736s 1736s SizedQueue#max 1736s - returns the size of the queue 1736s 1736s SizedQueue#max= 1736s - sets the size of the queue 1736s - does not remove items already in the queue beyond the maximum 1736s - raises a TypeError when given a non-numeric value 1736s - raises an argument error when set to zero 1736s - raises an argument error when set to a negative number 1736s 1736s SizedQueue.new 1736s - raises a TypeError when the given argument doesn't respond to #to_int 1736s - raises an argument error when no argument is given 1736s - raises an argument error when the given argument is zero 1736s - raises an argument error when the given argument is negative 1736s 1736s SizedQueue#num_waiting 1736s - reports the number of threads waiting to push 1736s 1736s SizedQueue#pop 1736s - removes an item from the queue 1736s - returns items in the order they were added 1736s - blocks the thread until there are items in the queue 1736s - removes an item from a closed queue 1736s - converts false-ish for non_blocking to boolean 1736s - returns nil for a closed empty queue 1736s - returns nil for an empty queue that becomes closed 1736s 1736s SizedQueue#pop in non-blocking mode 1736s - removes an item from the queue 1736s - raises a ThreadError if the queue is empty 1736s - removes an item from a closed queue 1736s - raises a ThreadError for a closed empty queue 1736s - converts true-ish non_blocking argument to true 1736s 1736s SizedQueue#push 1736s - adds an element to the Queue 1736s - is an error for a closed queue 1736s 1736s SizedQueue#push 1736s - blocks if queued elements exceed size 1736s - raises a ThreadError if queued elements exceed size when not blocking 1736s - interrupts enqueuing threads with ClosedQueueError when the queue is closed 1736s 1736s SizedQueue#shift 1736s - removes an item from the queue 1736s - returns items in the order they were added 1736s - blocks the thread until there are items in the queue 1736s - removes an item from a closed queue 1736s - converts false-ish for non_blocking to boolean 1736s - returns nil for a closed empty queue 1736s - returns nil for an empty queue that becomes closed 1736s 1736s SizedQueue#shift in non-blocking mode 1736s - removes an item from the queue 1736s - raises a ThreadError if the queue is empty 1736s - removes an item from a closed queue 1736s - raises a ThreadError for a closed empty queue 1736s - converts true-ish non_blocking argument to true 1736s 1736s SizedQueue#size 1736s - returns the number of elements 1736s 1736s String.allocate 1736s - returns an instance of String 1736s - returns a fully-formed String 1736s - returns a binary String 1736s 1736s String#<< 1736s - concatenates the given argument to self and returns self 1736s - raises a FrozenError when self is frozen 1736s - returns a String when given a subclass instance 1736s - returns an instance of same class when called on a subclass 1736s - converts the given argument to a String using to_str 1736s - raises a TypeError if the given argument can't be converted to a String 1736s - raises a NoMethodError if the given argument raises a NoMethodError during type coercion to a String 1736s - raises an ArgumentError when given the incorrect number of arguments 1736s 1736s String#<< with Integer 1736s - concatenates the argument interpreted as a codepoint 1736s - returns a BINARY string if self is US-ASCII and the argument is between 128-255 (inclusive) 1736s - raises RangeError if the argument is an invalid codepoint for self's encoding 1736s - raises RangeError if the argument is negative 1736s - doesn't call to_int on its argument 1736s - raises a FrozenError when self is frozen 1736s 1736s String#<< when self is in an ASCII-incompatible encoding incompatible with the argument's encoding 1736s - uses self's encoding if both are empty 1736s - uses self's encoding if the argument is empty 1736s - uses the argument's encoding if self is empty 1736s - raises Encoding::CompatibilityError if neither are empty 1736s 1736s String#<< when the argument is in an ASCII-incompatible encoding incompatible with self's encoding 1736s - uses self's encoding if both are empty 1736s - uses self's encoding if the argument is empty 1736s - uses the argument's encoding if self is empty 1736s - raises Encoding::CompatibilityError if neither are empty 1736s 1736s String#<< when self and the argument are in different ASCII-compatible encodings 1736s - uses self's encoding if both are ASCII-only 1736s - uses self's encoding if the argument is ASCII-only 1736s - uses the argument's encoding if self is ASCII-only 1736s - raises Encoding::CompatibilityError if neither are ASCII-only 1736s 1736s String#<< when self is BINARY and argument is US-ASCII 1736s - uses BINARY encoding 1736s 1736s String#ascii_only? 1736s - returns true for the empty String with an ASCII-compatible encoding 1736s - returns false for the empty String with a non-ASCII-compatible encoding 1736s - returns false for a non-empty String with non-ASCII-compatible encoding 1736s - returns false when interpolating non ascii strings 1736s - returns false after appending non ASCII characters to an empty String 1736s - returns false when concatenating an ASCII and non-ASCII String 1736s - returns false when replacing an ASCII String with a non-ASCII String 1736s 1736s String#ascii_only? with ASCII only characters 1736s - returns true if the encoding is UTF-8 1736s - returns true if the encoding is US-ASCII 1736s - returns true for all single-character UTF-8 Strings 1736s 1736s String#ascii_only? with non-ASCII only characters 1736s - returns false if the encoding is BINARY 1736s - returns false if the String contains any non-ASCII characters 1736s - returns false if the encoding is US-ASCII 1736s 1736s String#b 1736s - returns a binary encoded string 1736s - returns new string without modifying self 1736s 1736s String#bytes 1736s - returns an Array when no block is given 1736s - yields each byte to a block if one is given, returning self 1736s - returns #bytesize bytes 1736s - returns bytes as Integers 1736s - agrees with #unpack('C*') 1736s - yields/returns no bytes for the empty string 1736s 1736s String#bytes 1736s - agrees with #getbyte 1736s - is unaffected by #force_encoding 1736s 1736s String#bytesize 1736s - returns the length of self in bytes 1736s - works with strings containing single UTF-8 characters 1736s - works with pseudo-ASCII strings containing single UTF-8 characters 1736s - works with strings containing UTF-8 characters 1736s - works with pseudo-ASCII strings containing UTF-8 characters 1736s - returns 0 for the empty string 1736s 1736s String#byteslice 1736s - needs to reviewed for spec completeness 1736s - returns the character code of the character at the given index 1736s - returns nil if index is outside of self 1736s - calls to_int on the given index 1736s - raises a TypeError if the given index is nil 1736s - raises a TypeError if the given index can't be converted to an Integer 1736s - raises a RangeError if the index is too big 1736s 1736s String#byteslice with index, length 1736s - returns the substring starting at the given index with the given length 1736s - returns a string with the same encoding as self 1736s - returns nil if the offset falls outside of self 1736s - returns nil if the length is negative 1736s - calls to_int on the given index and the given length 1736s - raises a TypeError when idx or length can't be converted to an integer 1736s - raises a TypeError when the given index or the given length is nil 1736s - raises a RangeError if the index or length is too big 1736s - returns String instances 1736s - handles repeated application 1736s 1736s String#byteslice with Range 1736s - returns the substring given by the offsets of the range 1736s - returns a String in the same encoding as self 1736s - returns nil if the beginning of the range falls outside of self 1736s - returns an empty string if range.begin is inside self and > real end 1736s - returns String instances 1736s - calls to_int on range arguments 1736s - works with Range subclasses 1736s - handles repeated application 1736s - raises a type error if a range is passed with a length 1736s - raises a RangeError if one of the bound is too big 1736s - works with endless ranges 1736s - works with beginless ranges 1736s 1736s String#byteslice on on non ASCII strings 1736s - returns byteslice of unicode strings 1736s - returns a String in the same encoding as self 1736s 1736s String#capitalize 1736s - returns a copy of self with the first character converted to uppercase and the remainder to lowercase 1736s - does not allow the :fold option for upcasing 1736s - does not allow invalid options 1736s - returns String instances when called on a subclass 1736s - returns a String in the same encoding as self 1736s 1736s String#capitalize full Unicode case mapping 1736s - works for all of Unicode with no option 1736s - only capitalizes the first resulting character when upcasing a character produces a multi-character sequence 1736s - updates string metadata 1736s 1736s String#capitalize ASCII-only case mapping 1736s - does not capitalize non-ASCII characters 1736s - handles non-ASCII substrings properly 1736s 1736s String#capitalize full Unicode case mapping adapted for Turkic languages 1736s - capitalizes ASCII characters according to Turkic semantics 1736s - allows Lithuanian as an extra option 1736s - does not allow any other additional option 1736s 1736s String#capitalize full Unicode case mapping adapted for Lithuanian 1736s - currently works the same as full Unicode case mapping 1736s - allows Turkic as an extra option (and applies Turkic semantics) 1736s - does not allow any other additional option 1736s 1736s String#capitalize! 1736s - capitalizes self in place 1736s - modifies self in place for non-ascii-compatible encodings 1736s - does not allow the :fold option for upcasing 1736s - does not allow invalid options 1736s - returns nil when no changes are made 1736s - raises a FrozenError when self is frozen 1736s 1736s String#capitalize! full Unicode case mapping 1736s - modifies self in place for all of Unicode with no option 1736s - only capitalizes the first resulting character when upcasing a character produces a multi-character sequence 1736s - works for non-ascii-compatible encodings 1736s - updates string metadata 1736s 1736s String#capitalize! modifies self in place for ASCII-only case mapping 1736s - does not capitalize non-ASCII characters 1736s - works for non-ascii-compatible encodings 1736s 1736s String#capitalize! modifies self in place for full Unicode case mapping adapted for Turkic languages 1736s - capitalizes ASCII characters according to Turkic semantics 1736s - allows Lithuanian as an extra option 1736s - does not allow any other additional option 1736s 1736s String#capitalize! modifies self in place for full Unicode case mapping adapted for Lithuanian 1736s - currently works the same as full Unicode case mapping 1736s - allows Turkic as an extra option (and applies Turkic semantics) 1736s - does not allow any other additional option 1736s 1736s String#=== 1736s - returns true if self <=> string returns 0 1736s - returns false if self <=> string does not return 0 1736s - ignores encoding difference of compatible string 1736s - considers encoding difference of incompatible string 1736s - considers encoding compatibility 1736s - ignores subclass differences 1736s - returns true when comparing 2 empty strings but one is not ASCII-compatible 1736s - returns false if obj does not respond to to_str 1736s - returns obj == self if obj responds to to_str 1736s - is not fooled by NUL characters 1736s 1736s String#casecmp independent of case 1736s - returns -1 when less than other 1736s - returns 0 when equal to other 1736s - returns 1 when greater than other 1736s - tries to convert other to string using to_str 1736s - returns nil if other can't be converted to a string 1736s - returns nil if incompatible encodings 1736s - returns 0 for empty strings in different encodings 1736s 1736s String#casecmp independent of case in UTF-8 mode for non-ASCII characters 1736s - returns -1 when numerically less than other 1736s - returns 0 when numerically equal to other 1736s - returns 1 when numerically greater than other 1736s 1736s String#casecmp independent of case in UTF-8 mode for ASCII characters 1736s - returns -1 when less than other 1736s - returns 0 when equal to other 1736s - returns 1 when greater than other 1736s 1736s String#casecmp independent of case for non-ASCII characters 1736s - returns -1 when numerically less than other 1736s - returns 0 when equal to other 1736s - returns 1 when numerically greater than other 1736s - does not case fold 1736s 1736s String#casecmp independent of case when comparing a subclass instance 1736s - returns -1 when less than other 1736s - returns 0 when equal to other 1736s - returns 1 when greater than other 1736s 1736s String#casecmp? independent of case 1736s - returns true when equal to other 1736s - returns false when not equal to other 1736s - tries to convert other to string using to_str 1736s - returns nil if incompatible encodings 1736s - case folds 1736s - returns nil if other can't be converted to a string 1736s - returns true for empty strings in different encodings 1736s 1736s String#casecmp? independent of case for UNICODE characters 1736s - returns true when downcase(:fold) on unicode 1736s 1736s String#casecmp? independent of case when comparing a subclass instance 1736s - returns true when equal to other 1736s - returns false when not equal to other 1736s 1736s String#casecmp? independent of case in UTF-8 mode for non-ASCII characters 1736s - returns true when they are the same with normalized case 1736s - returns false when they are unrelated 1736s - returns true when they have the same bytes 1736s 1736s String#center with length, padding 1736s - returns a new string of specified length with self centered and padded with padstr 1736s - pads with whitespace if no padstr is given 1736s - returns self if it's longer than or as long as the specified length 1736s - calls #to_int to convert length to an integer 1736s - raises a TypeError when length can't be converted to an integer 1736s - calls #to_str to convert padstr to a String 1736s - raises a TypeError when padstr can't be converted to a string 1736s - raises an ArgumentError if padstr is empty 1736s - returns String instances when called on subclasses 1736s 1736s String#center with length, padding with width 1736s - returns a String in the same encoding as the original 1736s 1736s String#center with length, padding with width, pattern 1736s - returns a String in the compatible encoding 1736s - raises an Encoding::CompatibilityError if the encodings are incompatible 1736s 1736s String#chars 1736s - passes each char in self to the given block 1736s - returns self 1736s - is unicode aware 1736s - returns characters in the same encoding as self 1736s - works with multibyte characters 1736s - works if the String's contents is invalid for its encoding 1736s - returns a different character if the String is transcoded 1736s - uses the String's encoding to determine what characters it contains 1736s - returns an array when no block given 1736s - returns Strings in the same encoding as self 1736s 1736s String#chomp when passed no argument 1736s - does not modify a String with no trailing carriage return or newline 1736s - returns a copy of the String when it is not modified 1736s - removes one trailing newline 1736s - removes one trailing carriage return 1736s - removes one trailing carriage return, newline pair 1736s - returns an empty String when self is empty 1736s - returns a String in the same encoding as self 1736s - returns String instances when called on a subclass 1736s - removes trailing characters that match $/ when it has been assigned a value 1736s - removes one trailing newline for string with invalid encoding 1736s 1736s String#chomp when passed nil 1736s - does not modify the String 1736s - returns a copy of the String 1736s - returns an empty String when self is empty 1736s 1736s String#chomp when passed '' 1736s - removes a final newline 1736s - removes a final carriage return, newline 1736s - does not remove a final carriage return 1736s - removes more than one trailing newlines 1736s - removes more than one trailing carriage return, newline pairs 1736s - returns an empty String when self is empty 1736s - removes one trailing newline for string with invalid encoding 1736s 1736s String#chomp when passed '\n' 1736s - removes one trailing newline 1736s - removes one trailing carriage return 1736s - removes one trailing carriage return, newline pair 1736s - returns an empty String when self is empty 1736s 1736s String#chomp when passed an Object 1736s - calls #to_str to convert to a String 1736s - raises a TypeError if #to_str does not return a String 1736s 1736s String#chomp when passed a String 1736s - removes the trailing characters if they match the argument 1736s - does not modify the String if the argument does not match the trailing characters 1736s - returns an empty String when self is empty 1736s - returns an empty String when the argument equals self 1736s 1736s String#chomp! 1736s - raises a FrozenError on a frozen instance when it is modified 1736s - raises a FrozenError on a frozen instance when it would not be modified 1736s 1736s String#chomp! when passed no argument 1736s - modifies self 1736s - returns nil if self is not modified 1736s - removes one trailing newline 1736s - removes one trailing carriage return 1736s - removes one trailing carriage return, newline pair 1736s - returns nil when self is empty 1736s - returns subclass instances when called on a subclass 1736s - removes trailing characters that match $/ when it has been assigned a value 1736s 1736s String#chomp! when passed nil 1736s - returns nil 1736s - returns nil when self is empty 1736s 1736s String#chomp! when passed '' 1736s - removes a final newline 1736s - removes a final carriage return, newline 1736s - does not remove a final carriage return 1736s - removes more than one trailing newlines 1736s - removes more than one trailing carriage return, newline pairs 1736s - returns nil when self is empty 1736s 1736s String#chomp! when passed '\n' 1736s - removes one trailing newline 1736s - removes one trailing carriage return 1736s - removes one trailing carriage return, newline pair 1736s - returns nil when self is empty 1736s 1736s String#chomp! when passed an Object 1736s - calls #to_str to convert to a String 1736s - raises a TypeError if #to_str does not return a String 1736s 1736s String#chomp! when passed a String 1736s - removes the trailing characters if they match the argument 1736s - returns nil if the argument does not match the trailing characters 1736s - returns nil when self is empty 1736s 1736s String#chomp 1736s - does not modify a multi-byte character 1736s - removes the final carriage return, newline from a multibyte String 1736s - removes the final carriage return, newline from a non-ASCII String 1736s - removes the final carriage return, newline from a non-ASCII String when the record separator is changed 1736s 1736s String#chomp! 1736s - returns nil when the String is not modified 1736s - removes the final carriage return, newline from a multibyte String 1736s - removes the final carriage return, newline from a non-ASCII String 1736s - removes the final carriage return, newline from a non-ASCII String when the record separator is changed 1736s 1736s String#chop 1736s - removes the final character 1736s - removes the final carriage return 1736s - removes the final newline 1736s - removes the final carriage return, newline 1736s - removes the carriage return, newline if they are the only characters 1736s - does not remove more than the final carriage return, newline 1736s - removes a multi-byte character 1736s - removes the final carriage return, newline from a multibyte String 1736s - removes the final carriage return, newline from a non-ASCII String 1736s - returns an empty string when applied to an empty string 1736s - returns a new string when applied to an empty string 1736s - returns String instances when called on a subclass 1736s - returns a String in the same encoding as self 1736s 1736s String#chop! 1736s - removes the final character 1736s - removes the final carriage return 1736s - removes the final newline 1736s - removes the final carriage return, newline 1736s - removes the carriage return, newline if they are the only characters 1736s - does not remove more than the final carriage return, newline 1736s - removes a multi-byte character 1736s - removes the final carriage return, newline from a multibyte String 1736s - removes the final carriage return, newline from a non-ASCII String 1736s - returns self if modifications were made 1736s - returns nil when called on an empty string 1736s - raises a FrozenError on a frozen instance that is modified 1736s - raises a FrozenError on a frozen instance that would not be modified 1736s 1736s String#chr 1736s - returns a copy of self 1736s - returns a String 1736s - returns an empty String if self is an empty String 1736s - returns a 1-character String 1736s - returns the character at the start of the String 1736s - returns a String in the same encoding as self 1736s - understands multi-byte characters 1736s - understands Strings that contain a mixture of character widths 1736s 1736s String#clear 1736s - sets self equal to the empty String 1736s - returns self after emptying it 1736s - preserves its encoding 1736s - works with multibyte Strings 1736s - raises a FrozenError if self is frozen 1736s 1736s String#clone 1736s - calls #initialize_copy on the new instance 1736s - copies instance variables 1736s - copies singleton methods 1736s - copies modules included in the singleton class 1736s - copies constants defined in the singleton class 1736s - copies frozen state 1736s - does not modify the original string when changing cloned string 1736s - returns a String in the same encoding as self 1736s 1736s String#codepoints 1736s - returns self 1736s - raises an ArgumentError when self has an invalid encoding and a method is called on the returned Enumerator 1736s - yields each codepoint to the block if one is given 1736s - raises an ArgumentError if self's encoding is invalid and a block is given 1736s - yields codepoints as Integers 1736s - yields one codepoint for each character 1736s - works for multibyte characters 1736s - yields the codepoints corresponding to the character's position in the String's encoding 1736s - round-trips to the original String using Integer#chr 1736s - is synonymous with #bytes for Strings which are single-byte optimizable 1736s - returns an Array when no block is given 1736s - raises an ArgumentError when no block is given if self has an invalid encoding 1736s 1736s String#<=> with String 1736s - compares individual characters based on their ascii value 1736s - returns -1 when self is less than other 1736s - returns 0 when self is equal to other 1736s - returns 1 when self is greater than other 1736s - considers string that comes lexicographically first to be less if strings have same size 1736s - doesn't consider shorter string to be less if longer string starts with shorter one 1736s - compares shorter string with corresponding number of first chars of longer string 1736s - ignores subclass differences 1736s - returns 0 if self and other are bytewise identical and have the same encoding 1736s - returns 0 if self and other are bytewise identical and have the same encoding 1736s - returns -1 if self is bytewise less than other 1736s - returns 1 if self is bytewise greater than other 1736s - ignores encoding difference 1736s - returns 0 with identical ASCII-compatible bytes of different encodings 1736s - compares the indices of the encodings when the strings have identical non-ASCII-compatible bytes 1736s - returns 0 when comparing 2 empty strings but one is not ASCII-compatible 1736s 1736s String#<=> 1736s - returns nil if its argument provides neither #to_str nor #<=> 1736s - uses the result of calling #to_str for comparison when #to_str is defined 1736s - uses the result of calling #<=> on its argument when #<=> is defined but #to_str is not 1736s - returns nil if argument also uses an inverse comparison for <=> 1736s 1736s String#concat 1736s - concatenates the given argument to self and returns self 1736s - raises a FrozenError when self is frozen 1736s - returns a String when given a subclass instance 1736s - returns an instance of same class when called on a subclass 1736s - converts the given argument to a String using to_str 1736s - raises a TypeError if the given argument can't be converted to a String 1736s - raises a NoMethodError if the given argument raises a NoMethodError during type coercion to a String 1736s - takes multiple arguments 1736s - concatenates the initial value when given arguments contain 2 self 1736s - returns self when given no arguments 1736s 1736s String#concat with Integer 1736s - concatenates the argument interpreted as a codepoint 1736s - returns a BINARY string if self is US-ASCII and the argument is between 128-255 (inclusive) 1736s - raises RangeError if the argument is an invalid codepoint for self's encoding 1736s - raises RangeError if the argument is negative 1736s - doesn't call to_int on its argument 1736s - raises a FrozenError when self is frozen 1736s 1736s String#concat when self is in an ASCII-incompatible encoding incompatible with the argument's encoding 1736s - uses self's encoding if both are empty 1736s - uses self's encoding if the argument is empty 1736s - uses the argument's encoding if self is empty 1736s - raises Encoding::CompatibilityError if neither are empty 1736s 1736s String#concat when the argument is in an ASCII-incompatible encoding incompatible with self's encoding 1736s - uses self's encoding if both are empty 1736s - uses self's encoding if the argument is empty 1736s - uses the argument's encoding if self is empty 1736s - raises Encoding::CompatibilityError if neither are empty 1736s 1736s String#concat when self and the argument are in different ASCII-compatible encodings 1736s - uses self's encoding if both are ASCII-only 1736s - uses self's encoding if the argument is ASCII-only 1736s - uses the argument's encoding if self is ASCII-only 1736s - raises Encoding::CompatibilityError if neither are ASCII-only 1736s 1736s String#concat when self is BINARY and argument is US-ASCII 1736s - uses BINARY encoding 1736s 1736s String#count 1736s - counts occurrences of chars from the intersection of the specified sets 1736s - raises an ArgumentError when given no arguments 1736s - negates sets starting with ^ 1736s - counts all chars in a sequence 1736s - raises if the given sequences are invalid 1736s - returns the number of occurrences of a multi-byte character 1736s - calls #to_str to convert each set arg to a String 1736s - raises a TypeError when a set arg can't be converted to a string 1736s 1736s String#crypt 1736s - returns a cryptographic hash of self by applying the UNIX crypt algorithm with the specified salt 1736s - calls #to_str to converts the salt arg to a String 1736s - doesn't return subclass instances 1736s - raises an ArgumentError when the salt is shorter than two characters 1736s - raises a type error when the salt arg can't be converted to a string 1736s 1736s String#delete_prefix 1736s - returns a copy of the string, with the given prefix removed 1736s - returns a copy of the string, when the prefix isn't found 1736s - does not remove partial bytes, only full characters 1736s - doesn't set $~ 1736s - calls to_str on its argument 1736s - returns a String instance when called on a subclass instance 1736s - returns a String in the same encoding as self 1736s 1736s String#delete_prefix! 1736s - removes the found prefix 1736s - returns nil if no change is made 1736s - doesn't set $~ 1736s - calls to_str on its argument 1736s - raises a FrozenError when self is frozen 1736s 1736s String#delete 1736s - returns a new string with the chars from the intersection of sets removed 1736s - raises an ArgumentError when given no arguments 1736s - negates sets starting with ^ 1736s - deletes all chars in a sequence 1736s - deletes multibyte characters 1736s - respects backslash for escaping a - 1736s - raises if the given ranges are invalid 1736s - tries to convert each set arg to a string using to_str 1736s - raises a TypeError when one set arg can't be converted to a string 1736s - returns String instances when called on a subclass 1736s - returns a String in the same encoding as self 1736s 1736s String#delete! 1736s - modifies self in place and returns self 1736s - returns nil if no modifications were made 1736s - raises a FrozenError when self is frozen 1736s 1736s String#delete_suffix 1736s - returns a copy of the string, with the given suffix removed 1736s - returns a copy of the string, when the suffix isn't found 1736s - does not remove partial bytes, only full characters 1736s - doesn't set $~ 1736s - calls to_str on its argument 1736s - returns a String instance when called on a subclass instance 1736s - returns a String in the same encoding as self 1736s 1736s String#delete_suffix! 1736s - removes the found prefix 1736s - returns nil if no change is made 1736s - doesn't set $~ 1736s - calls to_str on its argument 1736s - raises a FrozenError when self is frozen 1736s 1736s String#downcase 1736s - returns a copy of self with all uppercase letters downcased 1736s - returns a String in the same encoding as self 1736s - does not allow invalid options 1736s - returns a String instance for subclasses 1736s 1736s String#downcase full Unicode case mapping 1736s - works for all of Unicode with no option 1736s - updates string metadata 1736s 1736s String#downcase ASCII-only case mapping 1736s - does not downcase non-ASCII characters 1736s - works with substrings 1736s 1736s String#downcase full Unicode case mapping adapted for Turkic languages 1736s - downcases characters according to Turkic semantics 1736s - allows Lithuanian as an extra option 1736s - does not allow any other additional option 1736s 1736s String#downcase full Unicode case mapping adapted for Lithuanian 1736s - currently works the same as full Unicode case mapping 1736s - allows Turkic as an extra option (and applies Turkic semantics) 1736s - does not allow any other additional option 1736s 1736s String#downcase case folding 1736s - case folds special characters 1736s 1736s String#downcase! 1736s - modifies self in place 1736s - modifies self in place for non-ascii-compatible encodings 1736s - does not allow invalid options 1736s - returns nil if no modifications were made 1736s - raises a FrozenError when self is frozen 1736s - sets the result String encoding to the source String encoding 1736s 1736s String#downcase! full Unicode case mapping 1736s - modifies self in place for all of Unicode with no option 1736s - updates string metadata 1736s 1736s String#downcase! ASCII-only case mapping 1736s - does not downcase non-ASCII characters 1736s - works for non-ascii-compatible encodings 1736s 1736s String#downcase! full Unicode case mapping adapted for Turkic languages 1736s - downcases characters according to Turkic semantics 1736s - allows Lithuanian as an extra option 1736s - does not allow any other additional option 1736s 1736s String#downcase! full Unicode case mapping adapted for Lithuanian 1736s - currently works the same as full Unicode case mapping 1736s - allows Turkic as an extra option (and applies Turkic semantics) 1736s - does not allow any other additional option 1736s 1736s String#downcase! case folding 1736s - case folds special characters 1736s 1736s String#dump 1736s - does not take into account if a string is frozen 1736s - returns a String instance 1736s - wraps string with " 1736s - returns a string with special characters replaced with \ notation 1736s - returns a string with " and \ escaped with a backslash 1736s - returns a string with \# when # is followed by $, @, @@, { 1736s - returns a string with # not escaped when followed by any other character 1736s - returns a string with printable non-alphanumeric characters unescaped 1736s - returns a string with numeric characters unescaped 1736s - returns a string with upper-case alpha characters unescaped 1736s - returns a string with lower-case alpha characters unescaped 1736s - returns a string with non-printing ASCII characters replaced by \x notation 1736s - returns a string with non-printing single-byte UTF-8 characters replaced by \x notation 1736s - returns a string with multi-byte UTF-8 characters less than or equal 0xFFFF replaced by \uXXXX notation with upper-case hex digits 1736s - returns a string with multi-byte UTF-8 characters greater than 0xFFFF replaced by \u{XXXXXX} notation with upper-case hex digits 1736s - includes .force_encoding(name) if the encoding isn't ASCII compatible 1736s - returns a String in the same encoding as self 1736s 1736s String#dup 1736s - calls #initialize_copy on the new instance 1736s - copies instance variables 1736s - does not copy singleton methods 1736s - does not copy modules included in the singleton class 1736s - does not copy constants defined in the singleton class 1736s - does not modify the original string when changing dupped string 1736s - does not modify the original setbyte-mutated string when changing dupped string 1736s - returns a String in the same encoding as self 1736s 1736s String#each_byte 1736s - passes each byte in self to the given block 1736s - keeps iterating from the old position (to new string end) when self changes 1736s - returns self 1736s 1736s String#each_byte when no block is given 1736s - returns an enumerator 1736s 1736s String#each_byte when no block is given returned enumerator size 1736s - should return the bytesize of the string 1736s 1736s String#each_char 1736s - passes each char in self to the given block 1736s - returns self 1736s - is unicode aware 1736s - returns characters in the same encoding as self 1736s - works with multibyte characters 1736s - works if the String's contents is invalid for its encoding 1736s - returns a different character if the String is transcoded 1736s - uses the String's encoding to determine what characters it contains 1736s 1736s String#each_char when no block is given 1736s - returns an enumerator 1736s 1736s String#each_char when no block is given returned enumerator size 1736s - should return the size of the string 1736s 1736s String#each_codepoint 1736s - returns self 1736s - raises an ArgumentError when self has an invalid encoding and a method is called on the returned Enumerator 1736s - yields each codepoint to the block if one is given 1736s - raises an ArgumentError if self's encoding is invalid and a block is given 1736s - yields codepoints as Integers 1736s - yields one codepoint for each character 1736s - works for multibyte characters 1736s - yields the codepoints corresponding to the character's position in the String's encoding 1736s - round-trips to the original String using Integer#chr 1736s - is synonymous with #bytes for Strings which are single-byte optimizable 1736s 1736s String#each_codepoint when no block is given 1736s - returns an Enumerator 1736s - returns an Enumerator even when self has an invalid encoding 1736s 1736s String#each_codepoint when no block is given returned Enumerator size 1736s - should return the size of the string 1736s - should return the size of the string even when the string has an invalid encoding 1736s 1736s String#each_grapheme_cluster 1736s - passes each char in self to the given block 1736s - returns self 1736s - is unicode aware 1736s - returns characters in the same encoding as self 1736s - works with multibyte characters 1736s - returns a different character if the String is transcoded 1736s - uses the String's encoding to determine what characters it contains 1736s - passes each grapheme cluster in self to the given block 1736s - returns self 1736s - yields String instances for subclasses 1736s 1736s String#each_grapheme_cluster when no block is given 1736s - returns an enumerator 1736s 1736s String#each_grapheme_cluster when no block is given returned enumerator size 1736s - should return the size of the string 1736s 1736s String#each_line 1736s - splits using default newline separator when none is specified 1736s - splits self using the supplied record separator and passes each substring to the block 1736s - splits strings containing multibyte characters 1736s - passes self as a whole to the block if the separator is nil 1736s - yields paragraphs (broken by 2 or more successive newlines) when passed '' and replaces multiple newlines with only two ones 1736s - yields String instances for subclasses 1736s - returns self 1736s - tries to convert the separator to a string using to_str 1736s - does not care if the string is modified while substituting 1736s - returns Strings in the same encoding as self 1736s - raises a TypeError when the separator can't be converted to a string 1736s - accepts a string separator 1736s - raises a TypeError when the separator is a symbol 1736s 1736s String#each_line uses $/ 1736s - as the separator when none is given 1736s 1736s String#each_line when `chomp` keyword argument is passed 1736s - removes new line characters when separator is not specified 1736s - removes only specified separator 1736s - ignores new line characters when separator is specified 1736s 1736s String#each_line when no block is given 1736s - returns an enumerator 1736s 1736s String#each_line when no block is given returned Enumerator size 1736s - should return nil 1736s 1736s String#[] 1736s - returns the character code of the character at the given index 1736s - returns nil if index is outside of self 1736s - calls to_int on the given index 1736s - raises a TypeError if the given index is nil 1736s - raises a TypeError if the given index can't be converted to an Integer 1736s - raises a RangeError if the index is too big 1736s 1736s String#[] with index, length 1736s - returns the substring starting at the given index with the given length 1736s - returns a string with the same encoding as self 1736s - returns nil if the length is negative 1736s - calls to_int on the given index and the given length 1736s - raises a TypeError when idx or length can't be converted to an integer 1736s - raises a TypeError when the given index or the given length is nil 1736s - raises a RangeError if the index or length is too big 1736s - returns String instances 1736s - handles repeated application 1736s 1736s String#[] with Range 1736s - returns the substring given by the offsets of the range 1736s - returns a String in the same encoding as self 1736s - returns nil if the beginning of the range falls outside of self 1736s - returns an empty string if range.begin is inside self and > real end 1736s - returns String instances 1736s - calls to_int on range arguments 1736s - works with Range subclasses 1736s - handles repeated application 1736s - raises a type error if a range is passed with a length 1736s - raises a RangeError if one of the bound is too big 1736s - works with endless ranges 1736s - works with beginless ranges 1736s 1736s String#[] with Regexp 1736s - returns the matching portion of self 1736s - returns nil if there is no match 1736s - returns a String in the same encoding as self 1736s - returns String instances 1736s - sets $~ to MatchData when there is a match and nil when there's none 1736s 1736s String#[] with Regexp, index 1736s - returns the capture for the given index 1736s - returns nil if there is no match 1736s - returns nil if the index is larger than the number of captures 1736s - returns nil if there is no capture for the given index 1736s - returns nil if the given capture group was not matched but still sets $~ 1736s - returns a String in the same encoding as self 1736s - calls to_int on the given index 1736s - raises a TypeError when the given index can't be converted to Integer 1736s - raises a TypeError when the given index is nil 1736s - returns String instances 1736s - sets $~ to MatchData when there is a match and nil when there's none 1736s 1736s String#[] with Regexp, group 1736s - returns the capture for the given name 1736s - returns the last capture for duplicate names 1736s - returns the innermost capture for nested duplicate names 1736s - returns nil if there is no match 1736s - raises an IndexError if there is no capture for the given name 1736s - raises a TypeError when the given name is not a String 1736s - raises an IndexError when given the empty String as a group name 1736s - returns String instances 1736s - sets $~ to MatchData when there is a match and nil when there's none 1736s 1736s String#[] with String 1736s - returns other_str if it occurs in self 1736s - doesn't set $~ 1736s - returns nil if there is no match 1736s - doesn't call to_str on its argument 1736s - returns a String instance when given a subclass instance 1736s 1736s String#[] with Symbol 1736s - raises TypeError 1736s 1736s String#[]= with Integer index 1736s - replaces the char at idx with other_str 1736s - raises an IndexError without changing self if idx is outside of self 1736s - allows assignment to the zero'th element of an empty String 1736s - raises IndexError if the string index doesn't match a position in the string 1736s - raises a FrozenError when self is frozen 1736s - calls to_int on index 1736s - calls #to_str to convert other to a String 1736s - raises a TypeError if other_str can't be converted to a String 1736s - raises a TypeError if passed an Integer replacement 1736s - raises an IndexError if the index is greater than character size 1736s - calls #to_int to convert the index 1736s - raises a TypeError if #to_int does not return an Integer 1736s - raises an IndexError if #to_int returns a value out of range 1736s - replaces a character with a multibyte character 1736s - replaces a multibyte character with a character 1736s - replaces a multibyte character with a multibyte character 1736s - encodes the String in an encoding compatible with the replacement 1736s - updates the string to a compatible encoding 1736s - raises an Encoding::CompatibilityError if the replacement encoding is incompatible 1736s 1736s String#[]= with String index 1736s - replaces fewer characters with more characters 1736s - replaces more characters with fewer characters 1736s - replaces characters with no characters 1736s - raises an IndexError if the search String is not found 1736s - replaces characters with a multibyte character 1736s - replaces multibyte characters with characters 1736s - replaces multibyte characters with multibyte characters 1736s - encodes the String in an encoding compatible with the replacement 1736s - raises an Encoding::CompatibilityError if the replacement encoding is incompatible 1736s 1736s String#[]= with a Regexp index 1736s - replaces the matched text with the rhs 1736s - raises IndexError if the regexp index doesn't match a position in the string 1736s - calls #to_str to convert the replacement 1736s - checks the match before calling #to_str to convert the replacement 1736s - replaces characters with a multibyte character 1736s - replaces multibyte characters with characters 1736s - replaces multibyte characters with multibyte characters 1736s - encodes the String in an encoding compatible with the replacement 1736s - raises an Encoding::CompatibilityError if the replacement encoding is incompatible 1736s 1736s String#[]= with a Regexp index with 3 arguments 1736s - calls #to_int to convert the second object 1736s - raises a TypeError if #to_int does not return an Integer 1736s - uses the 2nd of 3 arguments as which capture should be replaced 1736s - allows the specified capture to be negative and count from the end 1736s - checks the match index before calling #to_str to convert the replacement 1736s - raises IndexError if the specified capture isn't available 1736s 1736s String#[]= with a Regexp index with 3 arguments when the optional capture does not match 1736s - raises an IndexError before setting the replacement 1736s 1736s String#[]= with a Range index 1736s - replaces the contents with a shorter String 1736s - replaces the contents with a longer String 1736s - replaces a partial string 1736s - raises a RangeError if negative Range begin is out of range 1736s - raises a RangeError if positive Range begin is greater than String size 1736s - uses the Range end as an index rather than a count 1736s - treats a negative out-of-range Range end with a positive Range begin as a zero count 1736s - treats a negative out-of-range Range end with a negative Range begin as a zero count 1736s - replaces characters with a multibyte character 1736s - replaces multibyte characters with characters 1736s - replaces multibyte characters by negative indexes 1736s - replaces multibyte characters with multibyte characters 1736s - deletes a multibyte character 1736s - inserts a multibyte character 1736s - encodes the String in an encoding compatible with the replacement 1736s - raises an Encoding::CompatibilityError if the replacement encoding is incompatible 1736s 1736s String#[]= with a Range index with an empty replacement 1736s - does not replace a character with a zero-index, zero exclude-end range 1736s - does not replace a character with a zero exclude-end range 1736s - replaces a character with zero-index, zero non-exclude-end range 1736s - replaces a character with a zero non-exclude-end range 1736s 1736s String#[]= with Integer index, count 1736s - starts at idx and overwrites count characters before inserting the rest of other_str 1736s - counts negative idx values from end of the string 1736s - overwrites and deletes characters if count is more than the length of other_str 1736s - deletes characters if other_str is an empty string 1736s - deletes characters up to the maximum length of the existing string 1736s - appends other_str to the end of the string if idx == the length of the string 1736s - calls #to_int to convert the index and count objects 1736s - raises a TypeError if #to_int for index does not return an Integer 1736s - raises a TypeError if #to_int for count does not return an Integer 1736s - calls #to_str to convert the replacement object 1736s - raises a TypeError of #to_str does not return a String 1736s - raises an IndexError if |idx| is greater than the length of the string 1736s - raises an IndexError if count < 0 1736s - raises a TypeError if other_str is a type other than String 1736s - replaces characters with a multibyte character 1736s - replaces multibyte characters with characters 1736s - replaces multibyte characters with multibyte characters 1736s - deletes a multibyte character 1736s - inserts a multibyte character 1736s - raises an IndexError if the character index is out of range of a multibyte String 1736s - encodes the String in an encoding compatible with the replacement 1736s - raises an Encoding::CompatibilityError if the replacement encoding is incompatible 1736s 1736s String#empty? 1736s - returns true if the string has a length of zero 1736s 1736s String#encode 1736s - raises ArgumentError if the value of the :xml option is not :text or :attr 1736s 1736s String#encode when passed no options 1736s - transcodes to Encoding.default_internal when set 1736s - transcodes a 7-bit String despite no generic converting being available 1736s - raises an Encoding::ConverterNotFoundError when no conversion is possible 1736s 1736s String#encode when passed to encoding 1736s - accepts a String argument 1736s - calls #to_str to convert the object to an Encoding 1736s - transcodes to the passed encoding 1736s - transcodes Japanese multibyte characters 1736s - transcodes a 7-bit String despite no generic converting being available 1736s - raises an Encoding::ConverterNotFoundError when no conversion is possible 1736s - raises an Encoding::ConverterNotFoundError for an invalid encoding 1736s 1736s String#encode when passed options 1736s - does not process transcoding options if not transcoding 1736s - calls #to_hash to convert the object 1736s - transcodes to Encoding.default_internal when set 1736s - raises an Encoding::ConverterNotFoundError when no conversion is possible despite 'invalid: :replace, undef: :replace' 1736s - replaces invalid characters when replacing Emacs-Mule encoded strings 1736s 1736s String#encode when passed to, from 1736s - transcodes between the encodings ignoring the String encoding 1736s - calls #to_str to convert the from object to an Encoding 1736s 1736s String#encode when passed to, options 1736s - replaces undefined characters in the destination encoding 1736s - replaces invalid characters in the destination encoding 1736s - calls #to_hash to convert the options object 1736s 1736s String#encode when passed to, from, options 1737s - replaces undefined characters in the destination encoding 1737s - replaces invalid characters in the destination encoding 1737s - calls #to_str to convert the to object to an encoding 1737s - calls #to_str to convert the from object to an encoding 1737s - calls #to_hash to convert the options object 1737s 1737s String#encode given the xml: :text option 1737s - replaces all instances of '&' with '&' 1737s - replaces all instances of '<' with '<' 1737s - replaces all instances of '>' with '>' 1737s - does not replace '"' 1737s - replaces undefined characters with their upper-case hexadecimal numeric character references 1737s 1737s String#encode given the xml: :attr option 1737s - surrounds the encoded text with double-quotes 1737s - replaces all instances of '&' with '&' 1737s - replaces all instances of '<' with '<' 1737s - replaces all instances of '>' with '>' 1737s - replaces all instances of '"' with '"' 1737s - replaces undefined characters with their upper-case hexadecimal numeric character references 1737s 1737s String#encode when passed no options 1737s - returns a copy when Encoding.default_internal is nil 1737s - returns a copy for a ASCII-only String when Encoding.default_internal is nil 1737s - encodes an ascii substring of a binary string to UTF-8 1737s 1737s String#encode when passed to encoding 1737s - returns a copy when passed the same encoding as the String 1737s - round trips a String 1737s 1737s String#encode when passed options 1737s - returns a copy when Encoding.default_internal is nil 1737s - normalizes newlines 1737s - replaces invalid encoding in source with default replacement 1737s - replaces invalid encoding in source with a specified replacement 1737s - replace multiple invalid bytes at the end with a single replacement character 1737s - replaces invalid encoding in source using a specified replacement even when a fallback is given 1737s - replaces undefined encoding in destination with default replacement 1737s - replaces undefined encoding in destination with a specified replacement 1737s - replaces undefined encoding in destination with a specified replacement even if a fallback is given 1737s - replaces undefined encoding in destination using a fallback proc 1737s - replaces invalid encoding in source using replace even when fallback is given as proc 1737s 1737s String#encode when passed to, from 1737s - returns a copy in the destination encoding when both encodings are the same 1737s - returns the transcoded string 1737s 1737s String#encode when passed to, options 1737s - returns a copy when the destination encoding is the same as the String encoding 1737s 1737s String#encode when passed to, from, options 1737s - returns a copy when both encodings are the same 1737s - returns a copy in the destination encoding when both encodings are the same 1737s 1737s String#encode! 1737s - raises ArgumentError if the value of the :xml option is not :text or :attr 1737s - raises a FrozenError when called on a frozen String 1737s - raises a FrozenError when called on a frozen String when it's a no-op 1737s 1737s String#encode! when passed no options 1737s - transcodes to Encoding.default_internal when set 1737s - transcodes a 7-bit String despite no generic converting being available 1737s - raises an Encoding::ConverterNotFoundError when no conversion is possible 1737s 1737s String#encode! when passed to encoding 1737s - accepts a String argument 1737s - calls #to_str to convert the object to an Encoding 1737s - transcodes to the passed encoding 1737s - transcodes Japanese multibyte characters 1737s - transcodes a 7-bit String despite no generic converting being available 1737s - raises an Encoding::ConverterNotFoundError when no conversion is possible 1737s - raises an Encoding::ConverterNotFoundError for an invalid encoding 1737s 1737s String#encode! when passed options 1737s - does not process transcoding options if not transcoding 1737s - calls #to_hash to convert the object 1737s - transcodes to Encoding.default_internal when set 1737s - raises an Encoding::ConverterNotFoundError when no conversion is possible despite 'invalid: :replace, undef: :replace' 1737s - replaces invalid characters when replacing Emacs-Mule encoded strings 1737s 1737s String#encode! when passed to, from 1737s - transcodes between the encodings ignoring the String encoding 1737s - calls #to_str to convert the from object to an Encoding 1737s 1737s String#encode! when passed to, options 1737s - replaces undefined characters in the destination encoding 1737s - replaces invalid characters in the destination encoding 1737s - calls #to_hash to convert the options object 1737s 1737s String#encode! when passed to, from, options 1737s - replaces undefined characters in the destination encoding 1737s - replaces invalid characters in the destination encoding 1737s - calls #to_str to convert the to object to an encoding 1737s - calls #to_str to convert the from object to an encoding 1737s - calls #to_hash to convert the options object 1737s 1737s String#encode! given the xml: :text option 1737s - replaces all instances of '&' with '&' 1737s - replaces all instances of '<' with '<' 1737s - replaces all instances of '>' with '>' 1737s - does not replace '"' 1737s - replaces undefined characters with their upper-case hexadecimal numeric character references 1737s 1737s String#encode! given the xml: :attr option 1737s - surrounds the encoded text with double-quotes 1737s - replaces all instances of '&' with '&' 1737s - replaces all instances of '<' with '<' 1737s - replaces all instances of '>' with '>' 1737s - replaces all instances of '"' with '"' 1737s - replaces undefined characters with their upper-case hexadecimal numeric character references 1737s 1737s String#encode! when passed no options 1737s - returns self when Encoding.default_internal is nil 1737s - returns self for a ASCII-only String when Encoding.default_internal is nil 1737s 1737s String#encode! when passed options 1737s - returns self for ASCII-only String when Encoding.default_internal is nil 1737s 1737s String#encode! when passed to encoding 1737s - returns self 1737s 1737s String#encode! when passed to, from 1737s - returns self 1737s 1737s String#encoding 1737s - returns an Encoding object 1737s - is equal to the source encoding by default 1737s - returns the given encoding if #force_encoding has been called 1737s - returns the given encoding if #encode!has been called 1737s 1737s String#encoding for US-ASCII Strings 1737s - returns US-ASCII if self is US-ASCII 1737s - returns US-ASCII if self is US-ASCII only, despite the default internal encoding being different 1737s - returns US-ASCII if self is US-ASCII only, despite the default external encoding being different 1737s - returns US-ASCII if self is US-ASCII only, despite the default internal and external encodings being different 1737s - returns US-ASCII if self is US-ASCII only, despite the default encodings being different 1737s 1737s String#encoding for Strings with \u escapes 1737s - returns UTF-8 1737s - returns US-ASCII if self is US-ASCII only 1737s - returns UTF-8 if self isn't US-ASCII only 1737s - is not affected by the default internal encoding 1737s - is not affected by the default external encoding 1737s - is not affected by both the default internal and external encoding being set at the same time 1737s - returns the given encoding if #force_encoding has been called 1737s - returns the given encoding if #encode!has been called 1737s 1737s String#encoding for Strings with \x escapes 1737s - returns US-ASCII if self is US-ASCII only 1737s - returns BINARY when an escape creates a byte with the 8th bit set if the source encoding is US-ASCII 1737s - returns the source encoding when an escape creates a byte with the 8th bit set if the source encoding isn't US-ASCII 1737s - is not affected by the default internal encoding 1737s - is not affected by the default external encoding 1737s - is not affected by both the default internal and external encoding being set at the same time 1737s - returns the given encoding if #force_encoding has been called 1737s - returns the given encoding if #encode!has been called 1737s 1737s String#end_with? 1737s - returns true only if ends match 1737s - returns false if the end does not match 1737s - returns true if the search string is empty 1737s - returns true only if any ending match 1737s - converts its argument using :to_str 1737s - ignores arguments not convertible to string 1737s - uses only the needed arguments 1737s - works for multibyte strings 1737s - raises an Encoding::CompatibilityError if the encodings are incompatible 1737s - checks that we are starting to match at the head of a character 1737s 1737s String#eql? 1737s - returns true if self <=> string returns 0 1737s - returns false if self <=> string does not return 0 1737s - ignores encoding difference of compatible string 1737s - considers encoding difference of incompatible string 1737s - considers encoding compatibility 1737s - ignores subclass differences 1737s - returns true when comparing 2 empty strings but one is not ASCII-compatible 1737s 1737s String#eql? when given a non-String 1737s - returns false 1737s - does not try to call #to_str on the given argument 1737s 1737s String#== 1737s - returns true if self <=> string returns 0 1737s - returns false if self <=> string does not return 0 1737s - ignores encoding difference of compatible string 1737s - considers encoding difference of incompatible string 1737s - considers encoding compatibility 1737s - ignores subclass differences 1737s - returns true when comparing 2 empty strings but one is not ASCII-compatible 1737s - returns false if obj does not respond to to_str 1737s - returns obj == self if obj responds to to_str 1737s - is not fooled by NUL characters 1737s 1737s String#force_encoding 1737s - accepts a String as the name of an Encoding 1737s - accepts an Encoding instance 1737s - calls #to_str to convert an object to an encoding name 1737s - raises a TypeError if #to_str does not return a String 1737s - raises a TypeError if passed nil 1737s - returns self 1737s - sets the encoding even if the String contents are invalid in that encoding 1737s - does not transcode self 1737s - raises a FrozenError if self is frozen 1737s 1737s String#force_encoding with a special encoding name 1737s - accepts valid special encoding names 1737s - defaults to BINARY if special encoding name is not set 1737s 1737s String#freeze 1737s - produces the same object whenever called on an instance of a literal in the source 1737s - doesn't produce the same object for different instances of literals in the source 1737s - being a special form doesn't change the value of defined? 1737s 1737s String#getbyte 1737s - returns an Integer if given a valid index 1737s - starts indexing at 0 1737s - counts from the end of the String if given a negative argument 1737s - returns an Integer between 0 and 255 1737s - regards a multi-byte character as having multiple bytes 1737s - mirrors the output of #bytes 1737s - interprets bytes relative to the String's encoding 1737s - returns nil for out-of-bound indexes 1737s - regards the empty String as containing no bytes 1737s - raises an ArgumentError unless given one argument 1737s - raises a TypeError unless its argument can be coerced into an Integer 1737s 1737s String#grapheme_clusters 1737s - passes each char in self to the given block 1737s - returns self 1737s - is unicode aware 1737s - returns characters in the same encoding as self 1737s - works with multibyte characters 1737s - returns a different character if the String is transcoded 1737s - uses the String's encoding to determine what characters it contains 1737s - passes each grapheme cluster in self to the given block 1737s - returns self 1737s - returns an array when no block given 1737s 1737s String#gsub with pattern and replacement 1737s - inserts the replacement around every character when the pattern collapses 1737s - respects unicode when the pattern collapses 1737s - doesn't freak out when replacing ^ 1737s - returns a copy of self with all occurrences of pattern replaced with replacement 1737s - ignores a block if supplied 1737s - supports \G which matches at the beginning of the remaining (non-matched) string 1737s - supports /i for ignoring case 1737s - doesn't interpret regexp metacharacters if pattern is a string 1737s - replaces \1 sequences with the regexp's corresponding capture 1737s - treats \1 sequences without corresponding captures as empty strings 1737s - replaces \& and \0 with the complete match 1737s - replaces \` with everything before the current match 1737s - replaces \' with everything after the current match 1737s - replaces \+ with the last paren that actually matched 1737s - treats \+ as an empty string if there was no captures 1737s - maps \\ in replacement to \ 1737s - leaves unknown \x escapes in replacement untouched 1737s - leaves \ at the end of replacement untouched 1737s - replaces \k named backreferences with the regexp's corresponding capture 1737s - handles pattern collapse 1737s - tries to convert pattern to a string using to_str 1737s - raises a TypeError when pattern can't be converted to a string 1737s - tries to convert replacement to a string using to_str 1737s - raises a TypeError when replacement can't be converted to a string 1737s - returns String instances when called on a subclass 1737s - sets $~ to MatchData of last match and nil when there's none 1737s - handles a pattern in a superset encoding 1737s - handles a pattern in a subset encoding 1737s 1737s String#gsub with pattern and Hash 1737s - returns a copy of self with all occurrences of pattern replaced with the value of the corresponding hash key 1737s - ignores keys that don't correspond to matches 1737s - returns an empty string if the pattern matches but the hash specifies no replacements 1737s - ignores non-String keys 1737s - uses a key's value as many times as needed 1737s - uses the hash's default value for missing keys 1737s - coerces the hash values with #to_s 1737s - uses the hash's value set from default_proc for missing keys 1737s - sets $~ to MatchData of last match and nil when there's none for access from outside 1737s - doesn't interpolate special sequences like \1 for the block's return value 1737s 1737s String#gsub! with pattern and Hash 1737s - returns self with all occurrences of pattern replaced with the value of the corresponding hash key 1737s - ignores keys that don't correspond to matches 1737s - replaces self with an empty string if the pattern matches but the hash specifies no replacements 1737s - ignores non-String keys 1737s - uses a key's value as many times as needed 1737s - uses the hash's default value for missing keys 1737s - coerces the hash values with #to_s 1737s - uses the hash's value set from default_proc for missing keys 1737s - sets $~ to MatchData of last match and nil when there's none for access from outside 1737s - doesn't interpolate special sequences like \1 for the block's return value 1737s 1737s String#gsub with pattern and block 1737s - returns a copy of self with all occurrences of pattern replaced with the block's return value 1737s - sets $~ for access from the block 1737s - does not set $~ for procs created from methods 1737s - restores $~ after leaving the block 1737s - sets $~ to MatchData of last match and nil when there's none for access from outside 1737s - doesn't interpolate special sequences like \1 for the block's return value 1737s - converts the block's return value to a string using to_s 1737s - uses the compatible encoding if they are compatible 1737s - raises an Encoding::CompatibilityError if the encodings are not compatible 1737s - replaces the incompatible part properly even if the encodings are not compatible 1737s - raises an ArgumentError if encoding is not valid 1737s 1737s String#gsub with pattern and without replacement and block 1737s - returns an enumerator 1737s 1737s String#gsub with pattern and without replacement and block returned Enumerator size 1737s - should return nil 1737s 1737s String#gsub with a string pattern 1737s - handles multibyte characters 1737s 1737s String#gsub! with pattern and replacement 1737s - modifies self in place and returns self 1737s - modifies self in place with multi-byte characters and returns self 1737s - returns nil if no modifications were made 1737s - raises a FrozenError when self is frozen 1737s - handles a pattern in a superset encoding 1737s - handles a pattern in a subset encoding 1737s 1737s String#gsub! with pattern and block 1737s - modifies self in place and returns self 1737s - returns nil if no modifications were made 1737s - raises a FrozenError when self is frozen 1737s - uses the compatible encoding if they are compatible 1737s - raises an Encoding::CompatibilityError if the encodings are not compatible 1737s - replaces the incompatible part properly even if the encodings are not compatible 1737s - raises an ArgumentError if encoding is not valid 1737s 1737s String#gsub! with pattern and without replacement and block 1737s - returns an enumerator 1737s 1737s String#gsub! with pattern and without replacement and block returned Enumerator size 1737s - should return nil 1737s 1737s String#hash 1737s - returns a hash based on a string's length and content 1737s 1737s String#hex 1737s - treats leading characters of self as a string of hex digits 1737s - does not accept a sequence of underscores as part of a number 1737s - takes an optional sign 1737s - takes an optional 0x 1737s - requires that the sign is in front of the 0x if present 1737s - returns 0 on error 1737s - returns 0 if sequence begins with underscore 1737s 1737s String#include? with String 1737s - returns true if self contains other_str 1737s - ignores subclass differences 1737s - returns true if both strings are empty 1737s - returns true if the RHS is empty 1737s - tries to convert other to string using to_str 1737s - raises a TypeError if other can't be converted to string 1737s - raises an Encoding::CompatibilityError if the encodings are incompatible 1737s 1737s String#index 1737s - raises a TypeError if passed nil 1737s - raises a TypeError if passed a boolean 1737s - raises a TypeError if passed a Symbol 1737s - calls #to_str to convert the first argument 1737s - calls #to_int to convert the second argument 1737s - raises a TypeError if passed an Integer 1737s 1737s String#index with String 1737s - behaves the same as String#index(char) for one-character strings 1737s - returns the index of the first occurrence of the given substring 1737s - doesn't set $~ 1737s - ignores string subclasses 1737s - starts the search at the given offset 1737s - starts the search at offset + self.length if offset is negative 1737s - returns nil if the substring isn't found 1737s - returns the character index of a multibyte character 1737s - returns the character index after offset 1737s - returns the character index after a partial first match 1737s - raises an Encoding::CompatibilityError if the encodings are incompatible 1737s - handles a substring in a superset encoding 1737s - handles a substring in a subset encoding 1737s - raises an Encoding::CompatibilityError if the encodings are incompatible 1737s 1737s String#index with Regexp 1737s - behaves the same as String#index(string) for escaped string regexps 1737s - returns the index of the first match of regexp 1737s - sets $~ to MatchData of match and nil when there's none 1737s - starts the search at the given offset 1737s - starts the search at offset + self.length if offset is negative 1737s - returns nil if the substring isn't found 1737s - returns nil if the Regexp matches the empty string and the offset is out of range 1737s - supports \G which matches at the given start offset 1737s - converts start_offset to an integer via to_int 1737s - returns the character index of a multibyte character 1737s - returns the character index after offset 1737s - treats the offset as a character index 1737s 1737s String#initialize 1737s - is a private method 1737s 1737s String#initialize with no arguments 1737s - does not change self 1737s - does not raise an exception when frozen 1737s 1737s String#initialize with an argument 1737s - returns self 1737s - replaces the content of self with other 1737s - replaces the encoding of self with that of other 1737s - carries over the encoding invalidity 1737s - tries to convert other to string using to_str 1737s - raises a TypeError if other can't be converted to string 1737s - raises a FrozenError on a frozen instance that is modified 1737s - raises a FrozenError on a frozen instance when self-replacing 1737s 1737s String#insert with index, other 1737s - inserts other before the character at the given index 1737s - modifies self in place 1737s - inserts after the given character on an negative count 1737s - raises an IndexError if the index is beyond string 1737s - converts index to an integer using to_int 1737s - converts other to a string using to_str 1737s - raises a TypeError if other can't be converted to string 1737s - raises a FrozenError if self is frozen 1737s - inserts a character into a multibyte encoded string 1737s - returns a String in the compatible encoding 1737s - raises an Encoding::CompatibilityError if the encodings are incompatible 1737s - should not call subclassed string methods 1737s 1737s String#inspect 1737s - does not return a subclass instance 1737s - returns a string with special characters replaced with \ notation 1737s - returns a string with special characters replaced with \ notation for UTF-16 1737s - returns a string with " and \ escaped with a backslash 1737s - returns a string with \# when # is followed by $, @, { 1737s - returns a string with # not escaped when followed by any other character 1737s - returns a string with printable non-alphanumeric characters unescaped 1737s - returns a string with numeric characters unescaped 1737s - returns a string with upper-case alpha characters unescaped 1737s - returns a string with lower-case alpha characters unescaped 1737s - returns a string with non-printing characters replaced by \x notation 1737s - returns a string with a NUL character replaced by \x notation 1737s - uses \x notation for broken UTF-8 sequences 1737s - works for broken US-ASCII strings 1737s 1737s String#inspect when default external is UTF-8 1737s - returns a string with non-printing characters replaced by \u notation for Unicode strings 1737s - returns a string with a NUL character replaced by \u notation 1737s - returns a string with extended characters for Unicode strings 1737s 1737s String#inspect when the string's encoding is different than the result's encoding and the string's encoding is ASCII-compatible but the characters are non-ASCII 1737s - returns a string with the non-ASCII characters replaced by \x notation 1737s 1737s String#inspect when the string's encoding is different than the result's encoding and the string has both ASCII-compatible and ASCII-incompatible chars 1737s - returns a string with the non-ASCII characters replaced by \u notation 1737s 1737s String#intern 1737s - returns the symbol corresponding to self 1737s - does not special case +(binary) and -(binary) 1737s - does not special case certain operators 1737s - returns a US-ASCII Symbol for a UTF-8 String containing only US-ASCII characters 1737s - returns a US-ASCII Symbol for a binary String containing only US-ASCII characters 1737s - returns a UTF-8 Symbol for a UTF-8 String containing non US-ASCII characters 1737s - returns a UTF-16LE Symbol for a UTF-16LE String containing non US-ASCII characters 1737s - returns a binary Symbol for a binary String containing non US-ASCII characters 1737s - raises an EncodingError for UTF-8 String containing invalid bytes 1737s 1737s String#length 1737s - returns the length of self 1737s - returns the length of a string in different encodings 1737s - returns the length of the new self after encoding is changed 1737s - returns the correct length after force_encoding(BINARY) 1737s - adds 1 for every invalid byte in UTF-8 1737s - adds 1 (and not 2) for a incomplete surrogate in UTF-16 1737s - adds 1 for a broken sequence in UTF-32 1737s 1737s String#lines 1737s - splits using default newline separator when none is specified 1737s - splits self using the supplied record separator and passes each substring to the block 1737s - splits strings containing multibyte characters 1737s - passes self as a whole to the block if the separator is nil 1737s - yields paragraphs (broken by 2 or more successive newlines) when passed '' and replaces multiple newlines with only two ones 1737s - yields String instances for subclasses 1737s - returns self 1737s - tries to convert the separator to a string using to_str 1737s - does not care if the string is modified while substituting 1737s - returns Strings in the same encoding as self 1737s - raises a TypeError when the separator can't be converted to a string 1737s - accepts a string separator 1737s - raises a TypeError when the separator is a symbol 1737s - returns an array when no block given 1737s 1737s String#lines uses $/ 1737s - as the separator when none is given 1737s 1737s String#lines when `chomp` keyword argument is passed 1737s - removes new line characters when separator is not specified 1737s - removes only specified separator 1737s - ignores new line characters when separator is specified 1737s 1737s String#lines when `chomp` keyword argument is passed 1737s - removes new line characters 1737s 1737s String#ljust with length, padding 1737s - returns a new string of specified length with self left justified and padded with padstr 1737s - pads with whitespace if no padstr is given 1737s - returns self if it's longer than or as long as the specified length 1737s - tries to convert length to an integer using to_int 1737s - raises a TypeError when length can't be converted to an integer 1737s - tries to convert padstr to a string using to_str 1737s - raises a TypeError when padstr can't be converted 1737s - raises an ArgumentError when padstr is empty 1737s - returns String instances when called on subclasses 1737s 1737s String#ljust with length, padding with width 1737s - returns a String in the same encoding as the original 1737s 1737s String#ljust with length, padding with width, pattern 1737s - returns a String in the compatible encoding 1737s - raises an Encoding::CompatibilityError if the encodings are incompatible 1737s 1737s String#lstrip 1737s - returns a String in the same encoding as self 1737s - returns String instances when called on a subclass 1737s - returns a copy of self with leading whitespace removed 1737s - works with lazy substrings 1737s - strips leading \0 1737s 1737s String#lstrip! 1737s - modifies self in place and returns self 1737s - returns nil if no modifications were made 1737s - makes a string empty if it is only whitespace 1737s - removes leading NULL bytes and whitespace 1737s - raises a FrozenError on a frozen instance that is modified 1737s - raises a FrozenError on a frozen instance that would not be modified 1737s - raises an ArgumentError if the first non-space codepoint is invalid 1737s 1737s String#=~ 1737s - behaves the same way as index() when given a regexp 1737s - raises a TypeError if a obj is a string 1737s - invokes obj.=~ with self if obj is neither a string nor regexp 1737s - sets $~ to MatchData when there is a match and nil when there's none 1737s - returns the character index of a found match 1737s 1737s String#match 1737s - matches the pattern against self 1737s - matches a literal Regexp that uses ASCII-only UTF-8 escape sequences 1737s - tries to convert pattern to a string via to_str 1737s - raises a TypeError if pattern is not a regexp or a string 1737s - converts string patterns to regexps without escaping 1737s - returns nil if there's no match 1737s - matches \G at the start of the string 1737s - sets $~ to MatchData of match or nil when there is none 1737s - calls match on the regular expression 1737s 1737s String#match with [pattern, position] when given a positive position 1737s - matches the pattern against self starting at an optional index 1737s - uses the start as a character offset 1737s 1737s String#match with [pattern, position] when given a negative position 1737s - matches the pattern against self starting at an optional index 1737s - uses the start as a character offset 1737s 1737s String#match when passed a block 1737s - yields the MatchData 1737s - returns the block result 1737s - does not yield if there is no match 1737s 1737s String#match? 1737s - returns false when does not match the given regex 1737s - takes matching position as the 2nd argument 1737s 1737s String#match? when matches the given regex 1737s - returns true but does not set Regexp.last_match 1737s 1737s String#% 1737s - does not raise error when passed more arguments than needed 1737s - can produce a string with valid encoding 1737s - can produce a string with invalid encoding 1737s - returns a String in the same encoding as the format String if compatible 1737s - returns a String in the argument's encoding if format encoding is more restrictive 1737s - raises Encoding::CompatibilityError if both encodings are ASCII compatible and there are not ASCII characters 1737s 1737s String#% integer formats 1737s - converts argument into Integer with to_int 1737s - converts argument into Integer with to_i if to_int isn't available 1737s - converts String argument with Kernel#Integer 1737s - raises TypeError exception if cannot convert to Integer 1737s 1737s String#% integer formats b 1737s - converts argument as a binary number 1737s - displays negative number as a two's complement prefixed with '..1' 1737s - collapse negative number representation if it equals 1 1737s 1737s String#% integer formats B 1737s - converts argument as a binary number 1737s - displays negative number as a two's complement prefixed with '..1' 1737s - collapse negative number representation if it equals 1 1737s 1737s String#% integer formats d 1737s - converts argument as a decimal number 1737s - works well with large numbers 1737s 1737s String#% integer formats i 1737s - converts argument as a decimal number 1737s - works well with large numbers 1737s 1737s String#% integer formats u 1737s - converts argument as a decimal number 1737s - works well with large numbers 1737s 1737s String#% integer formats o 1737s - converts argument as an octal number 1737s - displays negative number as a two's complement prefixed with '..7' 1737s - collapse negative number representation if it equals 7 1737s 1737s String#% integer formats x 1737s - converts argument as a hexadecimal number 1737s - displays negative number as a two's complement prefixed with '..f' 1737s - collapse negative number representation if it equals f 1737s 1737s String#% integer formats X 1737s - converts argument as a hexadecimal number with uppercase letters 1737s - displays negative number as a two's complement prefixed with '..f' 1737s - collapse negative number representation if it equals F 1737s 1737s String#% float formats 1737s - converts argument into Float 1737s - raises TypeError exception if cannot convert to Float 1737s 1737s String#% float formats e 1737s - converts argument into exponential notation [-]d.dddddde[+-]dd 1737s - cuts excessive digits and keeps only 6 ones 1737s - rounds the last significant digit to the closest one 1737s - displays Float::INFINITY as Inf 1737s - displays Float::NAN as NaN 1737s 1737s String#% float formats E 1737s - converts argument into exponential notation [-]d.dddddde[+-]dd 1737s - cuts excessive digits and keeps only 6 ones 1737s - rounds the last significant digit to the closest one 1737s - displays Float::INFINITY as Inf 1737s - displays Float::NAN as NaN 1737s 1737s String#% float formats f 1737s - converts floating point argument as [-]ddd.dddddd 1737s - cuts excessive digits and keeps only 6 ones 1737s - rounds the last significant digit to the closest one 1737s - displays Float::INFINITY as Inf 1737s - displays Float::NAN as NaN 1737s 1737s String#% float formats g 1737s - displays Float::INFINITY as Inf 1737s - displays Float::NAN as NaN 1737s 1737s String#% float formats g the exponent is less than -4 1737s - converts a floating point number using exponential form 1737s 1737s String#% float formats g the exponent is greater than or equal to the precision (6 by default) 1737s - converts a floating point number using exponential form 1737s 1737s String#% float formats g otherwise 1737s - converts a floating point number in dd.dddd form 1737s - cuts excessive digits in fractional part and keeps only 4 ones 1737s - rounds the last significant digit to the closest one in fractional part 1737s - cuts fraction part to have only 6 digits at all 1737s 1737s String#% float formats G 1737s - displays Float::INFINITY as Inf 1737s - displays Float::NAN as NaN 1737s 1737s String#% float formats G the exponent is less than -4 1737s - converts a floating point number using exponential form 1737s 1737s String#% float formats G the exponent is greater than or equal to the precision (6 by default) 1737s - converts a floating point number using exponential form 1737s 1737s String#% float formats G otherwise 1737s - converts a floating point number in dd.dddd form 1737s - cuts excessive digits in fractional part and keeps only 4 ones 1737s - rounds the last significant digit to the closest one in fractional part 1737s - cuts fraction part to have only 6 digits at all 1737s 1737s String#% float formats a 1737s - converts floating point argument as [-]0xh.hhhhp[+-]dd 1737s - displays Float::INFINITY as Inf 1737s - displays Float::NAN as NaN 1737s 1737s String#% float formats A 1737s - converts floating point argument as [-]0xh.hhhhp[+-]dd and use uppercase X and P 1737s - displays Float::INFINITY as Inf 1737s - displays Float::NAN as NaN 1737s 1737s String#% other formats c 1737s - displays character if argument is a numeric code of character 1737s - displays character if argument is a single character string 1737s - raises ArgumentError if argument is a string of several characters 1737s - raises ArgumentError if argument is an empty string 1737s - raises TypeError if argument is not String or Integer and cannot be converted to them 1737s - raises TypeError if argument is nil 1737s - tries to convert argument to String with to_str 1737s - tries to convert argument to Integer with to_int 1737s - raises TypeError if converting to String with to_str returns non-String 1737s - raises TypeError if converting to Integer with to_int returns non-Integer 1737s 1737s String#% other formats p 1737s - displays argument.inspect value 1737s 1737s String#% other formats s 1737s - substitute argument passes as a string 1737s - substitutes '' for nil 1737s - converts argument to string with to_s 1737s - does not try to convert with to_str 1737s - formats a partial substring without including omitted characters 1737s - formats string with precision 1737s - formats string with width 1737s - formats string with width and precision 1737s - formats nil with width 1737s - formats nil with precision 1737s - formats nil with width and precision 1737s - formats multibyte string with precision 1737s - preserves encoding of the format string 1737s 1737s String#% other formats % 1737s - alone raises an ArgumentError 1737s - is escaped by % 1737s 1737s String#% flags space applies to numeric formats bBdiouxXeEfgGaA 1737s - leaves a space at the start of non-negative numbers 1737s - does not leave a space at the start of negative numbers 1737s - prevents converting negative argument to two's complement form 1737s - treats several white spaces as one 1737s 1737s String#% flags (digit)$ 1737s - specifies the absolute argument number for this field 1737s - raises exception if argument number is bigger than actual arguments list 1737s - ignores '-' sign 1737s - raises ArgumentError exception when absolute and relative argument numbers are mixed 1737s 1737s String#% flags # applies to format o 1737s - increases the precision until the first digit will be `0' if it is not formatted as complements 1737s - does nothing for negative argument 1737s 1737s String#% flags # applies to formats bBxX 1737s - prefixes the result with 0x, 0X, 0b and 0B respectively for non-zero argument 1737s - does nothing for zero argument 1737s 1737s String#% flags # applies to formats aAeEfgG 1737s - forces a decimal point to be added, even if no digits follow 1737s - changes format from dd.dddd to exponential form for gG 1737s 1737s String#% flags # applies to gG 1737s - does not remove trailing zeros 1737s 1737s String#% flags + applies to numeric formats bBdiouxXaAeEfgG 1737s - adds a leading plus sign to non-negative numbers 1737s - does not use two's complement form for negative numbers for formats bBoxX 1737s 1737s String#% flags - 1737s - left-justifies the result of conversion if width is specified 1737s 1737s String#% flags 0 (zero) applies to numeric formats bBdiouxXaAeEfgG and width is specified 1737s - pads with zeros, not spaces 1737s - uses radix-1 when displays negative argument as a two's complement 1737s 1737s String#% flags * 1737s - uses the previous argument as the field width 1737s - left-justifies the result if width is negative 1737s - uses the specified argument as the width if * is followed by a number and $ 1737s - left-justifies the result if specified with $ argument is negative 1737s - raises ArgumentError when is mixed with width 1737s 1737s String#% width 1737s - specifies the minimum number of characters that will be written to the result 1737s - is ignored if argument's actual length is greater 1737s 1737s String#% precision integer types 1737s - controls the number of decimal places displayed 1737s 1737s String#% precision float types 1737s - controls the number of decimal places displayed in fraction part 1737s - does not affect G format 1737s 1737s String#% precision string formats 1737s - determines the maximum number of characters to be copied from the string 1737s 1737s String#% reference by name %s style 1737s - uses value passed in a hash argument 1737s - supports flags, width, precision and type 1737s - allows to place name in any position 1737s - cannot be mixed with unnamed style 1737s 1737s String#% reference by name %{name} style 1737s - uses value passed in a hash argument 1737s - does not support type style 1737s - supports flags, width and precision 1737s - cannot be mixed with unnamed style 1737s - raises KeyError when there is no matching key 1737s - converts value to String with to_s 1737s 1737s String#% faulty key 1737s - raises a KeyError 1737s - sets the Hash as the receiver of KeyError 1737s - sets the unmatched key as the key of KeyError 1737s 1737s String#% %c 1737s - supports Unicode characters 1737s - raises error when a codepoint isn't representable in an encoding of a format string 1737s - uses the encoding of the format string to interpret codepoints 1737s 1737s String#% 1737s - formats multiple expressions 1737s - formats expressions mid string 1737s - formats %% into % 1737s - raises an error if single % appears at the end 1737s - formats single % character before a newline as literal % 1737s - formats single % character before a NUL as literal % 1737s - raises an error if single % appears anywhere else 1737s - raises an error if NULL or \n appear anywhere else in the format string 1737s - ignores unused arguments when $DEBUG is false 1737s - raises an ArgumentError for unused arguments when $DEBUG is true 1737s - always allows unused arguments when positional argument style is used 1737s - replaces trailing absolute argument specifier without type with percent sign 1737s - raises an ArgumentError when given invalid argument specifiers 1737s - raises an ArgumentError when multiple positional argument tokens are given for one format specifier 1737s - respects positional arguments and precision tokens given for one format specifier 1737s - allows more than one digit of position 1737s - raises an ArgumentError when multiple width star tokens are given for one format specifier 1737s - raises an ArgumentError when a width star token is seen after a width token 1737s - raises an ArgumentError when multiple precision tokens are given 1737s - raises an ArgumentError when there are less arguments than format specifiers 1737s - raises an ArgumentError when absolute and relative argument numbers are mixed 1737s - allows reuse of the one argument multiple via absolute argument numbers 1737s - always interprets an array argument as a list of argument parameters 1737s - always interprets an array subclass argument as a list of argument parameters 1737s - allows positional arguments for width star and precision star arguments 1737s - allows negative width to imply '-' flag 1737s - ignores negative precision 1737s - allows a star to take an argument number to use as the width 1737s - calls to_int on width star and precision star tokens 1737s - does not call #to_a to convert the argument 1737s - calls #to_ary to convert the argument 1737s - wraps the object in an Array if #to_ary returns nil 1737s - raises a TypeError if #to_ary does not return an Array 1737s - tries to convert the argument to Array by calling #to_ary 1737s - doesn't return subclass instances when called on a subclass 1737s - supports binary formats using %b for positive numbers 1737s - supports binary formats using %b for negative numbers 1737s - supports binary formats using %B with same behaviour as %b except for using 0B instead of 0b for # 1737s - supports character formats using %c 1737s - supports single character strings as argument for %c 1737s - raises an exception for multiple character strings as argument for %c 1737s - calls to_str on argument for %c formats 1737s - calls #to_ary on argument for %c formats 1737s - calls #to_int on argument for %c formats, if the argument does not respond to #to_ary 1737s - supports integer formats using %d 1737s - supports negative integers using %d 1737s - supports negative integers using %d, giving priority to `-` 1737s - supports integer formats using %i 1737s - supports negative integers using %i 1737s - supports negative integers using %i, giving priority to `-` 1737s - supports float formats using %e 1737s - supports float formats using %e, but Inf, -Inf, and NaN are not floats 1737s - supports float formats using %E, but Inf, -Inf, and NaN are not floats 1737s - supports float formats using %E 1737s - pads with spaces for %E with Inf, -Inf, and NaN 1737s - supports float formats using %f 1737s - supports float formats using %g 1737s - supports float formats using %G 1737s - supports octal formats using %o for positive numbers 1737s - supports octal formats using %o for negative numbers 1737s - supports inspect formats using %p 1737s - calls inspect on arguments for %p format 1737s - supports string formats using %s 1737s - respects a space padding request not as part of the width 1737s - calls to_s on non-String arguments for %s format 1737s - raises an ArgumentError for huge precisions for %s 1737s - supports unsigned formats using %u 1737s - formats negative values with a leading sign using %u 1737s - supports negative bignums with %u or %d 1737s - supports hex formats using %x for positive numbers 1737s - supports hex formats using %x for negative numbers 1737s - supports hex formats using %X for positive numbers 1737s - supports hex formats using %X for negative numbers 1737s - formats zero without prefix using %#x 1737s - formats zero without prefix using %#X 1737s - behaves as if calling Kernel#Integer for %b argument, if it does not respond to #to_ary 1737s - behaves as if calling Kernel#Integer for %d argument, if it does not respond to #to_ary 1737s - behaves as if calling Kernel#Integer for %i argument, if it does not respond to #to_ary 1737s - behaves as if calling Kernel#Integer for %o argument, if it does not respond to #to_ary 1737s - behaves as if calling Kernel#Integer for %u argument, if it does not respond to #to_ary 1737s - behaves as if calling Kernel#Integer for %x argument, if it does not respond to #to_ary 1737s - behaves as if calling Kernel#Integer for %X argument, if it does not respond to #to_ary 1737s - tries to convert the passed argument to an Array using #to_ary 1737s - behaves as if calling Kernel#Float for %e arguments, when the passed argument does not respond to #to_ary 1737s - behaves as if calling Kernel#Float for %e arguments, when the passed argument is hexadecimal string 1737s - tries to convert the passed argument to an Array using #to_ary 1737s - behaves as if calling Kernel#Float for %E arguments, when the passed argument does not respond to #to_ary 1737s - behaves as if calling Kernel#Float for %E arguments, when the passed argument is hexadecimal string 1737s - tries to convert the passed argument to an Array using #to_ary 1737s - behaves as if calling Kernel#Float for %f arguments, when the passed argument does not respond to #to_ary 1737s - behaves as if calling Kernel#Float for %f arguments, when the passed argument is hexadecimal string 1737s - tries to convert the passed argument to an Array using #to_ary 1737s - behaves as if calling Kernel#Float for %g arguments, when the passed argument does not respond to #to_ary 1737s - behaves as if calling Kernel#Float for %g arguments, when the passed argument is hexadecimal string 1737s - tries to convert the passed argument to an Array using #to_ary 1737s - behaves as if calling Kernel#Float for %G arguments, when the passed argument does not respond to #to_ary 1737s - behaves as if calling Kernel#Float for %G arguments, when the passed argument is hexadecimal string 1737s 1737s String#% when key is missing from passed-in hash 1737s - raises a KeyError 1737s - sets the Hash as the receiver of KeyError 1737s - sets the unmatched key as the key of KeyError 1737s 1737s String#% output's encoding 1737s - is the same as the format string if passed value is encoding-compatible 1737s - negotiates a compatible encoding if necessary 1737s - raises if a compatible encoding can't be found 1737s 1737s String#% when format string contains %{} sections 1737s - replaces %{} sections with values from passed-in hash 1737s - should raise ArgumentError if no hash given 1737s 1737s String#% when format string contains %<> formats 1737s - uses the named argument for the format's value 1737s - raises KeyError if key is missing from passed-in hash 1737s - should raise ArgumentError if no hash given 1737s 1737s String#* 1737s - returns a new string containing count copies of self 1737s - tries to convert the given argument to an integer using to_int 1737s - raises a RangeError when given integer is a Bignum 1737s - returns String instances 1737s - returns a String in the same encoding as self 1737s 1737s String.new 1737s - returns an instance of String 1737s - accepts an encoding argument 1737s - accepts a capacity argument 1737s - returns a fully-formed String 1737s - returns a new string given a string argument 1737s - returns an instance of a subclass 1737s - is called on subclasses 1737s - raises TypeError on inconvertible object 1737s - returns a binary String 1737s 1737s String#next 1737s - returns an empty string for empty strings 1737s - returns the successor by increasing the rightmost alphanumeric (digit => digit, letter => letter with same case) 1737s - increases non-alphanumerics (via ascii rules) if there are no alphanumerics 1737s - increases the next best alphanumeric (jumping over non-alphanumerics) if there is a carry 1737s - increases the next best character if there is a carry for non-alphanumerics 1737s - adds an additional character (just left to the last increased one) if there is a carry and no character left to increase 1737s - returns String instances when called on a subclass 1737s - returns a String in the same encoding as self 1737s 1737s String#next! 1737s - is equivalent to succ, but modifies self in place (still returns self) 1737s - raises a FrozenError if self is frozen 1737s 1737s String#oct 1737s - treats numeric digits as base-8 digits by default 1737s - accepts numbers formatted as binary 1737s - accepts numbers formatted as hexadecimal 1737s - accepts numbers formatted as decimal 1737s - accepts a single underscore separating digits 1737s - does not accept a sequence of underscores as part of a number 1737s - ignores characters that are incorrect for the base-8 digits 1737s - returns 0 if no characters can be interpreted as a base-8 number 1737s - returns 0 for strings with leading underscores 1737s 1737s String#oct with a leading minus sign 1737s - treats numeric digits as base-8 digits by default 1737s - accepts numbers formatted as binary 1737s - accepts numbers formatted as hexadecimal 1737s - accepts numbers formatted as decimal 1737s 1737s String#oct with a leading plus sign 1737s - treats numeric digits as base-8 digits by default 1737s - accepts numbers formatted as binary 1737s - accepts numbers formatted as hexadecimal 1737s - accepts numbers formatted as decimal 1737s 1737s String#ord 1737s - returns an Integer 1737s - returns the codepoint of the first character in the String 1737s - ignores subsequent characters 1737s - understands multibyte characters 1737s - is equivalent to #codepoints.first 1737s - raises an ArgumentError if called on an empty String 1737s - raises ArgumentError if the character is broken 1737s 1737s String#partition with String 1737s - returns String instances when called on a subclass 1737s - returns before- and after- parts in the same encoding as self 1737s - returns the matching part in the separator's encoding 1737s - returns an array of substrings based on splitting on the given string 1737s - always returns 3 elements 1737s - accepts regexp 1737s - sets global vars if regexp used 1737s - converts its argument using :to_str 1737s - raises an error if not convertible to string 1737s - takes precedence over a given block 1737s - handles a pattern in a superset encoding 1737s - handles a pattern in a subset encoding 1737s 1737s String#+ 1737s - converts the given argument to a String using to_str 1737s - raises a TypeError if the given argument can't be converted to a String 1737s - raises a NoMethodError if the given argument raises a NoMethodError during type coercion to a String 1737s - returns a new string containing the given string concatenated to self 1737s - converts any non-String argument with #to_str 1737s - raises a TypeError when given any object that fails #to_str 1737s - doesn't return subclass instances 1737s 1737s String#+ when self is in an ASCII-incompatible encoding incompatible with the argument's encoding 1737s - uses self's encoding if both are empty 1737s - uses self's encoding if the argument is empty 1737s - uses the argument's encoding if self is empty 1737s - raises Encoding::CompatibilityError if neither are empty 1737s 1737s String#+ when the argument is in an ASCII-incompatible encoding incompatible with self's encoding 1737s - uses self's encoding if both are empty 1737s - uses self's encoding if the argument is empty 1737s - uses the argument's encoding if self is empty 1737s - raises Encoding::CompatibilityError if neither are empty 1737s 1737s String#+ when self and the argument are in different ASCII-compatible encodings 1737s - uses self's encoding if both are ASCII-only 1737s - uses self's encoding if the argument is ASCII-only 1737s - uses the argument's encoding if self is ASCII-only 1737s - raises Encoding::CompatibilityError if neither are ASCII-only 1737s 1737s String#+ when self is BINARY and argument is US-ASCII 1737s - uses BINARY encoding 1737s 1737s String#prepend 1737s - prepends the given argument to self and returns self 1737s - converts the given argument to a String using to_str 1737s - raises a TypeError if the given argument can't be converted to a String 1737s - raises a FrozenError when self is frozen 1737s - works when given a subclass instance 1737s - takes multiple arguments 1737s - prepends the initial value when given arguments contain 2 self 1737s - returns self when given no arguments 1737s 1737s String#replace 1737s - returns self 1737s - replaces the content of self with other 1737s - replaces the encoding of self with that of other 1737s - carries over the encoding invalidity 1737s - tries to convert other to string using to_str 1737s - raises a TypeError if other can't be converted to string 1737s - raises a FrozenError on a frozen instance that is modified 1737s - raises a FrozenError on a frozen instance when self-replacing 1737s 1737s String#reverse 1737s - returns a new string with the characters of self in reverse order 1737s - returns String instances when called on a subclass 1737s - reverses a string with multi byte characters 1737s - works with a broken string 1737s - returns a String in the same encoding as self 1737s 1737s String#reverse! 1737s - reverses self in place and always returns self 1737s - raises a FrozenError on a frozen instance that is modified 1737s - raises a FrozenError on a frozen instance that would not be modified 1737s - reverses a string with multi byte characters 1737s - works with a broken string 1737s 1737s String#rindex with object 1737s - raises a TypeError if obj isn't a String or Regexp 1737s - raises a TypeError if obj is an Integer 1737s - doesn't try to convert obj to an integer via to_int 1737s - tries to convert obj to a string via to_str 1737s 1737s String#rindex with String 1737s - behaves the same as String#rindex(char) for one-character strings 1737s - behaves the same as String#rindex(?char) for one-character strings 1737s - returns the index of the last occurrence of the given substring 1737s - doesn't set $~ 1737s - ignores string subclasses 1737s - starts the search at the given offset 1737s - starts the search at offset + self.length if offset is negative 1737s - returns nil if the substring isn't found 1737s - tries to convert start_offset to an integer via to_int 1737s - raises a TypeError when given offset is nil 1737s - handles a substring in a superset encoding 1737s - handles a substring in a subset encoding 1737s - raises an Encoding::CompatibilityError if the encodings are incompatible 1737s 1737s String#rindex with Regexp 1737s - behaves the same as String#rindex(string) for escaped string regexps 1737s - returns the index of the first match from the end of string of regexp 1737s - sets $~ to MatchData of match and nil when there's none 1737s - starts the search at the given offset 1737s - starts the search at offset + self.length if offset is negative 1737s - returns nil if the substring isn't found 1737s - supports \G which matches at the given start offset 1737s - tries to convert start_offset to an integer via to_int 1737s - raises a TypeError when given offset is nil 1737s - returns the reverse character index of a multibyte character 1737s - returns the character index before the finish 1737s - raises an Encoding::CompatibilityError if the encodings are incompatible 1737s 1737s String#rjust with length, padding 1737s - returns a new string of specified length with self right justified and padded with padstr 1737s - pads with whitespace if no padstr is given 1737s - returns self if it's longer than or as long as the specified length 1737s - tries to convert length to an integer using to_int 1737s - raises a TypeError when length can't be converted to an integer 1737s - tries to convert padstr to a string using to_str 1737s - raises a TypeError when padstr can't be converted 1737s - raises an ArgumentError when padstr is empty 1737s - returns String instances when called on subclasses 1737s 1737s String#rjust with length, padding with width 1737s - returns a String in the same encoding as the original 1737s 1737s String#rjust with length, padding with width, pattern 1737s - returns a String in the compatible encoding 1737s - raises an Encoding::CompatibilityError if the encodings are incompatible 1737s 1737s String#rpartition with String 1737s - returns String instances when called on a subclass 1737s - returns before- and after- parts in the same encoding as self 1737s - returns the matching part in the separator's encoding 1737s - returns an array of substrings based on splitting on the given string 1737s - always returns 3 elements 1737s - returns original string if regexp doesn't match 1737s - returns new object if doesn't match 1737s - handles multibyte string correctly 1737s - accepts regexp 1737s - affects $~ 1737s - converts its argument using :to_str 1737s - raises an error if not convertible to string 1737s - handles a pattern in a superset encoding 1737s - handles a pattern in a subset encoding 1737s 1737s String#rstrip 1737s - returns a String in the same encoding as self 1737s - returns String instances when called on a subclass 1737s - returns a copy of self with trailing whitespace removed 1737s - works with lazy substrings 1737s - returns a copy of self with all trailing whitespace and NULL bytes removed 1737s 1737s String#rstrip! 1737s - modifies self in place and returns self 1737s - modifies self removing trailing NULL bytes and whitespace 1737s - returns nil if no modifications were made 1737s - makes a string empty if it is only whitespace 1737s - removes trailing NULL bytes and whitespace 1737s - raises a FrozenError on a frozen instance that is modified 1737s - raises a FrozenError on a frozen instance that would not be modified 1737s - raises an ArgumentError if the last non-space codepoint is invalid 1737s 1737s String#scan 1737s - returns an array containing all matches 1737s - respects unicode when the pattern collapses to nothing 1737s - stores groups as arrays in the returned arrays 1737s - scans for occurrences of the string if pattern is a string 1737s - sets $~ to MatchData of last match and nil when there's none 1737s - supports \G which matches the end of the previous match / string start for first match 1737s - tries to convert pattern to a string via to_str 1737s - raises a TypeError if pattern isn't a Regexp and can't be converted to a String 1737s - does not raise any errors when passed a multi-byte string 1737s - returns Strings in the same encoding as self 1737s 1737s String#scan with pattern and block 1737s - returns self 1737s - passes each match to the block as one argument: an array 1737s - passes groups to the block as one argument: an array 1737s - sets $~ for access from the block 1737s - restores $~ after leaving the block 1737s - sets $~ to MatchData of last match and nil when there's none for access from outside 1737s - passes block arguments as individual arguments when blocks are provided 1737s - yields String instances for subclasses 1737s 1737s String#scrub with a default replacement 1737s - returns self for valid strings 1737s - replaces invalid byte sequences 1737s - replaces invalid byte sequences in lazy substrings 1737s - returns a copy of self when the input encoding is BINARY 1737s - replaces invalid byte sequences when using ASCII as the input encoding 1737s - returns a String in the same encoding as self 1737s - returns String instances when called on a subclass 1737s 1737s String#scrub with a custom replacement 1737s - returns self for valid strings 1737s - replaces invalid byte sequences 1737s - replaces invalid byte sequences in frozen strings 1737s - replaces an incomplete character at the end with a single replacement 1737s - raises ArgumentError for replacements with an invalid encoding 1737s - returns a String in the same encoding as self 1737s - raises TypeError when a non String replacement is given 1737s - returns String instances when called on a subclass 1737s 1737s String#scrub with a block 1737s - returns self for valid strings 1737s - replaces invalid byte sequences 1737s - replaces invalid byte sequences using a custom encoding 1737s - returns String instances when called on a subclass 1737s 1737s String#scrub! 1737s - modifies self for valid strings 1737s - accepts blocks 1737s - maintains the state of frozen strings that are already valid 1737s - preserves the instance variables of already valid strings 1737s - accepts a frozen string as a replacement 1737s 1737s String#setbyte 1737s - returns an Integer 1737s - modifies the receiver 1737s - changes the byte at the given index to the new byte 1737s - allows changing bytes in multi-byte characters 1737s - can invalidate a String's encoding 1737s - regards a negative index as counting from the end of the String 1737s - raises an IndexError if the index is greater than the String bytesize 1737s - raises an IndexError if the negative index is greater magnitude than the String bytesize 1737s - sets a byte at an index greater than String size 1737s - does not modify the original string when using String.new 1737s - raises a FrozenError if self is frozen 1737s - raises a TypeError unless the second argument is an Integer 1737s - calls #to_int to convert the index 1737s - calls to_int to convert the value 1737s 1737s String#size 1737s - returns the length of self 1737s - returns the length of a string in different encodings 1737s - returns the length of the new self after encoding is changed 1737s - returns the correct length after force_encoding(BINARY) 1737s - adds 1 for every invalid byte in UTF-8 1737s - adds 1 (and not 2) for a incomplete surrogate in UTF-16 1737s - adds 1 for a broken sequence in UTF-32 1737s 1737s String#slice 1737s - returns the character code of the character at the given index 1737s - returns nil if index is outside of self 1737s - calls to_int on the given index 1737s - raises a TypeError if the given index is nil 1737s - raises a TypeError if the given index can't be converted to an Integer 1737s - raises a RangeError if the index is too big 1737s 1737s String#slice with index, length 1737s - returns the substring starting at the given index with the given length 1737s - returns a string with the same encoding as self 1737s - returns nil if the length is negative 1737s - calls to_int on the given index and the given length 1737s - raises a TypeError when idx or length can't be converted to an integer 1737s - raises a TypeError when the given index or the given length is nil 1737s - raises a RangeError if the index or length is too big 1737s - returns String instances 1737s - handles repeated application 1737s 1737s String#slice with Range 1737s - returns the substring given by the offsets of the range 1737s - returns a String in the same encoding as self 1737s - returns nil if the beginning of the range falls outside of self 1737s - returns an empty string if range.begin is inside self and > real end 1737s - returns String instances 1737s - calls to_int on range arguments 1737s - works with Range subclasses 1737s - handles repeated application 1737s - raises a type error if a range is passed with a length 1737s - raises a RangeError if one of the bound is too big 1737s - works with endless ranges 1737s - works with beginless ranges 1737s 1737s String#slice with Regexp 1737s - returns the matching portion of self 1737s - returns nil if there is no match 1737s - returns a String in the same encoding as self 1737s - returns String instances 1737s - sets $~ to MatchData when there is a match and nil when there's none 1737s 1737s String#slice with Regexp, index 1737s - returns the capture for the given index 1737s - returns nil if there is no match 1737s - returns nil if the index is larger than the number of captures 1737s - returns nil if there is no capture for the given index 1737s - returns nil if the given capture group was not matched but still sets $~ 1737s - returns a String in the same encoding as self 1737s - calls to_int on the given index 1737s - raises a TypeError when the given index can't be converted to Integer 1737s - raises a TypeError when the given index is nil 1737s - returns String instances 1737s - sets $~ to MatchData when there is a match and nil when there's none 1737s 1737s String#slice with Regexp, group 1737s - returns the capture for the given name 1737s - returns the last capture for duplicate names 1737s - returns the innermost capture for nested duplicate names 1737s - returns nil if there is no match 1737s - raises an IndexError if there is no capture for the given name 1737s - raises a TypeError when the given name is not a String 1737s - raises an IndexError when given the empty String as a group name 1737s - returns String instances 1737s - sets $~ to MatchData when there is a match and nil when there's none 1737s 1737s String#slice with String 1737s - returns other_str if it occurs in self 1737s - doesn't set $~ 1737s - returns nil if there is no match 1737s - doesn't call to_str on its argument 1737s - returns a String instance when given a subclass instance 1737s 1737s String#slice with Symbol 1737s - raises TypeError 1737s 1737s String#slice! with index 1737s - deletes and return the char at the given position 1737s - returns nil if idx is outside of self 1737s - raises a FrozenError if self is frozen 1737s - calls to_int on index 1737s - returns the character given by the character index 1737s 1737s String#slice! with index, length 1737s - deletes and returns the substring at idx and the given length 1737s - returns nil if the given position is out of self 1737s - returns nil if the length is negative 1737s - raises a FrozenError if self is frozen 1737s - calls to_int on idx and length 1737s - returns String instances 1737s - returns the substring given by the character offsets 1737s - treats invalid bytes as single bytes 1737s 1737s String#slice! Range 1737s - deletes and return the substring given by the offsets of the range 1737s - returns nil if the given range is out of self 1737s - returns String instances 1737s - calls to_int on range arguments 1737s - works with Range subclasses 1737s - returns the substring given by the character offsets of the range 1737s - raises a FrozenError on a frozen instance that is modified 1737s - raises a FrozenError on a frozen instance that would not be modified 1737s 1737s String#slice! with Regexp 1737s - deletes and returns the first match from self 1737s - returns nil if there was no match 1737s - returns String instances 1737s - returns the matching portion of self with a multi byte character 1737s - sets $~ to MatchData when there is a match and nil when there's none 1737s - raises a FrozenError on a frozen instance that is modified 1737s - raises a FrozenError on a frozen instance that would not be modified 1737s 1737s String#slice! with Regexp, index 1737s - deletes and returns the capture for idx from self 1737s - returns nil if there was no match 1737s - returns nil if there is no capture for idx 1737s - accepts a Float for capture index 1737s - calls #to_int to convert an Object to capture index 1737s - returns String instances 1737s - returns the encoding aware capture for the given index 1737s - sets $~ to MatchData when there is a match and nil when there's none 1737s - raises a FrozenError if self is frozen 1737s 1737s String#slice! with String 1737s - removes and returns the first occurrence of other_str from self 1737s - doesn't set $~ 1737s - returns nil if self does not contain other 1737s - doesn't call to_str on its argument 1737s - returns a subclass instance when given a subclass instance 1737s - raises a FrozenError if self is frozen 1737s 1737s String#split with String 1737s - throws an ArgumentError if the string is not a valid 1737s - throws an ArgumentError if the pattern is not a valid string 1737s - splits on multibyte characters 1737s - returns an array of substrings based on splitting on the given string 1737s - suppresses trailing empty fields when limit isn't given or 0 1737s - does not suppress trailing empty fields when a positive limit is given 1737s - returns an array with one entry if limit is 1: the original string 1737s - returns at most limit fields when limit > 1 1737s - doesn't suppress or limit fields when limit is negative 1737s - raises a RangeError when the limit is larger than int 1737s - defaults to $; when string isn't given or nil 1737s - ignores leading and continuous whitespace when string is a single space 1737s - splits between characters when its argument is an empty string 1737s - tries converting its pattern argument to a string via to_str 1737s - tries converting limit to an integer via to_int 1737s - doesn't set $~ 1737s - returns the original string if no matches are found 1737s - returns String instances based on self 1737s - returns an empty array when whitespace is split on whitespace 1737s - doesn't split on non-ascii whitespace 1737s - returns Strings in the same encoding as self 1737s 1737s String#split with String when limit is zero 1737s - ignores leading and continuous whitespace when string is a single space 1737s 1737s String#split with String when $; is not nil 1737s - warns 1737s 1737s String#split with Regexp 1737s - throws an ArgumentError if the string is not a valid 1737s - divides self on regexp matches 1737s - treats negative limits as no limit 1737s - suppresses trailing empty fields when limit isn't given or 0 1737s - returns an array with one entry if limit is 1: the original string 1737s - returns at most limit fields when limit > 1 1737s - doesn't suppress or limit fields when limit is negative 1737s - defaults to $; when regexp isn't given or nil 1737s - splits between characters when regexp matches a zero-length string 1737s - respects unicode when splitting between characters 1737s - respects the encoding of the regexp when splitting between characters 1737s - includes all captures in the result array 1737s - applies the limit to the number of split substrings, without counting captures 1737s - does not include non-matching captures in the result array 1737s - tries converting limit to an integer via to_int 1737s - returns a type error if limit can't be converted to an integer 1737s - doesn't set $~ 1737s - returns the original string if no matches are found 1737s - returns String instances based on self 1737s - returns Strings in the same encoding as self 1737s - splits a string on each character for a multibyte encoding and empty split 1737s - returns an ArgumentError if an invalid UTF-8 string is supplied 1737s - allows concurrent Regexp calls in a shared context 1737s - raises a TypeError when not called with nil, String, or Regexp 1737s - returns Strings in the same encoding as self 1737s 1737s String#split with Regexp when a block is given 1737s - yields each split substring with default pattern 1737s - yields each split substring with default pattern for a lazy substring 1737s - yields each split substring with default pattern for a non-ASCII string 1737s - yields each split substring with default pattern for a non-ASCII lazy substring 1737s - yields the string when limit is 1 1737s - yields each split letter 1737s - yields each split substring with a pattern 1737s - yields each split substring with empty regexp pattern 1737s - yields each split substring with empty regexp pattern and limit 1737s - yields each split substring with a regexp pattern 1737s - returns a string as is (and doesn't call block) if it is empty 1737s 1737s String#split with Regexp for a String subclass 1737s - yields instances of String 1737s 1737s String#squeeze 1737s - returns new string where runs of the same character are replaced by a single character when no args are given 1737s - only squeezes chars that are in the intersection of all sets given 1737s - negates sets starting with ^ 1737s - squeezes all chars in a sequence 1737s - raises an ArgumentError when the parameter is out of sequence 1737s - tries to convert each set arg to a string using to_str 1737s - returns a String in the same encoding as self 1737s - raises a TypeError when one set arg can't be converted to a string 1737s - returns String instances when called on a subclass 1737s 1737s String#squeeze! 1737s - modifies self in place and returns self 1737s - returns nil if no modifications were made 1737s - raises an ArgumentError when the parameter is out of sequence 1737s - raises a FrozenError when self is frozen 1737s 1737s String#start_with? 1737s - returns true only if beginning match 1737s - returns true only if any beginning match 1737s - returns true if the search string is empty 1737s - converts its argument using :to_str 1737s - ignores arguments not convertible to string 1737s - uses only the needed arguments 1737s - works for multibyte strings 1737s - supports regexps 1737s - supports regexps with ^ and $ modifiers 1737s - sets Regexp.last_match if it returns true 1737s - does not check that we are not matching part of a character 1737s - matches part of a character with the same part 1737s - does not check we are matching only part of a character 1737s 1737s String 1737s - includes Comparable 1737s 1737s String#strip 1737s - returns a String in the same encoding as self 1737s - returns String instances when called on a subclass 1737s - returns a new string with leading and trailing whitespace removed 1737s - returns a copy of self without leading and trailing NULL bytes and whitespace 1737s 1737s String#strip! 1737s - modifies self in place and returns self 1737s - returns nil if no modifications where made 1737s - makes a string empty if it is only whitespace 1737s - removes leading and trailing NULL bytes and whitespace 1737s - raises a FrozenError on a frozen instance that is modified 1737s - raises a FrozenError on a frozen instance that would not be modified 1737s 1737s String#sub with pattern, replacement 1737s - returns a copy of self when no modification is made 1737s - returns a copy of self with all occurrences of pattern replaced with replacement 1737s - ignores a block if supplied 1737s - supports \G which matches at the beginning of the string 1737s - supports /i for ignoring case 1737s - doesn't interpret regexp metacharacters if pattern is a string 1737s - replaces \1 sequences with the regexp's corresponding capture 1737s - treats \1 sequences without corresponding captures as empty strings 1737s - replaces \& and \0 with the complete match 1737s - replaces \` with everything before the current match 1737s - replaces \' with everything after the current match 1737s - replaces \\\+ with \\+ 1737s - replaces \+ with the last paren that actually matched 1737s - treats \+ as an empty string if there was no captures 1737s - maps \\ in replacement to \ 1737s - leaves unknown \x escapes in replacement untouched 1737s - leaves \ at the end of replacement untouched 1737s - tries to convert pattern to a string using to_str 1737s - raises a TypeError when pattern is a Symbol 1737s - raises a TypeError when pattern is an Array 1737s - raises a TypeError when pattern can't be converted to a string 1737s - tries to convert replacement to a string using to_str 1737s - raises a TypeError when replacement can't be converted to a string 1737s - returns String instances when called on a subclass 1737s - sets $~ to MatchData of match and nil when there's none 1737s - replaces \\\1 with \1 1737s - replaces \\\\1 with \1 1737s - replaces \\\\\1 with \ 1737s - handles a pattern in a superset encoding 1737s - handles a pattern in a subset encoding 1737s 1737s String#sub with pattern and block 1737s - returns a copy of self with the first occurrences of pattern replaced with the block's return value 1737s - sets $~ for access from the block 1737s - sets $~ to MatchData of last match and nil when there's none for access from outside 1737s - doesn't raise a RuntimeError if the string is modified while substituting 1737s - doesn't interpolate special sequences like \1 for the block's return value 1737s - converts the block's return value to a string using to_s 1737s 1737s String#sub! with pattern, replacement 1737s - modifies self in place and returns self 1737s - returns nil if no modifications were made 1737s - raises a FrozenError when self is frozen 1737s - handles a pattern in a superset encoding 1737s - handles a pattern in a subset encoding 1737s 1737s String#sub! with pattern and block 1737s - modifies self in place and returns self 1737s - sets $~ for access from the block 1737s - returns nil if no modifications were made 1737s - raises a RuntimeError if the string is modified while substituting 1737s - raises a FrozenError when self is frozen 1737s 1737s String#sub with pattern and Hash 1737s - returns a copy of self with the first occurrence of pattern replaced with the value of the corresponding hash key 1737s - removes keys that don't correspond to matches 1737s - ignores non-String keys 1737s - uses a key's value only a single time 1737s - uses the hash's default value for missing keys 1737s - coerces the hash values with #to_s 1737s - uses the hash's value set from default_proc for missing keys 1737s - sets $~ to MatchData of first match and nil when there's none for access from outside 1737s - doesn't interpolate special sequences like \1 for the block's return value 1737s 1737s String#sub! with pattern and Hash 1737s - returns self with the first occurrence of pattern replaced with the value of the corresponding hash key 1737s - removes keys that don't correspond to matches 1737s - ignores non-String keys 1737s - uses a key's value only a single time 1737s - uses the hash's default value for missing keys 1737s - coerces the hash values with #to_s 1737s - uses the hash's value set from default_proc for missing keys 1737s - sets $~ to MatchData of first match and nil when there's none for access from outside 1737s - doesn't interpolate special sequences like \1 for the block's return value 1737s 1737s String#sub with pattern and without replacement and block 1737s - raises a ArgumentError 1737s 1737s String#sub! with pattern and without replacement and block 1737s - raises a ArgumentError 1737s 1737s String#succ 1737s - returns an empty string for empty strings 1737s - returns the successor by increasing the rightmost alphanumeric (digit => digit, letter => letter with same case) 1737s - increases non-alphanumerics (via ascii rules) if there are no alphanumerics 1737s - increases the next best alphanumeric (jumping over non-alphanumerics) if there is a carry 1737s - increases the next best character if there is a carry for non-alphanumerics 1737s - adds an additional character (just left to the last increased one) if there is a carry and no character left to increase 1737s - returns String instances when called on a subclass 1737s - returns a String in the same encoding as self 1737s 1737s String#succ! 1737s - is equivalent to succ, but modifies self in place (still returns self) 1737s - raises a FrozenError if self is frozen 1737s 1737s String#sum 1737s - returns a basic n-bit checksum of the characters in self 1737s - tries to convert n to an integer using to_int 1737s - returns sum of the bytes in self if n less or equal to zero 1737s 1737s String#swapcase 1737s - returns a new string with all uppercase chars from self converted to lowercase and vice versa 1737s - returns a String in the same encoding as self 1737s - does not allow the :fold option for upcasing 1737s - does not allow invalid options 1737s - returns String instances when called on a subclass 1737s 1737s String#swapcase full Unicode case mapping 1737s - works for all of Unicode with no option 1737s - updates string metadata 1737s 1737s String#swapcase ASCII-only case mapping 1737s - does not swapcase non-ASCII characters 1737s - works with substrings 1737s 1737s String#swapcase full Unicode case mapping adapted for Turkic languages 1737s - swaps case of ASCII characters according to Turkic semantics 1737s - allows Lithuanian as an extra option 1737s - does not allow any other additional option 1737s 1737s String#swapcase full Unicode case mapping adapted for Lithuanian 1737s - currently works the same as full Unicode case mapping 1737s - allows Turkic as an extra option (and applies Turkic semantics) 1737s - does not allow any other additional option 1737s 1737s String#swapcase! 1737s - modifies self in place 1737s - modifies self in place for non-ascii-compatible encodings 1737s - does not allow the :fold option for upcasing 1737s - does not allow invalid options 1737s - returns nil if no modifications were made 1737s - raises a FrozenError when self is frozen 1737s 1737s String#swapcase! full Unicode case mapping 1737s - modifies self in place for all of Unicode with no option 1737s - works for non-ascii-compatible encodings 1737s - updates string metadata 1737s 1737s String#swapcase! modifies self in place for ASCII-only case mapping 1737s - does not swapcase non-ASCII characters 1737s - works for non-ascii-compatible encodings 1737s 1737s String#swapcase! modifies self in place for full Unicode case mapping adapted for Turkic languages 1737s - swaps case of ASCII characters according to Turkic semantics 1737s - allows Lithuanian as an extra option 1737s - does not allow any other additional option 1737s 1737s String#swapcase! full Unicode case mapping adapted for Lithuanian 1737s - currently works the same as full Unicode case mapping 1737s - allows Turkic as an extra option (and applies Turkic semantics) 1737s - does not allow any other additional option 1737s 1737s String#to_c 1737s - returns a Complex object 1737s - understands integers 1737s - understands negative integers 1737s - understands fractions (numerator/denominator) for the real part 1737s - understands fractions (numerator/denominator) for the imaginary part 1737s - understands negative fractions (-numerator/denominator) for the real part 1737s - understands negative fractions (-numerator/denominator) for the imaginary part 1737s - understands floats (a.b) for the real part 1737s - understands floats (a.b) for the imaginary part 1737s - understands negative floats (-a.b) for the real part 1737s - understands negative floats (-a.b) for the imaginary part 1737s - understands an integer followed by 'i' to mean that integer is the imaginary part 1737s - understands a negative integer followed by 'i' to mean that negative integer is the imaginary part 1737s - understands an 'i' by itself as denoting a complex number with an imaginary part of 1 1737s - understands a '-i' by itself as denoting a complex number with an imaginary part of -1 1737s - understands 'a+bi' to mean a complex number with 'a' as the real part, 'b' as the imaginary 1737s - understands 'a-bi' to mean a complex number with 'a' as the real part, '-b' as the imaginary 1737s - understands 'a+i' to mean a complex number with 'a' as the real part, 1i as the imaginary 1737s - understands 'a-i' to mean a complex number with 'a' as the real part, -1i as the imaginary 1737s - understands i, I, j, and J imaginary units 1737s - understands scientific notation for the real part 1737s - understands negative scientific notation for the real part 1737s - understands scientific notation for the imaginary part 1737s - understands negative scientific notation for the imaginary part 1737s - understands scientific notation for the real and imaginary part in the same String 1737s - understands negative scientific notation for the real and imaginary part in the same String 1737s - understands scientific notation with e and E 1737s - understands 'm@a' to mean a complex number in polar form with 'm' as the modulus, 'a' as the argument 1737s - ignores leading whitespaces 1737s - ignores trailing whitespaces 1737s - understands _ 1737s 1737s String#to_c 1737s - returns a complex number with 0 as the real part, 0 as the imaginary part for unrecognised Strings 1737s - understands Float::INFINITY 1737s - understands Float::NAN 1737s - allows null-byte 1737s 1737s String#to_f 1737s - treats leading characters of self as a floating point number 1737s - treats special float value strings as characters 1737s - allows for varying case 1737s - allows for varying signs 1737s - allows for underscores, even in the decimal side 1737s - returns 0 for strings with any non-digit in them 1737s - returns 0 for strings with leading underscores 1737s - takes an optional sign 1737s - returns 0.0 if the conversion fails 1737s 1737s String#to_i 1737s - returns 0 for strings with leading underscores 1737s - ignores underscores in between the digits 1737s - ignores multiple non-consecutive underscoes when the first digit is 0 1737s - bails out at the first double underscore if the first digit is 0 1737s - ignores leading whitespaces 1737s - ignores subsequent invalid characters 1737s - returns 0 if self is no valid integer-representation 1737s - accepts '+' at the beginning of a String 1737s - interprets leading characters as a number in the given base 1737s - auto-detects base 8 via leading 0 when base = 0 1737s - auto-detects base 2 via 0b when base = 0 1737s - auto-detects base 10 via 0d when base = 0 1737s - auto-detects base 8 via 0o when base = 0 1737s - auto-detects base 16 via 0x when base = 0 1737s - auto-detects base 10 with no base specifier when base = 0 1737s - doesn't handle foreign base specifiers when base is > 0 1737s - tries to convert the base to an integer using to_int 1737s - requires that the sign if any appears before the base specifier 1737s - raises an ArgumentError for illegal bases (1, < 0 or > 36) 1737s - returns an Integer for long strings with trailing spaces 1737s - returns an Integer for long strings with leading spaces 1737s - returns the correct Integer for long strings 1737s 1737s String#to_i with bases 1737s - parses a String in base 2 1737s - parses a String in base 3 1737s - parses a String in base 4 1737s - parses a String in base 5 1737s - parses a String in base 6 1737s - parses a String in base 7 1737s - parses a String in base 8 1737s - parses a String in base 9 1737s - parses a String in base 10 1737s - parses a String in base 11 1737s - parses a String in base 12 1737s - parses a String in base 13 1737s - parses a String in base 14 1737s - parses a String in base 15 1737s - parses a String in base 16 1737s - parses a String in base 17 1737s - parses a String in base 18 1737s - parses a String in base 19 1737s - parses a String in base 20 1737s - parses a String in base 21 1737s - parses a String in base 22 1737s - parses a String in base 23 1737s - parses a String in base 24 1737s - parses a String in base 25 1737s - parses a String in base 26 1737s - parses a String in base 27 1737s - parses a String in base 28 1737s - parses a String in base 29 1737s - parses a String in base 30 1737s - parses a String in base 31 1737s - parses a String in base 32 1737s - parses a String in base 33 1737s - parses a String in base 34 1737s - parses a String in base 35 1737s - parses a String in base 36 1737s 1737s String#to_r 1737s - returns a Rational object 1737s - returns (0/1) for the empty String 1737s - returns (n/1) for a String starting with a decimal _n_ 1737s - ignores trailing characters 1737s - ignores leading spaces 1737s - does not ignore arbitrary, non-numeric leading characters 1737s - treats leading hyphen as minus signs 1737s - does not treat a leading period without a numeric prefix as a decimal point 1737s - understands decimal points 1737s - ignores underscores between numbers 1737s - understands a forward slash as separating the numerator from the denominator 1737s - returns (0/1) for Strings it can't parse 1737s 1737s String#to_s 1737s - returns self when self.class == String 1737s - returns a new instance of String when called on a subclass 1737s 1737s String#to_str 1737s - returns self when self.class == String 1737s - returns a new instance of String when called on a subclass 1737s 1737s String#to_sym 1737s - returns the symbol corresponding to self 1737s - does not special case +(binary) and -(binary) 1737s - does not special case certain operators 1737s - returns a US-ASCII Symbol for a UTF-8 String containing only US-ASCII characters 1737s - returns a US-ASCII Symbol for a binary String containing only US-ASCII characters 1737s - returns a UTF-8 Symbol for a UTF-8 String containing non US-ASCII characters 1737s - returns a UTF-16LE Symbol for a UTF-16LE String containing non US-ASCII characters 1737s - returns a binary Symbol for a binary String containing non US-ASCII characters 1737s - raises an EncodingError for UTF-8 String containing invalid bytes 1737s 1737s String#tr_s 1737s - returns a string processed according to tr with newly duplicate characters removed 1737s - accepts c1-c2 notation to denote ranges of characters 1737s - pads to_str with its last char if it is shorter than from_string 1737s - translates chars not in from_string when it starts with a ^ 1737s - tries to convert from_str and to_str to strings using to_str 1737s - returns String instances when called on a subclass 1737s - can replace a 7-bit ASCII character with a multibyte one 1737s - can replace multiple 7-bit ASCII characters with a multibyte one 1737s - can replace a multibyte character with a single byte one 1737s - can replace multiple multibyte characters with a single byte one 1737s - does not replace a multibyte character where part of the bytes match the tr string 1737s 1737s String#tr_s! 1737s - modifies self in place 1737s - returns nil if no modification was made 1737s - does not modify self if from_str is empty 1737s - raises a FrozenError if self is frozen 1737s 1737s String#tr 1737s - returns a new string with the characters from from_string replaced by the ones in to_string 1737s - accepts c1-c2 notation to denote ranges of characters 1737s - pads to_str with its last char if it is shorter than from_string 1737s - raises an ArgumentError a descending range in the replacement as containing just the start character 1737s - raises an ArgumentError a descending range in the source as empty 1737s - translates chars not in from_string when it starts with a ^ 1737s - supports non-injective replacements 1737s - tries to convert from_str and to_str to strings using to_str 1737s - returns Stringinstances when called on a subclass 1737s - can replace a 7-bit ASCII character with a multibyte one 1737s - can replace a multibyte character with a single byte one 1737s - does not replace a multibyte character where part of the bytes match the tr string 1737s 1737s String#tr! 1737s - modifies self in place 1737s - returns nil if no modification was made 1737s - does not modify self if from_str is empty 1737s - raises a FrozenError if self is frozen 1737s 1737s String.try_convert 1737s - returns the argument if it's a String 1737s - returns the argument if it's a kind of String 1737s - returns nil when the argument does not respond to #to_str 1737s - sends #to_str to the argument and returns the result if it's nil 1737s - sends #to_str to the argument and returns the result if it's a String 1737s - sends #to_str to the argument and returns the result if it's a kind of String 1737s - sends #to_str to the argument and raises TypeError if it's not a kind of String 1737s - does not rescue exceptions raised by #to_str 1737s 1737s String#-@ 1737s - returns self if the String is frozen 1737s - returns a frozen copy if the String is not frozen 1737s - returns the same object for equal unfrozen strings 1737s - returns the same object when it's called on the same String literal 1737s - deduplicates frozen strings 1737s - does not deduplicate a frozen string when it has instance variables 1737s 1737s String#undump 1737s - does not take into account if a string is frozen 1737s - always returns String instance 1737s - strips outer " 1737s - returns a string with special characters in \ notation replaced with the characters 1737s - returns a string with unescaped sequences " and \ 1737s - returns a string with unescaped sequences \# when # is followed by $, @, { 1737s - returns a string with # not escaped when followed by any other character 1737s - returns a string with printable non-alphanumeric characters 1737s - returns a string with numeric characters unescaped 1737s - returns a string with upper-case alpha characters unescaped 1737s - returns a string with lower-case alpha characters unescaped 1737s - returns a string with \x notation replaced with non-printing ASCII character 1737s - returns a string with \u{} notation replaced with multi-byte UTF-8 characters 1737s - returns a string with \uXXXX notation replaced with multi-byte UTF-8 characters 1737s - undumps correctly string produced from non ASCII-compatible one 1737s - returns a String in the same encoding as self 1737s 1737s String#undump Limitations 1737s - cannot undump non ASCII-compatible string 1737s 1737s String#undump invalid dump 1737s - raises RuntimeError exception if wrapping " are missing 1737s - raises RuntimeError if there is incorrect \x sequence 1737s - raises RuntimeError in there is incorrect \u sequence 1737s - raises RuntimeError if there is malformed dump of non ASCII-compatible string 1737s - raises RuntimeError if string contains - raises RuntimeError if string contains non ASCII character 1737s - raises RuntimeError if there are some excessive " 1737s 1737s String#unicode_normalize 1737s - normalizes code points in the string according to the form that is specified 1737s - defaults to the nfc normalization form if no forms are specified 1737s - raises an Encoding::CompatibilityError if string is not in an unicode encoding 1737s - raises an ArgumentError if the specified form is invalid 1737s 1737s String#unicode_normalize returns normalized form of string by default 1738s - 03D3 (ϓ) GREEK UPSILON WITH ACUTE AND HOOK SYMBOL 1738s - 03D4 (ϔ) GREEK UPSILON WITH DIAERESIS AND HOOK SYMBOL 1738s - 1E9B (ẛ) LATIN SMALL LETTER LONG S WITH DOT ABOVE 1738s 1738s String#unicode_normalize! 1738s - normalizes code points and modifies the receiving string 1738s - modifies original string (nfc) 1738s - modifies self in place (nfd) 1738s - modifies self in place (nfkc) 1738s - modifies self in place (nfkd) 1738s - raises an Encoding::CompatibilityError if the string is not in an unicode encoding 1738s - raises an ArgumentError if the specified form is invalid 1738s 1738s String#unicode_normalized? 1738s - returns true if string is in the specified normalization form 1738s - returns false if string is not in the supplied normalization form 1738s - defaults to the nfc normalization form if no forms are specified 1738s - returns true if string is empty 1738s - returns true if string does not contain any unicode codepoints 1738s - raises an Encoding::CompatibilityError if the string is not in an unicode encoding 1738s - raises an ArgumentError if the specified form is invalid 1738s - returns true if str is in Unicode normalization form (nfc) 1738s - returns true if str is in Unicode normalization form (nfd) 1738s - returns true if str is in Unicode normalization form (nfkc) 1738s - returns true if str is in Unicode normalization form (nfkd) 1738s 1738s String#unpack with format 'A' 1738s - ignores whitespace in the format string 1738s - calls #to_str to coerce the directives string 1738s - raises an ArgumentError when the format modifier is '_' 1738s - raises an ArgumentError when the format modifier is '!' 1738s - returns an empty string if the input is empty 1738s - returns empty strings for repeated formats if the input is empty 1738s - returns an empty string and does not decode any bytes when the count modifier is zero 1738s - implicitly has a count of one when no count is specified 1738s - decodes the number of bytes specified by the count modifier 1738s - decodes the number of bytes specified by the count modifier including whitespace bytes 1738s - decodes past whitespace bytes when passed the '*' modifier 1738s - decodes the number of bytes specified by the count modifier including NULL bytes 1738s - decodes past NULL bytes when passed the '*' modifier 1738s - removes trailing space and NULL bytes from the decoded string 1738s - does not remove whitespace other than space 1738s - decodes into raw (ascii) string values 1738s 1738s String#unpack with format 'a' 1738s - ignores whitespace in the format string 1738s - calls #to_str to coerce the directives string 1738s - raises an ArgumentError when the format modifier is '_' 1738s - raises an ArgumentError when the format modifier is '!' 1738s - returns an empty string if the input is empty 1738s - returns empty strings for repeated formats if the input is empty 1738s - returns an empty string and does not decode any bytes when the count modifier is zero 1738s - implicitly has a count of one when no count is specified 1738s - decodes the number of bytes specified by the count modifier 1738s - decodes the number of bytes specified by the count modifier including whitespace bytes 1738s - decodes past whitespace bytes when passed the '*' modifier 1738s - decodes the number of bytes specified by the count modifier including NULL bytes 1738s - decodes past NULL bytes when passed the '*' modifier 1738s - does not remove trailing whitespace or NULL bytes from the decoded string 1738s - decodes into raw (ascii) string values 1738s 1738s String#unpack with format '@' 1738s - ignores whitespace in the format string 1738s - calls #to_str to coerce the directives string 1738s - raises an ArgumentError when the format modifier is '_' 1738s - raises an ArgumentError when the format modifier is '!' 1738s - moves the read index to the byte specified by the count 1738s - implicitly has a count of zero when count is not specified 1738s - has no effect when passed the '*' modifier 1738s - positions the read index one beyond the last readable byte in the String 1738s - raises an ArgumentError if the count exceeds the size of the String 1738s 1738s String#unpack with format 'B' 1738s - ignores whitespace in the format string 1738s - calls #to_str to coerce the directives string 1738s - raises an ArgumentError when the format modifier is '_' 1738s - raises an ArgumentError when the format modifier is '!' 1738s - decodes one bit from each byte for each format character starting with the most significant bit 1738s - decodes only the number of bits in the string when passed a count 1738s - decodes multiple differing bit counts from a single string 1738s - decodes a directive with a '*' modifier after a directive with a count modifier 1738s - decodes a directive with a count modifier after a directive with a '*' modifier 1738s - decodes the number of bits specified by the count modifier 1738s - decodes all the bits when passed the '*' modifier 1738s - adds an empty string for each element requested beyond the end of the String 1738s - ignores NULL bytes between directives 1738s - ignores spaces between directives 1738s 1738s String#unpack with format 'b' 1738s - ignores whitespace in the format string 1738s - calls #to_str to coerce the directives string 1738s - raises an ArgumentError when the format modifier is '_' 1738s - raises an ArgumentError when the format modifier is '!' 1738s - decodes one bit from each byte for each format character starting with the least significant bit 1738s - decodes only the number of bits in the string when passed a count 1738s - decodes multiple differing bit counts from a single string 1738s - decodes a directive with a '*' modifier after a directive with a count modifier 1738s - decodes a directive with a count modifier after a directive with a '*' modifier 1738s - decodes the number of bits specified by the count modifier 1738s - decodes all the bits when passed the '*' modifier 1738s - adds an empty string for each element requested beyond the end of the String 1738s - ignores NULL bytes between directives 1738s - ignores spaces between directives 1738s - decodes into US-ASCII string values 1738s 1738s String#unpack with format 'C' 1738s - ignores whitespace in the format string 1738s - calls #to_str to coerce the directives string 1738s - decodes one byte for a single format character 1738s - decodes two bytes for two format characters 1738s - decodes the number of bytes requested by the count modifier 1738s - decodes the remaining bytes when passed the '*' modifier 1738s - decodes the remaining bytes when passed the '*' modifier after another directive 1738s - decodes zero bytes when no bytes remain and the '*' modifier is passed 1738s - adds nil for each element requested beyond the end of the String 1738s - ignores NULL bytes between directives 1738s - ignores spaces between directives 1738s - decodes a byte with most significant bit set as a positive number 1738s 1738s String#unpack with format 'c' 1738s - ignores whitespace in the format string 1738s - calls #to_str to coerce the directives string 1738s - decodes one byte for a single format character 1738s - decodes two bytes for two format characters 1738s - decodes the number of bytes requested by the count modifier 1738s - decodes the remaining bytes when passed the '*' modifier 1738s - decodes the remaining bytes when passed the '*' modifier after another directive 1738s - decodes zero bytes when no bytes remain and the '*' modifier is passed 1738s - adds nil for each element requested beyond the end of the String 1738s - ignores NULL bytes between directives 1738s - ignores spaces between directives 1738s - decodes a byte with most significant bit set as a negative number 1738s 1738s String#unpack 1738s - ignores directives text from '#' to the first newline 1738s - ignores directives text from '#' to the end if no newline is present 1738s - ignores comments at the start of the directives string 1738s - ignores the entire directive string if it is a comment 1738s - ignores multiple comments 1738s 1738s String#unpack with format 'D' 1738s - ignores whitespace in the format string 1738s - calls #to_str to coerce the directives string 1738s - decodes one double for a single format character 1738s - decodes a negative double 1738s - decodes two doubles for two format characters 1738s - decodes the number of doubles requested by the count modifier 1738s - decodes the remaining doubles when passed the '*' modifier 1738s - decodes the remaining doubles when passed the '*' modifier after another directive 1738s - does not decode a double when fewer bytes than a double remain and the '*' modifier is passed 1738s - adds nil for each element requested beyond the end of the String 1738s - decodes positive Infinity 1738s - decodes negative Infinity 1738s - decodes NaN 1738s - ignores NULL bytes between directives 1738s - ignores spaces between directives 1738s 1738s String#unpack with format 'd' 1738s - ignores whitespace in the format string 1738s - calls #to_str to coerce the directives string 1738s - decodes one double for a single format character 1738s - decodes a negative double 1738s - decodes two doubles for two format characters 1738s - decodes the number of doubles requested by the count modifier 1738s - decodes the remaining doubles when passed the '*' modifier 1738s - decodes the remaining doubles when passed the '*' modifier after another directive 1738s - does not decode a double when fewer bytes than a double remain and the '*' modifier is passed 1738s - adds nil for each element requested beyond the end of the String 1738s - decodes positive Infinity 1738s - decodes negative Infinity 1738s - decodes NaN 1738s - ignores NULL bytes between directives 1738s - ignores spaces between directives 1738s 1738s String#unpack with format 'E' 1738s - ignores whitespace in the format string 1738s - calls #to_str to coerce the directives string 1738s - decodes one double for a single format character 1738s - decodes a negative double 1738s - decodes two doubles for two format characters 1738s - decodes the number of doubles requested by the count modifier 1738s - decodes the remaining doubles when passed the '*' modifier 1738s - decodes the remaining doubles when passed the '*' modifier after another directive 1738s - does not decode a double when fewer bytes than a double remain and the '*' modifier is passed 1738s - adds nil for each element requested beyond the end of the String 1738s - decodes positive Infinity 1738s - decodes negative Infinity 1738s - decodes NaN 1738s - ignores NULL bytes between directives 1738s - ignores spaces between directives 1738s 1738s String#unpack with format 'e' 1738s - ignores whitespace in the format string 1738s - calls #to_str to coerce the directives string 1738s - decodes one float for a single format character 1738s - decodes a negative float 1738s - decodes two floats for two format characters 1738s - decodes the number of floats requested by the count modifier 1738s - decodes the remaining floats when passed the '*' modifier 1738s - decodes the remaining floats when passed the '*' modifier after another directive 1738s - does not decode a float when fewer bytes than a float remain and the '*' modifier is passed 1738s - adds nil for each element requested beyond the end of the String 1738s - decodes positive Infinity 1738s - decodes negative Infinity 1738s - decodes NaN 1738s - ignores NULL bytes between directives 1738s - ignores spaces between directives 1738s 1738s String#unpack with format 'F' 1738s - ignores whitespace in the format string 1738s - calls #to_str to coerce the directives string 1738s - decodes one float for a single format character 1738s - decodes a negative float 1738s - decodes two floats for two format characters 1738s - decodes the number of floats requested by the count modifier 1738s - decodes the remaining floats when passed the '*' modifier 1738s - decodes the remaining floats when passed the '*' modifier after another directive 1738s - does not decode a float when fewer bytes than a float remain and the '*' modifier is passed 1738s - adds nil for each element requested beyond the end of the String 1738s - decodes positive Infinity 1738s - decodes negative Infinity 1738s - decodes NaN 1738s - ignores NULL bytes between directives 1738s - ignores spaces between directives 1738s 1738s String#unpack with format 'f' 1738s - ignores whitespace in the format string 1738s - calls #to_str to coerce the directives string 1738s - decodes one float for a single format character 1738s - decodes a negative float 1738s - decodes two floats for two format characters 1738s - decodes the number of floats requested by the count modifier 1738s - decodes the remaining floats when passed the '*' modifier 1738s - decodes the remaining floats when passed the '*' modifier after another directive 1738s - does not decode a float when fewer bytes than a float remain and the '*' modifier is passed 1738s - adds nil for each element requested beyond the end of the String 1738s - decodes positive Infinity 1738s - decodes negative Infinity 1738s - decodes NaN 1738s - ignores NULL bytes between directives 1738s - ignores spaces between directives 1738s 1738s String#unpack with format 'G' 1738s - ignores whitespace in the format string 1738s - calls #to_str to coerce the directives string 1738s - decodes one double for a single format character 1738s - decodes a negative double 1738s - decodes two doubles for two format characters 1738s - decodes the number of doubles requested by the count modifier 1738s - decodes the remaining doubles when passed the '*' modifier 1738s - decodes the remaining doubles when passed the '*' modifier after another directive 1738s - does not decode a double when fewer bytes than a double remain and the '*' modifier is passed 1738s - adds nil for each element requested beyond the end of the String 1738s - decodes positive Infinity 1738s - decodes negative Infinity 1738s - decodes NaN 1738s - ignores NULL bytes between directives 1738s - ignores spaces between directives 1738s 1738s String#unpack with format 'g' 1738s - ignores whitespace in the format string 1738s - calls #to_str to coerce the directives string 1738s - decodes one float for a single format character 1738s - decodes a negative float 1738s - decodes two floats for two format characters 1738s - decodes the number of floats requested by the count modifier 1738s - decodes the remaining floats when passed the '*' modifier 1738s - decodes the remaining floats when passed the '*' modifier after another directive 1738s - does not decode a float when fewer bytes than a float remain and the '*' modifier is passed 1738s - adds nil for each element requested beyond the end of the String 1738s - decodes positive Infinity 1738s - decodes negative Infinity 1738s - decodes NaN 1738s - ignores NULL bytes between directives 1738s - ignores spaces between directives 1738s 1738s String#unpack with format 'H' 1738s - ignores whitespace in the format string 1738s - calls #to_str to coerce the directives string 1738s - raises an ArgumentError when the format modifier is '_' 1738s - raises an ArgumentError when the format modifier is '!' 1738s - decodes one nibble from each byte for each format character starting with the most significant bit 1738s - decodes only the number of nibbles in the string when passed a count 1738s - decodes multiple differing nibble counts from a single string 1738s - decodes a directive with a '*' modifier after a directive with a count modifier 1738s - decodes a directive with a count modifier after a directive with a '*' modifier 1738s - decodes the number of nibbles specified by the count modifier 1738s - decodes all the nibbles when passed the '*' modifier 1738s - adds an empty string for each element requested beyond the end of the String 1738s - ignores NULL bytes between directives 1738s - ignores spaces between directives 1738s - should make strings with US_ASCII encoding 1738s 1738s String#unpack with format 'h' 1738s - ignores whitespace in the format string 1738s - calls #to_str to coerce the directives string 1738s - raises an ArgumentError when the format modifier is '_' 1738s - raises an ArgumentError when the format modifier is '!' 1738s - decodes one nibble from each byte for each format character starting with the least significant bit 1738s - decodes only the number of nibbles in the string when passed a count 1738s - decodes multiple differing nibble counts from a single string 1738s - decodes a directive with a '*' modifier after a directive with a count modifier 1738s - decodes a directive with a count modifier after a directive with a '*' modifier 1738s - decodes the number of nibbles specified by the count modifier 1738s - decodes all the nibbles when passed the '*' modifier 1738s - adds an empty string for each element requested beyond the end of the String 1738s - ignores NULL bytes between directives 1738s - ignores spaces between directives 1738s - should make strings with US_ASCII encoding 1738s 1738s String#unpack with format 'I' with modifier '<' 1738s - decodes one int for a single format character 1738s - decodes two ints for two format characters 1738s - decodes the number of ints requested by the count modifier 1738s - decodes the remaining ints when passed the '*' modifier 1738s - decodes the remaining ints when passed the '*' modifier after another directive 1738s - does not decode an int when fewer bytes than an int remain and the '*' modifier is passed 1738s - adds nil for each element requested beyond the end of the String 1738s - ignores NULL bytes between directives 1738s - ignores spaces between directives 1738s - decodes an int with most significant bit set as a positive number 1738s 1738s String#unpack with format 'I' with modifier '<' and '_' 1738s - decodes one int for a single format character 1738s - decodes two ints for two format characters 1738s - decodes the number of ints requested by the count modifier 1738s - decodes the remaining ints when passed the '*' modifier 1738s - decodes the remaining ints when passed the '*' modifier after another directive 1738s - does not decode an int when fewer bytes than an int remain and the '*' modifier is passed 1738s - adds nil for each element requested beyond the end of the String 1738s - ignores NULL bytes between directives 1738s - ignores spaces between directives 1738s - decodes one int for a single format character 1738s - decodes two ints for two format characters 1738s - decodes the number of ints requested by the count modifier 1738s - decodes the remaining ints when passed the '*' modifier 1738s - decodes the remaining ints when passed the '*' modifier after another directive 1738s - does not decode an int when fewer bytes than an int remain and the '*' modifier is passed 1738s - adds nil for each element requested beyond the end of the String 1738s - ignores NULL bytes between directives 1738s - ignores spaces between directives 1738s - decodes an int with most significant bit set as a positive number 1738s - decodes an int with most significant bit set as a positive number 1738s 1738s String#unpack with format 'I' with modifier '<' and '!' 1738s - decodes one int for a single format character 1738s - decodes two ints for two format characters 1738s - decodes the number of ints requested by the count modifier 1738s - decodes the remaining ints when passed the '*' modifier 1738s - decodes the remaining ints when passed the '*' modifier after another directive 1738s - does not decode an int when fewer bytes than an int remain and the '*' modifier is passed 1738s - adds nil for each element requested beyond the end of the String 1738s - ignores NULL bytes between directives 1738s - ignores spaces between directives 1738s - decodes one int for a single format character 1738s - decodes two ints for two format characters 1738s - decodes the number of ints requested by the count modifier 1738s - decodes the remaining ints when passed the '*' modifier 1738s - decodes the remaining ints when passed the '*' modifier after another directive 1738s - does not decode an int when fewer bytes than an int remain and the '*' modifier is passed 1738s - adds nil for each element requested beyond the end of the String 1738s - ignores NULL bytes between directives 1738s - ignores spaces between directives 1738s - decodes an int with most significant bit set as a positive number 1738s - decodes an int with most significant bit set as a positive number 1738s 1738s String#unpack with format 'I' with modifier '>' 1738s - decodes one int for a single format character 1738s - decodes two ints for two format characters 1738s - decodes the number of ints requested by the count modifier 1738s - decodes the remaining ints when passed the '*' modifier 1738s - decodes the remaining ints when passed the '*' modifier after another directive 1738s - does not decode an int when fewer bytes than an int remain and the '*' modifier is passed 1738s - adds nil for each element requested beyond the end of the String 1738s - ignores NULL bytes between directives 1738s - ignores spaces between directives 1738s - decodes an int with most significant bit set as a positive number 1738s 1738s String#unpack with format 'I' with modifier '>' and '_' 1738s - decodes one int for a single format character 1738s - decodes two ints for two format characters 1738s - decodes the number of ints requested by the count modifier 1738s - decodes the remaining ints when passed the '*' modifier 1738s - decodes the remaining ints when passed the '*' modifier after another directive 1738s - does not decode an int when fewer bytes than an int remain and the '*' modifier is passed 1738s - adds nil for each element requested beyond the end of the String 1738s - ignores NULL bytes between directives 1738s - ignores spaces between directives 1738s - decodes one int for a single format character 1738s - decodes two ints for two format characters 1738s - decodes the number of ints requested by the count modifier 1738s - decodes the remaining ints when passed the '*' modifier 1738s - decodes the remaining ints when passed the '*' modifier after another directive 1738s - does not decode an int when fewer bytes than an int remain and the '*' modifier is passed 1738s - adds nil for each element requested beyond the end of the String 1738s - ignores NULL bytes between directives 1738s - ignores spaces between directives 1738s - decodes an int with most significant bit set as a positive number 1738s - decodes an int with most significant bit set as a positive number 1738s 1738s String#unpack with format 'I' with modifier '>' and '!' 1738s - decodes one int for a single format character 1738s - decodes two ints for two format characters 1738s - decodes the number of ints requested by the count modifier 1738s - decodes the remaining ints when passed the '*' modifier 1738s - decodes the remaining ints when passed the '*' modifier after another directive 1738s - does not decode an int when fewer bytes than an int remain and the '*' modifier is passed 1738s - adds nil for each element requested beyond the end of the String 1738s - ignores NULL bytes between directives 1738s - ignores spaces between directives 1738s - decodes one int for a single format character 1738s - decodes two ints for two format characters 1738s - decodes the number of ints requested by the count modifier 1738s - decodes the remaining ints when passed the '*' modifier 1738s - decodes the remaining ints when passed the '*' modifier after another directive 1738s - does not decode an int when fewer bytes than an int remain and the '*' modifier is passed 1738s - adds nil for each element requested beyond the end of the String 1738s - ignores NULL bytes between directives 1738s - ignores spaces between directives 1738s - decodes an int with most significant bit set as a positive number 1738s - decodes an int with most significant bit set as a positive number 1738s 1738s String#unpack with format 'i' with modifier '<' 1738s - decodes one int for a single format character 1738s - decodes two ints for two format characters 1738s - decodes the number of ints requested by the count modifier 1738s - decodes the remaining ints when passed the '*' modifier 1738s - decodes the remaining ints when passed the '*' modifier after another directive 1738s - does not decode an int when fewer bytes than an int remain and the '*' modifier is passed 1738s - adds nil for each element requested beyond the end of the String 1738s - ignores NULL bytes between directives 1738s - ignores spaces between directives 1738s - decodes an int with most significant bit set as a negative number 1738s 1738s String#unpack with format 'i' with modifier '<' and '_' 1738s - decodes one int for a single format character 1738s - decodes two ints for two format characters 1738s - decodes the number of ints requested by the count modifier 1738s - decodes the remaining ints when passed the '*' modifier 1738s - decodes the remaining ints when passed the '*' modifier after another directive 1738s - does not decode an int when fewer bytes than an int remain and the '*' modifier is passed 1738s - adds nil for each element requested beyond the end of the String 1738s - ignores NULL bytes between directives 1738s - ignores spaces between directives 1738s - decodes one int for a single format character 1738s - decodes two ints for two format characters 1738s - decodes the number of ints requested by the count modifier 1738s - decodes the remaining ints when passed the '*' modifier 1738s - decodes the remaining ints when passed the '*' modifier after another directive 1738s - does not decode an int when fewer bytes than an int remain and the '*' modifier is passed 1738s - adds nil for each element requested beyond the end of the String 1738s - ignores NULL bytes between directives 1738s - ignores spaces between directives 1738s - decodes an int with most significant bit set as a negative number 1738s - decodes an int with most significant bit set as a negative number 1738s 1738s String#unpack with format 'i' with modifier '<' and '!' 1738s - decodes one int for a single format character 1738s - decodes two ints for two format characters 1738s - decodes the number of ints requested by the count modifier 1738s - decodes the remaining ints when passed the '*' modifier 1738s - decodes the remaining ints when passed the '*' modifier after another directive 1738s - does not decode an int when fewer bytes than an int remain and the '*' modifier is passed 1738s - adds nil for each element requested beyond the end of the String 1738s - ignores NULL bytes between directives 1738s - ignores spaces between directives 1738s - decodes one int for a single format character 1738s - decodes two ints for two format characters 1738s - decodes the number of ints requested by the count modifier 1738s - decodes the remaining ints when passed the '*' modifier 1738s - decodes the remaining ints when passed the '*' modifier after another directive 1738s - does not decode an int when fewer bytes than an int remain and the '*' modifier is passed 1738s - adds nil for each element requested beyond the end of the String 1738s - ignores NULL bytes between directives 1738s - ignores spaces between directives 1738s - decodes an int with most significant bit set as a negative number 1738s - decodes an int with most significant bit set as a negative number 1738s 1738s String#unpack with format 'i' with modifier '>' 1738s - decodes one int for a single format character 1738s - decodes two ints for two format characters 1738s - decodes the number of ints requested by the count modifier 1738s - decodes the remaining ints when passed the '*' modifier 1738s - decodes the remaining ints when passed the '*' modifier after another directive 1738s - does not decode an int when fewer bytes than an int remain and the '*' modifier is passed 1738s - adds nil for each element requested beyond the end of the String 1738s - ignores NULL bytes between directives 1738s - ignores spaces between directives 1738s - decodes an int with most significant bit set as a negative number 1738s 1738s String#unpack with format 'i' with modifier '>' and '_' 1738s - decodes one int for a single format character 1738s - decodes two ints for two format characters 1738s - decodes the number of ints requested by the count modifier 1738s - decodes the remaining ints when passed the '*' modifier 1738s - decodes the remaining ints when passed the '*' modifier after another directive 1738s - does not decode an int when fewer bytes than an int remain and the '*' modifier is passed 1738s - adds nil for each element requested beyond the end of the String 1738s - ignores NULL bytes between directives 1738s - ignores spaces between directives 1738s - decodes one int for a single format character 1738s - decodes two ints for two format characters 1738s - decodes the number of ints requested by the count modifier 1738s - decodes the remaining ints when passed the '*' modifier 1738s - decodes the remaining ints when passed the '*' modifier after another directive 1738s - does not decode an int when fewer bytes than an int remain and the '*' modifier is passed 1738s - adds nil for each element requested beyond the end of the String 1738s - ignores NULL bytes between directives 1738s - ignores spaces between directives 1738s - decodes an int with most significant bit set as a negative number 1738s - decodes an int with most significant bit set as a negative number 1738s 1738s String#unpack with format 'i' with modifier '>' and '!' 1738s - decodes one int for a single format character 1738s - decodes two ints for two format characters 1738s - decodes the number of ints requested by the count modifier 1738s - decodes the remaining ints when passed the '*' modifier 1738s - decodes the remaining ints when passed the '*' modifier after another directive 1738s - does not decode an int when fewer bytes than an int remain and the '*' modifier is passed 1738s - adds nil for each element requested beyond the end of the String 1738s - ignores NULL bytes between directives 1738s - ignores spaces between directives 1738s - decodes one int for a single format character 1738s - decodes two ints for two format characters 1738s - decodes the number of ints requested by the count modifier 1738s - decodes the remaining ints when passed the '*' modifier 1738s - decodes the remaining ints when passed the '*' modifier after another directive 1738s - does not decode an int when fewer bytes than an int remain and the '*' modifier is passed 1738s - adds nil for each element requested beyond the end of the String 1738s - ignores NULL bytes between directives 1738s - ignores spaces between directives 1738s - decodes an int with most significant bit set as a negative number 1738s - decodes an int with most significant bit set as a negative number 1738s 1738s String#unpack with format 'I' 1738s - ignores whitespace in the format string 1738s - calls #to_str to coerce the directives string 1738s - decodes one int for a single format character 1738s - decodes two ints for two format characters 1738s - decodes the number of ints requested by the count modifier 1738s - decodes the remaining ints when passed the '*' modifier 1738s - decodes the remaining ints when passed the '*' modifier after another directive 1738s - does not decode an int when fewer bytes than an int remain and the '*' modifier is passed 1738s - adds nil for each element requested beyond the end of the String 1738s - ignores NULL bytes between directives 1738s - ignores spaces between directives 1738s - decodes an int with most significant bit set as a positive number 1738s 1738s String#unpack with format 'I' with modifier '_' 1738s - decodes one int for a single format character 1738s - decodes two ints for two format characters 1738s - decodes the number of ints requested by the count modifier 1738s - decodes the remaining ints when passed the '*' modifier 1738s - decodes the remaining ints when passed the '*' modifier after another directive 1738s - does not decode an int when fewer bytes than an int remain and the '*' modifier is passed 1738s - adds nil for each element requested beyond the end of the String 1738s - ignores NULL bytes between directives 1738s - ignores spaces between directives 1738s - decodes an int with most significant bit set as a positive number 1738s 1738s String#unpack with format 'I' with modifier '!' 1738s - decodes one int for a single format character 1738s - decodes two ints for two format characters 1738s - decodes the number of ints requested by the count modifier 1738s - decodes the remaining ints when passed the '*' modifier 1738s - decodes the remaining ints when passed the '*' modifier after another directive 1738s - does not decode an int when fewer bytes than an int remain and the '*' modifier is passed 1738s - adds nil for each element requested beyond the end of the String 1738s - ignores NULL bytes between directives 1738s - ignores spaces between directives 1738s - decodes an int with most significant bit set as a positive number 1738s 1738s String#unpack with format 'i' 1738s - ignores whitespace in the format string 1738s - calls #to_str to coerce the directives string 1738s - decodes one int for a single format character 1738s - decodes two ints for two format characters 1738s - decodes the number of ints requested by the count modifier 1738s - decodes the remaining ints when passed the '*' modifier 1738s - decodes the remaining ints when passed the '*' modifier after another directive 1738s - does not decode an int when fewer bytes than an int remain and the '*' modifier is passed 1738s - adds nil for each element requested beyond the end of the String 1738s - ignores NULL bytes between directives 1738s - ignores spaces between directives 1738s - decodes an int with most significant bit set as a negative number 1738s 1738s String#unpack with format 'i' with modifier '_' 1738s - decodes one int for a single format character 1738s - decodes two ints for two format characters 1738s - decodes the number of ints requested by the count modifier 1738s - decodes the remaining ints when passed the '*' modifier 1738s - decodes the remaining ints when passed the '*' modifier after another directive 1738s - does not decode an int when fewer bytes than an int remain and the '*' modifier is passed 1738s - adds nil for each element requested beyond the end of the String 1738s - ignores NULL bytes between directives 1738s - ignores spaces between directives 1738s - decodes an int with most significant bit set as a negative number 1738s 1738s String#unpack with format 'i' with modifier '!' 1738s - decodes one int for a single format character 1738s - decodes two ints for two format characters 1738s - decodes the number of ints requested by the count modifier 1738s - decodes the remaining ints when passed the '*' modifier 1738s - decodes the remaining ints when passed the '*' modifier after another directive 1738s - does not decode an int when fewer bytes than an int remain and the '*' modifier is passed 1738s - adds nil for each element requested beyond the end of the String 1738s - ignores NULL bytes between directives 1738s - ignores spaces between directives 1738s - decodes an int with most significant bit set as a negative number 1738s 1738s String#unpack with format 'J' with modifier '_' 1738s - decodes one long for a single format character 1738s - decodes two longs for two format characters 1738s - decodes the number of longs requested by the count modifier 1738s - decodes the remaining longs when passed the '*' modifier 1738s - decodes the remaining longs when passed the '*' modifier after another directive 1738s - does not decode a long when fewer bytes than a long remain and the '*' modifier is passed 1738s - ignores NULL bytes between directives 1738s - ignores spaces between directives 1738s - decodes a long with most significant bit set as a positive number 1738s 1738s String#unpack with format 'J' with modifier '!' 1738s - decodes one long for a single format character 1738s - decodes two longs for two format characters 1738s - decodes the number of longs requested by the count modifier 1738s - decodes the remaining longs when passed the '*' modifier 1738s - decodes the remaining longs when passed the '*' modifier after another directive 1738s - does not decode a long when fewer bytes than a long remain and the '*' modifier is passed 1738s - ignores NULL bytes between directives 1738s - ignores spaces between directives 1738s - decodes a long with most significant bit set as a positive number 1738s 1738s String#unpack with format 'j' with modifier '_' 1738s - decodes one long for a single format character 1738s - decodes two longs for two format characters 1738s - decodes the number of longs requested by the count modifier 1738s - decodes the remaining longs when passed the '*' modifier 1738s - decodes the remaining longs when passed the '*' modifier after another directive 1738s - does not decode a long when fewer bytes than a long remain and the '*' modifier is passed 1738s - ignores NULL bytes between directives 1738s - ignores spaces between directives 1738s - decodes a long with most significant bit set as a negative number 1738s 1738s String#unpack with format 'j' with modifier '!' 1738s - decodes one long for a single format character 1738s - decodes two longs for two format characters 1738s - decodes the number of longs requested by the count modifier 1738s - decodes the remaining longs when passed the '*' modifier 1738s - decodes the remaining longs when passed the '*' modifier after another directive 1738s - does not decode a long when fewer bytes than a long remain and the '*' modifier is passed 1738s - ignores NULL bytes between directives 1738s - ignores spaces between directives 1738s - decodes a long with most significant bit set as a negative number 1738s 1738s String#unpack with format 'J' with modifier '<' 1738s - decodes one long for a single format character 1738s - decodes two longs for two format characters 1738s - decodes the number of longs requested by the count modifier 1738s - decodes the remaining longs when passed the '*' modifier 1738s - decodes the remaining longs when passed the '*' modifier after another directive 1738s - does not decode a long when fewer bytes than a long remain and the '*' modifier is passed 1738s - ignores NULL bytes between directives 1738s - ignores spaces between directives 1738s - decodes a long with most significant bit set as a positive number 1738s 1738s String#unpack with format 'J' with modifier '>' 1738s - decodes one long for a single format character 1738s - decodes two longs for two format characters 1738s - decodes the number of longs requested by the count modifier 1738s - decodes the remaining longs when passed the '*' modifier 1738s - decodes the remaining longs when passed the '*' modifier after another directive 1738s - does not decode a long when fewer bytes than a long remain and the '*' modifier is passed 1738s - ignores NULL bytes between directives 1738s - ignores spaces between directives 1738s - decodes a long with most significant bit set as a positive number 1738s 1738s String#unpack with format 'J' with modifier '<' and '_' 1738s - decodes one long for a single format character 1738s - decodes two longs for two format characters 1738s - decodes the number of longs requested by the count modifier 1738s - decodes the remaining longs when passed the '*' modifier 1738s - decodes the remaining longs when passed the '*' modifier after another directive 1738s - does not decode a long when fewer bytes than a long remain and the '*' modifier is passed 1738s - ignores NULL bytes between directives 1738s - ignores spaces between directives 1738s - decodes one long for a single format character 1738s - decodes two longs for two format characters 1738s - decodes the number of longs requested by the count modifier 1738s - decodes the remaining longs when passed the '*' modifier 1738s - decodes the remaining longs when passed the '*' modifier after another directive 1738s - does not decode a long when fewer bytes than a long remain and the '*' modifier is passed 1738s - ignores NULL bytes between directives 1738s - ignores spaces between directives 1738s - decodes a long with most significant bit set as a positive number 1738s - decodes a long with most significant bit set as a positive number 1738s 1738s String#unpack with format 'J' with modifier '<' and '!' 1738s - decodes one long for a single format character 1738s - decodes two longs for two format characters 1738s - decodes the number of longs requested by the count modifier 1738s - decodes the remaining longs when passed the '*' modifier 1738s - decodes the remaining longs when passed the '*' modifier after another directive 1738s - does not decode a long when fewer bytes than a long remain and the '*' modifier is passed 1738s - ignores NULL bytes between directives 1738s - ignores spaces between directives 1738s - decodes one long for a single format character 1738s - decodes two longs for two format characters 1738s - decodes the number of longs requested by the count modifier 1738s - decodes the remaining longs when passed the '*' modifier 1738s - decodes the remaining longs when passed the '*' modifier after another directive 1738s - does not decode a long when fewer bytes than a long remain and the '*' modifier is passed 1738s - ignores NULL bytes between directives 1738s - ignores spaces between directives 1738s - decodes a long with most significant bit set as a positive number 1738s - decodes a long with most significant bit set as a positive number 1738s 1738s String#unpack with format 'J' with modifier '>' and '_' 1738s - decodes one long for a single format character 1738s - decodes two longs for two format characters 1738s - decodes the number of longs requested by the count modifier 1738s - decodes the remaining longs when passed the '*' modifier 1738s - decodes the remaining longs when passed the '*' modifier after another directive 1738s - does not decode a long when fewer bytes than a long remain and the '*' modifier is passed 1738s - ignores NULL bytes between directives 1738s - ignores spaces between directives 1738s - decodes one long for a single format character 1738s - decodes two longs for two format characters 1738s - decodes the number of longs requested by the count modifier 1738s - decodes the remaining longs when passed the '*' modifier 1738s - decodes the remaining longs when passed the '*' modifier after another directive 1738s - does not decode a long when fewer bytes than a long remain and the '*' modifier is passed 1738s - ignores NULL bytes between directives 1738s - ignores spaces between directives 1738s - decodes a long with most significant bit set as a positive number 1738s - decodes a long with most significant bit set as a positive number 1738s 1738s String#unpack with format 'J' with modifier '>' and '!' 1738s - decodes one long for a single format character 1738s - decodes two longs for two format characters 1738s - decodes the number of longs requested by the count modifier 1738s - decodes the remaining longs when passed the '*' modifier 1738s - decodes the remaining longs when passed the '*' modifier after another directive 1738s - does not decode a long when fewer bytes than a long remain and the '*' modifier is passed 1738s - ignores NULL bytes between directives 1738s - ignores spaces between directives 1738s - decodes one long for a single format character 1738s - decodes two longs for two format characters 1738s - decodes the number of longs requested by the count modifier 1738s - decodes the remaining longs when passed the '*' modifier 1738s - decodes the remaining longs when passed the '*' modifier after another directive 1738s - does not decode a long when fewer bytes than a long remain and the '*' modifier is passed 1738s - ignores NULL bytes between directives 1738s - ignores spaces between directives 1738s - decodes a long with most significant bit set as a positive number 1738s - decodes a long with most significant bit set as a positive number 1738s 1738s String#unpack with format 'j' with modifier '<' 1738s - decodes one long for a single format character 1738s - decodes two longs for two format characters 1738s - decodes the number of longs requested by the count modifier 1738s - decodes the remaining longs when passed the '*' modifier 1738s - decodes the remaining longs when passed the '*' modifier after another directive 1738s - does not decode a long when fewer bytes than a long remain and the '*' modifier is passed 1738s - ignores NULL bytes between directives 1738s - ignores spaces between directives 1738s - decodes a long with most significant bit set as a negative number 1738s 1738s String#unpack with format 'j' with modifier '>' 1738s - decodes one long for a single format character 1738s - decodes two longs for two format characters 1738s - decodes the number of longs requested by the count modifier 1738s - decodes the remaining longs when passed the '*' modifier 1738s - decodes the remaining longs when passed the '*' modifier after another directive 1738s - does not decode a long when fewer bytes than a long remain and the '*' modifier is passed 1738s - ignores NULL bytes between directives 1738s - ignores spaces between directives 1738s - decodes a long with most significant bit set as a negative number 1738s 1738s String#unpack with format 'j' with modifier '<' and '_' 1738s - decodes one long for a single format character 1738s - decodes two longs for two format characters 1738s - decodes the number of longs requested by the count modifier 1738s - decodes the remaining longs when passed the '*' modifier 1738s - decodes the remaining longs when passed the '*' modifier after another directive 1738s - does not decode a long when fewer bytes than a long remain and the '*' modifier is passed 1738s - ignores NULL bytes between directives 1738s - ignores spaces between directives 1738s - decodes one long for a single format character 1738s - decodes two longs for two format characters 1738s - decodes the number of longs requested by the count modifier 1738s - decodes the remaining longs when passed the '*' modifier 1738s - decodes the remaining longs when passed the '*' modifier after another directive 1738s - does not decode a long when fewer bytes than a long remain and the '*' modifier is passed 1738s - ignores NULL bytes between directives 1738s - ignores spaces between directives 1738s - decodes a long with most significant bit set as a negative number 1738s - decodes a long with most significant bit set as a negative number 1738s 1738s String#unpack with format 'j' with modifier '<' and '!' 1738s - decodes one long for a single format character 1738s - decodes two longs for two format characters 1738s - decodes the number of longs requested by the count modifier 1738s - decodes the remaining longs when passed the '*' modifier 1738s - decodes the remaining longs when passed the '*' modifier after another directive 1738s - does not decode a long when fewer bytes than a long remain and the '*' modifier is passed 1738s - ignores NULL bytes between directives 1738s - ignores spaces between directives 1738s - decodes one long for a single format character 1738s - decodes two longs for two format characters 1738s - decodes the number of longs requested by the count modifier 1738s - decodes the remaining longs when passed the '*' modifier 1738s - decodes the remaining longs when passed the '*' modifier after another directive 1738s - does not decode a long when fewer bytes than a long remain and the '*' modifier is passed 1738s - ignores NULL bytes between directives 1738s - ignores spaces between directives 1738s - decodes a long with most significant bit set as a negative number 1738s - decodes a long with most significant bit set as a negative number 1738s 1738s String#unpack with format 'j' with modifier '>' and '_' 1738s - decodes one long for a single format character 1738s - decodes two longs for two format characters 1738s - decodes the number of longs requested by the count modifier 1738s - decodes the remaining longs when passed the '*' modifier 1738s - decodes the remaining longs when passed the '*' modifier after another directive 1738s - does not decode a long when fewer bytes than a long remain and the '*' modifier is passed 1738s - ignores NULL bytes between directives 1738s - ignores spaces between directives 1738s - decodes one long for a single format character 1738s - decodes two longs for two format characters 1738s - decodes the number of longs requested by the count modifier 1738s - decodes the remaining longs when passed the '*' modifier 1738s - decodes the remaining longs when passed the '*' modifier after another directive 1738s - does not decode a long when fewer bytes than a long remain and the '*' modifier is passed 1738s - ignores NULL bytes between directives 1738s - ignores spaces between directives 1738s - decodes a long with most significant bit set as a negative number 1738s - decodes a long with most significant bit set as a negative number 1738s 1738s String#unpack with format 'j' with modifier '>' and '!' 1738s - decodes one long for a single format character 1738s - decodes two longs for two format characters 1738s - decodes the number of longs requested by the count modifier 1738s - decodes the remaining longs when passed the '*' modifier 1738s - decodes the remaining longs when passed the '*' modifier after another directive 1738s - does not decode a long when fewer bytes than a long remain and the '*' modifier is passed 1738s - ignores NULL bytes between directives 1738s - ignores spaces between directives 1738s - decodes one long for a single format character 1738s - decodes two longs for two format characters 1738s - decodes the number of longs requested by the count modifier 1738s - decodes the remaining longs when passed the '*' modifier 1738s - decodes the remaining longs when passed the '*' modifier after another directive 1738s - does not decode a long when fewer bytes than a long remain and the '*' modifier is passed 1738s - ignores NULL bytes between directives 1738s - ignores spaces between directives 1738s - decodes a long with most significant bit set as a negative number 1738s - decodes a long with most significant bit set as a negative number 1738s 1738s String#unpack with format 'L' with modifier '<' 1738s - decodes one int for a single format character 1738s - decodes two ints for two format characters 1738s - decodes the number of ints requested by the count modifier 1738s - decodes the remaining ints when passed the '*' modifier 1738s - decodes the remaining ints when passed the '*' modifier after another directive 1738s - does not decode an int when fewer bytes than an int remain and the '*' modifier is passed 1738s - adds nil for each element requested beyond the end of the String 1738s - ignores NULL bytes between directives 1738s - ignores spaces between directives 1738s - decodes an int with most significant bit set as a positive number 1738s 1738s String#unpack with format 'L' with modifier '>' 1738s - decodes one int for a single format character 1738s - decodes two ints for two format characters 1738s - decodes the number of ints requested by the count modifier 1738s - decodes the remaining ints when passed the '*' modifier 1738s - decodes the remaining ints when passed the '*' modifier after another directive 1738s - does not decode an int when fewer bytes than an int remain and the '*' modifier is passed 1738s - adds nil for each element requested beyond the end of the String 1738s - ignores NULL bytes between directives 1738s - ignores spaces between directives 1738s - decodes an int with most significant bit set as a positive number 1738s 1738s String#unpack with format 'L' with modifier '<' and '_' 1738s - decodes one long for a single format character 1738s - decodes two longs for two format characters 1738s - decodes the number of longs requested by the count modifier 1738s - decodes the remaining longs when passed the '*' modifier 1738s - decodes the remaining longs when passed the '*' modifier after another directive 1738s - does not decode a long when fewer bytes than a long remain and the '*' modifier is passed 1738s - ignores NULL bytes between directives 1738s - ignores spaces between directives 1738s - decodes one long for a single format character 1738s - decodes two longs for two format characters 1738s - decodes the number of longs requested by the count modifier 1738s - decodes the remaining longs when passed the '*' modifier 1738s - decodes the remaining longs when passed the '*' modifier after another directive 1738s - does not decode a long when fewer bytes than a long remain and the '*' modifier is passed 1738s - ignores NULL bytes between directives 1738s - ignores spaces between directives 1738s - decodes a long with most significant bit set as a positive number 1738s - decodes a long with most significant bit set as a positive number 1738s 1738s String#unpack with format 'L' with modifier '<' and '!' 1738s - decodes one long for a single format character 1738s - decodes two longs for two format characters 1738s - decodes the number of longs requested by the count modifier 1738s - decodes the remaining longs when passed the '*' modifier 1738s - decodes the remaining longs when passed the '*' modifier after another directive 1738s - does not decode a long when fewer bytes than a long remain and the '*' modifier is passed 1738s - ignores NULL bytes between directives 1738s - ignores spaces between directives 1738s - decodes one long for a single format character 1738s - decodes two longs for two format characters 1738s - decodes the number of longs requested by the count modifier 1738s - decodes the remaining longs when passed the '*' modifier 1738s - decodes the remaining longs when passed the '*' modifier after another directive 1738s - does not decode a long when fewer bytes than a long remain and the '*' modifier is passed 1738s - ignores NULL bytes between directives 1738s - ignores spaces between directives 1738s - decodes a long with most significant bit set as a positive number 1738s - decodes a long with most significant bit set as a positive number 1738s 1738s String#unpack with format 'L' with modifier '>' and '_' 1738s - decodes one long for a single format character 1738s - decodes two longs for two format characters 1738s - decodes the number of longs requested by the count modifier 1738s - decodes the remaining longs when passed the '*' modifier 1738s - decodes the remaining longs when passed the '*' modifier after another directive 1738s - does not decode a long when fewer bytes than a long remain and the '*' modifier is passed 1738s - ignores NULL bytes between directives 1738s - ignores spaces between directives 1738s - decodes one long for a single format character 1738s - decodes two longs for two format characters 1738s - decodes the number of longs requested by the count modifier 1738s - decodes the remaining longs when passed the '*' modifier 1738s - decodes the remaining longs when passed the '*' modifier after another directive 1738s - does not decode a long when fewer bytes than a long remain and the '*' modifier is passed 1738s - ignores NULL bytes between directives 1738s - ignores spaces between directives 1738s - decodes a long with most significant bit set as a positive number 1738s - decodes a long with most significant bit set as a positive number 1738s 1738s String#unpack with format 'L' with modifier '>' and '!' 1738s - decodes one long for a single format character 1738s - decodes two longs for two format characters 1738s - decodes the number of longs requested by the count modifier 1738s - decodes the remaining longs when passed the '*' modifier 1738s - decodes the remaining longs when passed the '*' modifier after another directive 1738s - does not decode a long when fewer bytes than a long remain and the '*' modifier is passed 1738s - ignores NULL bytes between directives 1738s - ignores spaces between directives 1738s - decodes one long for a single format character 1738s - decodes two longs for two format characters 1738s - decodes the number of longs requested by the count modifier 1738s - decodes the remaining longs when passed the '*' modifier 1738s - decodes the remaining longs when passed the '*' modifier after another directive 1738s - does not decode a long when fewer bytes than a long remain and the '*' modifier is passed 1738s - ignores NULL bytes between directives 1738s - ignores spaces between directives 1738s - decodes a long with most significant bit set as a positive number 1738s - decodes a long with most significant bit set as a positive number 1738s 1738s String#unpack with format 'l' with modifier '<' 1738s - decodes one int for a single format character 1738s - decodes two ints for two format characters 1738s - decodes the number of ints requested by the count modifier 1738s - decodes the remaining ints when passed the '*' modifier 1738s - decodes the remaining ints when passed the '*' modifier after another directive 1738s - does not decode an int when fewer bytes than an int remain and the '*' modifier is passed 1738s - adds nil for each element requested beyond the end of the String 1738s - ignores NULL bytes between directives 1738s - ignores spaces between directives 1738s - decodes an int with most significant bit set as a negative number 1738s 1738s String#unpack with format 'l' with modifier '>' 1738s - decodes one int for a single format character 1738s - decodes two ints for two format characters 1738s - decodes the number of ints requested by the count modifier 1738s - decodes the remaining ints when passed the '*' modifier 1738s - decodes the remaining ints when passed the '*' modifier after another directive 1738s - does not decode an int when fewer bytes than an int remain and the '*' modifier is passed 1738s - adds nil for each element requested beyond the end of the String 1738s - ignores NULL bytes between directives 1738s - ignores spaces between directives 1738s - decodes an int with most significant bit set as a negative number 1738s 1738s String#unpack with format 'l' with modifier '<' and '_' 1738s - decodes one long for a single format character 1738s - decodes two longs for two format characters 1738s - decodes the number of longs requested by the count modifier 1738s - decodes the remaining longs when passed the '*' modifier 1738s - decodes the remaining longs when passed the '*' modifier after another directive 1738s - does not decode a long when fewer bytes than a long remain and the '*' modifier is passed 1738s - ignores NULL bytes between directives 1738s - ignores spaces between directives 1738s - decodes one long for a single format character 1738s - decodes two longs for two format characters 1738s - decodes the number of longs requested by the count modifier 1738s - decodes the remaining longs when passed the '*' modifier 1738s - decodes the remaining longs when passed the '*' modifier after another directive 1738s - does not decode a long when fewer bytes than a long remain and the '*' modifier is passed 1738s - ignores NULL bytes between directives 1738s - ignores spaces between directives 1738s - decodes a long with most significant bit set as a negative number 1738s - decodes a long with most significant bit set as a negative number 1738s 1738s String#unpack with format 'l' with modifier '<' and '!' 1738s - decodes one long for a single format character 1738s - decodes two longs for two format characters 1738s - decodes the number of longs requested by the count modifier 1738s - decodes the remaining longs when passed the '*' modifier 1738s - decodes the remaining longs when passed the '*' modifier after another directive 1738s - does not decode a long when fewer bytes than a long remain and the '*' modifier is passed 1738s - ignores NULL bytes between directives 1738s - ignores spaces between directives 1738s - decodes one long for a single format character 1738s - decodes two longs for two format characters 1738s - decodes the number of longs requested by the count modifier 1738s - decodes the remaining longs when passed the '*' modifier 1738s - decodes the remaining longs when passed the '*' modifier after another directive 1738s - does not decode a long when fewer bytes than a long remain and the '*' modifier is passed 1738s - ignores NULL bytes between directives 1738s - ignores spaces between directives 1738s - decodes a long with most significant bit set as a negative number 1738s - decodes a long with most significant bit set as a negative number 1738s 1738s String#unpack with format 'l' with modifier '>' and '_' 1738s - decodes one long for a single format character 1738s - decodes two longs for two format characters 1738s - decodes the number of longs requested by the count modifier 1738s - decodes the remaining longs when passed the '*' modifier 1738s - decodes the remaining longs when passed the '*' modifier after another directive 1738s - does not decode a long when fewer bytes than a long remain and the '*' modifier is passed 1738s - ignores NULL bytes between directives 1738s - ignores spaces between directives 1738s - decodes one long for a single format character 1738s - decodes two longs for two format characters 1738s - decodes the number of longs requested by the count modifier 1738s - decodes the remaining longs when passed the '*' modifier 1738s - decodes the remaining longs when passed the '*' modifier after another directive 1738s - does not decode a long when fewer bytes than a long remain and the '*' modifier is passed 1738s - ignores NULL bytes between directives 1738s - ignores spaces between directives 1738s - decodes a long with most significant bit set as a negative number 1738s - decodes a long with most significant bit set as a negative number 1738s 1738s String#unpack with format 'l' with modifier '>' and '!' 1738s - decodes one long for a single format character 1738s - decodes two longs for two format characters 1738s - decodes the number of longs requested by the count modifier 1738s - decodes the remaining longs when passed the '*' modifier 1738s - decodes the remaining longs when passed the '*' modifier after another directive 1738s - does not decode a long when fewer bytes than a long remain and the '*' modifier is passed 1738s - ignores NULL bytes between directives 1738s - ignores spaces between directives 1738s - decodes one long for a single format character 1738s - decodes two longs for two format characters 1738s - decodes the number of longs requested by the count modifier 1738s - decodes the remaining longs when passed the '*' modifier 1738s - decodes the remaining longs when passed the '*' modifier after another directive 1738s - does not decode a long when fewer bytes than a long remain and the '*' modifier is passed 1738s - ignores NULL bytes between directives 1738s - ignores spaces between directives 1738s - decodes a long with most significant bit set as a negative number 1738s - decodes a long with most significant bit set as a negative number 1738s 1738s String#unpack with format 'L' 1738s - ignores whitespace in the format string 1738s - calls #to_str to coerce the directives string 1738s - decodes one int for a single format character 1738s - decodes two ints for two format characters 1738s - decodes the number of ints requested by the count modifier 1738s - decodes the remaining ints when passed the '*' modifier 1738s - decodes the remaining ints when passed the '*' modifier after another directive 1738s - does not decode an int when fewer bytes than an int remain and the '*' modifier is passed 1738s - adds nil for each element requested beyond the end of the String 1738s - ignores NULL bytes between directives 1738s - ignores spaces between directives 1738s - decodes an int with most significant bit set as a positive number 1738s 1738s String#unpack with format 'l' 1738s - ignores whitespace in the format string 1738s - calls #to_str to coerce the directives string 1738s - decodes one int for a single format character 1738s - decodes two ints for two format characters 1738s - decodes the number of ints requested by the count modifier 1738s - decodes the remaining ints when passed the '*' modifier 1738s - decodes the remaining ints when passed the '*' modifier after another directive 1738s - does not decode an int when fewer bytes than an int remain and the '*' modifier is passed 1738s - adds nil for each element requested beyond the end of the String 1738s - ignores NULL bytes between directives 1738s - ignores spaces between directives 1738s - decodes an int with most significant bit set as a negative number 1738s 1738s String#unpack with format 'L' with modifier '_' 1738s - decodes one long for a single format character 1738s - decodes two longs for two format characters 1738s - decodes the number of longs requested by the count modifier 1738s - decodes the remaining longs when passed the '*' modifier 1738s - decodes the remaining longs when passed the '*' modifier after another directive 1738s - does not decode a long when fewer bytes than a long remain and the '*' modifier is passed 1738s - ignores NULL bytes between directives 1738s - ignores spaces between directives 1738s - decodes a long with most significant bit set as a positive number 1738s 1738s String#unpack with format 'L' with modifier '!' 1738s - decodes one long for a single format character 1738s - decodes two longs for two format characters 1738s - decodes the number of longs requested by the count modifier 1738s - decodes the remaining longs when passed the '*' modifier 1738s - decodes the remaining longs when passed the '*' modifier after another directive 1738s - does not decode a long when fewer bytes than a long remain and the '*' modifier is passed 1738s - ignores NULL bytes between directives 1738s - ignores spaces between directives 1738s - decodes a long with most significant bit set as a positive number 1738s 1738s String#unpack with format 'l' with modifier '_' 1738s - decodes one long for a single format character 1738s - decodes two longs for two format characters 1738s - decodes the number of longs requested by the count modifier 1738s - decodes the remaining longs when passed the '*' modifier 1738s - decodes the remaining longs when passed the '*' modifier after another directive 1738s - does not decode a long when fewer bytes than a long remain and the '*' modifier is passed 1738s - ignores NULL bytes between directives 1738s - ignores spaces between directives 1738s - decodes a long with most significant bit set as a negative number 1738s 1738s String#unpack with format 'l' with modifier '!' 1738s - decodes one long for a single format character 1738s - decodes two longs for two format characters 1738s - decodes the number of longs requested by the count modifier 1738s - decodes the remaining longs when passed the '*' modifier 1738s - decodes the remaining longs when passed the '*' modifier after another directive 1738s - does not decode a long when fewer bytes than a long remain and the '*' modifier is passed 1738s - ignores NULL bytes between directives 1738s - ignores spaces between directives 1738s - decodes a long with most significant bit set as a negative number 1738s 1738s String#unpack with format 'M' 1738s - ignores whitespace in the format string 1738s - calls #to_str to coerce the directives string 1738s - raises an ArgumentError when the format modifier is '_' 1738s - raises an ArgumentError when the format modifier is '!' 1738s - decodes an empty string 1738s - decodes the complete string ignoring newlines when given a single directive 1738s - appends empty string to the array for directives exceeding the input size 1738s - ignores the count or '*' modifier and decodes the entire string 1738s - decodes the '=' character 1738s - decodes an embedded space character 1738s - decodes a space at the end of the pre-encoded string 1738s - decodes an embedded tab character 1738s - decodes a tab character at the end of the pre-encoded string 1738s - decodes an embedded newline 1738s - decodes pre-encoded byte values 33..60 1738s - decodes pre-encoded byte values 62..126 1738s - decodes pre-encoded byte values 0..31 except tab and newline 1738s - decodes pre-encoded byte values 127..255 1738s 1738s String#unpack with format 'm' 1738s - ignores whitespace in the format string 1738s - calls #to_str to coerce the directives string 1738s - raises an ArgumentError when the format modifier is '_' 1738s - raises an ArgumentError when the format modifier is '!' 1738s - decodes an empty string 1738s - decodes the complete string ignoring newlines when given a single directive 1738s - ignores the count or '*' modifier and decodes the entire string 1738s - appends empty string to the array for directives exceeding the input size 1738s - decodes all pre-encoded ascii byte values 1738s - produces binary strings 1738s - does not raise an error for an invalid base64 character 1738s 1738s String#unpack with format 'm' when given count 0 1738s - decodes base64 1738s - raises an ArgumentError for an invalid base64 character 1738s 1738s String#unpack with format 'N' 1738s - ignores whitespace in the format string 1738s - calls #to_str to coerce the directives string 1738s - decodes one int for a single format character 1738s - decodes two ints for two format characters 1738s - decodes the number of ints requested by the count modifier 1738s - decodes the remaining ints when passed the '*' modifier 1738s - decodes the remaining ints when passed the '*' modifier after another directive 1738s - does not decode an int when fewer bytes than an int remain and the '*' modifier is passed 1738s - adds nil for each element requested beyond the end of the String 1738s - ignores NULL bytes between directives 1738s - ignores spaces between directives 1738s - decodes an int with most significant bit set as a positive number 1738s - raises an ArgumentError when the format modifier is '_' 1738s - raises an ArgumentError when the format modifier is '!' 1738s 1738s String#unpack with format 'n' 1738s - ignores whitespace in the format string 1738s - calls #to_str to coerce the directives string 1738s - decodes one short for a single format character 1738s - decodes two shorts for two format characters 1738s - decodes the number of shorts requested by the count modifier 1738s - decodes the remaining shorts when passed the '*' modifier 1738s - decodes the remaining shorts when passed the '*' modifier after another directive 1738s - does not decode a short when fewer bytes than a short remain and the '*' modifier is passed 1738s - adds nil for each element requested beyond the end of the String 1738s - ignores NULL bytes between directives 1738s - ignores spaces between directives 1738s - decodes a short with most significant bit set as a positive number 1738s - raises an ArgumentError when the format modifier is '_' 1738s - raises an ArgumentError when the format modifier is '!' 1738s 1738s String#unpack with format 'P' 1738s - ignores whitespace in the format string 1738s - calls #to_str to coerce the directives string 1738s 1738s String#unpack with format 'p' 1738s - ignores whitespace in the format string 1738s - calls #to_str to coerce the directives string 1738s 1738s String#unpack with format '%' 1738s - raises an Argument Error 1738s 1738s String#unpack with format 'Q' with modifier '<' 1738s - decodes one long for a single format character 1738s - decodes two longs for two format characters 1738s - decodes the number of longs requested by the count modifier 1738s - decodes the remaining longs when passed the '*' modifier 1738s - decodes the remaining longs when passed the '*' modifier after another directive 1738s - does not decode a long when fewer bytes than a long remain and the '*' modifier is passed 1738s - ignores NULL bytes between directives 1738s - ignores spaces between directives 1738s - decodes a long with most significant bit set as a positive number 1738s 1738s String#unpack with format 'Q' with modifier '>' 1738s - decodes one long for a single format character 1738s - decodes two longs for two format characters 1738s - decodes the number of longs requested by the count modifier 1738s - decodes the remaining longs when passed the '*' modifier 1738s - decodes the remaining longs when passed the '*' modifier after another directive 1738s - does not decode a long when fewer bytes than a long remain and the '*' modifier is passed 1738s - ignores NULL bytes between directives 1738s - ignores spaces between directives 1738s - decodes a long with most significant bit set as a positive number 1738s 1738s String#unpack with format 'q' with modifier '<' 1738s - decodes one long for a single format character 1738s - decodes two longs for two format characters 1738s - decodes the number of longs requested by the count modifier 1738s - decodes the remaining longs when passed the '*' modifier 1738s - decodes the remaining longs when passed the '*' modifier after another directive 1738s - does not decode a long when fewer bytes than a long remain and the '*' modifier is passed 1738s - ignores NULL bytes between directives 1738s - ignores spaces between directives 1738s - decodes a long with most significant bit set as a negative number 1738s 1738s String#unpack with format 'q' with modifier '>' 1738s - decodes one long for a single format character 1738s - decodes two longs for two format characters 1738s - decodes the number of longs requested by the count modifier 1738s - decodes the remaining longs when passed the '*' modifier 1738s - decodes the remaining longs when passed the '*' modifier after another directive 1738s - does not decode a long when fewer bytes than a long remain and the '*' modifier is passed 1738s - ignores NULL bytes between directives 1738s - ignores spaces between directives 1738s - decodes a long with most significant bit set as a negative number 1738s 1738s String#unpack with format 'Q' 1738s - ignores whitespace in the format string 1738s - calls #to_str to coerce the directives string 1738s 1738s String#unpack with format 'q' 1738s - ignores whitespace in the format string 1738s - calls #to_str to coerce the directives string 1738s 1738s String#unpack with format 'Q' 1738s - decodes one long for a single format character 1738s - decodes two longs for two format characters 1738s - decodes the number of longs requested by the count modifier 1738s - decodes the remaining longs when passed the '*' modifier 1738s - decodes the remaining longs when passed the '*' modifier after another directive 1738s - does not decode a long when fewer bytes than a long remain and the '*' modifier is passed 1738s - ignores NULL bytes between directives 1738s - ignores spaces between directives 1738s - adds nil for each element requested beyond the end of the String 1738s - decodes a long with most significant bit set as a positive number 1738s 1738s String#unpack with format 'q' 1738s - decodes one long for a single format character 1738s - decodes two longs for two format characters 1738s - decodes the number of longs requested by the count modifier 1738s - decodes the remaining longs when passed the '*' modifier 1738s - decodes the remaining longs when passed the '*' modifier after another directive 1738s - does not decode a long when fewer bytes than a long remain and the '*' modifier is passed 1738s - ignores NULL bytes between directives 1738s - ignores spaces between directives 1738s - adds nil for each element requested beyond the end of the String 1738s - decodes a long with most significant bit set as a negative number 1738s 1738s String#unpack with format 'S' with modifier '<' 1738s - decodes one short for a single format character 1738s - decodes two shorts for two format characters 1738s - decodes the number of shorts requested by the count modifier 1738s - decodes the remaining shorts when passed the '*' modifier 1738s - decodes the remaining shorts when passed the '*' modifier after another directive 1738s - does not decode a short when fewer bytes than a short remain and the '*' modifier is passed 1738s - adds nil for each element requested beyond the end of the String 1738s - ignores NULL bytes between directives 1738s - ignores spaces between directives 1738s - decodes a short with most significant bit set as a positive number 1738s 1738s String#unpack with format 'S' with modifier '<' and '_' 1738s - decodes one short for a single format character 1738s - decodes two shorts for two format characters 1738s - decodes the number of shorts requested by the count modifier 1738s - decodes the remaining shorts when passed the '*' modifier 1738s - decodes the remaining shorts when passed the '*' modifier after another directive 1738s - does not decode a short when fewer bytes than a short remain and the '*' modifier is passed 1738s - adds nil for each element requested beyond the end of the String 1738s - ignores NULL bytes between directives 1738s - ignores spaces between directives 1738s - decodes one short for a single format character 1738s - decodes two shorts for two format characters 1738s - decodes the number of shorts requested by the count modifier 1738s - decodes the remaining shorts when passed the '*' modifier 1738s - decodes the remaining shorts when passed the '*' modifier after another directive 1738s - does not decode a short when fewer bytes than a short remain and the '*' modifier is passed 1738s - adds nil for each element requested beyond the end of the String 1738s - ignores NULL bytes between directives 1738s - ignores spaces between directives 1738s - decodes a short with most significant bit set as a positive number 1738s - decodes a short with most significant bit set as a positive number 1738s 1738s String#unpack with format 'S' with modifier '<' and '!' 1738s - decodes one short for a single format character 1738s - decodes two shorts for two format characters 1738s - decodes the number of shorts requested by the count modifier 1738s - decodes the remaining shorts when passed the '*' modifier 1738s - decodes the remaining shorts when passed the '*' modifier after another directive 1738s - does not decode a short when fewer bytes than a short remain and the '*' modifier is passed 1738s - adds nil for each element requested beyond the end of the String 1738s - ignores NULL bytes between directives 1738s - ignores spaces between directives 1738s - decodes one short for a single format character 1738s - decodes two shorts for two format characters 1738s - decodes the number of shorts requested by the count modifier 1738s - decodes the remaining shorts when passed the '*' modifier 1738s - decodes the remaining shorts when passed the '*' modifier after another directive 1738s - does not decode a short when fewer bytes than a short remain and the '*' modifier is passed 1738s - adds nil for each element requested beyond the end of the String 1738s - ignores NULL bytes between directives 1738s - ignores spaces between directives 1738s - decodes a short with most significant bit set as a positive number 1738s - decodes a short with most significant bit set as a positive number 1738s 1738s String#unpack with format 'S' with modifier '>' 1738s - decodes one short for a single format character 1738s - decodes two shorts for two format characters 1738s - decodes the number of shorts requested by the count modifier 1738s - decodes the remaining shorts when passed the '*' modifier 1738s - decodes the remaining shorts when passed the '*' modifier after another directive 1738s - does not decode a short when fewer bytes than a short remain and the '*' modifier is passed 1738s - adds nil for each element requested beyond the end of the String 1738s - ignores NULL bytes between directives 1738s - ignores spaces between directives 1738s - decodes a short with most significant bit set as a positive number 1738s 1738s String#unpack with format 'S' with modifier '>' and '_' 1738s - decodes one short for a single format character 1738s - decodes two shorts for two format characters 1738s - decodes the number of shorts requested by the count modifier 1738s - decodes the remaining shorts when passed the '*' modifier 1738s - decodes the remaining shorts when passed the '*' modifier after another directive 1738s - does not decode a short when fewer bytes than a short remain and the '*' modifier is passed 1738s - adds nil for each element requested beyond the end of the String 1738s - ignores NULL bytes between directives 1738s - ignores spaces between directives 1738s - decodes one short for a single format character 1738s - decodes two shorts for two format characters 1738s - decodes the number of shorts requested by the count modifier 1738s - decodes the remaining shorts when passed the '*' modifier 1738s - decodes the remaining shorts when passed the '*' modifier after another directive 1738s - does not decode a short when fewer bytes than a short remain and the '*' modifier is passed 1738s - adds nil for each element requested beyond the end of the String 1738s - ignores NULL bytes between directives 1738s - ignores spaces between directives 1738s - decodes a short with most significant bit set as a positive number 1738s - decodes a short with most significant bit set as a positive number 1738s 1738s String#unpack with format 'S' with modifier '>' and '!' 1738s - decodes one short for a single format character 1738s - decodes two shorts for two format characters 1738s - decodes the number of shorts requested by the count modifier 1738s - decodes the remaining shorts when passed the '*' modifier 1738s - decodes the remaining shorts when passed the '*' modifier after another directive 1738s - does not decode a short when fewer bytes than a short remain and the '*' modifier is passed 1738s - adds nil for each element requested beyond the end of the String 1738s - ignores NULL bytes between directives 1738s - ignores spaces between directives 1738s - decodes one short for a single format character 1738s - decodes two shorts for two format characters 1738s - decodes the number of shorts requested by the count modifier 1738s - decodes the remaining shorts when passed the '*' modifier 1738s - decodes the remaining shorts when passed the '*' modifier after another directive 1738s - does not decode a short when fewer bytes than a short remain and the '*' modifier is passed 1738s - adds nil for each element requested beyond the end of the String 1738s - ignores NULL bytes between directives 1738s - ignores spaces between directives 1738s - decodes a short with most significant bit set as a positive number 1738s - decodes a short with most significant bit set as a positive number 1738s 1738s String#unpack with format 's' with modifier '<' 1738s - decodes one short for a single format character 1738s - decodes two shorts for two format characters 1738s - decodes the number of shorts requested by the count modifier 1738s - decodes the remaining shorts when passed the '*' modifier 1738s - decodes the remaining shorts when passed the '*' modifier after another directive 1738s - does not decode a short when fewer bytes than a short remain and the '*' modifier is passed 1738s - adds nil for each element requested beyond the end of the String 1738s - ignores NULL bytes between directives 1738s - ignores spaces between directives 1738s - decodes a short with most significant bit set as a negative number 1738s 1738s String#unpack with format 's' with modifier '<' and '_' 1738s - decodes one short for a single format character 1738s - decodes two shorts for two format characters 1738s - decodes the number of shorts requested by the count modifier 1738s - decodes the remaining shorts when passed the '*' modifier 1738s - decodes the remaining shorts when passed the '*' modifier after another directive 1738s - does not decode a short when fewer bytes than a short remain and the '*' modifier is passed 1738s - adds nil for each element requested beyond the end of the String 1738s - ignores NULL bytes between directives 1738s - ignores spaces between directives 1738s - decodes one short for a single format character 1738s - decodes two shorts for two format characters 1738s - decodes the number of shorts requested by the count modifier 1738s - decodes the remaining shorts when passed the '*' modifier 1738s - decodes the remaining shorts when passed the '*' modifier after another directive 1738s - does not decode a short when fewer bytes than a short remain and the '*' modifier is passed 1738s - adds nil for each element requested beyond the end of the String 1738s - ignores NULL bytes between directives 1738s - ignores spaces between directives 1738s - decodes a short with most significant bit set as a negative number 1738s - decodes a short with most significant bit set as a negative number 1738s 1738s String#unpack with format 's' with modifier '<' and '!' 1738s - decodes one short for a single format character 1738s - decodes two shorts for two format characters 1738s - decodes the number of shorts requested by the count modifier 1738s - decodes the remaining shorts when passed the '*' modifier 1738s - decodes the remaining shorts when passed the '*' modifier after another directive 1738s - does not decode a short when fewer bytes than a short remain and the '*' modifier is passed 1738s - adds nil for each element requested beyond the end of the String 1738s - ignores NULL bytes between directives 1738s - ignores spaces between directives 1738s - decodes one short for a single format character 1738s - decodes two shorts for two format characters 1738s - decodes the number of shorts requested by the count modifier 1738s - decodes the remaining shorts when passed the '*' modifier 1738s - decodes the remaining shorts when passed the '*' modifier after another directive 1738s - does not decode a short when fewer bytes than a short remain and the '*' modifier is passed 1738s - adds nil for each element requested beyond the end of the String 1738s - ignores NULL bytes between directives 1738s - ignores spaces between directives 1738s - decodes a short with most significant bit set as a negative number 1738s - decodes a short with most significant bit set as a negative number 1738s 1738s String#unpack with format 's' with modifier '>' 1738s - decodes one short for a single format character 1738s - decodes two shorts for two format characters 1738s - decodes the number of shorts requested by the count modifier 1738s - decodes the remaining shorts when passed the '*' modifier 1738s - decodes the remaining shorts when passed the '*' modifier after another directive 1738s - does not decode a short when fewer bytes than a short remain and the '*' modifier is passed 1738s - adds nil for each element requested beyond the end of the String 1738s - ignores NULL bytes between directives 1738s - ignores spaces between directives 1738s - decodes a short with most significant bit set as a negative number 1738s 1738s String#unpack with format 's' with modifier '>' and '_' 1738s - decodes one short for a single format character 1738s - decodes two shorts for two format characters 1738s - decodes the number of shorts requested by the count modifier 1738s - decodes the remaining shorts when passed the '*' modifier 1738s - decodes the remaining shorts when passed the '*' modifier after another directive 1738s - does not decode a short when fewer bytes than a short remain and the '*' modifier is passed 1738s - adds nil for each element requested beyond the end of the String 1738s - ignores NULL bytes between directives 1738s - ignores spaces between directives 1738s - decodes one short for a single format character 1738s - decodes two shorts for two format characters 1738s - decodes the number of shorts requested by the count modifier 1738s - decodes the remaining shorts when passed the '*' modifier 1738s - decodes the remaining shorts when passed the '*' modifier after another directive 1738s - does not decode a short when fewer bytes than a short remain and the '*' modifier is passed 1738s - adds nil for each element requested beyond the end of the String 1738s - ignores NULL bytes between directives 1738s - ignores spaces between directives 1738s - decodes a short with most significant bit set as a negative number 1738s - decodes a short with most significant bit set as a negative number 1738s 1738s String#unpack with format 's' with modifier '>' and '!' 1738s - decodes one short for a single format character 1738s - decodes two shorts for two format characters 1738s - decodes the number of shorts requested by the count modifier 1738s - decodes the remaining shorts when passed the '*' modifier 1738s - decodes the remaining shorts when passed the '*' modifier after another directive 1738s - does not decode a short when fewer bytes than a short remain and the '*' modifier is passed 1738s - adds nil for each element requested beyond the end of the String 1738s - ignores NULL bytes between directives 1738s - ignores spaces between directives 1738s - decodes one short for a single format character 1738s - decodes two shorts for two format characters 1738s - decodes the number of shorts requested by the count modifier 1738s - decodes the remaining shorts when passed the '*' modifier 1738s - decodes the remaining shorts when passed the '*' modifier after another directive 1738s - does not decode a short when fewer bytes than a short remain and the '*' modifier is passed 1738s - adds nil for each element requested beyond the end of the String 1738s - ignores NULL bytes between directives 1738s - ignores spaces between directives 1738s - decodes a short with most significant bit set as a negative number 1738s - decodes a short with most significant bit set as a negative number 1738s 1738s String#unpack with format 'S' 1738s - ignores whitespace in the format string 1738s - calls #to_str to coerce the directives string 1738s - decodes one short for a single format character 1738s - decodes two shorts for two format characters 1738s - decodes the number of shorts requested by the count modifier 1738s - decodes the remaining shorts when passed the '*' modifier 1738s - decodes the remaining shorts when passed the '*' modifier after another directive 1738s - does not decode a short when fewer bytes than a short remain and the '*' modifier is passed 1738s - adds nil for each element requested beyond the end of the String 1738s - ignores NULL bytes between directives 1738s - ignores spaces between directives 1738s - decodes a short with most significant bit set as a positive number 1738s 1738s String#unpack with format 'S' with modifier '_' 1738s - decodes one short for a single format character 1738s - decodes two shorts for two format characters 1738s - decodes the number of shorts requested by the count modifier 1738s - decodes the remaining shorts when passed the '*' modifier 1738s - decodes the remaining shorts when passed the '*' modifier after another directive 1738s - does not decode a short when fewer bytes than a short remain and the '*' modifier is passed 1738s - adds nil for each element requested beyond the end of the String 1738s - ignores NULL bytes between directives 1738s - ignores spaces between directives 1738s - decodes a short with most significant bit set as a positive number 1738s 1738s String#unpack with format 'S' with modifier '!' 1738s - decodes one short for a single format character 1738s - decodes two shorts for two format characters 1738s - decodes the number of shorts requested by the count modifier 1738s - decodes the remaining shorts when passed the '*' modifier 1738s - decodes the remaining shorts when passed the '*' modifier after another directive 1738s - does not decode a short when fewer bytes than a short remain and the '*' modifier is passed 1738s - adds nil for each element requested beyond the end of the String 1738s - ignores NULL bytes between directives 1738s - ignores spaces between directives 1738s - decodes a short with most significant bit set as a positive number 1738s 1738s String#unpack with format 's' 1738s - ignores whitespace in the format string 1738s - calls #to_str to coerce the directives string 1738s - decodes one short for a single format character 1738s - decodes two shorts for two format characters 1738s - decodes the number of shorts requested by the count modifier 1738s - decodes the remaining shorts when passed the '*' modifier 1738s - decodes the remaining shorts when passed the '*' modifier after another directive 1738s - does not decode a short when fewer bytes than a short remain and the '*' modifier is passed 1738s - adds nil for each element requested beyond the end of the String 1738s - ignores NULL bytes between directives 1738s - ignores spaces between directives 1738s - decodes a short with most significant bit set as a negative number 1738s 1738s String#unpack with format 's' with modifier '_' 1738s - decodes one short for a single format character 1738s - decodes two shorts for two format characters 1738s - decodes the number of shorts requested by the count modifier 1738s - decodes the remaining shorts when passed the '*' modifier 1738s - decodes the remaining shorts when passed the '*' modifier after another directive 1738s - does not decode a short when fewer bytes than a short remain and the '*' modifier is passed 1738s - adds nil for each element requested beyond the end of the String 1738s - ignores NULL bytes between directives 1738s - ignores spaces between directives 1738s - decodes a short with most significant bit set as a negative number 1738s 1738s String#unpack with format 's' with modifier '!' 1738s - decodes one short for a single format character 1738s - decodes two shorts for two format characters 1738s - decodes the number of shorts requested by the count modifier 1738s - decodes the remaining shorts when passed the '*' modifier 1738s - decodes the remaining shorts when passed the '*' modifier after another directive 1738s - does not decode a short when fewer bytes than a short remain and the '*' modifier is passed 1738s - adds nil for each element requested beyond the end of the String 1738s - ignores NULL bytes between directives 1738s - ignores spaces between directives 1738s - decodes a short with most significant bit set as a negative number 1738s 1738s String#unpack with format 'U' 1738s - ignores whitespace in the format string 1738s - calls #to_str to coerce the directives string 1738s - raises an ArgumentError when the format modifier is '_' 1738s - raises an ArgumentError when the format modifier is '!' 1738s - decodes Unicode codepoints as ASCII values 1738s - decodes the number of characters specified by the count modifier 1738s - implicitly has a count of one when no count modifier is passed 1738s - decodes all remaining characters when passed the '*' modifier 1738s - decodes UTF-8 BMP codepoints 1738s - decodes UTF-8 max codepoints 1738s - does not decode any items for directives exceeding the input string size 1738s - ignores NULL bytes between directives 1738s - ignores spaces between directives 1738s - raises ArgumentError on a malformed byte sequence 1738s - raises ArgumentError on a malformed byte sequence and doesn't continue when used with the * modifier 1738s 1738s String#unpack with format 'u' 1738s - ignores whitespace in the format string 1738s - calls #to_str to coerce the directives string 1738s - raises an ArgumentError when the format modifier is '_' 1738s - raises an ArgumentError when the format modifier is '!' 1738s - decodes an empty string as an empty string 1738s - decodes into raw (ascii) string values 1738s - decodes the complete string ignoring newlines when given a single directive 1738s - appends empty string to the array for directives exceeding the input size 1738s - ignores the count or '*' modifier and decodes the entire string 1738s - decodes all ascii characters 1738s 1738s String#unpack with format 'V' 1738s - ignores whitespace in the format string 1738s - calls #to_str to coerce the directives string 1738s - decodes one int for a single format character 1738s - decodes two ints for two format characters 1738s - decodes the number of ints requested by the count modifier 1738s - decodes the remaining ints when passed the '*' modifier 1738s - decodes the remaining ints when passed the '*' modifier after another directive 1738s - does not decode an int when fewer bytes than an int remain and the '*' modifier is passed 1738s - adds nil for each element requested beyond the end of the String 1738s - ignores NULL bytes between directives 1738s - ignores spaces between directives 1738s - decodes an int with most significant bit set as a positive number 1738s - raises an ArgumentError when the format modifier is '_' 1738s - raises an ArgumentError when the format modifier is '!' 1738s 1738s String#unpack with format 'v' 1738s - ignores whitespace in the format string 1738s - calls #to_str to coerce the directives string 1738s - decodes one short for a single format character 1738s - decodes two shorts for two format characters 1738s - decodes the number of shorts requested by the count modifier 1738s - decodes the remaining shorts when passed the '*' modifier 1738s - decodes the remaining shorts when passed the '*' modifier after another directive 1738s - does not decode a short when fewer bytes than a short remain and the '*' modifier is passed 1738s - adds nil for each element requested beyond the end of the String 1738s - ignores NULL bytes between directives 1738s - ignores spaces between directives 1738s - decodes a short with most significant bit set as a positive number 1738s - raises an ArgumentError when the format modifier is '_' 1738s - raises an ArgumentError when the format modifier is '!' 1738s 1738s String#unpack with directive 'w' 1738s - ignores whitespace in the format string 1738s - calls #to_str to coerce the directives string 1738s - raises an ArgumentError when the format modifier is '_' 1738s - raises an ArgumentError when the format modifier is '!' 1738s - decodes a BER-compressed integer 1738s - ignores NULL bytes between directives 1738s - ignores spaces between directives 1738s 1738s String#unpack with directive 'w*' 1738s - decodes BER-compressed integers 1738s 1738s String#unpack with format 'X' 1738s - ignores whitespace in the format string 1738s - calls #to_str to coerce the directives string 1738s - raises an ArgumentError when the format modifier is '_' 1738s - raises an ArgumentError when the format modifier is '!' 1738s - moves the read index back by the number of bytes specified by count 1738s - does not change the read index when passed a count of zero 1738s - implicitly has a count of one when count is not specified 1738s - moves the read index back by the remaining bytes when passed the '*' modifier 1738s - raises an ArgumentError when passed the '*' modifier if the remaining bytes exceed the bytes from the index to the start of the String 1738s - raises an ArgumentError if the count exceeds the bytes from current index to the start of the String 1738s 1738s String#unpack with format 'x' 1738s - ignores whitespace in the format string 1738s - calls #to_str to coerce the directives string 1738s - raises an ArgumentError when the format modifier is '_' 1738s - raises an ArgumentError when the format modifier is '!' 1738s - moves the read index forward by the number of bytes specified by count 1738s - implicitly has a count of one when count is not specified 1738s - does not change the read index when passed a count of zero 1738s - moves the read index to the end of the string when passed the '*' modifier 1738s - positions the read index one beyond the last readable byte in the String 1738s - raises an ArgumentError if the count exceeds the size of the String 1738s 1738s String#unpack with format 'Z' 1738s - ignores whitespace in the format string 1738s - calls #to_str to coerce the directives string 1738s - raises an ArgumentError when the format modifier is '_' 1738s - raises an ArgumentError when the format modifier is '!' 1738s - returns an empty string if the input is empty 1738s - returns empty strings for repeated formats if the input is empty 1738s - returns an empty string and does not decode any bytes when the count modifier is zero 1738s - implicitly has a count of one when no count is specified 1738s - decodes the number of bytes specified by the count modifier 1738s - decodes the number of bytes specified by the count modifier including whitespace bytes 1738s - decodes past whitespace bytes when passed the '*' modifier 1738s - stops decoding at NULL bytes when passed the '*' modifier 1738s - decodes the number of bytes specified by the count modifier and truncates the decoded string at the first NULL byte 1738s - does not advance past the null byte when given a 'Z' format specifier 1738s 1738s String#unpack1 1738s - returns the first value of #unpack 1738s - starts unpacking from the given offset 1738s - traits offset as a bytes offset 1738s - raises an ArgumentError when the offset is negative 1738s - returns nil if the offset is at the end of the string 1738s - raises an ArgumentError when the offset is larger than the string bytesize 1738s 1738s String#unpack 1738s - raises a TypeError when passed nil 1738s - raises a TypeError when passed an Integer 1738s - starts unpacking from the given offset 1738s - traits offset as a bytes offset 1738s - raises an ArgumentError when the offset is negative 1738s - returns nil if the offset is at the end of the string 1738s - raises an ArgumentError when the offset is larget than the string 1738s 1738s String#upcase 1738s - returns a copy of self with all lowercase letters upcased 1738s - returns a String in the same encoding as self 1738s - does not allow the :fold option for upcasing 1738s - does not allow invalid options 1738s - returns a String instance for subclasses 1738s 1738s String#upcase full Unicode case mapping 1738s - works for all of Unicode with no option 1738s - updates string metadata 1738s 1738s String#upcase ASCII-only case mapping 1738s - does not upcase non-ASCII characters 1738s - works with substrings 1738s 1738s String#upcase full Unicode case mapping adapted for Turkic languages 1738s - upcases ASCII characters according to Turkic semantics 1738s - allows Lithuanian as an extra option 1738s - does not allow any other additional option 1738s 1738s String#upcase full Unicode case mapping adapted for Lithuanian 1738s - currently works the same as full Unicode case mapping 1738s - allows Turkic as an extra option (and applies Turkic semantics) 1738s - does not allow any other additional option 1738s 1738s String#upcase! 1738s - modifies self in place 1738s - modifies self in place for non-ascii-compatible encodings 1738s - does not allow the :fold option for upcasing 1738s - does not allow invalid options 1738s - returns nil if no modifications were made 1738s - raises a FrozenError when self is frozen 1738s 1738s String#upcase! full Unicode case mapping 1738s - modifies self in place for all of Unicode with no option 1738s - works for non-ascii-compatible encodings 1738s - updates string metadata for self 1738s 1738s String#upcase! modifies self in place for ASCII-only case mapping 1738s - does not upcase non-ASCII characters 1738s - works for non-ascii-compatible encodings 1738s 1738s String#upcase! modifies self in place for full Unicode case mapping adapted for Turkic languages 1738s - upcases ASCII characters according to Turkic semantics 1738s - allows Lithuanian as an extra option 1738s - does not allow any other additional option 1738s 1738s String#upcase! modifies self in place for full Unicode case mapping adapted for Lithuanian 1738s - currently works the same as full Unicode case mapping 1738s - allows Turkic as an extra option (and applies Turkic semantics) 1738s - does not allow any other additional option 1738s 1738s String#+@ 1738s - returns an unfrozen copy of a frozen String 1738s - returns self if the String is not frozen 1741s - returns mutable copy despite freeze-magic-comment in file 1741s 1741s String#upto 1741s - passes successive values, starting at self and ending at other_string, to the block 1741s - calls the block once even when start equals stop 1741s - doesn't call block with self even if self is less than stop but stop length is less than self length 1741s - doesn't call block if stop is less than self and stop length is less than self length 1741s - doesn't call the block if self is greater than stop 1741s - stops iterating as soon as the current value's character count gets higher than stop's 1741s - returns self 1741s - tries to convert other to string using to_str 1741s - raises a TypeError if other can't be converted to a string 1741s - does not work with symbols 1741s - returns non-alphabetic characters in the ASCII range for single letters 1741s - stops before the last value if exclusive 1741s - works with non-ASCII ranges 1741s - raises Encoding::CompatibilityError when incompatible characters are given 1741s 1741s String#upto on sequence of numbers 1741s - calls the block as Integer#upto 1741s 1741s String#upto when no block is given 1741s - returns an enumerator 1741s 1741s String#upto when no block is given returned Enumerator size 1741s - should return nil 1741s 1741s String#valid_encoding? and UTF-8 1-byte character 1741s - is valid if is in format 0xxxxxxx 1741s - is not valid if is not in format 0xxxxxxx 1741s 1741s String#valid_encoding? and UTF-8 2-bytes character 1741s - is valid if in format [110xxxxx 10xxxxx] 1741s - is not valid if the first byte is not in format 110xxxxx 1741s - is not valid if the second byte is not in format 10xxxxxx 1741s - is not valid if is smaller than [xxxxxx10 xx000000] (codepoints < U+007F, that are encoded with the 1-byte format) 1741s - is not valid if the first byte is missing 1741s - is not valid if the second byte is missing 1741s 1741s String#valid_encoding? and UTF-8 3-bytes character 1741s - is valid if in format [1110xxxx 10xxxxxx 10xxxxxx] 1741s - is not valid if the first byte is not in format 1110xxxx 1741s - is not valid if the second byte is not in format 10xxxxxx 1741s - is not valid if the third byte is not in format 10xxxxxx 1741s - is not valid if is smaller than [xxxx0000 xx100000 xx000000] (codepoints < U+07FF that are encoded with the 2-byte format) 1741s - is not valid if in range [xxxx1101 xx100000 xx000000] - [xxxx1101 xx111111 xx111111] (codepoints U+D800 - U+DFFF) 1741s - is not valid if the first byte is missing 1741s - is not valid if the second byte is missing 1741s - is not valid if the second and the third bytes are missing 1741s 1741s String#valid_encoding? and UTF-8 4-bytes character 1741s - is valid if in format [11110xxx 10xxxxxx 10xxxxxx 10xxxxxx] 1741s - is not valid if the first byte is not in format 11110xxx 1741s - is not valid if the second byte is not in format 10xxxxxx 1741s - is not valid if the third byte is not in format 10xxxxxx 1741s - is not valid if the forth byte is not in format 10xxxxxx 1741s - is not valid if is smaller than [xxxxx000 xx001000 xx000000 xx000000] (codepoint < U+10000) 1741s - is not valid if is greater than [xxxxx100 xx001111 xx111111 xx111111] (codepoint > U+10FFFF) 1741s - is not valid if the first byte is missing 1741s - is not valid if the second byte is missing 1741s - is not valid if the second and the third bytes are missing 1741s - is not valid if the second, the third and the fourth bytes are missing 1741s 1741s String#valid_encoding? 1741s - returns true if the String's encoding is valid 1741s - returns true if self is valid in the current encoding and other encodings 1741s - returns true for all encodings self is valid in 1741s - returns true for IBM720 encoding self is valid in 1741s - returns false if self is valid in one encoding, but invalid in the one it's tagged with 1741s - returns false if self contains a character invalid in the associated encoding 1741s - returns false if a valid String had an invalid character appended to it 1741s - returns true if an invalid string is appended another invalid one but both make a valid string 1741s 1741s Struct-based class#clone 1741s - duplicates members 1741s 1741s Struct#deconstruct_keys 1741s - returns a hash of attributes 1741s - requires one argument 1741s - returns only specified keys 1741s - accepts string attribute names 1741s - accepts argument position number as well but returns them as keys 1741s - returns an empty hash when there are more keys than attributes 1741s - returns at first not existing attribute name 1741s - accepts nil argument and return all the attributes 1741s - raise TypeError if passed anything except nil or array 1741s 1741s Struct#deconstruct 1741s - returns an array of attribute values 1741s 1741s Struct#dig 1741s - returns the nested value specified by the sequence of keys 1741s - accepts String keys 1741s - returns the value by the index 1741s - returns the nested value specified if the sequence includes an index 1741s - returns nil if any intermediate step is nil 1741s - raises a TypeError if any intermediate step does not respond to #dig 1741s - raises an ArgumentError if no arguments provided 1741s - calls #dig on any intermediate step with the rest of the sequence as arguments 1741s 1741s Struct-based class#dup 1741s - duplicates members 1741s - retains an included module in the ancestor chain for the struct's singleton class 1741s 1741s Struct#each_pair 1741s - passes each key value pair to the given block 1741s - returns self if passed a block 1741s - returns an Enumerator if not passed a block 1741s - does not override the instance accessor method 1741s 1741s Struct#each_pair with a block variable 1741s - passes an array to the given block 1741s 1741s Struct#each_pair when no block is given returned Enumerator 1741s - size returns the enumerable size 1741s 1741s Struct#each 1741s - passes each value to the given block 1741s - returns self if passed a block 1741s - returns an Enumerator if not passed a block 1741s - does not override the instance accessor method 1741s 1741s Struct#each when no block is given returned Enumerator 1741s - size returns the enumerable size 1741s 1741s Struct[] 1741s - is a synonym for new 1741s 1741s Struct#[] 1741s - returns the attribute referenced 1741s - fails when it does not know about the requested attribute 1741s - fails if passed too many arguments 1741s - fails if not passed a string, symbol, or integer 1741s - returns attribute names that contain hyphens 1741s 1741s Struct#[]= 1741s - assigns the passed value 1741s - fails when trying to assign attributes which don't exist 1741s 1741s Struct#eql? 1741s - returns true if the other is the same object 1741s - returns true if the other has all the same fields 1741s - returns false if the other is a different object or has different fields 1741s - returns false if other is of a different class 1741s - handles recursive structures by returning false if a difference can be found 1741s - returns false if any corresponding elements are not #eql? 1741s 1741s Struct#== 1741s - returns true if the other is the same object 1741s - returns true if the other has all the same fields 1741s - returns false if the other is a different object or has different fields 1741s - returns false if other is of a different class 1741s - handles recursive structures by returning false if a difference can be found 1741s 1741s Struct#filter 1741s - raises an ArgumentError if given any non-block arguments 1741s - returns a new array of elements for which block is true 1741s - returns an instance of Array 1741s - does not override the instance accessor method 1741s 1741s Struct#filter without block 1741s - returns an instance of Enumerator 1741s 1741s Struct#filter when no block is given returned Enumerator 1741s - size returns the enumerable size 1741s 1741s Struct#hash 1741s - returns the same integer for structs with the same content 1741s - returns the same value if structs are #eql? 1741s - returns different hashes for structs with different values 1741s - returns different hashes for structs with different values when using keyword_init: true 1741s - allows for overriding methods in an included module 1741s - returns the same hash for recursive structs 1741s - returns different hashes for different struct classes 1741s - does not override the instance accessor method 1741s 1741s Struct#initialize 1741s - is private 1741s - allows valid Ruby method names for members 1741s - does nothing when passed a set of fields equal to self 1741s - explicitly sets instance variables to nil when args not provided to initialize 1741s - can be overridden 1741s - warns about passing only keyword arguments 1741s 1741s Struct#inspect 1741s - returns a string representation showing members and values 1741s - returns a string representation without the class name for anonymous structs 1741s - returns a string representation without the class name for structs nested in anonymous classes 1741s - returns a string representation without the class name for structs nested in anonymous modules 1741s - does not call #name method 1741s - does not call #name method when struct is anonymous 1741s 1741s Struct#instance_variable_get 1741s - returns nil for attributes 1741s - returns a user value for variables with the same name as attributes 1741s 1741s Struct#instance_variables 1741s - returns an empty array if only attributes are defined 1741s - returns an array with one name if an instance variable is added 1741s 1741s StructClass#keyword_init? 1741s - returns true for a struct that accepts keyword arguments to initialize 1741s - returns false for a struct that does not accept keyword arguments to initialize 1741s - returns nil for a struct that did not explicitly specify keyword_init 1741s - returns nil for a struct that does specify keyword_init to be nil 1741s 1741s Struct#length 1741s - returns the number of attributes 1741s - does not override the instance accessor method 1741s 1741s Struct#members 1741s - returns an array of attribute names 1741s - does not override the instance accessor method 1741s 1741s Struct.new 1741s - creates a constant in Struct namespace with string as first argument 1741s - overwrites previously defined constants with string as first argument 1741s - calls to_str on its first argument (constant name) 1741s - creates a new anonymous class with nil first argument 1741s - creates a new anonymous class with symbol arguments 1741s - does not create a constant with symbol as first argument 1741s - allows non-ASCII member name 1741s - fails with invalid constant name as first argument 1741s - raises a TypeError if object doesn't respond to to_sym 1741s - raises a TypeError or ArgumentError if passed a Hash with an unknown key 1741s - raises ArgumentError if not provided any arguments 1741s - raises ArgumentError when there is a duplicate member 1741s - raises a TypeError if object is not a Symbol 1741s - processes passed block with instance_eval 1741s 1741s Struct.new with a block 1741s - allows class to be modified via the block 1741s - passes same struct class to the block 1741s 1741s Struct.new on subclasses 1741s - creates a constant in subclass' namespace 1741s - creates an instance 1741s - creates reader methods 1741s - creates writer methods 1741s - fails with too many arguments 1741s 1741s Struct.new keyword_init: true option 1741s - creates a class that accepts keyword arguments to initialize 1741s - raises when there is a duplicate member 1741s 1741s Struct.new keyword_init: true option new class instantiation 1741s - accepts arguments as hash as well 1741s - allows missing arguments 1741s - allows no arguments 1741s - raises ArgumentError when passed not declared keyword argument 1741s - raises ArgumentError when passed a list of arguments 1741s - raises ArgumentError when passed a single non-hash argument 1741s 1741s Struct.new keyword_init: false option 1741s - behaves like it does without :keyword_init option 1741s 1741s Struct#select 1741s - raises an ArgumentError if given any non-block arguments 1741s - returns a new array of elements for which block is true 1741s - returns an instance of Array 1741s - does not override the instance accessor method 1741s 1741s Struct#select without block 1741s - returns an instance of Enumerator 1741s 1741s Struct#select when no block is given returned Enumerator 1741s - size returns the enumerable size 1741s 1741s Struct#size 1741s - is a synonym for length 1741s - does not override the instance accessor method 1741s 1741s Struct 1741s - includes Enumerable 1741s 1741s Struct anonymous class instance methods 1741s - includes Enumerable 1741s - reader method should be a synonym for [] 1741s - reader method should not interfere with undefined methods 1741s - writer method be a synonym for []= 1741s 1741s Struct subclasses 1741s - can be subclassed 1741s 1741s Struct#to_a 1741s - returns the values for this instance as an array 1741s - does not override the instance accessor method 1741s 1741s Struct#to_h 1741s - returns a Hash with members as keys 1741s - returns a Hash that is independent from the struct 1741s 1741s Struct#to_h with block 1741s - converts [key, value] pairs returned by the block to a hash 1741s - raises ArgumentError if block returns longer or shorter array 1741s - raises TypeError if block returns something other than Array 1741s - coerces returned pair to Array with #to_ary 1741s - does not coerce returned pair to Array with #to_a 1741s 1741s Struct#to_s 1741s - is a synonym for inspect 1741s - returns a string representation showing members and values 1741s - returns a string representation without the class name for anonymous structs 1741s - returns a string representation without the class name for structs nested in anonymous classes 1741s - returns a string representation without the class name for structs nested in anonymous modules 1741s - does not call #name method 1741s - does not call #name method when struct is anonymous 1741s 1741s Struct#values_at 1741s - supports multiple integer Ranges 1741s - supports mixing integer Ranges and Integers 1741s - returns a new empty Array if no arguments given 1741s - fails when passed unsupported types 1741s 1741s Struct#values_at when passed a list of Integers 1741s - returns an array containing each value given by one of integers 1741s - raises IndexError if any of integers is out of range 1741s 1741s Struct#values_at when passed an integer Range 1741s - returns an array containing each value given by the elements of the range 1741s - fills with nil values for range elements larger than the structure 1741s - raises RangeError if any element of the range is negative and out of range 1741s - supports endless Range 1741s - supports beginningless Range 1741s 1741s Struct#values 1741s - is a synonym for to_a 1741s 1741s Symbol.all_symbols 1741s - returns an array of Symbols 1741s - includes symbols that are strongly referenced 1742s - includes symbols that are referenced in source code but not yet executed 1742s 1742s Symbol#capitalize 1742s - returns a Symbol 1742s - converts the first character to uppercase if it is ASCII 1742s - leaves the first character alone if it is not an alphabetical character 1742s - capitalizes the first character if it is Unicode 1742s - converts subsequent uppercase ASCII characters to their lowercase equivalents 1742s - leaves ASCII characters already in the correct case as they were 1742s - works with both upper- and lowercase ASCII characters in the same Symbol 1742s - leaves lowercase Unicode characters (except in first position) as they were 1742s - leaves non-alphabetic ASCII characters as they were 1742s 1742s Symbol#=== 1742s - returns true when the argument is a Symbol 1742s - returns false when the argument is a String 1742s 1742s Symbol#casecmp with Symbol 1742s - compares symbols without regard to case 1742s - doesn't consider non-ascii characters equal that aren't 1742s - doesn't do case mapping for non-ascii characters 1742s - returns 0 for empty strings in different encodings 1742s 1742s Symbol#casecmp 1742s - returns nil if other is a String 1742s - returns nil if other is an Integer 1742s - returns nil if other is an object 1742s 1742s Symbol#casecmp? 1742s - compares symbols without regard to case 1742s - doesn't consider non-ascii characters equal that aren't 1742s - doesn't do case mapping for non-ascii and non-unicode characters 1742s - does case mapping for unicode characters 1742s - returns nil when comparing characters with different encodings 1742s - returns true for empty symbols in different encodings 1742s 1742s Symbol#<=> with Symbol 1742s - compares individual characters based on their ascii value 1742s - returns -1 when self is less than other 1742s - returns 0 when self is equal to other 1742s - returns 1 when self is greater than other 1742s - considers symbol that comes lexicographically first to be less if the symbols have same size 1742s - doesn't consider shorter string to be less if longer string starts with shorter one 1742s - compares shorter string with corresponding number of first chars of longer string 1742s 1742s Symbol#<=> 1742s - returns nil if other is a String 1742s - returns nil if other is an Integer 1742s - returns nil if other is an object 1742s 1742s Symbol#downcase 1742s - returns a Symbol 1742s - converts uppercase ASCII characters to their lowercase equivalents 1742s - leaves lowercase Unicode characters as they were 1742s - uncapitalizes all Unicode characters 1742s - leaves non-alphabetic ASCII characters as they were 1742s 1742s Symbol#dup 1742s - returns self 1742s 1742s Symbol#[] with an Integer index 1742s - returns the character code of the element at the index 1742s - returns nil if the index starts from the end and is greater than the length 1742s - returns nil if the index is greater than the length 1742s 1742s Symbol#[] with an Integer index and length and a positive index and length 1742s - returns a slice 1742s - returns a blank slice if the length is 0 1742s - returns a slice of all remaining characters if the given length is greater than the actual length 1742s - returns nil if the index is greater than the length 1742s 1742s Symbol#[] with an Integer index and length and a positive index and negative length 1742s - returns nil 1742s 1742s Symbol#[] with an Integer index and length and a negative index and positive length 1742s - returns a slice starting from the end upto the length 1742s - returns a blank slice if the length is 0 1742s - returns a slice of all remaining characters if the given length is larger than the actual length 1742s - returns nil if the index is past the start 1742s 1742s Symbol#[] with an Integer index and length and a negative index and negative length 1742s - returns nil 1742s 1742s Symbol#[] with an Integer index and length and a Float length 1742s - converts the length to an Integer 1742s 1742s Symbol#[] with an Integer index and length and a nil length 1742s - raises a TypeError 1742s 1742s Symbol#[] with an Integer index and length and a length that cannot be converted into an Integer 1742s - raises a TypeError when given an Array 1742s - raises a TypeError when given an Hash 1742s - raises a TypeError when given an Object 1742s 1742s Symbol#[] with a Float index 1742s - converts the index to an Integer 1742s 1742s Symbol#[] with a nil index 1742s - raises a TypeError 1742s 1742s Symbol#[] with an index that cannot be converted into an Integer 1742s - raises a TypeError when given an Array 1742s - raises a TypeError when given an Hash 1742s - raises a TypeError when given an Object 1742s 1742s Symbol#[] with a Range slice that is within bounds 1742s - returns a slice if both range values begin at the start and are within bounds 1742s - returns a slice if the first range value begins at the start and the last begins at the end 1742s - returns a slice if the first range value begins at the end and the last begins at the end 1742s 1742s Symbol#[] with a Range slice that is out of bounds 1742s - returns nil if the first range value begins past the end 1742s - returns a blank string if the first range value is within bounds and the last range value is not 1742s - returns nil if the first range value starts from the end and is within bounds and the last value starts from the end and is greater than the length 1742s - returns nil if the first range value starts from the end and is out of bounds and the last value starts from the end and is less than the length 1742s 1742s Symbol#[] with a Range slice with Float values 1742s - converts the first value to an Integer 1742s - converts the last value to an Integer 1742s 1742s Symbol#[] with a Range subclass slice 1742s - returns a slice 1742s 1742s Symbol#[] with a Regex slice without a capture index 1742s - returns a string of the match 1742s - returns nil if the expression does not match 1742s - sets $~ to the MatchData if there is a match 1742s - does not set $~ if there if there is not a match 1742s 1742s Symbol#[] with a Regex slice with a capture index 1742s - returns a string of the complete match if the capture index is 0 1742s - returns a string for the matched capture at the given index 1742s - returns nil if there is no capture for the index 1742s - converts the index to an Integer 1742s - raises a TypeError if the index is nil 1742s - sets $~ to the MatchData if there is a match 1742s - does not set $~ to the MatchData if there is not a match 1742s 1742s Symbol#[] with a Regex slice with a capture index and an index that cannot be converted to an Integer 1742s - raises a TypeError when given an Hash 1742s - raises a TypeError when given an Array 1742s - raises a TypeError when given an Object 1742s 1742s Symbol#[] with a String slice 1742s - does not set $~ 1742s - returns a string if there is match 1742s - returns nil if there is not a match 1742s 1742s Symbol#empty? 1742s - returns true if self is empty 1742s - returns false if self is non-empty 1742s 1742s Symbol#encoding for ASCII symbols 1742s - is US-ASCII 1742s - is US-ASCII after converting to string 1742s 1742s Symbol#encoding for UTF-8 symbols 1742s - is UTF-8 1742s - is UTF-8 after converting to string 1742s 1742s Symbol#end_with? 1742s - returns true only if ends match 1742s - returns false if the end does not match 1742s - returns true if the search string is empty 1742s - returns true only if any ending match 1742s - converts its argument using :to_str 1742s - ignores arguments not convertible to string 1742s - uses only the needed arguments 1742s - works for multibyte strings 1742s - raises an Encoding::CompatibilityError if the encodings are incompatible 1742s 1742s Symbol#== 1742s - only returns true when the other is exactly the same symbol 1742s 1742s Symbol#id2name 1742s - returns the string corresponding to self 1742s - returns a String in the same encoding as self 1742s 1742s Symbol#inspect 1742s - returns self as a symbol literal for :fred 1742s - returns self as a symbol literal for :fred? 1742s - returns self as a symbol literal for :fred! 1742s - returns self as a symbol literal for :BAD! 1742s - returns self as a symbol literal for :_BAD! 1742s - returns self as a symbol literal for :$ruby 1742s - returns self as a symbol literal for :@ruby 1742s - returns self as a symbol literal for :@@ruby 1742s - returns self as a symbol literal for :"$ruby!" 1742s - returns self as a symbol literal for :"$ruby?" 1742s - returns self as a symbol literal for :"@ruby!" 1742s - returns self as a symbol literal for :"@ruby?" 1742s - returns self as a symbol literal for :"@@ruby!" 1742s - returns self as a symbol literal for :"@@ruby?" 1742s - returns self as a symbol literal for :$-w 1742s - returns self as a symbol literal for :"$-ww" 1742s - returns self as a symbol literal for :$+ 1742s - returns self as a symbol literal for :$~ 1742s - returns self as a symbol literal for :$: 1742s - returns self as a symbol literal for :$? 1742s - returns self as a symbol literal for :$< 1742s - returns self as a symbol literal for :$_ 1742s - returns self as a symbol literal for :$/ 1742s - returns self as a symbol literal for :$' 1742s - returns self as a symbol literal for :$" 1742s - returns self as a symbol literal for :$$ 1742s - returns self as a symbol literal for :$. 1742s - returns self as a symbol literal for :$, 1742s - returns self as a symbol literal for :$` 1742s - returns self as a symbol literal for :$! 1742s - returns self as a symbol literal for :$; 1742s - returns self as a symbol literal for :$\ 1742s - returns self as a symbol literal for :$= 1742s - returns self as a symbol literal for :$* 1742s - returns self as a symbol literal for :$> 1742s - returns self as a symbol literal for :$& 1742s - returns self as a symbol literal for :$@ 1742s - returns self as a symbol literal for :$1234 1742s - returns self as a symbol literal for :-@ 1742s - returns self as a symbol literal for :+@ 1742s - returns self as a symbol literal for :% 1742s - returns self as a symbol literal for :& 1742s - returns self as a symbol literal for :* 1742s - returns self as a symbol literal for :** 1742s - returns self as a symbol literal for :/ 1742s - returns self as a symbol literal for :< 1742s - returns self as a symbol literal for :<= 1742s - returns self as a symbol literal for :<=> 1742s - returns self as a symbol literal for :== 1742s - returns self as a symbol literal for :=== 1742s - returns self as a symbol literal for :=~ 1742s - returns self as a symbol literal for :> 1742s - returns self as a symbol literal for :>= 1742s - returns self as a symbol literal for :>> 1742s - returns self as a symbol literal for :[] 1742s - returns self as a symbol literal for :[]= 1742s - returns self as a symbol literal for :<< 1742s - returns self as a symbol literal for :^ 1742s - returns self as a symbol literal for :` 1742s - returns self as a symbol literal for :~ 1742s - returns self as a symbol literal for :| 1742s - returns self as a symbol literal for :! 1742s - returns self as a symbol literal for :!= 1742s - returns self as a symbol literal for :!~ 1742s - returns self as a symbol literal for :"$" 1742s - returns self as a symbol literal for :"&&" 1742s - returns self as a symbol literal for :"'" 1742s - returns self as a symbol literal for :"," 1742s - returns self as a symbol literal for :"." 1742s - returns self as a symbol literal for :".." 1742s - returns self as a symbol literal for :"..." 1742s - returns self as a symbol literal for :":" 1742s - returns self as a symbol literal for :"::" 1742s - returns self as a symbol literal for :";" 1742s - returns self as a symbol literal for :"=" 1742s - returns self as a symbol literal for :"=>" 1742s - returns self as a symbol literal for :"?" 1742s - returns self as a symbol literal for :"@" 1742s - returns self as a symbol literal for :"||" 1742s - returns self as a symbol literal for :"|||" 1742s - returns self as a symbol literal for :"++" 1742s - returns self as a symbol literal for :"\"" 1742s - returns self as a symbol literal for :"\"\"" 1742s - returns self as a symbol literal for :"9" 1742s - returns self as a symbol literal for :"foo bar" 1742s - returns self as a symbol literal for :"*foo" 1742s - returns self as a symbol literal for :"foo " 1742s - returns self as a symbol literal for :" foo" 1742s - returns self as a symbol literal for :" " 1742s 1742s Symbol#intern 1742s - returns self 1742s - returns a Symbol 1742s 1742s Symbol#length 1742s - returns 0 for empty name 1742s - returns 1 for name formed by a NUL character 1742s - returns 3 for name formed by 3 ASCII characters 1742s - returns 4 for name formed by 4 ASCII characters 1742s - returns 4 for name formed by 1 multibyte and 3 ASCII characters 1742s 1742s Symbol#=~ 1742s - returns the index of the beginning of the match 1742s - returns nil if there is no match 1742s - sets the last match pseudo-variables 1742s 1742s Symbol#match 1742s - returns the MatchData 1742s - returns nil if there is no match 1742s - sets the last match pseudo-variables 1742s 1742s Symbol#match when passed a block 1742s - yields the MatchData 1742s - returns the block result 1742s - does not yield if there is no match 1742s 1742s Symbol#match? 1742s - returns false when does not match the given regex 1742s - takes matching position as the 2nd argument 1742s 1742s Symbol#match? when matches the given regex 1742s - returns true but does not set Regexp.last_match 1742s 1742s Symbol#name 1742s - returns string 1742s - returns same string instance 1742s - returns frozen string 1742s 1742s Symbol#next 1742s - returns a successor 1742s - propagates a 'carry' 1742s - increments non-alphanumeric characters when no alphanumeric characters are present 1742s 1742s Symbol#size 1742s - returns 0 for empty name 1742s - returns 1 for name formed by a NUL character 1742s - returns 3 for name formed by 3 ASCII characters 1742s - returns 4 for name formed by 4 ASCII characters 1742s - returns 4 for name formed by 1 multibyte and 3 ASCII characters 1742s 1742s Symbol#slice with an Integer index 1742s - returns the character code of the element at the index 1742s - returns nil if the index starts from the end and is greater than the length 1742s - returns nil if the index is greater than the length 1742s 1742s Symbol#slice with an Integer index and length and a positive index and length 1742s - returns a slice 1742s - returns a blank slice if the length is 0 1742s - returns a slice of all remaining characters if the given length is greater than the actual length 1742s - returns nil if the index is greater than the length 1742s 1742s Symbol#slice with an Integer index and length and a positive index and negative length 1742s - returns nil 1742s 1742s Symbol#slice with an Integer index and length and a negative index and positive length 1742s - returns a slice starting from the end upto the length 1742s - returns a blank slice if the length is 0 1742s - returns a slice of all remaining characters if the given length is larger than the actual length 1742s - returns nil if the index is past the start 1742s 1742s Symbol#slice with an Integer index and length and a negative index and negative length 1742s - returns nil 1742s 1742s Symbol#slice with an Integer index and length and a Float length 1742s - converts the length to an Integer 1742s 1742s Symbol#slice with an Integer index and length and a nil length 1742s - raises a TypeError 1742s 1742s Symbol#slice with an Integer index and length and a length that cannot be converted into an Integer 1742s - raises a TypeError when given an Array 1742s - raises a TypeError when given an Hash 1742s - raises a TypeError when given an Object 1742s 1742s Symbol#slice with a Float index 1742s - converts the index to an Integer 1742s 1742s Symbol#slice with a nil index 1742s - raises a TypeError 1742s 1742s Symbol#slice with an index that cannot be converted into an Integer 1742s - raises a TypeError when given an Array 1742s - raises a TypeError when given an Hash 1742s - raises a TypeError when given an Object 1742s 1742s Symbol#slice with a Range slice that is within bounds 1742s - returns a slice if both range values begin at the start and are within bounds 1742s - returns a slice if the first range value begins at the start and the last begins at the end 1742s - returns a slice if the first range value begins at the end and the last begins at the end 1742s 1742s Symbol#slice with a Range slice that is out of bounds 1742s - returns nil if the first range value begins past the end 1742s - returns a blank string if the first range value is within bounds and the last range value is not 1742s - returns nil if the first range value starts from the end and is within bounds and the last value starts from the end and is greater than the length 1742s - returns nil if the first range value starts from the end and is out of bounds and the last value starts from the end and is less than the length 1742s 1742s Symbol#slice with a Range slice with Float values 1742s - converts the first value to an Integer 1742s - converts the last value to an Integer 1742s 1742s Symbol#slice with a Range subclass slice 1742s - returns a slice 1742s 1742s Symbol#slice with a Regex slice without a capture index 1742s - returns a string of the match 1742s - returns nil if the expression does not match 1742s - sets $~ to the MatchData if there is a match 1742s - does not set $~ if there if there is not a match 1742s 1742s Symbol#slice with a Regex slice with a capture index 1742s - returns a string of the complete match if the capture index is 0 1742s - returns a string for the matched capture at the given index 1742s - returns nil if there is no capture for the index 1742s - converts the index to an Integer 1742s - raises a TypeError if the index is nil 1742s - sets $~ to the MatchData if there is a match 1742s - does not set $~ to the MatchData if there is not a match 1742s 1742s Symbol#slice with a Regex slice with a capture index and an index that cannot be converted to an Integer 1742s - raises a TypeError when given an Hash 1742s - raises a TypeError when given an Array 1742s - raises a TypeError when given an Object 1742s 1742s Symbol#slice with a String slice 1742s - does not set $~ 1742s - returns a string if there is match 1742s - returns nil if there is not a match 1742s 1742s Symbol#start_with? 1742s - returns true only if beginning match 1742s - returns true only if any beginning match 1742s - returns true if the search string is empty 1742s - converts its argument using :to_str 1742s - ignores arguments not convertible to string 1742s - uses only the needed arguments 1742s - works for multibyte strings 1742s - supports regexps 1742s - supports regexps with ^ and $ modifiers 1742s - sets Regexp.last_match if it returns true 1742s - does not check that we are not matching part of a character 1742s 1742s Symbol#succ 1742s - returns a successor 1742s - propagates a 'carry' 1742s - increments non-alphanumeric characters when no alphanumeric characters are present 1742s 1742s Symbol#swapcase 1742s - returns a Symbol 1742s - converts lowercase ASCII characters to their uppercase equivalents 1742s - converts uppercase ASCII characters to their lowercase equivalents 1742s - works with both upper- and lowercase ASCII characters in the same Symbol 1742s - swaps the case for Unicode characters 1742s - leaves non-alphabetic ASCII characters as they were 1742s 1742s Symbol 1742s - includes Comparable 1742s - .allocate raises a TypeError 1742s - .new is undefined 1742s 1742s Symbol#to_proc 1742s - returns a new Proc 1742s - sends self to arguments passed when calling #call on the Proc 1742s - returns a Proc with #lambda? true 1742s - produces a Proc that always returns [[:req], [:rest]] for #parameters 1742s - raises an ArgumentError when calling #call on the Proc without receiver 1742s - passes along the block passed to Proc#call 1742s 1742s Symbol#to_s 1742s - returns the string corresponding to self 1742s - returns a String in the same encoding as self 1742s 1742s Symbol#to_sym 1742s - returns self 1742s 1742s Symbol#upcase 1742s - returns a Symbol 1742s - converts lowercase ASCII characters to their uppercase equivalents 1742s - capitalizes all Unicode characters 1742s - leaves non-alphabetic ASCII characters as they were 1742s 1742s SystemExit#initialize 1742s - accepts a status 1742s - accepts a message 1742s - accepts a status and message 1742s - sets the status to 0 by default 1742s 1742s SystemExit#success? 1742s - returns true when the status is 0 1742s - returns false when the status is not 0 1742s 1742s Thread#abort_on_exception 1742s - is false by default 1742s - returns true when #abort_on_exception= is passed true 1742s 1742s Thread#abort_on_exception= when enabled and the thread dies due to an exception 1742s - causes the main thread to raise the exception raised in the thread 1742s 1742s Thread.abort_on_exception 1742s - is false by default 1742s - returns true when .abort_on_exception= is passed true 1742s 1742s Thread.abort_on_exception= when enabled and a non-main thread dies due to an exception 1742s - causes the main thread to raise the exception raised in the thread 1742s 1742s Thread#add_trace_func 1742s - needs to be reviewed for spec completeness 1742s 1742s Thread#alive? 1742s - can check it's own status 1742s - describes a running thread 1742s - describes a sleeping thread 1742s - describes a blocked thread 1742s - describes a completed thread 1742s - describes a killed thread 1742s - describes a thread with an uncaught exception 1742s - describes a dying running thread 1742s - describes a dying sleeping thread 1742s - returns true for a killed but still running thread 1742s 1742s Thread.allocate 1742s - raises a TypeError 1742s 1742s Thread::Backtrace.limit 1745s - returns maximum backtrace length set by --backtrace-limit command-line option 1748s - returns -1 when --backtrace-limit command-line option is not set 1748s 1748s Thread::Backtrace::Location#absolute_path 1748s - returns the absolute path of the call frame 1751s - returns an absolute path when using a relative main script path 1754s - returns the correct absolute path when using a relative main script path and changing CWD 1754s 1754s Thread::Backtrace::Location#absolute_path when used in #method_added 1754s - returns the user filename that defined the method 1754s 1754s Thread::Backtrace::Location#base_label 1754s - is for a module body 1754s - is for a class body 1754s - is 'singleton class' for a singleton class body 1754s 1754s Thread::Backtrace::Location#base_label when call frame is inside a block 1754s - returns the name of the method that contains the block 1754s 1754s Thread::Backtrace::Location#inspect 1754s - converts the call frame to a String 1754s 1754s Thread::Backtrace::Location#label 1754s - returns the method name for a method location 1754s - returns the block name for a block location 1754s - returns the module name for a module location 1754s 1754s Thread::Backtrace::Location#lineno 1754s - returns the line number of the call frame 1754s - should be the same line number as in #to_s, including for core methods 1754s 1754s Thread::Backtrace::Location#path 1754s - should be the same path as in #to_s, including for core methods 1754s 1754s Thread::Backtrace::Location#path outside a main script 1754s - returns an absolute path 1754s 1754s Thread::Backtrace::Location#path in a main script when the script is in the working directory when using a relative script path 1757s - returns a path relative to the working directory 1757s 1757s Thread::Backtrace::Location#path in a main script when the script is in the working directory when using an absolute script path 1760s - returns an absolute path 1760s 1760s Thread::Backtrace::Location#path in a main script when the script is in a sub directory of the working directory when using a relative script path 1763s - returns a path relative to the working directory 1763s 1763s Thread::Backtrace::Location#path in a main script when the script is in a sub directory of the working directory when using an absolute script path 1766s - returns an absolute path 1766s 1766s Thread::Backtrace::Location#path in a main script when the script is outside of the working directory when using a relative script path 1769s - returns a path relative to the working directory 1769s 1769s Thread::Backtrace::Location#path in a main script when the script is outside of the working directory when using an absolute path 1772s - returns an absolute path 1773s 1773s Thread::Backtrace::Location#to_s 1773s - converts the call frame to a String 1773s 1773s Thread#backtrace_locations 1773s - returns an Array 1773s - sets each element to a Thread::Backtrace::Location 1773s - can be called on any Thread 1773s - can be called with a number of locations to omit 1773s - can be called with a maximum number of locations to return as second parameter 1773s - can be called with a range 1773s - can be called with an endless range 1773s - can be called with an beginless range 1773s - returns [] if omitting exactly the number of locations available 1773s - [1..-1] is the same as #caller_locations(0..-1) for Thread.current 1773s 1773s Thread#backtrace 1773s - returns nil for dead thread 1773s - can be called with a number of locations to omit 1773s - can be called with a maximum number of locations to return as second parameter 1773s - can be called with a range 1773s - returns nil if omitting more locations than available 1773s - returns [] if omitting exactly the number of locations available 1773s 1773s Thread.current 1773s - returns a thread 1773s - returns the current thread 1773s 1773s Thread#[] 1773s - gives access to thread local values 1773s - is not shared across threads 1773s - is accessible using strings or symbols 1773s - raises exceptions on the wrong type of keys 1773s 1773s Thread#[]= 1773s - raises a FrozenError if the thread is frozen 1773s - raises exceptions on the wrong type of keys 1773s - is not shared across fibers 1773s - stores a local in another thread when in a fiber 1773s 1773s Thread#exit! 1773s - needs to be reviewed for spec completeness 1773s 1773s Thread.exit 1773s - causes the current thread to exit 1773s 1773s Thread#fetch 1773s - raises an ArgumentError when not passed one or two arguments 1773s 1773s Thread#fetch with 2 arguments 1773s - returns the value of the fiber-local variable if value has been assigned 1773s - returns the default value if fiber-local variable hasn't been assigned 1773s 1773s Thread#fetch with 1 argument 1773s - raises a KeyError when the Thread does not have a fiber-local variable of the same name 1773s - returns the value of the fiber-local variable if value has been assigned 1773s 1773s Thread#fetch with a block 1773s - returns the value of the fiber-local variable if value has been assigned 1773s - returns the block value if fiber-local variable hasn't been assigned 1773s - does not call the block if value has been assigned 1773s - uses the block if a default is given and warns about it 1773s 1773s Thread.fork Thread.start 1773s - spawns a new Thread running the block 1773s - respects Thread subclasses 1773s 1773s Thread#group 1773s - needs to be reviewed for spec completeness 1773s 1773s Thread.handle_interrupt 1773s - with :never defers interrupts until exiting the handle_interrupt block 1773s - with :on_blocking defers interrupts until the next blocking call 1773s - with :immediate handles interrupts immediately 1773s - with :immediate immediately runs pending interrupts, before the block 1773s - also works with suspended Fibers and does not duplicate interrupts 1773s - runs pending interrupts at the end of the block, even if there was an exception raised in the block 1773s - supports multiple pairs in the Hash 1773s 1773s Thread.ignore_deadlock 1773s - returns false by default 1773s 1773s Thread.ignore_deadlock= 1773s - changes the value of Thread.ignore_deadlock 1773s 1773s Thread#initialize already initialized 1773s - raises a ThreadError 1773s 1773s Thread#inspect 1773s - returns a description including file and line number 1773s - can check it's own status 1773s - describes a running thread 1773s - describes a sleeping thread 1773s - describes a blocked thread 1773s - describes a completed thread 1773s - describes a killed thread 1773s - describes a thread with an uncaught exception 1773s - describes a dying sleeping thread 1773s - reports aborting on a killed thread 1773s - reports aborting on a killed thread after sleep 1773s 1773s Thread#join 1773s - returns the thread when it is finished 1773s - returns the thread when it is finished when given a timeout 1773s - coerces timeout to a Float if it is not nil 1773s - raises TypeError if the argument is not a valid timeout 1773s - returns nil if it is not finished when given a timeout 1773s - accepts a floating point timeout length 1773s - raises any exceptions encountered in the thread body 1773s - returns the dead thread 1773s - raises any uncaught exception encountered in ensure block 1773s 1773s Thread#key? 1773s - tests for existence of thread local variables using symbols or strings 1773s - raises exceptions on the wrong type of keys 1773s - is not shared across fibers 1773s - stores a local in another thread when in a fiber 1773s 1773s Thread#keys 1773s - returns an array of the names of the thread-local variables as symbols 1773s - is not shared across fibers 1773s - stores a local in another thread when in a fiber 1773s 1773s Thread#kill 1773s - kills sleeping thread 1773s - kills current thread 1773s - runs ensure clause 1773s - runs nested ensure clauses 1773s - does not set $! 1773s - does not reset $! 1773s - cannot be rescued 1773s - kills other fibers of that thread without running their ensure clauses (FAILED - 1) 1773s - can be rescued by outer rescue clause when inner ensure clause raises exception 1773s - is deferred if ensure clause does Thread.stop 1773s - does not deadlock when called from within the thread while being joined from without 1773s 1773s Thread.kill 1773s - causes the given thread to exit 1773s 1773s Thread.list 1773s - includes the current and main thread 1773s - includes threads of non-default thread groups 1773s - does not include deceased threads 1773s - includes waiting threads 1773s - returns instances of Thread and not null or nil values 1773s 1773s Thread.main 1773s - returns the main thread 1773s 1773s Thread#name 1773s - is nil initially 1773s - returns the thread name 1773s 1773s Thread#name= 1773s - can be set to a String 1773s - raises an ArgumentError if the name includes a null byte 1773s - can be reset to nil 1773s - calls #to_str to convert name to String 1773s 1773s Thread#native_thread_id 1773s - returns an integer when the thread is alive 1773s - returns nil when the thread is not running 1773s 1773s Thread.new 1773s - creates a thread executing the given block 1773s - can pass arguments to the thread block 1773s - raises an exception when not given a block 1773s - creates a subclass of thread calls super with a block in initialize 1773s - calls #initialize and raises an error if super not used 1773s - calls and respects #initialize for the block to use 1773s - releases Mutexes held by the Thread when the Thread finishes 1773s - releases Mutexes held by the Thread when the Thread finishes, also with Mutex#synchronize 1773s 1773s Thread.pass 1773s - returns nil 1773s 1773s Thread.pending_interrupt? 1773s - returns false if there are no pending interrupts, e.g., outside any Thread.handle_interrupt block 1773s - returns true if there are pending interrupts, e.g., Thread#raise inside Thread.handle_interrupt 1773s 1773s Thread#pending_interrupt? 1773s - returns whether the given threads has pending interrupts 1773s 1773s Thread#priority 1773s - inherits the priority of the current thread while running 1773s - maintain the priority of the current thread after death 1773s - returns an integer 1773s 1773s Thread#priority= when set with an integer 1773s - returns an integer 1773s - clamps the priority to -3..3 1773s 1773s Thread#priority= when set with a non-integer 1773s - raises a type error 1773s 1773s Thread#raise 1773s - ignores dead threads and returns nil 1773s 1773s Thread#raise on a sleeping thread 1773s - raises a RuntimeError if no exception class is given 1773s - raises the given exception 1773s - raises the given exception with the given message 1773s - raises the given exception and the backtrace is the one of the interrupted thread 1773s - is captured and raised by Thread#value 1773s - re-raises a previously rescued exception without overwriting the backtrace 1773s - calls #exception in both the caller and in the target thread 1773s 1773s Thread#raise on a running thread 1773s - raises a RuntimeError if no exception class is given 1773s - raises the given exception 1773s - raises the given exception with the given message 1773s - can go unhandled 1773s - raises the given argument even when there is an active exception 1773s 1773s Thread#raise on same thread 1773s - aborts execution 1773s - accepts an exception that implements to_hash 1773s - allows the message parameter to be a hash 1773s - allows extra keyword arguments for compatibility 1773s - does not allow message and extra keyword arguments 1773s - raises RuntimeError if no exception class is given 1773s - raises a given Exception instance 1773s - raises a RuntimeError if string given 1773s - passes no arguments to the constructor when given only an exception class 1773s - raises a TypeError when passed a non-Exception object 1773s - raises a TypeError when passed true 1773s - raises a TypeError when passed false 1773s - raises a TypeError when passed nil 1773s - allows Exception, message, and backtrace parameters 1773s 1773s Thread.report_on_exception 1776s - defaults to true 1776s 1776s Thread.report_on_exception= 1776s - changes the default value for new threads 1776s 1776s Thread#report_on_exception 1776s - returns true for the main Thread 1776s - returns true for new Threads 1776s - returns whether the Thread will print a backtrace if it exits with an exception 1776s 1776s Thread#report_on_exception= when set to true 1776s - prints a backtrace on $stderr if it terminates with an exception 1776s - prints the backtrace even if the thread was killed just after Thread#raise 1776s 1776s Thread#report_on_exception= when set to false 1776s - lets the thread terminates silently with an exception 1776s 1776s Thread#report_on_exception= when used in conjunction with Thread#abort_on_exception 1776s - first reports then send the exception back to the main Thread 1776s 1776s Thread#run 1776s - can interrupt Kernel#sleep 1776s - does not result in a deadlock 1776s - raises a ThreadError when trying to wake up a dead thread 1776s 1776s Thread#set_trace_func 1776s - needs to be reviewed for spec completeness 1776s 1776s Thread.start Thread.start 1776s - raises an ArgumentError if not passed a block 1776s - spawns a new Thread running the block 1776s - respects Thread subclasses 1776s - does not call #initialize 1776s 1776s Thread#status 1776s - can check it's own status 1776s - describes a running thread 1776s - describes a sleeping thread 1776s - describes a blocked thread 1776s - describes a completed thread 1776s - describes a killed thread 1776s - describes a thread with an uncaught exception 1776s - describes a dying sleeping thread 1776s - reports aborting on a killed thread 1776s - reports aborting on a killed thread after sleep 1776s - reports aborting on an externally killed thread that sleeps 1776s 1776s Thread.stop 1776s - causes the current thread to sleep indefinitely 1776s 1776s Thread#stop? 1776s - can check it's own status 1776s - describes a running thread 1776s - describes a sleeping thread 1776s - describes a blocked thread 1776s - describes a completed thread 1776s - describes a killed thread 1776s - describes a thread with an uncaught exception 1776s - describes a dying running thread 1776s - describes a dying sleeping thread 1776s - describes a dying thread after sleep 1776s 1776s Thread#terminate 1776s - kills sleeping thread 1776s - kills current thread 1776s - runs ensure clause 1776s - runs nested ensure clauses 1776s - does not set $! 1776s - does not reset $! 1776s - cannot be rescued 1776s - kills the entire thread when a fiber is active 1776s - can be rescued by outer rescue clause when inner ensure clause raises exception 1776s - is deferred if ensure clause does Thread.stop 1776s - does not deadlock when called from within the thread while being joined from without 1776s 1776s Thread#thread_variable_get 1776s - returns nil if the variable is not set 1776s - returns the value previously set by #thread_variable_set 1776s - returns a value private to self 1776s 1776s Thread#thread_variable_set 1776s - returns the value set 1776s - sets a value that will be returned by #thread_variable_get 1776s - sets a value private to self 1776s 1776s Thread#thread_variable? 1776s - returns false if the thread variables do not contain 'key' 1776s - returns true if the thread variables contain 'key' 1776s 1776s Thread#thread_variables 1776s - returns the keys of all the values set 1776s - sets a value private to self 1776s - only contains user thread variables and is empty initially 1776s 1776s Thread#to_s 1776s - returns a description including file and line number 1776s - can check it's own status 1776s - describes a running thread 1776s - describes a sleeping thread 1776s - describes a blocked thread 1776s - describes a completed thread 1776s - describes a killed thread 1776s - describes a thread with an uncaught exception 1776s - describes a dying sleeping thread 1776s - reports aborting on a killed thread 1776s - reports aborting on a killed thread after sleep 1776s 1776s Thread#value 1776s - returns the result of the block 1776s - re-raises an error for an uncaught exception 1776s - is nil for a killed thread 1776s - returns when the thread finished 1776s 1776s Thread#wakeup 1777s - can interrupt Kernel#sleep 1777s - does not result in a deadlock 1777s - raises a ThreadError when trying to wake up a dead thread 1777s 1777s ThreadGroup#add 1777s - adds the given thread to a group and returns self 1777s - removes itself from any other threadgroup 1777s 1777s ThreadGroup::Default 1777s - is a ThreadGroup instance 1777s - is the ThreadGroup of the main thread 1777s 1777s ThreadGroup#enclosed? 1777s - returns false when a ThreadGroup has not been enclosed (default state) 1777s - returns true when a ThreadGroup is enclosed 1777s 1777s Time#_dump 1777s - preserves the GMT flag 1777s - dumps a Time object to a bytestring 1777s - dumps an array with a date as first element 1777s - dumps an array with a time as second element 1777s - dumps like MRI's marshaled time format 1777s 1777s Time._load 1777s - loads a time object in the new format 1777s - loads a time object in the old UNIX timestamp based format 1777s - loads MRI's marshaled time format 1777s - treats the data as binary data 1777s 1777s Time#asctime 1777s - returns a canonical string representation of time 1777s 1777s Time.at passed Numeric 1777s - returns a Time object representing the given number of Integer seconds since 1970-01-01 00:00:00 UTC 1777s - returns a Time object representing the given number of Float seconds since 1970-01-01 00:00:00 UTC 1777s - returns a non-UTC Time 1777s - returns a subclass instance on a Time subclass 1777s - roundtrips a Rational produced by #to_r 1777s 1777s Time.at passed Numeric passed BigDecimal 1777s - doesn't round input value 1777s 1777s Time.at passed Numeric passed Rational 1777s - returns Time with correct microseconds 1777s - returns Time with correct nanoseconds 1777s 1777s Time.at passed Time 1777s - creates a new time object with the value given by time 1777s - creates a dup time object with the value given by time 1777s - returns a UTC time if the argument is UTC 1777s - returns a non-UTC time if the argument is non-UTC 1777s - returns a subclass instance 1777s 1777s Time.at passed non-Time, non-Numeric 1777s - raises a TypeError with a String argument 1777s - raises a TypeError with a nil argument 1777s 1777s Time.at passed non-Time, non-Numeric with an argument that responds to #to_int 1777s - coerces using #to_int 1777s 1777s Time.at passed non-Time, non-Numeric with an argument that responds to #to_r 1777s - coerces using #to_r 1777s - needs for the argument to respond to #to_int too 1777s 1777s Time.at passed [Integer, Numeric] 1777s - returns a Time object representing the given number of seconds and Integer microseconds since 1970-01-01 00:00:00 UTC 1777s - returns a Time object representing the given number of seconds and Float microseconds since 1970-01-01 00:00:00 UTC 1777s 1777s Time.at with a second argument that responds to #to_int 1777s - coerces using #to_int 1777s 1777s Time.at with a second argument that responds to #to_r 1777s - coerces using #to_r 1777s 1777s Time.at passed [Integer, nil] 1777s - raises a TypeError 1777s 1777s Time.at passed [Integer, String] 1777s - raises a TypeError 1777s 1777s Time.at passed [Time, Integer] 1777s - raises a TypeError 1777s 1777s Time.at passed [Time, Numeric, format] 1777s - supports Float second argument 1777s 1777s Time.at passed [Time, Numeric, format] :nanosecond format 1777s - treats second argument as nanoseconds 1777s 1777s Time.at passed [Time, Numeric, format] :nsec format 1777s - treats second argument as nanoseconds 1777s 1777s Time.at passed [Time, Numeric, format] :microsecond format 1777s - treats second argument as microseconds 1777s 1777s Time.at passed [Time, Numeric, format] :usec format 1777s - treats second argument as microseconds 1777s 1777s Time.at passed [Time, Numeric, format] :millisecond format 1777s - treats second argument as milliseconds 1777s 1777s Time.at passed [Time, Numeric, format] not supported format 1777s - raises ArgumentError 1777s - does not try to convert format to Symbol with #to_sym 1777s 1777s Time.at :in keyword argument 1777s - could be UTC offset as a String in '+HH:MM or '-HH:MM' format 1777s - could be UTC offset as a number of seconds 1777s - could be UTC offset as a 'UTC' String 1777s - could be UTC offset as a military zone A-Z 1777s - could be a timezone object 1777s - raises ArgumentError if format is invalid 1777s 1777s Time#ceil 1777s - defaults to ceiling to 0 places 1777s - ceils to 0 decimal places with an explicit argument 1777s - ceils to 2 decimal places with an explicit argument 1777s - ceils to 4 decimal places with an explicit argument 1777s - ceils to 7 decimal places with an explicit argument 1777s - returns an instance of Time, even if #ceil is called on a subclass 1777s - copies own timezone to the returning value 1777s 1777s Time#<=> 1777s - returns 1 if the first argument is a point in time after the second argument 1777s - returns 1 if the first argument is a point in time after the second argument (down to a millisecond) 1777s - returns 1 if the first argument is a point in time after the second argument (down to a microsecond) 1777s - returns 0 if time is the same as other 1777s - returns -1 if the first argument is a point in time before the second argument 1777s - returns -1 if the first argument is a point in time before the second argument (down to a millisecond) 1777s - returns -1 if the first argument is a point in time before the second argument (down to a microsecond) 1777s - returns 1 if the first argument is a fraction of a microsecond after the second argument 1777s - returns 0 if time is the same as other, including fractional microseconds 1777s - returns -1 if the first argument is a fraction of a microsecond before the second argument 1777s - returns nil when compared to an Integer because Time does not respond to #coerce 1777s 1777s Time#<=> given a non-Time argument 1777s - returns nil if argument <=> self returns nil 1777s - returns -1 if argument <=> self is greater than 0 1777s - returns 1 if argument <=> self is not greater than 0 and is less than 0 1777s - returns 0 if argument <=> self is neither greater than 0 nor less than 0 1777s - returns nil if argument also uses an inverse comparison for <=> 1777s 1777s Time#ctime 1777s - returns a canonical string representation of time 1777s 1777s Time#day 1777s - returns the day of the month (1..n) for a local Time 1777s - returns the day of the month for a UTC Time 1777s - returns the day of the month for a Time with a fixed offset 1777s 1777s Time#dst? 1777s - dst? returns whether time is during daylight saving time 1777s 1777s Time#dup 1777s - returns a Time object that represents the same time 1777s - copies the gmt state flag 1777s - returns an independent Time object 1777s - returns a subclass instance 1777s - returns a clone of Time instance 1777s - does not copy frozen status from the original 1777s 1777s Time#eql? 1777s - returns true if self and other have the same whole number of seconds 1777s - returns false if self and other have differing whole numbers of seconds 1777s - returns true if self and other have the same number of microseconds 1777s - returns false if self and other have differing numbers of microseconds 1777s - returns false if self and other have differing fractional microseconds 1777s - returns false when given a non-time value 1777s 1777s Time#floor 1777s - defaults to flooring to 0 places 1777s - floors to 0 decimal places with an explicit argument 1777s - floors to 7 decimal places with an explicit argument 1777s - returns an instance of Time, even if #floor is called on a subclass 1777s - copies own timezone to the returning value 1777s 1777s Time#friday? 1777s - returns true if time represents Friday 1777s - returns false if time doesn't represent Friday 1777s 1777s Time#getgm 1777s - returns a new time which is the utc representation of time 1777s 1777s Time#getlocal 1777s - returns a new time which is the local representation of time 1777s - returns a Time with UTC offset specified as an Integer number of seconds 1777s - returns a new time with the correct utc_offset according to the set timezone 1777s - returns a Time with a UTC offset specified as +HH:MM 1777s - returns a Time with a UTC offset specified as -HH:MM 1777s - raises ArgumentError if the argument represents a value less than or equal to -86400 seconds 1777s - raises ArgumentError if the argument represents a value greater than or equal to 86400 seconds 1777s 1777s Time#getlocal with an argument that responds to #to_int 1777s - coerces using #to_int 1777s 1777s Time#getlocal with an argument that responds to #to_str 1777s - coerces using #to_str 1777s 1777s Time#getlocal with a timezone argument 1777s - returns a Time in the timezone 1777s - accepts timezone argument that must have #local_to_utc and #utc_to_local methods 1777s - raises TypeError if timezone does not implement #utc_to_local method 1777s - does not raise exception if timezone does not implement #local_to_utc method 1777s 1777s Time#getlocal with a timezone argument subject's class implements .find_timezone method 1777s - calls .find_timezone to build a time object if passed zone name as a timezone argument 1777s - does not call .find_timezone if passed any not string/numeric/timezone timezone argument 1777s 1777s Time#getutc 1777s - returns a new time which is the utc representation of time 1777s 1777s Time.gm 1777s - creates a time based on given values, interpreted as UTC (GMT) 1777s - creates a time based on given C-style gmtime arguments, interpreted as UTC (GMT) 1777s - interprets pre-Gregorian reform dates using Gregorian proleptic calendar 1777s - interprets Julian-Gregorian gap dates using Gregorian proleptic calendar 1777s - interprets post-Gregorian reform dates using Gregorian calendar 1777s - handles fractional usec close to rounding limit 1777s - handles bad leap seconds by carrying values forward 1777s - handles a value of 60 for seconds by carrying values forward in zone 'UTC' 1777s - accepts 1 argument (year) 1777s - accepts 2 arguments (year, month) 1777s - accepts 3 arguments (year, month, day) 1777s - accepts 4 arguments (year, month, day, hour) 1777s - accepts 5 arguments (year, month, day, hour, minute) 1777s - accepts a too big day of the month by going to the next month 1777s - raises a TypeError if the year is nil 1777s - accepts nil month, day, hour, minute, and second 1777s - handles a String year 1777s - coerces the year with #to_int 1777s - handles a String month given as a numeral 1777s - handles a String month given as a short month name 1777s - coerces the month with #to_str 1777s - coerces the month with #to_int 1777s - handles a String day 1777s - coerces the day with #to_int 1777s - handles a String hour 1777s - coerces the hour with #to_int 1777s - handles a String minute 1777s - coerces the minute with #to_int 1777s - handles a String second 1777s - coerces the second with #to_int 1777s - interprets all numerals as base 10 1777s - handles fractional seconds as a Float 1777s - handles fractional seconds as a Rational 1777s - handles years from 0 as such 1777s - accepts various year ranges 1777s - raises an ArgumentError for out of range month 1777s - raises an ArgumentError for out of range day 1777s - raises an ArgumentError for out of range hour 1777s - raises an ArgumentError for out of range minute 1777s - raises an ArgumentError for out of range second 1777s - raises ArgumentError when given 9 arguments 1777s - raises ArgumentError when given 11 arguments 1777s - returns subclass instances 1777s - handles string arguments 1777s - handles float arguments 1777s - raises an ArgumentError for out of range values 1777s - handles microseconds 1777s - raises an ArgumentError for out of range microsecond 1777s - handles fractional microseconds as a Float 1777s - handles fractional microseconds as a Rational 1777s - ignores fractional seconds if a passed whole number of microseconds 1777s - ignores fractional seconds if a passed fractional number of microseconds 1777s 1777s Time#gmt_offset 1777s - returns the offset in seconds between the timezone of time and UTC 1777s - returns 0 when the date is UTC 1777s - returns the correct offset for US Eastern time zone around daylight savings time change 1777s - returns the correct offset for Hawaii around daylight savings time change 1777s - returns the correct offset for New Zealand around daylight savings time change 1777s 1777s Time#gmt_offset given positive offset 1777s - returns a positive offset 1777s 1777s Time#gmt_offset given negative offset 1777s - returns a negative offset 1777s 1777s Time#gmt? 1777s - returns true if time represents a time in UTC (GMT) 1777s 1777s Time#gmtime 1777s - converts self to UTC, modifying the receiver 1777s - returns self 1777s 1777s Time#gmtime on a frozen time 1777s - does not raise an error if already in UTC 1777s - raises a FrozenError if the time is not UTC 1777s 1777s Time#gmtoff 1777s - returns the offset in seconds between the timezone of time and UTC 1777s - returns 0 when the date is UTC 1777s - returns the correct offset for US Eastern time zone around daylight savings time change 1777s - returns the correct offset for Hawaii around daylight savings time change 1777s - returns the correct offset for New Zealand around daylight savings time change 1777s 1777s Time#gmtoff given positive offset 1777s - returns a positive offset 1777s 1777s Time#gmtoff given negative offset 1777s - returns a negative offset 1777s 1777s Time#hash 1777s - returns an Integer 1777s - is stable 1777s 1777s Time#hour 1777s - returns the hour of the day (0..23) for a local Time 1777s - returns the hour of the day for a UTC Time 1777s - returns the hour of the day for a Time with a fixed offset 1777s 1777s Time#inspect 1777s - formats the local time following the pattern 'yyyy-MM-dd HH:mm:ss Z' 1777s - formats the UTC time following the pattern 'yyyy-MM-dd HH:mm:ss UTC' 1777s - formats the fixed offset time following the pattern 'yyyy-MM-dd HH:mm:ss +/-HHMM' 1777s - returns a US-ASCII encoded string 1777s - preserves microseconds 1777s - omits trailing zeros from microseconds 1777s - uses the correct time zone without microseconds 1777s - uses the correct time zone with microseconds 1777s - preserves nanoseconds 1777s 1777s Time#isdst 1777s - dst? returns whether time is during daylight saving time 1777s 1777s Time.local 1777s - creates a time based on given values, interpreted in the local time zone 1777s - uses the 'CET' timezone with TZ=Europe/Amsterdam in 1970 1777s - creates a time based on given C-style gmtime arguments, interpreted in the local time zone 1777s - creates the correct time just before dst change 1777s - creates the correct time just after dst change 1777s - accepts 1 argument (year) 1777s - accepts 2 arguments (year, month) 1777s - accepts 3 arguments (year, month, day) 1777s - accepts 4 arguments (year, month, day, hour) 1777s - accepts 5 arguments (year, month, day, hour, minute) 1777s - accepts a too big day of the month by going to the next month 1777s - raises a TypeError if the year is nil 1777s - accepts nil month, day, hour, minute, and second 1777s - handles a String year 1777s - coerces the year with #to_int 1777s - handles a String month given as a numeral 1777s - handles a String month given as a short month name 1777s - coerces the month with #to_str 1777s - coerces the month with #to_int 1777s - handles a String day 1777s - coerces the day with #to_int 1777s - handles a String hour 1777s - coerces the hour with #to_int 1777s - handles a String minute 1777s - coerces the minute with #to_int 1777s - handles a String second 1777s - coerces the second with #to_int 1777s - interprets all numerals as base 10 1777s - handles fractional seconds as a Float 1777s - handles fractional seconds as a Rational 1777s - handles years from 0 as such 1777s - accepts various year ranges 1777s - raises an ArgumentError for out of range month 1777s - raises an ArgumentError for out of range day 1777s - raises an ArgumentError for out of range hour 1777s - raises an ArgumentError for out of range minute 1777s - raises an ArgumentError for out of range second 1777s - raises ArgumentError when given 9 arguments 1777s - raises ArgumentError when given 11 arguments 1777s - returns subclass instances 1777s - handles string arguments 1777s - handles float arguments 1777s - raises an ArgumentError for out of range values 1777s - handles microseconds 1777s - raises an ArgumentError for out of range microsecond 1777s - handles fractional microseconds as a Float 1777s - handles fractional microseconds as a Rational 1777s - ignores fractional seconds if a passed whole number of microseconds 1777s - ignores fractional seconds if a passed fractional number of microseconds 1777s 1777s Time#localtime 1777s - converts self to local time, modifying the receiver 1777s - returns self 1777s - converts time to the UTC offset specified as an Integer number of seconds 1777s - returns a Time with a UTC offset specified as +HH:MM 1777s - returns a Time with a UTC offset specified as -HH:MM 1777s - returns a Time with a UTC offset specified as UTC 1777s - returns a Time with a UTC offset specified as A-Z military zone 1777s - changes the timezone according to the set one 1777s - raises ArgumentError if the argument represents a value less than or equal to -86400 seconds 1777s - raises ArgumentError if the argument represents a value greater than or equal to 86400 seconds 1777s 1777s Time#localtime on a frozen time 1777s - does not raise an error if already in the right time zone 1777s - raises a FrozenError if the time has a different time zone 1777s 1777s Time#localtime with an argument that responds to #to_int 1777s - coerces using #to_int 1777s 1777s Time#localtime with an argument that responds to #to_str 1777s - coerces using #to_str 1777s 1777s Time#mday 1777s - returns the day of the month (1..n) for a local Time 1777s - returns the day of the month for a UTC Time 1777s - returns the day of the month for a Time with a fixed offset 1777s 1777s Time#min 1777s - returns the minute of the hour (0..59) for a local Time 1777s - returns the minute of the hour for a UTC Time 1777s - returns the minute of the hour for a Time with a fixed offset 1777s 1777s Time#- 1777s - decrements the time by the specified amount 1777s - understands negative subtractions 1777s - accepts arguments that can be coerced into Rational 1777s - raises a TypeError if given argument is a coercible String 1777s - raises TypeError on argument that can't be coerced 1777s - raises TypeError on nil argument 1777s - tracks microseconds 1777s - tracks microseconds from a Rational 1777s - tracks nanoseconds 1777s - maintains microseconds precision 1777s - maintains nanoseconds precision 1777s - returns a UTC time if self is UTC 1777s - returns a non-UTC time if self is non-UTC 1777s - returns a time with the same fixed offset as self 1777s - preserves time zone 1777s 1777s Time#- zone is a timezone object 1777s - preserves time zone 1777s 1777s Time.mktime 1777s - creates a time based on given values, interpreted in the local time zone 1777s - uses the 'CET' timezone with TZ=Europe/Amsterdam in 1970 1777s - creates a time based on given C-style gmtime arguments, interpreted in the local time zone 1777s - creates the correct time just before dst change 1777s - creates the correct time just after dst change 1777s - accepts 1 argument (year) 1777s - accepts 2 arguments (year, month) 1777s - accepts 3 arguments (year, month, day) 1777s - accepts 4 arguments (year, month, day, hour) 1777s - accepts 5 arguments (year, month, day, hour, minute) 1777s - accepts a too big day of the month by going to the next month 1777s - raises a TypeError if the year is nil 1777s - accepts nil month, day, hour, minute, and second 1777s - handles a String year 1777s - coerces the year with #to_int 1777s - handles a String month given as a numeral 1777s - handles a String month given as a short month name 1777s - coerces the month with #to_str 1777s - coerces the month with #to_int 1777s - handles a String day 1777s - coerces the day with #to_int 1777s - handles a String hour 1777s - coerces the hour with #to_int 1777s - handles a String minute 1777s - coerces the minute with #to_int 1777s - handles a String second 1777s - coerces the second with #to_int 1777s - interprets all numerals as base 10 1777s - handles fractional seconds as a Float 1777s - handles fractional seconds as a Rational 1777s - handles years from 0 as such 1777s - accepts various year ranges 1777s - raises an ArgumentError for out of range month 1777s - raises an ArgumentError for out of range day 1777s - raises an ArgumentError for out of range hour 1777s - raises an ArgumentError for out of range minute 1777s - raises an ArgumentError for out of range second 1777s - raises ArgumentError when given 9 arguments 1777s - raises ArgumentError when given 11 arguments 1777s - returns subclass instances 1777s - handles string arguments 1777s - handles float arguments 1777s - raises an ArgumentError for out of range values 1777s - handles microseconds 1777s - raises an ArgumentError for out of range microsecond 1777s - handles fractional microseconds as a Float 1777s - handles fractional microseconds as a Rational 1777s - ignores fractional seconds if a passed whole number of microseconds 1777s - ignores fractional seconds if a passed fractional number of microseconds 1777s 1777s Time#mon 1777s - returns the month of the year for a local Time 1777s - returns the month of the year for a UTC Time 1777s - returns the four digit year for a Time with a fixed offset 1777s 1777s Time#monday? 1777s - returns true if time represents Monday 1777s - returns false if time doesn't represent Monday 1777s 1777s Time#month 1777s - returns the month of the year for a local Time 1777s - returns the month of the year for a UTC Time 1777s - returns the four digit year for a Time with a fixed offset 1777s 1777s Time.new 1777s - creates a subclass instance if called on a subclass 1777s - sets the current time 1777s - uses the local timezone 1777s - has at least microsecond precision 1777s 1777s Time.new 1777s - creates a time based on given values, interpreted in the local time zone 1777s - uses the 'CET' timezone with TZ=Europe/Amsterdam in 1970 1777s - accepts 1 argument (year) 1777s - accepts 2 arguments (year, month) 1777s - accepts 3 arguments (year, month, day) 1777s - accepts 4 arguments (year, month, day, hour) 1777s - accepts 5 arguments (year, month, day, hour, minute) 1777s - accepts a too big day of the month by going to the next month 1777s - raises a TypeError if the year is nil 1777s - accepts nil month, day, hour, minute, and second 1777s - handles a String year 1777s - coerces the year with #to_int 1777s - handles a String month given as a numeral 1777s - handles a String month given as a short month name 1777s - coerces the month with #to_str 1777s - coerces the month with #to_int 1777s - handles a String day 1777s - coerces the day with #to_int 1777s - handles a String hour 1777s - coerces the hour with #to_int 1777s - handles a String minute 1777s - coerces the minute with #to_int 1777s - handles a String second 1777s - coerces the second with #to_int 1777s - interprets all numerals as base 10 1777s - handles fractional seconds as a Float 1777s - handles fractional seconds as a Rational 1777s - handles years from 0 as such 1777s - accepts various year ranges 1777s - raises an ArgumentError for out of range month 1777s - raises an ArgumentError for out of range day 1777s - raises an ArgumentError for out of range hour 1777s - raises an ArgumentError for out of range minute 1777s - raises an ArgumentError for out of range second 1777s - raises ArgumentError when given 9 arguments 1777s - raises ArgumentError when given 11 arguments 1777s - returns subclass instances 1777s 1777s Time.new with a utc_offset argument 1777s - returns a non-UTC time 1777s - returns a Time with a UTC offset of the specified number of Integer seconds 1777s - returns a Time with a UTC offset specified as +HH:MM 1777s - returns a Time with a UTC offset specified as -HH:MM 1777s - returns a Time with a UTC offset specified as +HH:MM:SS 1777s - returns a Time with a UTC offset specified as -HH:MM 1777s - returns a Time with a UTC offset specified as +HH 1777s - returns a Time with a UTC offset specified as -HH 1777s - returns a Time with a UTC offset specified as +HHMM 1777s - returns a Time with a UTC offset specified as -HHMM 1777s - returns a Time with a UTC offset specified as +HHMMSS 1777s - returns a Time with a UTC offset specified as -HHMMSS 1777s - returns a Time with UTC offset specified as UTC 1777s - returns a Time with UTC offset specified as a single letter military timezone 1777s - raises ArgumentError if the string argument is J 1777s - returns a local Time if the argument is nil 1777s - disallows a value for minutes greater than 59 1777s - raises ArgumentError if the hour value is greater than 23 1777s - raises ArgumentError if the argument represents a value less than or equal to -86400 seconds 1777s - raises ArgumentError if the argument represents a value greater than or equal to 86400 seconds 1777s - raises ArgumentError if the utc_offset argument is greater than or equal to 10e9 1777s 1777s Time.new with a utc_offset argument with an argument that responds to #to_int 1777s - coerces using #to_int 1777s 1777s Time.new with a utc_offset argument with an argument that responds to #to_str 1777s - coerces using #to_str 1777s 1777s Time.new with a timezone argument 1777s - returns a Time in the timezone 1777s - accepts timezone argument that must have #local_to_utc and #utc_to_local methods 1777s - raises TypeError if timezone does not implement #local_to_utc method 1777s - does not raise exception if timezone does not implement #utc_to_local method 1777s 1777s Time.new with a timezone argument returned value by #utc_to_local and #local_to_utc methods 1777s - could be Time instance 1777s - could be Time subclass instance 1777s - could be any object with #to_i method 1777s - could have any #zone and #utc_offset because they are ignored 1777s - leads to raising Argument error if difference between argument and result is too large 1777s 1777s Time.new with a timezone argument Time-like argument of #utc_to_local and #local_to_utc methods 1777s - implements subset of Time methods 1777s 1777s Time.new with a timezone argument subject's class implements .find_timezone method 1777s - calls .find_timezone to build a time object if passed zone name as a timezone argument 1777s - does not call .find_timezone if passed any not string/numeric/timezone timezone argument 1777s 1777s Time.new with a timezone argument :in keyword argument 1777s - could be UTC offset as a String in '+HH:MM or '-HH:MM' format 1777s - could be UTC offset as a number of seconds 1777s - returns a Time with UTC offset specified as a single letter military timezone 1777s - could be a timezone object 1777s - allows omitting minor arguments 1777s - converts to a provided timezone if all the positional arguments are omitted 1777s - raises ArgumentError if format is invalid 1777s - raises ArgumentError if two offset arguments are given 1777s 1777s Time.now 1777s - creates a subclass instance if called on a subclass 1777s - sets the current time 1777s - uses the local timezone 1777s - has at least microsecond precision 1777s 1777s Time.now :in keyword argument 1777s - could be UTC offset as a String in '+HH:MM or '-HH:MM' format 1777s - could be UTC offset as a number of seconds 1777s - returns a Time with UTC offset specified as a single letter military timezone 1777s - could be a timezone object 1777s - raises ArgumentError if format is invalid 1777s 1777s Time#nsec 1777s - returns 0 for a Time constructed with a whole number of seconds 1777s - returns the nanoseconds part of a Time constructed with a Float number of seconds 1777s - returns the nanoseconds part of a Time constructed with an Integer number of microseconds 1777s - returns the nanoseconds part of a Time constructed with an Float number of microseconds 1777s - returns the nanoseconds part of a Time constructed with a Rational number of seconds 1777s - returns the nanoseconds part of a Time constructed with an Rational number of microseconds 1777s - returns a positive value for dates before the epoch 1777s 1777s Time#+ 1777s - increments the time by the specified amount 1777s - is a commutative operator 1777s - raises a TypeError if given argument is a coercible String 1777s - increments the time by the specified amount as rational numbers 1777s - accepts arguments that can be coerced into Rational 1777s - raises TypeError on argument that can't be coerced into Rational 1777s - returns a UTC time if self is UTC 1777s - returns a non-UTC time if self is non-UTC 1777s - returns a time with the same fixed offset as self 1777s - preserves time zone 1777s - raises TypeError on Time argument 1777s - raises TypeError on nil argument 1777s - tracks microseconds 1777s - tracks nanoseconds 1777s - maintains precision 1777s - maintains microseconds precision 1777s - maintains nanoseconds precision 1777s 1777s Time#+ zone is a timezone object 1777s - preserves time zone 1777s 1777s Time#round 1777s - defaults to rounding to 0 places 1777s - rounds to 0 decimal places with an explicit argument 1777s - rounds to 7 decimal places with an explicit argument 1777s - returns an instance of Time, even if #round is called on a subclass 1777s - copies own timezone to the returning value 1777s 1777s Time#saturday? 1777s - returns true if time represents Saturday 1777s - returns false if time doesn't represent Saturday 1777s 1777s Time#sec 1777s - returns the second of the minute(0..60) for time 1777s 1777s Time#strftime 1777s - should be able to print the full day name 1777s - should be able to print the short day name 1777s - should be able to print the full month name 1777s - should be able to print the short month name 1777s - should be able to print the century 1777s - should be able to print the month day with leading zeroes 1777s - should be able to print the month day with leading spaces 1777s - should be able to print the commercial year with leading zeroes 1777s - should be able to print the commercial year with only two digits 1777s - should be able to print the hour with leading zeroes (hour is always 00) 1777s - should be able to print the hour in 12 hour notation with leading zeroes 1777s - should be able to print the julian day with leading zeroes 1777s - should be able to print the hour in 24 hour notation with leading spaces 1777s - should be able to print the hour in 12 hour notation with leading spaces 1777s - should be able to print the minutes with leading zeroes 1777s - should be able to print the month with leading zeroes 1777s - should be able to add a newline 1777s - should be able to show AM/PM 1777s - should be able to show am/pm 1777s - should be able to show the number of seconds with leading zeroes 1777s - should be able to show the number of seconds since the unix epoch for a date 1777s - should be able to add a tab 1777s - should be able to show the week number with the week starting on Sunday (%U) and Monday (%W) 1777s - should be able to show the commercial week day 1777s - should be able to show the commercial week with %V 1777s - should be able to show the week day 1777s - should be able to show the year in YYYY format 1777s - should be able to show the year in YY format 1777s - should be able to show the timezone of the date with a : separator 1777s - should be able to escape the % character 1777s - should be able to print the date in full 1777s - should be able to print the date with slashes 1777s - should be able to print the date as YYYY-MM-DD 1777s - should be able to show HH:MM for a date 1777s - should be able to show HH:MM:SS AM/PM for a date 1777s - should be able to show HH:MM:SS 1777s - should be able to show HH:MM:SS 1777s - should be able to show MM/DD/YY 1777s - supports GNU modificators 1777s - supports the '-' modifier to drop leading zeros 1777s - passes the format string's encoding to the result string 1777s - formats time according to the directives in the given format string 1777s - returns the 24-based hour with %H 1777s - returns the 12-based hour with %I 1777s - supports 24-hr formatting with %l 1777s - supports 12-hr formatting with %l 1777s - returns the minute with %M 1777s - supports am/pm formatting with %P 1777s - supports AM/PM formatting with %p 1777s - returns the second with %S 1777s - should be able to show the number of seconds since the unix epoch 1777s - returns the timezone with %Z 1777s - should be able to print the time in full 1777s - should be able to show HH:MM 1777s - should be able to show HH:MM:SS AM/PM 1777s - supports HH:MM:SS formatting with %T 1777s - supports HH:MM:SS formatting with %X 1777s - supports the '-' modifier to drop leading zeros 1777s - supports the '-' modifier for padded format directives 1777s - should be able to show default Logger format 1777s - requires an argument 1777s - should be able to show the timezone if available 1777s - should be able to show the commercial week 1777s 1777s Time#strftime with %L 1777s - formats the milliseconds of the second 1777s 1777s Time#strftime with %N 1777s - formats the nanoseconds of the second with %N 1777s - formats the milliseconds of the second with %3N 1777s - formats the microseconds of the second with %6N 1777s - formats the nanoseconds of the second with %9N 1777s 1777s Time#strftime with %z 1777s - formats a UTC time offset as '+0000' 1777s - formats a local time with positive UTC offset as '+HHMM' 1777s - formats a local time with negative UTC offset as '-HHMM' 1777s - formats a time with fixed positive offset as '+HHMM' 1777s - formats a time with fixed negative offset as '-HHMM' 1777s - formats a time with fixed offset as '+/-HH:MM' with ':' specifier 1777s - formats a time with fixed offset as '+/-HH:MM:SS' with '::' specifier 1777s 1777s Time#subsec 1777s - returns 0 as an Integer for a Time with a whole number of seconds 1777s - returns the fractional seconds as a Rational for a Time constructed with a Rational number of seconds 1777s - returns the fractional seconds as a Rational for a Time constructed with a Float number of seconds 1777s - returns the fractional seconds as a Rational for a Time constructed with an Integer number of microseconds 1777s - returns the fractional seconds as a Rational for a Time constructed with an Rational number of microseconds 1777s - returns the fractional seconds as a Rational for a Time constructed with an Float number of microseconds 1777s 1777s Time#sunday? 1777s - returns true if time represents Sunday 1777s - returns false if time doesn't represent Sunday 1777s 1777s Time#thursday? 1777s - returns true if time represents Thursday 1777s - returns false if time doesn't represent Thursday 1777s 1777s Time 1777s - includes Comparable 1777s 1777s Time#to_a 1777s - returns a 10 element array representing the deconstructed time 1777s 1777s Time#to_f 1777s - returns the float number of seconds + usecs since the epoch 1777s 1777s Time#to_i 1777s - returns the value of time as an integer number of seconds since epoch 1777s - doesn't return an actual number of seconds in time 1777s - rounds fractional seconds toward zero 1777s 1777s Time#to_r 1777s - returns the a Rational representing seconds and subseconds since the epoch 1777s - returns a Rational even for a whole number of seconds 1777s 1777s Time#to_s 1777s - formats the local time following the pattern 'yyyy-MM-dd HH:mm:ss Z' 1777s - formats the UTC time following the pattern 'yyyy-MM-dd HH:mm:ss UTC' 1777s - formats the fixed offset time following the pattern 'yyyy-MM-dd HH:mm:ss +/-HHMM' 1777s - returns a US-ASCII encoded string 1777s 1777s Time#tuesday? 1777s - returns true if time represents Tuesday 1777s - returns false if time doesn't represent Tuesday 1777s 1777s Time#tv_nsec 1777s - needs to be reviewed for spec completeness 1777s 1777s Time#tv_sec 1777s - returns the value of time as an integer number of seconds since epoch 1777s - doesn't return an actual number of seconds in time 1777s - rounds fractional seconds toward zero 1777s 1777s Time#tv_usec 1777s - needs to be reviewed for spec completeness 1777s 1777s Time#usec 1777s - returns 0 for a Time constructed with a whole number of seconds 1777s - returns the microseconds part of a Time constructed with a Float number of seconds 1777s - returns the microseconds part of a Time constructed with an Integer number of microseconds 1777s - returns the microseconds part of a Time constructed with an Float number of microseconds > 1 1777s - returns 0 for a Time constructed with an Float number of microseconds < 1 1777s - returns the microseconds part of a Time constructed with a Rational number of seconds 1777s - returns the microseconds part of a Time constructed with an Rational number of microseconds > 1 1777s - returns 0 for a Time constructed with an Rational number of microseconds < 1 1777s - returns the microseconds for time created by Time#local 1777s - returns a positive value for dates before the epoch 1777s 1777s Time#utc_offset 1777s - returns the offset in seconds between the timezone of time and UTC 1777s - returns 0 when the date is UTC 1777s - returns the correct offset for US Eastern time zone around daylight savings time change 1777s - returns the correct offset for Hawaii around daylight savings time change 1777s - returns the correct offset for New Zealand around daylight savings time change 1777s 1777s Time#utc_offset given positive offset 1777s - returns a positive offset 1777s 1777s Time#utc_offset given negative offset 1777s - returns a negative offset 1777s 1777s Time#utc? 1777s - returns true only if time represents a time in UTC (GMT) 1777s - treats time as UTC what was created in different ways 1777s - does not treat time with +00:00 offset as UTC 1777s - does not treat time with 0 offset as UTC 1777s 1777s Time.utc 1777s - creates a time based on given values, interpreted as UTC (GMT) 1777s - creates a time based on given C-style gmtime arguments, interpreted as UTC (GMT) 1777s - interprets pre-Gregorian reform dates using Gregorian proleptic calendar 1777s - interprets Julian-Gregorian gap dates using Gregorian proleptic calendar 1777s - interprets post-Gregorian reform dates using Gregorian calendar 1777s - handles fractional usec close to rounding limit 1777s - handles bad leap seconds by carrying values forward 1777s - handles a value of 60 for seconds by carrying values forward in zone 'UTC' 1777s - accepts 1 argument (year) 1777s - accepts 2 arguments (year, month) 1777s - accepts 3 arguments (year, month, day) 1777s - accepts 4 arguments (year, month, day, hour) 1777s - accepts 5 arguments (year, month, day, hour, minute) 1777s - accepts a too big day of the month by going to the next month 1777s - raises a TypeError if the year is nil 1777s - accepts nil month, day, hour, minute, and second 1777s - handles a String year 1777s - coerces the year with #to_int 1777s - handles a String month given as a numeral 1777s - handles a String month given as a short month name 1777s - coerces the month with #to_str 1777s - coerces the month with #to_int 1777s - handles a String day 1777s - coerces the day with #to_int 1777s - handles a String hour 1777s - coerces the hour with #to_int 1777s - handles a String minute 1777s - coerces the minute with #to_int 1777s - handles a String second 1777s - coerces the second with #to_int 1777s - interprets all numerals as base 10 1777s - handles fractional seconds as a Float 1777s - handles fractional seconds as a Rational 1777s - handles years from 0 as such 1777s - accepts various year ranges 1777s - raises an ArgumentError for out of range month 1777s - raises an ArgumentError for out of range day 1777s - raises an ArgumentError for out of range hour 1777s - raises an ArgumentError for out of range minute 1777s - raises an ArgumentError for out of range second 1777s - raises ArgumentError when given 9 arguments 1777s - raises ArgumentError when given 11 arguments 1777s - returns subclass instances 1777s - handles string arguments 1777s - handles float arguments 1777s - raises an ArgumentError for out of range values 1777s - handles microseconds 1777s - raises an ArgumentError for out of range microsecond 1777s - handles fractional microseconds as a Float 1777s - handles fractional microseconds as a Rational 1777s - ignores fractional seconds if a passed whole number of microseconds 1777s - ignores fractional seconds if a passed fractional number of microseconds 1777s 1777s Time#utc 1777s - converts self to UTC, modifying the receiver 1777s - returns self 1777s 1777s Time#utc on a frozen time 1777s - does not raise an error if already in UTC 1777s - raises a FrozenError if the time is not UTC 1777s 1777s Time#wday 1777s - returns an integer representing the day of the week, 0..6, with Sunday being 0 1777s 1777s Time#wednesday? 1777s - returns true if time represents Wednesday 1777s - returns false if time doesn't represent Wednesday 1777s 1777s Time#yday 1777s - returns an integer representing the day of the year, 1..366 1777s - returns the correct value for each day of each month 1777s 1777s Time#year 1777s - returns the four digit year for a local Time as an Integer 1777s - returns the four digit year for a UTC Time as an Integer 1777s - returns the four digit year for a Time with a fixed offset 1777s 1777s Time#zone 1777s - returns the time zone used for time 1777s - returns nil for a Time with a fixed offset 1777s - returns the correct timezone for a local time 1777s - returns nil when getting the local time with a fixed offset 1777s 1777s Time#zone Encoding.default_internal is set 1777s - returns an ASCII string 1777s - doesn't raise errors for a Time with a fixed offset 1777s 1777s TrueClass#& 1777s - returns false if other is nil or false, otherwise true 1777s 1777s TrueClass#=== 1777s - returns true for true 1777s - returns false for non-true object 1777s 1777s TrueClass#dup 1777s - returns self 1777s 1777s TrueClass#inspect 1777s - returns the string 'true' 1777s 1777s TrueClass#| 1777s - returns true 1777s 1777s TrueClass#to_s 1777s - returns the string 'true' 1777s - returns a frozen string 1777s - always returns the same string 1777s 1777s TrueClass 1777s - .allocate raises a TypeError 1777s - .new is undefined 1777s 1777s TrueClass#^ 1777s - returns true if other is nil or false, otherwise false 1777s 1777s UnboundMethod#arity returns zero 1777s - for method definition 'def m() end' 1777s - for method definition 'def n(&b) end' 1777s 1777s UnboundMethod#arity returns positive values 1777s - for method definition 1777s def m(a) end 1777s def n(a, b) end 1777s def o(a, b, c) end 1777s def p(a, b, c, d) end 1777s - for method definition 1777s def m(a:) end 1777s def n(a:, b:) end 1777s def o(a: 1, b:, c:, d: 2) end 1777s - for method definition 1777s def m(a, b:) end 1777s def n(a, b:, &l) end 1777s - for method definition 1777s def m(a, b, c:, d: 1) end 1777s def n(a, b, c:, d: 1, **k, &l) end 1777s 1777s UnboundMethod#arity returns negative values 1777s - for method definition 1777s def m(a=1) end 1777s def n(a=1, b=2) end 1777s - for method definition 1777s def m(a, b=1) end 1777s def n(a, b, c=1, d=2) end 1777s - for method definition 1777s def m(a=1, *b) end 1777s def n(a=1, b=2, *c) end 1777s - for method definition 1777s def m(*) end 1777s def n(*a) end 1777s - for method definition 1777s def m(a, *) end 1777s def n(a, *b) end 1777s def o(a, b, *c) end 1777s def p(a, b, c, *d) end 1777s - for method definition 1777s def m(*a, b) end 1777s def n(*a, b, c) end 1777s def o(*a, b, c, d) end 1777s - for method definition 1777s def m(a, *b, c) end 1777s def n(a, b, *c, d, e) end 1777s - for method definition 1777s def m(a, b=1, c=2, *d, e, f) end 1777s def n(a, b, c=1, *d, e, f, g) end 1777s - for method definition 1777s def m(a: 1) end 1777s def n(a: 1, b: 2) end 1777s - for method definition 1777s def m(a=1, b: 2) end 1777s def n(*a, b: 1) end 1777s def o(a=1, b: 2) end 1777s def p(a=1, *b, c: 2, &l) end 1777s - for method definition 1777s def m(**k, &l) end 1777s def n(*a, **k) end 1777s def o(a: 1, b: 2, **k) end 1777s - for method definition 'def m(a=1, *b, c:, d: 2, **k, &l) end' 1777s - for method definition 1777s def m(a, b=1, *c, d, e:, f: 2, **k, &l) end 1777s def n(a, b=1, *c, d:, e:, f: 2, **k, &l) end 1777s def o(a=0, b=1, *c, d, e:, f: 2, **k, &l) end 1777s def p(a=0, b=1, *c, d:, e:, f: 2, **k, &l) end 1777s 1777s UnboundMethod#arity for a Method generated by respond_to_missing? 1777s - returns -1 1777s 1777s UnboundMethod#bind_call 1777s - raises TypeError if object is not kind_of? the Module the method defined in 1777s - binds and calls the method if object is kind_of the Module the method defined in 1777s - binds and calls the method on any object when UnboundMethod is unbound from a module 1777s - binds and calls the method for any object kind_of? the Module the method is defined in 1777s - binds and calls a Kernel method retrieved from Object on BasicObject 1777s - binds and calls a Parent's class method to any Child's class methods 1777s - will raise when binding a an object singleton's method to another object 1777s - allows calling super for module methods bound to hierarchies that do not already have that module 1777s 1777s UnboundMethod#bind 1777s - raises TypeError if object is not kind_of? the Module the method defined in 1777s - returns Method for any object that is kind_of? the Module method was extracted from 1777s - returns Method on any object when UnboundMethod is unbound from a module 1777s - the returned Method is equal to the one directly returned by obj.method 1777s - returns Method for any object kind_of? the Module the method is defined in 1777s - allows binding a Kernel method retrieved from Object on BasicObject 1777s - returns a callable method 1777s - binds a Parent's class method to any Child's class methods 1777s - will raise when binding a an object singleton's method to another object 1777s - allows calling super for module methods bound to hierarchies that do not already have that module 1777s 1777s UnboundMethod#clone 1777s - returns a copy of the UnboundMethod 1777s 1777s UnboundMethod#eql? 1777s - needs to be reviewed for spec completeness 1777s 1777s Creating UnboundMethods 1777s - there is no difference between Method#unbind and Module#instance_method 1777s 1777s UnboundMethod#== 1777s - returns true if objects refer to the same method 1777s - returns true if either is an alias for the other 1777s - returns true if both are aliases for a third method 1777s - returns true if same method is extracted from the same subclass 1777s - returns false if UnboundMethods are different methods 1777s - returns false if both have identical body but are not the same 1777s - returns false if same method but one extracted from a subclass 1777s - returns false if same method but extracted from two different subclasses 1777s - returns false if methods are the same but added from an included Module 1777s - returns false if both have same Module, same name, identical body but not the same 1777s 1777s UnboundMethod#hash 1777s - returns the same value for user methods that are eql? 1777s - returns the same value for builtin methods that are eql? 1777s - equals a hash of the same method in the superclass 1777s 1777s UnboundMethod#inspect 1777s - returns a String 1777s - the String reflects that this is an UnboundMethod object 1777s - the String shows the method name, Module defined in and Module extracted from 1777s - returns a String including all details 1777s - does not show the defining module if it is the same as the origin 1777s 1777s UnboundMethod#name 1777s - returns the name of the method 1777s - returns the name even when aliased 1777s 1777s UnboundMethod#original_name 1777s - returns the name of the method 1777s - returns the original name 1777s - returns the original name even when aliased twice 1777s 1777s UnboundMethod#owner 1777s - returns the owner of the method 1777s - returns the same owner when aliased in the same classes 1777s - returns the class/module it was defined in 1777s - returns the new owner for aliased methods on singleton classes 1777s 1777s UnboundMethod#parameters 1777s - needs to be reviewed for spec completeness 1777s 1777s UnboundMethod#private? 1777s - returns false when the method is public 1777s - returns false when the method is protected 1777s - returns true when the method is private 1777s 1777s UnboundMethod#protected? 1777s - returns false when the method is public 1777s - returns true when the method is protected 1777s - returns false when the method is private 1777s 1777s UnboundMethod#public? 1777s - returns true when the method is public 1777s - returns false when the method is protected 1777s - returns false when the method is private 1777s 1777s UnboundMethod#source_location 1777s - sets the first value to the path of the file in which the method was defined 1777s - sets the last value to an Integer representing the line on which the method was defined 1777s - returns the last place the method was defined 1777s - returns the location of the original method even if it was aliased 1777s - works for define_method methods 1777s - works for define_singleton_method methods 1777s - works for eval with a given line 1777s 1777s UnboundMethod#super_method 1777s - returns the method that would be called by super in the method 1777s - returns nil when there's no super method in the parent 1777s - returns nil when the parent's method is removed 1777s 1777s UnboundMethod#super_method after changing an inherited methods visibility 1777s - calls the proper super method 1777s - returns the expected super_method 1777s 1777s UnboundMethod#super_method after aliasing an inherited method 1777s - returns the expected super_method 1777s 1777s UnboundMethod#to_s 1777s - returns a String 1777s - the String reflects that this is an UnboundMethod object 1777s - the String shows the method name, Module defined in and Module extracted from 1777s - returns a String including all details 1777s - does not show the defining module if it is the same as the origin 1777s 1777s Warning.[] 1784s - returns default values for categories :deprecated and :experimental 1784s - raises for unknown category 1784s - raises for non-Symbol category 1784s 1784s Warning.[]= 1790s - emits and suppresses warnings for :deprecated 1790s - raises for unknown category 1790s - raises for non-Symbol category 1790s 1790s Warning.[]= :experimental 1796s - emits and suppresses warnings for :experimental 1796s 1796s Warning.warn 1796s - complains 1799s - does not add a newline 1802s - returns nil 1802s - extends itself 1805s - has Warning as the method owner 1808s - can be overridden 1808s - is called by parser warnings 1808s - is called by Kernel.warn with nil category keyword 1808s - is called by Kernel.warn with given category keyword converted to a symbol 1808s - warns when category is :deprecated and Warning[:deprecated] is true 1808s - warns when category is :experimental and Warning[:experimental] is true 1808s - doesn't print message when category is :deprecated but Warning[:deprecated] is false 1808s - doesn't print message when category is :experimental but Warning[:experimental] is false 1808s - prints the message when VERBOSE is false 1808s - prints the message when VERBOSE is nil 1808s - prints the message when VERBOSE is true 1808s 1808s English 1808s - aliases $ERROR_INFO to $! 1808s - aliases $ERROR_POSITION to $@ 1808s - aliases $FS to $; 1808s - aliases $FIELD_SEPARATOR to $; 1808s - aliases $OFS to $, 1808s - aliases $OUTPUT_FIELD_SEPARATOR to $, 1808s - aliases $RS to $/ 1808s - aliases $INPUT_RECORD_SEPARATOR to $/ 1808s - aliases $ORS to $\ 1808s - aliases $OUTPUT_RECORD_SEPARATOR to $\ 1808s - aliases $INPUT_LINE_NUMBER to $. 1808s - aliases $NR to $. 1808s - aliases $LAST_READ_LINE to $_ needs to be reviewed for spec completeness 1808s - aliases $DEFAULT_OUTPUT to $> 1808s - aliases $DEFAULT_INPUT to $< 1808s - aliases $PID to $$ 1808s - aliases $PID to $$ 1808s - aliases $PROCESS_ID to $$ 1811s - aliases $CHILD_STATUS to $? 1811s - aliases $LAST_MATCH_INFO to $~ 1811s - aliases $IGNORECASE to $= 1811s - aliases $ARGV to $* 1811s - aliases $MATCH to $& 1811s - aliases $PREMATCH to $` 1811s - aliases $POSTMATCH to $' 1811s - aliases $LAST_PAREN_MATCH to $+ 1811s 1811s English 1811s - aliases $! to $ERROR_INFO and $ERROR_INFO still returns an Exception with a backtrace 1811s - aliases $@ to $ERROR_POSITION and $ERROR_POSITION still returns a backtrace 1811s 1811s Abbrev.abbrev 1811s - returns a hash of all unambiguous abbreviations of the array of strings passed in 1811s - returns an empty hash when called on an empty array 1811s 1811s Array#abbrev 1811s - returns a hash of all unambiguous abbreviations of the array of strings passed in 1811s - returns an empty hash when called on an empty array 1811s 1811s Base64#decode64 1811s - returns the Base64-decoded version of the given string 1811s - returns the Base64-decoded version of the given shared string 1811s - returns the Base64-decoded version of the given string with wrong padding 1811s - returns the Base64-decoded version of the given string that contains an invalid character 1811s - returns a binary encoded string 1811s - decodes without padding suffix == 1811s 1811s Base64#encode64 1811s - returns the Base64-encoded version of the given string 1811s - returns the Base64-encoded version of the given string 1811s - returns the Base64-encoded version of the given shared string 1811s - returns a US_ASCII encoded string 1811s 1811s Base64#strict_decode64 1811s - returns the Base64-decoded version of the given string 1811s - returns the Base64-decoded version of the given shared string 1811s - raises ArgumentError when the given string contains CR 1811s - raises ArgumentError when the given string contains LF 1811s - raises ArgumentError when the given string has wrong padding 1811s - raises ArgumentError when the given string contains an invalid character 1811s - returns a binary encoded string 1811s 1811s Base64#strict_encode64 1811s - returns the Base64-encoded version of the given string 1811s - returns the Base64-encoded version of the given shared string 1811s - returns a US_ASCII encoded string 1811s 1811s Base64#urlsafe_decode64 1811s - uses '_' instead of '/' 1811s - uses '-' instead of '+' 1811s - does not require padding 1811s 1811s Base64#urlsafe_encode64 1811s - uses '_' instead of '/' 1811s - uses '-' instead of '+' 1811s - makes padding optional 1811s 1811s BigDecimal 1814s - is not defined unless it is required 1814s 1814s Kernel#BigDecimal 1814s - creates a new object of class BigDecimal 1814s - BigDecimal(Rational) with bigger-than-double numerator 1814s - accepts significant digits >= given precision 1814s - determines precision from initial value 1814s - ignores leading and trailing whitespace 1814s - coerces the value argument with #to_str 1814s - does not ignores trailing garbage 1814s - raises ArgumentError for invalid strings 1814s - allows omitting the integer part 1814s - process underscores as Float() 1815s - accepts NaN and [+-]Infinity 1815s - allows for [eEdD] as exponent separator 1815s - allows for varying signs 1815s - raises ArgumentError when Float is used without precision 1815s - returns appropriate BigDecimal zero for signed zero 1815s - pre-coerces long integers 1818s - does not call to_s when calling inspect 1818s 1818s Kernel#BigDecimal accepts NaN and [+-]Infinity as Float values 1818s - works without an explicit precision 1818s - works with an explicit precision 1818s 1818s Kernel#BigDecimal when interacting with Rational 1818s - has the LHS print as expected 1818s - has the RHS print as expected 1818s - produces the expected result when done via Float 1818s - produces the expected result when done via to_f 1818s - BigDecimal(Rational, 18) produces the result we expect 1818s - produces a BigDecimal 1818s - produces the expected result 1818s - produces the correct class for other arithmetic operators 1818s 1818s BigDecimal#abs 1818s - returns the absolute value 1818s - properly handles special values 1818s 1818s BigDecimal#add 1818s - returns a + b with given precision 1818s - returns a + [Fixnum value] with given precision 1818s - returns a + [Bignum value] with given precision 1818s - favors the precision specified in the second argument over the global limit 1818s - uses the current rounding mode if rounding is needed 1818s - uses the default ROUND_HALF_UP rounding if it wasn't explicitly changed 1818s - returns NaN if NaN is involved 1818s - returns Infinity or -Infinity if these are involved 1818s - returns NaN if Infinity + (- Infinity) 1818s - raises TypeError when adds nil 1818s - raises TypeError when precision parameter is nil 1818s - raises ArgumentError when precision parameter is negative 1818s 1818s BigDecimal#add with Object 1818s - tries to coerce the other operand to self 1818s 1818s BigDecimal#add with Rational 1818s - produces a BigDecimal 1818s 1818s BigDecimal#=== 1818s - tests for equality 1818s - returns false for NaN as it is never equal to any number 1818s - returns true for infinity values with the same sign 1818s - returns false for infinity values with different signs 1818s - returns false when infinite value compared to finite one 1818s - returns false when compared objects that can not be coerced into BigDecimal 1818s 1818s BigDecimal#ceil 1818s - returns an Integer, if n is unspecified 1818s - returns a BigDecimal, if n is specified 1818s - returns the smallest integer greater or equal to self, if n is unspecified 1818s - raise exception, if self is special value 1818s - returns n digits right of the decimal point if given n > 0 1818s - sets n digits left of the decimal point to 0, if given n < 0 1818s 1818s BigDecimal#dup 1818s - returns self 1818s 1818s BigDecimal#coerce 1818s - returns [other, self] both as BigDecimal 1818s 1818s BigDecimal#<=> 1818s - returns 0 if a == b 1818s - returns 1 if a > b 1818s - returns -1 if a < b 1818s - returns nil if NaN is involved 1818s - returns nil if the argument is nil 1818s 1818s BigDecimal constants 1818s - defines a VERSION value 1818s - has a BASE value 1818s - has a NaN value 1818s - has an INFINITY value 1818s 1818s BigDecimal constants exception-related constants 1818s - has a EXCEPTION_ALL value 1818s - has a EXCEPTION_INFINITY value 1818s - has a EXCEPTION_NaN value 1818s - has a EXCEPTION_UNDERFLOW value 1818s - has a EXCEPTION_OVERFLOW value 1818s - has a EXCEPTION_ZERODIVIDE value 1818s 1818s BigDecimal constants rounding-related constants 1818s - has a ROUND_MODE value 1818s - has a ROUND_UP value 1818s - has a ROUND_DOWN value 1818s - has a ROUND_HALF_UP value 1818s - has a ROUND_HALF_DOWN value 1818s - has a ROUND_CEILING value 1818s - has a ROUND_FLOOR value 1818s - has a ROUND_HALF_EVEN value 1818s 1818s BigDecimal constants sign-related constants 1818s - has a SIGN_NaN value 1818s - has a SIGN_POSITIVE_ZERO value 1818s - has a SIGN_NEGATIVE_ZERO value 1818s - has a SIGN_POSITIVE_FINITE value 1818s - has a SIGN_NEGATIVE_FINITE value 1818s - has a SIGN_POSITIVE_INFINITE value 1818s - has a SIGN_NEGATIVE_INFINITE value 1818s 1818s BigDecimal#div with precision set to 0 1819s - returns a / b 1819s - returns 0 if divided by Infinity 1819s - returns (+|-) Infinity if (+|-) Infinity divided by one 1819s - returns NaN if Infinity / ((+|-) Infinity) 1819s - returns (+|-) Infinity if divided by zero 1819s - returns NaN if zero is divided by zero 1819s 1819s BigDecimal#div with precision set to 0 with Object 1819s - tries to coerce the other operand to self 1819s 1819s BigDecimal#div 1819s - returns a / b with optional precision 1819s - raises FloatDomainError if NaN is involved 1819s - returns 0 if divided by Infinity and no precision given 1819s - returns 0 if divided by Infinity with given precision 1819s - raises ZeroDivisionError if divided by zero and no precision given 1819s - returns NaN if zero is divided by zero 1819s - raises FloatDomainError if (+|-) Infinity divided by 1 and no precision given 1819s - returns (+|-)Infinity if (+|-)Infinity by 1 and precision given 1819s - returns NaN if Infinity / ((+|-) Infinity) 1819s 1819s BigDecimal#div with Object 1819s - tries to coerce the other operand to self 1819s 1819s BigDecimal#/ 1819s - returns a / b 1819s - returns 0 if divided by Infinity 1819s - returns (+|-) Infinity if (+|-) Infinity divided by one 1819s - returns NaN if Infinity / ((+|-) Infinity) 1819s - returns (+|-) Infinity if divided by zero 1819s - returns NaN if zero is divided by zero 1819s 1819s BigDecimal#/ with Object 1819s - tries to coerce the other operand to self 1819s 1819s BigDecimal#/ with Rational 1819s - produces a BigDecimal 1819s 1819s BigDecimal#mod_part_of_divmod 1819s - returns self modulo other 1819s - returns a [Float value] when the argument is Float 1819s - returns NaN if NaN is involved 1819s - returns NaN if the dividend is Infinity 1819s - returns the dividend if the divisor is Infinity 1819s - raises TypeError if the argument cannot be coerced to BigDecimal 1819s - raises ZeroDivisionError if other is zero 1819s 1819s BigDecimal#mod_part_of_divmod with Object 1819s - tries to coerce the other operand to self 1819s 1819s BigDecimal#divmod 1819s - divides value, returns an array 1819s - array contains quotient and modulus as BigDecimal 1820s - can be reversed with * and + 1820s - returns an array of two NaNs if NaN is involved 1820s - raises ZeroDivisionError if the divisor is zero 1820s - returns an array of Infinity and NaN if the dividend is Infinity 1820s - returns an array of zero and the dividend if the divisor is Infinity 1820s - returns an array of two zero if the dividend is zero 1820s - raises TypeError if the argument cannot be coerced to BigDecimal 1820s 1820s BigDecimal.double_fig 1820s - returns the number of digits a Float number is allowed to have 1820s 1820s BigDecimal#dup 1820s - returns self 1820s 1820s BigDecimal#eql? 1820s - tests for equality 1820s - returns false for NaN as it is never equal to any number 1820s - returns true for infinity values with the same sign 1820s - returns false for infinity values with different signs 1820s - returns false when infinite value compared to finite one 1820s - returns false when compared objects that can not be coerced into BigDecimal 1820s 1820s BigDecimal#== 1820s - tests for equality 1820s - returns false for NaN as it is never equal to any number 1820s - returns true for infinity values with the same sign 1820s - returns false for infinity values with different signs 1820s - returns false when infinite value compared to finite one 1820s - returns false when compared objects that can not be coerced into BigDecimal 1820s 1820s BigDecimal#** 1820s - powers of self 1820s - powers of 1 equal 1 1820s - 0 to power of 0 is 1 1820s - 0 to powers < 0 is Infinity 1820s - other powers of 0 are 0 1820s - returns NaN if self is NaN 1820s - returns 0.0 if self is infinite and argument is negative 1820s - returns infinite if self is infinite and argument is positive 1820s 1820s BigDecimal#exponent 1820s - returns an Integer 1820s - is n if number can be represented as 0.xxx*10**n 1820s - returns 0 if self is 0 1820s 1820s BigDecimal#finite? 1820s - is false if Infinity or NaN 1820s - returns true for finite values 1820s 1820s BigDecimal#fix 1820s - returns a BigDecimal 1820s - returns the integer part of the absolute value 1820s - correctly handles special values 1820s - returns 0 if the absolute value is < 1 1820s - does not allow any arguments 1820s 1820s BigDecimal#floor 1820s - returns the greatest integer smaller or equal to self 1820s - raise exception, if self is special value 1820s - returns n digits right of the decimal point if given n > 0 1820s - sets n digits left of the decimal point to 0, if given n < 0 1820s 1820s BigDecimal#frac 1820s - returns a BigDecimal 1820s - returns the fractional part of the absolute value 1820s - returns 0 if the value is 0 1820s - returns 0 if the value is an integer 1820s - correctly handles special values 1820s 1820s BigDecimal#> 1820s - returns true if a > b 1820s - properly handles infinity values 1820s - properly handles Float infinity values 1820s - properly handles NaN values 1820s - raises an ArgumentError if the argument can't be coerced into a BigDecimal 1820s 1820s BigDecimal#>= 1820s - returns true if a >= b 1820s - properly handles infinity values 1820s - properly handles Float infinity values 1820s - properly handles NaN values 1820s - returns nil if the argument is nil 1820s 1820s BidDecimal#hash two BigDecimal objects with the same value 1820s - should have the same hash for ordinary values 1820s - should have the same hash for infinite values 1820s - should have the same hash for NaNs 1820s - should have the same hash for zero values 1820s 1820s BidDecimal#hash two BigDecimal objects with numerically equal values 1820s - should have the same hash value 1820s 1820s BigDecimal#infinite? 1820s - returns 1 if self is Infinity 1820s - returns -1 if self is -Infinity 1820s - returns not true otherwise 1820s - returns not true if self is NaN 1820s 1820s BigDecimal#inspect 1820s - returns String 1820s - looks like this 1820s - does not add an exponent for zero values 1820s - properly cases non-finite values 1820s 1820s BigDecimal.limit 1820s - returns the value before set if the passed argument is nil or is not specified 1820s - uses the global limit if no precision is specified 1820s - picks the specified precision over global limit 1820s - picks the global precision when limit 0 specified 1820s 1820s BigDecimal#< 1820s - returns true if a < b 1820s - properly handles infinity values 1820s - properly handles Float infinity values 1820s - properly handles NaN values 1820s - raises an ArgumentError if the argument can't be coerced into a BigDecimal 1820s 1820s BigDecimal#<= 1820s - returns true if a <= b 1820s - properly handles infinity values 1820s - properly handles Float infinity values 1820s - properly handles NaN values 1820s - raises an ArgumentError if the argument can't be coerced into a BigDecimal 1820s 1820s BigDecimal#- 1820s - returns a - b 1820s - returns NaN if NaN is involved 1820s - returns NaN both operands are infinite with the same sign 1820s - returns Infinity or -Infinity if these are involved 1820s 1820s BigDecimal#- with Object 1820s - tries to coerce the other operand to self 1820s 1820s BigDecimal.mode 1820s - returns the appropriate value and continue the computation if the flag is false 1820s - returns Infinity when too big 1820s - raise an exception if the flag is true 1820s 1820s BigDecimal#% 1820s - returns self modulo other 1820s - returns a [Float value] when the argument is Float 1820s - returns NaN if NaN is involved 1820s - returns NaN if the dividend is Infinity 1820s - returns the dividend if the divisor is Infinity 1820s - raises TypeError if the argument cannot be coerced to BigDecimal 1820s - raises ZeroDivisionError if other is zero 1820s 1820s BigDecimal#% with Object 1820s - tries to coerce the other operand to self 1820s 1820s BigDecimal#modulo 1820s - returns self modulo other 1820s - returns a [Float value] when the argument is Float 1820s - returns NaN if NaN is involved 1820s - returns NaN if the dividend is Infinity 1820s - returns the dividend if the divisor is Infinity 1820s - raises TypeError if the argument cannot be coerced to BigDecimal 1820s - raises ZeroDivisionError if other is zero 1820s 1820s BigDecimal#modulo with Object 1820s - tries to coerce the other operand to self 1820s 1820s BigDecimal#mult 1820s - returns zero of appropriate sign if self or argument is zero 1820s - returns NaN if NaN is involved 1820s - returns zero if self or argument is zero 1820s - returns infinite value if self or argument is infinite 1820s - returns NaN if the result is undefined 1820s 1820s BigDecimal#mult 1820s - multiply self with other with (optional) precision 1820s 1820s BigDecimal#mult with Object 1820s - tries to coerce the other operand to self 1820s 1820s BigDecimal#* 1820s - returns zero of appropriate sign if self or argument is zero 1820s - returns NaN if NaN is involved 1820s - returns zero if self or argument is zero 1820s - returns infinite value if self or argument is infinite 1820s - returns NaN if the result is undefined 1820s 1820s BigDecimal#* 1820s - multiply self with other 1820s 1820s BigDecimal#* with Object 1820s - tries to coerce the other operand to self 1820s 1820s BigDecimal#* with Rational 1820s - produces a BigDecimal 1820s 1820s BigDecimal#nan? 1820s - returns true if self is not a number 1820s - returns false if self is not a NaN 1820s 1820s BigDecimal#nonzero? 1820s - returns self if self doesn't equal zero 1820s - returns nil otherwise 1820s 1820s BigDecimal#+ 1820s - returns a + b 1820s - returns NaN if NaN is involved 1820s - returns Infinity or -Infinity if these are involved 1820s - returns NaN if Infinity + (- Infinity) 1820s 1820s BigDecimal#+ with Object 1820s - tries to coerce the other operand to self 1820s 1820s BigDecimal#power 1820s - powers of self 1820s - powers of 1 equal 1 1820s - 0 to power of 0 is 1 1820s - 0 to powers < 0 is Infinity 1820s - other powers of 0 are 0 1820s - returns NaN if self is NaN 1820s - returns 0.0 if self is infinite and argument is negative 1820s - returns infinite if self is infinite and argument is positive 1820s 1820s BigDecimal#precs 1820s - returns array of two values 1820s - returns Integers as array values 1820s - returns the current value of significant digits as the first value 1820s - returns the maximum number of significant digits as the second value 1820s 1820s BigDecimal#quo 1821s - returns a / b 1821s - returns 0 if divided by Infinity 1821s - returns (+|-) Infinity if (+|-) Infinity divided by one 1821s - returns NaN if Infinity / ((+|-) Infinity) 1821s - returns (+|-) Infinity if divided by zero 1821s - returns NaN if zero is divided by zero 1821s - returns NaN if NaN is involved 1821s 1821s BigDecimal#quo with Object 1821s - tries to coerce the other operand to self 1821s 1821s BigDecimal#remainder 1821s - it equals modulo, if both values are of same sign 1822s - means self-arg*(self/arg).truncate 1822s - returns NaN used with zero 1822s - returns zero if used on zero 1822s - returns NaN if NaN is involved 1822s - coerces arguments to BigDecimal if possible 1822s - raises TypeError if the argument cannot be coerced to BigDecimal 1822s 1822s BigDecimal#remainder with Object 1822s - tries to coerce the other operand to self 1822s 1822s BigDecimal#round 1822s - uses default rounding method unless given 1822s - raise exception, if self is special value 1822s - do not raise exception, if self is special value and precision is given 1822s - raise for a non-existent round mode 1822s 1822s BigDecimal#round BigDecimal::ROUND_UP 1822s - rounds values away from zero 1822s 1822s BigDecimal#round :up 1822s - rounds values away from zero 1822s 1822s BigDecimal#round BigDecimal::ROUND_DOWN 1822s - rounds values towards zero 1822s 1822s BigDecimal#round :down 1822s - rounds values towards zero 1822s 1822s BigDecimal#round :truncate 1822s - rounds values towards zero 1822s 1822s BigDecimal#round BigDecimal::ROUND_HALF_UP 1822s - rounds values >= 5 up, otherwise down 1822s 1822s BigDecimal#round :half_up 1822s - rounds values >= 5 up, otherwise down 1822s 1822s BigDecimal#round :default 1822s - rounds values >= 5 up, otherwise down 1822s 1822s BigDecimal#round BigDecimal::ROUND_HALF_DOWN 1822s - rounds values > 5 up, otherwise down 1822s 1822s BigDecimal#round :half_down 1822s - rounds values > 5 up, otherwise down 1822s 1822s BigDecimal#round BigDecimal::ROUND_CEILING 1822s - rounds values towards +infinity 1822s 1822s BigDecimal#round :ceiling 1822s - rounds values towards +infinity 1822s 1822s BigDecimal#round :ceil 1822s - rounds values towards +infinity 1822s 1822s BigDecimal#round BigDecimal::ROUND_FLOOR 1822s - rounds values towards -infinity 1822s 1822s BigDecimal#round :floor 1822s - rounds values towards -infinity 1822s 1822s BigDecimal#round BigDecimal::ROUND_HALF_EVEN 1822s - rounds values > 5 up, < 5 down and == 5 towards even neighbor 1822s 1822s BigDecimal#round :half_even 1822s - rounds values > 5 up, < 5 down and == 5 towards even neighbor 1822s 1822s BigDecimal#round :banker 1822s - rounds values > 5 up, < 5 down and == 5 towards even neighbor 1822s 1822s BigDecimal#sign 1822s - defines several constants for signs 1822s - returns positive value if BigDecimal greater than 0 1822s - returns negative value if BigDecimal less than 0 1822s - returns positive zero if BigDecimal equals positive zero 1822s - returns negative zero if BigDecimal equals negative zero 1822s - returns BigDecimal::SIGN_NaN if BigDecimal is NaN 1822s 1822s BigDecimal#split 1822s - splits BigDecimal in an array with four values 1822s - first value: 1 for numbers > 0 1822s - first value: -1 for numbers < 0 1822s - first value: 0 if BigDecimal is NaN 1822s - second value: a string with the significant digits 1822s - third value: the base (currently always ten) 1822s - fourth value: the exponent 1822s 1822s BigDecimal#sqrt 1822s - returns square root of 2 with desired precision 1822s - returns square root of 3 with desired precision 1822s - returns square root of 121 with desired precision 1836s - returns square root of 0.9E-99999 with desired precision 1836s - raises ArgumentError when no argument is given 1836s - raises ArgumentError if a negative number is given 1836s - raises ArgumentError if 2 arguments are given 1836s - raises TypeError if nil is given 1836s - raises TypeError if a string is given 1836s - raises TypeError if a plain Object is given 1836s - returns 1 if precision is 0 or 1 1836s - raises FloatDomainError on negative values 1836s - returns positive infinity for infinity 1836s - raises FloatDomainError for negative infinity 1836s - raises FloatDomainError for NaN 1836s - returns 0 for 0, +0.0 and -0.0 1836s 1836s BigDecimal#sub 1836s - returns a - b with given precision 1836s - returns NaN if NaN is involved 1836s - returns NaN if both values are infinite with the same signs 1836s - returns Infinity or -Infinity if these are involved 1836s 1836s BigDecimal#sub with Object 1836s - tries to coerce the other operand to self 1836s 1836s BigDecimal#sub with Rational 1836s - produces a BigDecimal 1836s 1836s Float#to_d 1836s - returns appropriate BigDecimal zero for signed zero 1836s 1836s BigDecimal#to_f 1836s - returns number of type float 1836s - rounds correctly to Float precision 1836s - properly handles special values 1836s - remembers negative zero when converted to float 1836s 1836s BigDecimal#to_i 1836s - raises FloatDomainError if BigDecimal is infinity or NaN 1836s - returns Integer otherwise 1836s 1836s BigDecimal#to_int 1836s - raises FloatDomainError if BigDecimal is infinity or NaN 1836s - returns Integer otherwise 1836s 1836s BigDecimal#to_r 1836s - returns a Rational 1836s - returns a Rational with bignum values 1836s - returns a Rational from a BigDecimal with an exponent 1836s - returns a Rational from a negative BigDecimal with an exponent 1836s 1836s BigDecimal#to_s 1836s - return type is of class String 1836s - the default format looks like 0.xxxxenn 1836s - does not add an exponent for zero values 1836s - takes an optional argument 1836s - starts with + if + is supplied and value is positive 1836s - inserts a space every n chars to fraction part, if integer n is supplied 1836s - can return a leading space for values > 0 1836s - removes trailing spaces in floating point notation 1836s - can use engineering notation 1836s - can use conventional floating point notation 1836s - returns a String in US-ASCII encoding when Encoding.default_internal is nil 1836s - returns a String in US-ASCII encoding when Encoding.default_internal is not nil 1836s 1836s BigDecimal#truncate 1836s - returns value of type Integer. 1836s - returns the integer part as a BigDecimal if no precision given 1836s - returns value of given precision otherwise 1836s - sets n digits left of the decimal point to 0, if given n < 0 1836s - returns NaN if self is NaN 1836s - returns Infinity if self is infinite 1836s - returns the same value if self is special value 1836s 1836s BigDecimal#-@ 1836s - negates self 1836s - properly handles special values 1836s 1836s BigDecimal#+@ 1836s - returns the same value with same sign (twos complement) 1836s 1836s BigDecimal's util method definitions #to_d 1836s - should define #to_d on Integer 1836s - should define #to_d on Float 1836s - should define #to_d on String 1836s - should define #to_d on BigDecimal 1836s - should define #to_d on Rational 1836s - should define #to_d on nil 1836s 1836s BigDecimal's util method definitions #to_digits 1836s - should define #to_digits on BigDecimal 1836s 1836s BigDecimal#zero? 1836s - returns true if self does equal zero 1836s - returns false otherwise 1836s 1836s BigDecimal#log 1836s - handles high-precision Rational arguments 1836s 1836s CGI::Cookie#domain 1836s - returns self's domain 1836s 1836s CGI::Cookie#domain= 1836s - sets self's domain 1836s 1836s CGI::Cookie#expires 1836s - returns self's expiration date 1836s 1836s CGI::Cookie#expires= 1836s - sets self's expiration date 1836s 1836s CGI::Cookie#initialize when passed String 1836s - sets the self's name to the passed String 1836s - sets the self's value to an empty Array 1836s - sets self to a non-secure cookie 1836s - does set self's path to an empty String when ENV["SCRIPT_NAME"] is not set 1836s - does set self's path based on ENV["SCRIPT_NAME"] when ENV["SCRIPT_NAME"] is set 1836s - does not set self's expiration date 1836s - does not set self's domain 1836s 1836s CGI::Cookie#initialize when passed Hash 1836s - sets self's contents based on the passed Hash 1836s - does set self's path based on ENV["SCRIPT_NAME"] when the Hash has no 'path' entry 1836s - tries to convert the Hash's 'value' to an Array using #Array 1836s - raises a ArgumentError when the passed Hash has no 'name' entry 1836s 1836s CGI::Cookie#initialize when passed String, values ... 1836s - sets the self's name to the passed String 1836s - sets the self's value to an Array containing all passed values 1836s - sets self to a non-secure cookie 1836s 1836s CGI::Cookie#name 1836s - returns self's name 1836s 1836s CGI::Cookie#name= 1836s - sets self's expiration date 1836s 1836s CGI::Cookie.parse 1836s - parses a raw cookie string into a hash of Cookies 1836s - does not use , for cookie separators 1836s - unescapes the Cookie values 1836s 1836s CGI::Cookie#path 1836s - returns self's path 1836s 1836s CGI::Cookie#path= 1836s - sets self's path 1836s 1836s CGI::Cookie#secure 1836s - returns whether self is a secure cookie or not 1836s 1836s CGI::Cookie#secure= when passed true 1836s - returns true 1836s - sets self to a secure cookie 1836s 1836s CGI::Cookie#secure= when passed false 1836s - returns false 1836s - sets self to a non-secure cookie 1836s 1836s CGI::Cookie#secure= when passed Object 1836s - does not change self's secure value 1836s 1836s CGI::Cookie#to_s 1836s - returns a String representation of self 1836s - escapes the self's values 1836s - does not escape tilde 1836s 1836s CGI::Cookie#value 1836s - returns self's value 1836s - is in synch with self 1836s 1836s CGI::Cookie#value= 1836s - sets self's value 1836s - automatically converts the passed Object to an Array using #Array 1836s - does keep self and the values in sync 1836s 1836s CGI.escapeElement when passed String, elements, ... 1836s - escapes only the tags of the passed elements in the passed String 1836s - is case-insensitive 1836s 1836s CGI.escapeHTML 1836s - escapes special HTML characters (&"<>') in the passed argument 1836s - escapes invalid encoding 1836s - does not escape any other characters 1836s 1836s CGI.escape 1836s - url-encodes the passed argument 1836s - does not escape tilde 1836s 1836s CGI::HtmlExtension#a when passed a String 1836s - returns an 'a'-element, using the passed String as the 'href'-attribute 1836s - includes the passed block's return value when passed a block 1836s 1836s CGI::HtmlExtension#a when passed a Hash 1836s - returns an 'a'-element, using the passed Hash for attributes 1836s - includes the passed block's return value when passed a block 1836s 1836s CGI::HtmlExtension#a when each HTML generation 1836s - returns the doctype declaration for HTML3 1836s - returns the doctype declaration for HTML4 1836s - returns the doctype declaration for the Transitional version of HTML4 1836s 1836s CGI::HtmlExtension#base when bassed a String 1836s - returns a 'base'-element, using the passed String as the 'href'-attribute 1836s - ignores a passed block 1836s 1836s CGI::HtmlExtension#base when passed a Hash 1836s - returns a 'base'-element, using the passed Hash for attributes 1836s - ignores a passed block 1836s 1836s CGI::HtmlExtension#blockquote when passed a String 1836s - returns a 'blockquote'-element, using the passed String for the 'cite'-attribute 1836s - includes the passed block's return value when passed a block 1836s 1836s CGI::HtmlExtension#blockquote when passed a Hash 1836s - returns a 'blockquote'-element, using the passed Hash for attributes 1836s - includes the passed block's return value when passed a block 1836s 1836s CGI::HtmlExtension#br when each HTML generation 1836s - returns the doctype declaration for HTML3 1836s - returns the doctype declaration for HTML4 1836s - returns the doctype declaration for the Transitional version of HTML4 1836s 1836s CGI::HtmlExtension#caption when passed a String 1836s - returns a 'caption'-element, using the passed String for the 'align'-attribute 1836s - includes the passed block's return value when passed a block 1836s 1836s CGI::HtmlExtension#caption when passed a Hash 1836s - returns a 'caption'-element, using the passed Hash for attributes 1836s - includes the passed block's return value when passed a block 1836s 1836s CGI::HtmlExtension#checkbox_group when passed name, values ... 1836s - returns a sequence of 'checkbox'-elements with the passed name and the passed values 1836s - allows passing a value inside an Array 1836s - allows passing a value as an Array containing the value and the checked state or a label 1836s - allows passing a value as an Array containing the value, a label and the checked state 1836s - returns an empty String when passed no values 1836s - ignores a passed block 1836s 1836s CGI::HtmlExtension#checkbox_group when passed Hash 1836s - uses the passed Hash to generate the checkbox sequence 1836s - ignores a passed block 1836s 1836s CGI::HtmlExtension#checkbox when passed no arguments 1836s - returns a checkbox-'input'-element without a name 1836s - ignores a passed block 1836s 1836s CGI::HtmlExtension#checkbox when passed name 1836s - returns a checkbox-'input'-element with the passed name 1836s - ignores a passed block 1836s 1836s CGI::HtmlExtension#checkbox CGI::HtmlExtension#checkbox when passed name, value 1836s - returns a checkbox-'input'-element with the passed name and value 1836s - ignores a passed block 1836s 1836s CGI::HtmlExtension#checkbox when passed name, value, checked 1836s - returns a checked checkbox-'input'-element with the passed name and value when checked is true 1836s - ignores a passed block 1836s 1836s CGI::HtmlExtension#checkbox when passed Hash 1836s - returns a checkbox-'input'-element using the passed Hash for attributes 1836s - ignores a passed block 1836s 1836s CGI::HtmlExtension#doctype when each HTML generation 1836s - returns the doctype declaration for HTML3 1836s - returns the doctype declaration for HTML4 1836s - returns the doctype declaration for the Frameset version of HTML4 1836s - returns the doctype declaration for the Transitional version of HTML4 1836s 1836s CGI::HtmlExtension#file_field when passed no arguments 1836s - returns a file-'input'-element without a name and a size of 20 1836s - ignores a passed block 1836s 1836s CGI::HtmlExtension#file_field when passed name 1836s - returns a checkbox-'input'-element with the passed name 1836s - ignores a passed block 1836s 1836s CGI::HtmlExtension#file_field when passed name, size 1836s - returns a checkbox-'input'-element with the passed name and size 1836s - ignores a passed block 1836s 1836s CGI::HtmlExtension#file_field when passed name, size, maxlength 1836s - returns a checkbox-'input'-element with the passed name, size and maxlength 1836s - ignores a passed block 1836s 1836s CGI::HtmlExtension#file_field when passed a Hash 1836s - returns a file-'input'-element using the passed Hash for attributes 1836s - ignores a passed block 1836s 1836s CGI::HtmlExtension#form when passed no arguments 1836s - returns a 'form'-element 1836s - includes the return value of the passed block when passed a block 1836s 1836s CGI::HtmlExtension#form when passed method 1836s - returns a 'form'-element with the passed method 1836s - includes the return value of the passed block when passed a block 1836s 1836s CGI::HtmlExtension#form when passed method, action 1836s - returns a 'form'-element with the passed method and the passed action 1836s - includes the return value of the passed block when passed a block 1836s 1836s CGI::HtmlExtension#form when passed method, action, enctype 1836s - returns a 'form'-element with the passed method, action and enctype 1836s - includes the return value of the passed block when passed a block 1836s 1836s CGI::HtmlExtension#frame 1836s - initializes the HTML Generation methods for the Frameset version of HTML4 1836s 1836s CGI::HtmlExtension#frameset 1836s - initializes the HTML Generation methods for the Frameset version of HTML4 1836s 1836s CGI::HtmlExtension#hidden when passed no arguments 1836s - returns an hidden-'input'-element without a name 1836s - ignores a passed block 1836s 1836s CGI::HtmlExtension#hidden when passed name 1836s - returns an hidden-'input'-element with the passed name 1836s - ignores a passed block 1836s 1836s CGI::HtmlExtension#hidden when passed name, value 1836s - returns an hidden-'input'-element with the passed name and value 1836s - ignores a passed block 1836s 1836s CGI::HtmlExtension#hidden when passed Hash 1836s - returns a checkbox-'input'-element using the passed Hash for attributes 1836s - ignores a passed block 1836s 1836s CGI::HtmlExtension#html when passed no arguments 1836s - returns a self's doctype and an 'html'-element 1836s - includes the passed block when passed a block 1836s 1836s CGI::HtmlExtension#html when passed 'PRETTY' 1836s - returns pretty output when the passed String is 'PRETTY 1836s - includes the passed block when passed a block 1836s 1836s CGI::HtmlExtension#html when passed a Hash 1836s - returns an 'html'-element using the passed Hash for attributes 1836s - omits the doctype when the Hash contains a 'DOCTYPE' entry that's false or nil 1836s 1836s CGI::HtmlExtension#html when each HTML generation 1836s - returns the doctype declaration for HTML3 1836s - returns the doctype declaration for HTML4 1836s - returns the doctype declaration for the Transitional version of HTML4 1836s 1836s CGI::HtmlExtension#image_button when passed no arguments 1836s - returns an image-'input'-element without a source image 1836s - ignores a passed block 1836s 1836s CGI::HtmlExtension#image_button when passed src 1836s - returns an image-'input'-element with the passed src 1836s - ignores a passed block 1836s 1836s CGI::HtmlExtension#image_button when passed src, name 1836s - returns an image-'input'-element with the passed src and name 1836s - ignores a passed block 1836s 1836s CGI::HtmlExtension#image_button when passed src, name, alt 1836s - returns an image-'input'-element with the passed src, name and alt 1836s - ignores a passed block 1836s 1836s CGI::HtmlExtension#image_button when passed Hash 1836s - returns a image-'input'-element using the passed Hash for attributes 1836s - ignores a passed block 1836s 1836s CGI::HtmlExtension#img when passed no arguments 1836s - returns an 'img'-element without an src-url or alt-text 1836s - ignores a passed block 1836s 1836s CGI::HtmlExtension#img when passed src 1836s - returns an 'img'-element with the passed src-url 1836s - ignores a passed block 1836s 1836s CGI::HtmlExtension#img when passed src, alt 1836s - returns an 'img'-element with the passed src-url and the passed alt-text 1836s - ignores a passed block 1836s 1836s CGI::HtmlExtension#img when passed src, alt, width 1836s - returns an 'img'-element with the passed src-url, the passed alt-text and the passed width 1836s - ignores a passed block 1836s 1836s CGI::HtmlExtension#img when passed src, alt, width, height 1836s - returns an 'img'-element with the passed src-url, the passed alt-text, the passed width and the passed height 1836s - ignores a passed block 1836s 1836s CGI::HtmlExtension#img when passed Hash 1836s - returns an 'img'-element with the passed Hash as attributes 1836s - ignores a passed block 1836s 1836s CGI::HtmlExtension#multipart_form when passed no arguments 1836s - returns a 'form'-element with it's enctype set to multipart 1836s - includes the return value of the passed block when passed a block 1836s 1836s CGI::HtmlExtension#multipart_form when passed action 1836s - returns a 'form'-element with the passed action 1836s - includes the return value of the passed block when passed a block 1836s 1836s CGI::HtmlExtension#multipart_form when passed action, enctype 1836s - returns a 'form'-element with the passed action and enctype 1836s - includes the return value of the passed block when passed a block 1836s 1836s CGI::HtmlExtension#multipart_form when passed Hash 1836s - returns a 'form'-element with the passed Hash as attributes 1836s - includes the return value of the passed block when passed a block 1836s 1836s CGI::HtmlExtension#password_field when passed no arguments 1836s - returns an password-'input'-element without a name 1836s - ignores a passed block 1836s 1836s CGI::HtmlExtension#password_field when passed name 1836s - returns an password-'input'-element with the passed name 1836s - ignores a passed block 1836s 1836s CGI::HtmlExtension#password_field when passed name, value 1836s - returns an password-'input'-element with the passed name and value 1836s - ignores a passed block 1836s 1836s CGI::HtmlExtension#password_field when passed name, value, size 1836s - returns an password-'input'-element with the passed name, value and size 1836s - ignores a passed block 1836s 1836s CGI::HtmlExtension#password_field when passed name, value, size, maxlength 1836s - returns an password-'input'-element with the passed name, value, size and maxlength 1836s - ignores a passed block 1836s 1836s CGI::HtmlExtension#password_field when passed Hash 1836s - returns a checkbox-'input'-element using the passed Hash for attributes 1836s - ignores a passed block 1836s 1836s CGI::HtmlExtension#popup_menu when passed no arguments 1836s - returns an empty 'select'-element without a name 1836s - ignores a passed block 1836s 1836s CGI::HtmlExtension#popup_menu when passed name, values ... 1836s - returns a 'select'-element with the passed name containing 'option'-elements based on the passed values 1836s - allows passing values inside of arrays 1836s - allows passing a value as an Array containing the value and the select state or a label 1836s - allows passing a value as an Array containing the value, a label and the select state 1836s - ignores a passed block 1836s 1836s CGI::HtmlExtension#popup_menu when passed a Hash 1836s - uses the passed Hash to generate the 'select'-element and the 'option'-elements 1836s - ignores a passed block 1836s 1836s CGI::HtmlExtension#radio_button when passed no arguments 1836s - returns a radio-'input'-element without a name 1836s - ignores a passed block 1836s 1836s CGI::HtmlExtension#radio_button when passed name 1836s - returns a radio-'input'-element with the passed name 1836s - ignores a passed block 1836s 1836s CGI::HtmlExtension#radio_button CGI::HtmlExtension#checkbox when passed name, value 1836s - returns a radio-'input'-element with the passed name and value 1836s - ignores a passed block 1836s 1836s CGI::HtmlExtension#radio_button when passed name, value, checked 1836s - returns a checked radio-'input'-element with the passed name and value when checked is true 1836s - ignores a passed block 1836s 1836s CGI::HtmlExtension#radio_button when passed Hash 1836s - returns a radio-'input'-element using the passed Hash for attributes 1836s - ignores a passed block 1836s 1836s CGI::HtmlExtension#radio_group when passed name, values ... 1836s - returns a sequence of 'radio'-elements with the passed name and the passed values 1836s - allows passing a value inside an Array 1836s - allows passing a value as an Array containing the value and the checked state or a label 1836s - allows passing a value as an Array containing the value, a label and the checked state 1836s - returns an empty String when passed no values 1836s - ignores a passed block 1836s 1836s CGI::HtmlExtension#radio_group when passed Hash 1836s - uses the passed Hash to generate the radio sequence 1836s - ignores a passed block 1836s 1836s CGI::HtmlExtension#reset when passed no arguments 1836s - returns a reset-'input'-element 1836s - ignores a passed block 1836s 1836s CGI::HtmlExtension#reset when passed value 1836s - returns a reset-'input'-element with the passed value 1836s - ignores a passed block 1836s 1836s CGI::HtmlExtension#reset when passed value, name 1836s - returns a reset-'input'-element with the passed value and the passed name 1836s - ignores a passed block 1836s 1836s CGI::HtmlExtension#reset when passed Hash 1836s - returns a reset-'input'-element with the passed value 1836s - ignores a passed block 1836s 1836s CGI::HtmlExtension#scrolling_list when passed no arguments 1836s - returns an empty 'select'-element without a name 1836s - ignores a passed block 1836s 1836s CGI::HtmlExtension#scrolling_list when passed name, values ... 1836s - returns a 'select'-element with the passed name containing 'option'-elements based on the passed values 1836s - allows passing values inside of arrays 1836s - allows passing a value as an Array containing the value and the select state or a label 1836s - allows passing a value as an Array containing the value, a label and the select state 1836s - ignores a passed block 1836s 1836s CGI::HtmlExtension#scrolling_list when passed a Hash 1836s - uses the passed Hash to generate the 'select'-element and the 'option'-elements 1836s - ignores a passed block 1836s 1836s CGI::HtmlExtension#submit when passed no arguments 1836s - returns a submit-'input'-element 1836s - ignores a passed block 1836s 1836s CGI::HtmlExtension#submit when passed value 1836s - returns a submit-'input'-element with the passed value 1836s - ignores a passed block 1836s 1836s CGI::HtmlExtension#submit when passed value, name 1836s - returns a submit-'input'-element with the passed value and the passed name 1836s - ignores a passed block 1836s 1836s CGI::HtmlExtension#submit when passed Hash 1836s - returns a submit-'input'-element with the passed value 1836s - ignores a passed block 1836s 1836s CGI::HtmlExtension#text_field when passed no arguments 1836s - returns an text-'input'-element without a name 1836s - ignores a passed block 1836s 1836s CGI::HtmlExtension#text_field when passed name 1836s - returns an text-'input'-element with the passed name 1836s - ignores a passed block 1836s 1836s CGI::HtmlExtension#text_field when passed name, value 1836s - returns an text-'input'-element with the passed name and value 1836s - ignores a passed block 1836s 1836s CGI::HtmlExtension#text_field when passed name, value, size 1836s - returns an text-'input'-element with the passed name, value and size 1836s - ignores a passed block 1836s 1836s CGI::HtmlExtension#text_field when passed name, value, size, maxlength 1836s - returns an text-'input'-element with the passed name, value, size and maxlength 1836s - ignores a passed block 1836s 1836s CGI::HtmlExtension#text_field when passed Hash 1836s - returns a checkbox-'input'-element using the passed Hash for attributes 1836s - ignores a passed block 1836s 1836s CGI::HtmlExtension#textarea when passed no arguments 1836s - returns an 'textarea'-element without a name 1836s - includes the return value of the passed block when passed a block 1836s 1836s CGI::HtmlExtension#textarea when passed name 1836s - returns an 'textarea'-element with the passed name 1836s - includes the return value of the passed block when passed a block 1836s 1836s CGI::HtmlExtension#textarea when passed name, cols 1836s - returns an 'textarea'-element with the passed name and the passed amount of columns 1836s - includes the return value of the passed block when passed a block 1836s 1836s CGI::HtmlExtension#textarea when passed name, cols, rows 1836s - returns an 'textarea'-element with the passed name, the passed amount of columns and the passed number of rows 1836s - includes the return value of the passed block when passed a block 1836s 1836s CGI::HtmlExtension#textarea when passed Hash 1836s - uses the passed Hash as attributes 1836s - includes the return value of the passed block when passed a block 1836s 1836s CGI#http_header CGI#http_header when passed no arguments 1836s - returns a HTTP header specifying the Content-Type as text/html 1836s - includes Cookies in the @output_cookies field 1836s 1836s CGI#http_header CGI#http_header when passed String 1836s - returns a HTTP header specifying the Content-Type as the passed String's content 1836s - includes Cookies in the @output_cookies field 1836s 1836s CGI#http_header CGI#http_header when passed Hash 1836s - returns a HTTP header based on the Hash's key/value pairs 1836s - includes Cookies in the @output_cookies field 1836s - returns a HTTP header specifying the Content-Type as text/html when passed an empty Hash 1836s 1836s CGI#initialize 1836s - is private 1836s 1836s CGI#initialize when passed no arguments 1836s - extends self with CGI::QueryExtension 1836s - does not extend self with CGI::HtmlExtension 1836s - does not extend self with any of the other HTML modules 1836s - sets #cookies based on ENV['HTTP_COOKIE'] 1836s - sets #params based on ENV['QUERY_STRING'] when ENV['REQUEST_METHOD'] is GET 1836s - sets #params based on ENV['QUERY_STRING'] when ENV['REQUEST_METHOD'] is HEAD 1836s 1836s CGI#initialize when passed type 1836s - extends self with CGI::QueryExtension 1836s - extends self with CGI::QueryExtension, CGI::Html3 and CGI::HtmlExtension when the passed type is 'html3' 1836s - extends self with CGI::QueryExtension, CGI::Html4 and CGI::HtmlExtension when the passed type is 'html4' 1836s - extends self with CGI::QueryExtension, CGI::Html4Tr and CGI::HtmlExtension when the passed type is 'html4Tr' 1836s - extends self with CGI::QueryExtension, CGI::Html4Tr, CGI::Html4Fr and CGI::HtmlExtension when the passed type is 'html4Fr' 1836s 1836s CGI#out 1836s - it writes a HTMl header based on the passed argument to $stdout 1836s - appends the block's return value to the HTML header 1836s - automatically sets the Content-Length Header based on the block's return value 1836s - includes Cookies in the @output_cookies field 1836s 1836s CGI#out when passed no block 1836s - raises a LocalJumpError 1836s 1836s CGI.parse when passed String 1836s - parses a HTTP Query String into a Hash 1836s - parses query strings with semicolons in place of ampersands 1836s - allows passing multiple values for one key 1836s - unescapes keys and values 1836s 1836s CGI.pretty when passed html 1836s - indents the passed html String with two spaces 1836s 1836s CGI.pretty when passed html, indentation_unit 1836s - indents the passed html String with the passed indentation_unit 1836s 1836s CGI#print 1836s - passes all arguments to $stdout.print 1836s - returns the result of calling $stdout.print 1836s 1836s CGI::QueryExtension#accept_charset 1836s - returns ENV['HTTP_ACCEPT_CHARSET'] 1836s 1836s CGI::QueryExtension#accept_encoding 1836s - returns ENV['HTTP_ACCEPT_ENCODING'] 1836s 1836s CGI::QueryExtension#accept_language 1836s - returns ENV['HTTP_ACCEPT_LANGUAGE'] 1836s 1836s CGI::QueryExtension#accept 1836s - returns ENV['HTTP_ACCEPT'] 1836s 1836s CGI::QueryExtension#auth_type 1836s - returns ENV['AUTH_TYPE'] 1836s 1836s CGI::QueryExtension#cache_control 1836s - returns ENV['HTTP_CACHE_CONTROL'] 1836s 1836s CGI::QueryExtension#content_length 1836s - returns ENV['CONTENT_LENGTH'] as Integer 1836s 1836s CGI::QueryExtension#content_type 1836s - returns ENV['CONTENT_TYPE'] 1836s 1836s CGI::QueryExtension#cookies 1836s - needs to be reviewed for spec completeness 1836s 1836s CGI::QueryExtension#cookies= 1836s - needs to be reviewed for spec completeness 1836s 1836s CGI::QueryExtension#[] 1836s - it returns the value for the parameter with the given key 1836s - only returns the first value for parameters with multiple values 1836s - returns a String 1836s 1836s CGI::QueryExtension#from 1836s - returns ENV['HTTP_FROM'] 1836s 1836s CGI::QueryExtension#gateway_interface 1836s - returns ENV['GATEWAY_INTERFACE'] 1836s 1836s CGI::QueryExtension#has_key? 1836s - returns true when the passed key exists in the HTTP Query 1836s 1836s CGI::QueryExtension#host 1836s - returns ENV['HTTP_HOST'] 1836s 1836s CGI::QueryExtension#include? 1836s - returns true when the passed key exists in the HTTP Query 1836s 1836s CGI::QueryExtension#key? 1836s - returns true when the passed key exists in the HTTP Query 1836s 1836s CGI::QueryExtension#keys 1836s - returns all parameter keys as an Array 1836s 1836s CGI::QueryExtension#multipart? 1836s - returns true if the current Request is a multipart request 1836s 1836s CGI::QueryExtension#negotiate 1836s - returns ENV['HTTP_NEGOTIATE'] 1836s 1836s CGI::QueryExtension#params 1836s - returns the parsed HTTP Query Params 1836s 1836s CGI::QueryExtension#params= 1836s - sets the HTTP Query Params to the passed argument 1836s 1836s CGI::QueryExtension#path_info 1836s - returns ENV['PATH_INFO'] 1836s 1836s CGI::QueryExtension#path_translated 1836s - returns ENV['PATH_TRANSLATED'] 1836s 1836s CGI::QueryExtension#pragma 1836s - returns ENV['HTTP_PRAGMA'] 1836s 1836s CGI::QueryExtension#query_string 1836s - returns ENV['QUERY_STRING'] 1836s 1836s CGI::QueryExtension#raw_cookie2 1836s - returns ENV['HTTP_COOKIE2'] 1836s 1836s CGI::QueryExtension#raw_cookie 1836s - returns ENV['HTTP_COOKIE'] 1836s 1836s CGI::QueryExtension#referer 1836s - returns ENV['HTTP_REFERER'] 1836s 1836s CGI::QueryExtension#remote_addr 1836s - returns ENV['REMOTE_ADDR'] 1836s 1836s CGI::QueryExtension#remote_host 1836s - returns ENV['REMOTE_HOST'] 1836s 1836s CGI::QueryExtension#remote_ident 1836s - returns ENV['REMOTE_IDENT'] 1836s 1836s CGI::QueryExtension#remote_user 1836s - returns ENV['REMOTE_USER'] 1836s 1836s CGI::QueryExtension#request_method 1836s - returns ENV['REQUEST_METHOD'] 1836s 1836s CGI::QueryExtension#script_name 1836s - returns ENV['SCRIPT_NAME'] 1836s 1836s CGI::QueryExtension#server_name 1836s - returns ENV['SERVER_NAME'] 1836s 1836s CGI::QueryExtension#server_port 1836s - returns ENV['SERVER_PORT'] as Integer 1836s 1836s CGI::QueryExtension#server_protocol 1836s - returns ENV['SERVER_PROTOCOL'] 1836s 1836s CGI::QueryExtension#server_software 1836s - returns ENV['SERVER_SOFTWARE'] 1836s 1836s CGI::QueryExtension#user_agent 1836s - returns ENV['HTTP_USER_AGENT'] 1836s 1836s CGI.rfc1123_date when passed Time 1836s - returns the passed Time formatted in RFC1123 ('Sat, 01 Dec 2007 15:56:42 GMT') 1836s 1836s CGI.unescapeElement when passed String, elements, ... 1836s - unescapes only the tags of the passed elements in the passed String 1836s - is case-insensitive 1836s 1836s CGI.unescapeHTML 1836s - unescapes '& < > "' to '& < > "' 1836s - doesn't unescape other html entities such as '©' or '&heart' 1836s - unescapes 'c' format entities 1836s - unescapes '香' format entities 1836s - leaves invalid formatted strings 1836s - leaves partial invalid &# at end of string 1836s - unescapes invalid encoding 1836s 1836s CGI.unescape 1836s - url-decodes the passed argument 1836s 1836s Coverage.peek_result 1836s - returns the result so far 1836s - immediate second call returns same result 1836s - second call after require returns accumulated result 1836s - call right before Coverage.result should give equal result 1836s 1836s Coverage.result 1836s - gives the covered files as a hash with arrays of count or nil 1836s - no requires/loads should give empty hash 1836s - second call should give exception 1836s - second run should give same result 1836s - second run without load/require should give empty hash 1836s - does not include the file starting coverage since it is not tracked 1836s - returns the correct results when eval is used 1836s - disables coverage measurement when stop option is not specified 1836s - disables coverage measurement when stop: true option is specified 1837s - does not disable coverage measurement when stop: false option is specified 1837s - does not disable coverage measurement when stop option is not specified but clear: true specified 1837s - does not disable coverage measurement when stop option is not specified but clear: false specified 1837s - disables coverage measurement when stop: true and clear: true specified 1837s - disables coverage measurement when stop: true and clear: false specified 1837s - does not disable coverage measurement when stop: false and clear: true specified 1837s - does not disable coverage measurement when stop: false and clear: false specified 1837s - resets counters (remove them) when stop: true specified but clear option is not specified 1837s - resets counters (remove them) when stop: true and clear: true specified 1837s - resets counters (remove them) when stop: true and clear: false specified 1837s - resets counters (remove them) when both stop and clear options are not specified 1837s - clears counters (sets 0 values) when stop is not specified but clear: true specified 1837s - does not clear counters when stop is not specified but clear: false specified 1837s - does not clear counters when stop: false and clear is not specified 1837s - clears counters (sets 0 values) when stop: false and clear: true specified 1837s - does not clear counters when stop: false and clear: false specified 1837s 1837s Coverage.running? 1837s - returns false if coverage is not started 1837s - returns true if coverage is started 1837s - returns false if coverage was started and stopped 1837s 1837s Coverage.start 1837s - enables the coverage measurement 1837s - returns nil 1837s - raises error when repeated Coverage.start call happens 1837s 1837s CSV::BasicWriter#close_on_terminate 1837s - needs to be reviewed for spec completeness 1837s 1837s CSV::BasicWriter#initialize 1837s - needs to be reviewed for spec completeness 1837s 1837s CSV::BasicWriter#terminate 1837s - needs to be reviewed for spec completeness 1837s 1837s CSV::Cell#data 1837s - needs to be reviewed for spec completeness 1837s 1837s CSV::Cell#initialize 1837s - needs to be reviewed for spec completeness 1837s 1837s CSV.foreach 1837s - needs to be reviewed for spec completeness 1837s 1837s CSV.generate_line 1837s - generates an empty string 1837s - generates the string 'foo,bar' 1837s - generates the string 'foo;bar' 1837s - generates the string 'foo,,bar' 1837s - generates the string 'foo;;bar' 1837s 1837s CSV.generate_row 1837s - needs to be reviewed for spec completeness 1837s 1837s CSV.generate 1837s - returns CSV string 1837s - accepts a col separator 1837s - appends and returns the argument itself 1837s 1837s CSV::IOBuf#close 1837s - needs to be reviewed for spec completeness 1837s 1837s CSV::IOBuf#initialize 1837s - needs to be reviewed for spec completeness 1837s 1837s CSV::IOBuf#read 1837s - needs to be reviewed for spec completeness 1837s 1837s CSV::IOBuf#terminate 1837s - needs to be reviewed for spec completeness 1837s 1837s CSV::IOReader#close_on_terminate 1837s - needs to be reviewed for spec completeness 1837s 1837s CSV::IOReader#get_row 1837s - needs to be reviewed for spec completeness 1837s 1837s CSV::IOReader#initialize 1837s - needs to be reviewed for spec completeness 1837s 1837s CSV::IOReader#terminate 1837s - needs to be reviewed for spec completeness 1837s 1837s CSV#liberal_parsing? 1837s - returns true if illegal input is handled 1837s - returns false if illegal input is not handled 1837s - returns false by default 1837s 1837s CSV.open 1837s - needs to be reviewed for spec completeness 1837s 1837s CSV.parse 1837s - parses '' into [] 1837s - parses ' 1837s ' into [[]] 1837s - parses 'foo' into [['foo']] 1837s - parses 'foo,bar,baz' into [['foo','bar','baz']] 1837s - parses 'foo,baz' into [[foo,nil,baz]] 1837s - parses ' 1837s foo' into [[],['foo']] 1837s - parses 'foo 1837s ' into [['foo']] 1837s - parses 'foo 1837s bar' into [['foo'],['bar']] 1837s - parses 'foo,bar 1837s baz,quz' into [['foo','bar'],['baz','quz']] 1837s - parses 'foo,bar' 1837s baz' into [['foo','bar'],['baz']] 1837s - parses 'foo 1837s bar,baz' into [['foo'],['bar','baz']] 1837s - parses ' 1837s 1837s bar' into [[],[],'bar']] 1837s - parses 'foo' into [['foo']] with a separator of ; 1837s - parses 'foo;bar' into [['foo','bar']] with a separator of ; 1837s - parses 'foo;bar 1837s baz;quz' into [['foo','bar'],['baz','quz']] with a separator of ; 1837s - raises CSV::MalformedCSVError exception if input is illegal 1837s - handles illegal input with the liberal_parsing option 1837s 1837s CSV.read 1837s - needs to be reviewed for spec completeness 1837s 1837s CSV.readlines 1837s - needs to be reviewed for spec completeness 1837s 1837s CSV#readlines 1837s - returns an Array of Array containing each element in a one-line CSV file 1837s - returns an Array of Arrays containing each element in a multi-line CSV file 1837s - returns nil for a missing value 1837s - raises CSV::MalformedCSVError exception if input is illegal 1837s - handles illegal input with the liberal_parsing option 1837s 1837s CSV::StreamBuf#add_buf 1837s - needs to be reviewed for spec completeness 1837s 1837s CSV::StreamBuf#buf_size 1837s - needs to be reviewed for spec completeness 1837s 1837s CSV::StreamBuf#drop 1837s - needs to be reviewed for spec completeness 1837s 1837s CSV::StreamBuf#[] 1837s - needs to be reviewed for spec completeness 1837s 1837s CSV::StreamBuf#get 1837s - needs to be reviewed for spec completeness 1837s 1837s CSV::StreamBuf#idx_is_eos? 1837s - needs to be reviewed for spec completeness 1837s 1837s CSV::StreamBuf#initialize 1837s - needs to be reviewed for spec completeness 1837s 1837s CSV::StreamBuf#is_eos? 1837s - needs to be reviewed for spec completeness 1837s 1837s CSV::StreamBuf#read 1837s - needs to be reviewed for spec completeness 1837s 1837s CSV::StreamBuf#rel_buf 1837s - needs to be reviewed for spec completeness 1837s 1837s CSV::StreamBuf#terminate 1837s - needs to be reviewed for spec completeness 1837s 1837s CSV::StringReader#get_row 1837s - needs to be reviewed for spec completeness 1837s 1837s CSV::StringReader#initialize 1837s - needs to be reviewed for spec completeness 1837s 1837s CSV::Writer#add_row 1837s - needs to be reviewed for spec completeness 1837s 1837s CSV::Writer#<< 1837s - needs to be reviewed for spec completeness 1837s 1837s CSV::Writer#close 1837s - needs to be reviewed for spec completeness 1837s 1837s CSV::Writer.create 1837s - needs to be reviewed for spec completeness 1837s 1837s CSV::Writer.generate 1837s - needs to be reviewed for spec completeness 1837s 1837s CSV::Writer#initialize 1837s - needs to be reviewed for spec completeness 1837s 1837s CSV::Writer#terminate 1837s - needs to be reviewed for spec completeness 1837s 1837s Date#ajd 1837s - determines the Astronomical Julian day 1837s 1837s Date#amjd 1837s - determines the Astronomical Modified Julian day 1837s 1837s Date#day_fraction 1837s - determines the day fraction 1837s 1837s Date#mjd 1837s - determines the Modified Julian day 1837s 1837s Date#ld 1837s - determines the Modified Julian day 1837s 1837s Date#year 1837s - determines the year 1837s 1837s Date#yday 1837s - determines the year 1837s 1837s Date#mon 1837s - determines the month 1837s 1837s Date#mday 1837s - determines the day of the month 1837s 1837s Date#wday 1837s - determines the week day 1837s 1837s Date#cwyear 1837s - determines the commercial year 1837s 1837s Date#cweek 1837s - determines the commercial week 1837s 1837s Date#cwday 1837s - determines the commercial week day 1837s 1837s Date#>> 1837s - adds the number of months to a Date 1837s - sets the day to the last day of a month if the day doesn't exist 1837s - raise a TypeError when passed a Symbol 1837s - raise a TypeError when passed a String 1837s - raise a TypeError when passed a Date 1837s - raise a TypeError when passed an Object 1837s 1837s Date#+ 1837s - adds the number of days to a Date 1837s - adds a negative number of days to a Date 1837s - raises a TypeError when passed a Symbol 1837s - raises a TypeError when passed a String 1837s - raises a TypeError when passed a Date 1837s - raises a TypeError when passed an Object 1837s 1837s Date#ajd 1837s - needs to be reviewed for spec completeness 1837s 1837s Date.ajd_to_amjd 1837s - needs to be reviewed for spec completeness 1837s 1837s Date.ajd_to_jd 1837s - needs to be reviewed for spec completeness 1837s 1837s Date#amjd 1837s - needs to be reviewed for spec completeness 1837s 1837s Date.amjd_to_ajd 1837s - needs to be reviewed for spec completeness 1837s 1837s Date#<< 1837s - needs to be reviewed for spec completeness 1837s 1837s Date#asctime 1837s - needs to be reviewed for spec completeness 1837s 1837s Date#<=> 1837s - returns 0 when two dates are equal 1837s - returns -1 when self is less than another date 1837s - returns -1 when self is less than a Numeric 1837s - returns 1 when self is greater than another date 1837s - returns 1 when self is greater than a Numeric 1837s 1837s Date#=== 1837s - needs to be reviewed for spec completeness 1837s 1837s Date.civil 1837s - creates a Date for -4712 by default 1837s - creates a date with arguments 1837s - doesn't create dates for invalid arguments 1837s - creates a Date for different calendar reform dates 1837s 1837s Date#commercial 1837s - creates a Date for Julian Day Number day 0 by default 1837s - creates a Date for the monday in the year and week given 1837s - creates a Date for the correct day given the year, week and day number 1837s - creates only Date objects for valid weeks 1837s 1837s Date.commercial_to_jd 1837s - needs to be reviewed for spec completeness 1837s 1837s Date#<=> 1837s - needs to be reviewed for spec completeness 1837s 1837s Date constants 1837s - defines JULIAN 1837s - defines GREGORIAN 1837s - defines ITALY 1837s - defines ENGLAND 1837s - defines MONTHNAMES 1837s - defines DAYNAMES 1837s - defines ABBR_MONTHNAMES 1837s - freezes MONTHNAMES, DAYNAMES, ABBR_MONTHNAMES, ABBR_DAYSNAMES 1837s 1837s Date#new_start 1837s - converts a date object into another with a new calendar reform 1837s 1837s Date#italy 1837s - converts a date object into another with the Italian calendar reform 1837s 1837s Date#england 1837s - converts a date object into another with the English calendar reform 1837s 1837s Date#julian 1837s - converts a date object into another with the Julian calendar 1837s 1837s Date#gregorian 1837s - converts a date object into another with the Gregorian calendar 1837s 1837s Date#ctime 1837s - needs to be reviewed for spec completeness 1837s 1837s Date#cwday 1837s - needs to be reviewed for spec completeness 1837s 1837s Date#cweek 1837s - needs to be reviewed for spec completeness 1837s 1837s Date#cwyear 1837s - needs to be reviewed for spec completeness 1837s 1837s Date#day_fraction 1837s - needs to be reviewed for spec completeness 1837s 1837s Date.day_fraction_to_time 1837s - needs to be reviewed for spec completeness 1837s 1837s Date#day 1837s - returns the day 1837s 1837s Date#downto 1837s - creates earlier dates when passed a negative step 1837s 1837s Date#england 1837s - needs to be reviewed for spec completeness 1837s 1837s Date#eql? 1837s - returns true if self is equal to another date 1837s - returns false if self is not equal to another date 1837s 1837s Date::Format::Bag#method_missing 1837s - needs to be reviewed for spec completeness 1837s 1837s Date::Format::Bag#to_hash 1837s - needs to be reviewed for spec completeness 1837s 1837s Date#friday? 1837s - should be friday 1837s - should not be friday 1837s 1837s Date#gregorian_leap? 1837s - returns true if a year is a leap year in the Gregorian calendar 1837s - returns false if a year is not a leap year in the Gregorian calendar 1837s 1837s Date#gregorian? 1837s - marks a day before the calendar reform as Julian 1837s - marks a day after the calendar reform as Julian 1837s 1837s Date#hash 1837s - returns the same value for equal dates 1837s 1837s Date::Infinity#abs 1837s - needs to be reviewed for spec completeness 1837s 1837s Date::Infinity#coerce 1837s - needs to be reviewed for spec completeness 1837s 1837s Date::Infinity#<=> 1837s - needs to be reviewed for spec completeness 1837s 1837s Date::Infinity#d 1837s - needs to be reviewed for spec completeness 1837s 1837s Date::Infinity#finite? 1837s - needs to be reviewed for spec completeness 1837s 1837s Date::Infinity#infinite? 1837s - needs to be reviewed for spec completeness 1837s 1837s Date::Infinity#nan? 1837s - needs to be reviewed for spec completeness 1837s 1837s Date::Infinity#-@ 1837s - needs to be reviewed for spec completeness 1837s 1837s Date::Infinity#+@ 1837s - needs to be reviewed for spec completeness 1837s 1837s Date::Infinity#zero? 1837s - needs to be reviewed for spec completeness 1837s 1837s Date::Infinity 1837s - should be able to check whether Infinity is zero 1837s - should be able to check whether Infinity is finite 1837s - should be able to check whether Infinity is infinite 1837s - should be able to check whether Infinity is not a number 1837s - should be able to compare Infinity objects 1837s - should be able to return plus Infinity for abs 1837s - should be able to use -@ and +@ for Date::Infinity 1837s - should be able to coerce a Date::Infinity object 1837s 1837s Date#inspect 1837s - needs to be reviewed for spec completeness 1837s 1837s Date.iso8601 1837s - parses YYYY-MM-DD into a Date object 1837s - parses YYYYMMDD into a Date object 1837s - parses a negative Date 1837s - parses a StringSubclass into a Date object 1837s - raises a Date::Error if the argument is a invalid Date 1837s - raises a Date::Error when passed a nil 1837s - raises a TypeError when passed an Object 1837s 1837s Date._iso8601 1837s - returns an empty hash if the argument is a invalid Date 1837s - returns an empty hash if the argument is nil 1837s - raises a TypeError when passed an Object 1837s 1837s Date#italy 1837s - needs to be reviewed for spec completeness 1837s 1837s Date#jd 1837s - determines the Julian day for a Date object 1837s 1837s Date.jd 1837s - constructs a Date object if passed a Julian day 1837s - returns a Date object representing Julian day 0 (-4712-01-01) if no arguments passed 1837s - constructs a Date object if passed a negative number 1837s 1837s Date.jd_to_ajd 1837s - needs to be reviewed for spec completeness 1837s 1837s Date.jd_to_civil 1837s - needs to be reviewed for spec completeness 1837s 1837s Date.jd_to_commercial 1837s - needs to be reviewed for spec completeness 1837s 1837s Date.jd_to_ld 1837s - needs to be reviewed for spec completeness 1837s 1837s Date.jd_to_mjd 1837s - needs to be reviewed for spec completeness 1837s 1837s Date.jd_to_ordinal 1837s - needs to be reviewed for spec completeness 1837s 1837s Date.jd_to_wday 1837s - needs to be reviewed for spec completeness 1837s 1837s Date.julian_leap? 1837s - determines whether a year is a leap year in the Julian calendar 1837s - determines whether a year is not a leap year in the Julian calendar 1837s 1837s Date#julian? 1837s - marks a day before the calendar reform as Julian 1837s - marks a day after the calendar reform as Julian 1837s 1837s Date#ld 1837s - needs to be reviewed for spec completeness 1837s 1837s Date.ld_to_jd 1837s - needs to be reviewed for spec completeness 1837s 1837s Date#leap? 1837s - needs to be reviewed for spec completeness 1837s 1837s Date.leap? 1837s - needs to be reviewed for spec completeness 1837s 1837s Date#mday 1837s - needs to be reviewed for spec completeness 1837s 1837s Date#<< 1837s - subtracts a number of months from a date 1837s - returns the last day of a month if the day doesn't exist 1837s - raises an error on non numeric parameters 1837s 1837s Date#- 1837s - subtracts a number of days from a Date 1837s - subtracts a negative number of days from a Date 1837s - computes the difference between two dates 1837s - raises an error for non Numeric arguments 1837s 1837s Date#mjd 1837s - needs to be reviewed for spec completeness 1837s 1837s Date.mjd_to_jd 1837s - needs to be reviewed for spec completeness 1837s 1837s Date#mon 1837s - needs to be reviewed for spec completeness 1837s 1837s Date#monday? 1837s - should be monday 1837s 1837s Date#month 1837s - returns the month 1837s 1837s Date.new 1837s - creates a Date for -4712 by default 1837s - creates a date with arguments 1837s - doesn't create dates for invalid arguments 1837s - creates a Date for different calendar reform dates 1837s 1837s Date#new_start 1837s - needs to be reviewed for spec completeness 1837s 1837s Date#next_day 1837s - returns the next day 1837s - returns three days later across months 1837s 1837s Date#next_month 1837s - returns the next month 1837s - returns three months later 1837s - returns three months later across years 1837s - returns last day of month two months later 1837s - returns last day of next month when same day does not exist 1837s 1837s Date#next 1837s - needs to be reviewed for spec completeness 1837s 1837s Date.ordinal 1837s - constructs a Date object from an ordinal date 1837s 1837s Date.ordinal_to_jd 1837s - needs to be reviewed for spec completeness 1837s 1837s Date#parse 1837s - parses a day name into a Date object 1837s - parses a month name into a Date object 1837s - parses a month day into a Date object 1837s - throws an argument error for a single digit 1837s - parses DD as month day number 1837s - parses DDD as year day number 1837s - parses MMDD as month and day 1837s - parses YYDDD as year and day number in 1969--2068 1837s - parses YYMMDD as year, month and day in 1969--2068 1837s - parses YYYYDDD as year and day number 1837s - parses YYYYMMDD as year, month and day number 1837s - raises a TypeError trying to parse non-String-like object 1837s - coerces using to_str 1837s 1837s Date#parse with '.' separator 1837s - can parse a mmm-YYYY string into a Date object 1837s - can parse a 'DD mmm YYYY' string into a Date object 1837s - can parse a 'DD mmm YYYY' string into a Date object 1837s - can parse a 'YYYY mmm DD' string into a Date object 1837s - can parse a month name and day into a Date object 1837s - can parse a month name, day and year into a Date object 1837s - can parse a year, month name and day into a Date object 1837s - can parse a day, month name and year into a Date object 1837s - can handle negative year numbers 1837s 1837s Date#parse with '/' separator 1837s - can parse a mmm-YYYY string into a Date object 1837s - can parse a 'DD mmm YYYY' string into a Date object 1837s - can parse a 'DD mmm YYYY' string into a Date object 1837s - can parse a 'YYYY mmm DD' string into a Date object 1837s - can parse a month name and day into a Date object 1837s - can parse a month name, day and year into a Date object 1837s - can parse a year, month name and day into a Date object 1837s - can parse a day, month name and year into a Date object 1837s - can handle negative year numbers 1837s 1837s Date#parse with ' ' separator 1837s - can parse a mmm-YYYY string into a Date object 1837s - can parse a 'DD mmm YYYY' string into a Date object 1837s - can parse a 'DD mmm YYYY' string into a Date object 1837s - can parse a 'YYYY mmm DD' string into a Date object 1837s - can parse a month name and day into a Date object 1837s - can parse a month name, day and year into a Date object 1837s - can parse a year, month name and day into a Date object 1837s - can parse a day, month name and year into a Date object 1837s - can handle negative year numbers 1837s 1837s Date#parse with '/' separator US-style 1837s - parses a YYYYMMDD string into a Date object 1837s - parses a DDMMYYYY string into a Date object 1837s - parses a YYMMDD string into a Date object 1837s - parses a YYMMDD string into a Date object NOT using the year digits as 20XX 1837s - parses a YYMMDD string into a Date object using the year digits as 20XX 1837s 1837s Date#parse with '-' separator EU-style 1837s - can parse a YYYY-MM-DD string into a Date object 1837s - can parse a DD-MM-YYYY string into a Date object 1837s - can parse a YY-MM-DD string into a Date object 1837s - can parse a YY-MM-DD string into a Date object NOT using the year digits as 20XX 1837s - can parse a YY-MM-DD string into a Date object using the year digits as 20XX 1837s 1837s Date#parse(.) 1837s - parses YYYY.MM.DD into a Date object 1837s - parses DD.MM.YYYY into a Date object 1837s - parses YY.MM.DD into a Date object using the year 20YY 1837s - parses YY.MM.DD using the year digits as 20YY when given true as additional argument 1837s 1837s Date#+ 1837s - returns a new Date object that is n days later than the current one 1837s - accepts a negative argument and returns a new Date that is earlier than the current one 1837s - raises TypeError if argument is not Numeric 1837s 1837s Date#prev_day 1837s - returns previous day 1837s - returns three days ago across months 1837s 1837s Date#prev_month 1837s - returns previous month 1837s - returns three months ago 1837s - returns three months ago across years 1837s - returns last day of month two months ago 1837s - returns last day of previous month when same day does not exist 1837s 1837s Date#=== 1837s - returns 0 when comparing two equal dates 1837s - computes the difference between two dates 1837s - compares to another numeric 1837s 1837s Date.rfc3339 1837s - needs to be reviewed for spec completeness 1837s 1837s Date._rfc3339 1837s - returns an empty hash if the argument is a invalid Date 1837s 1837s Date#>> 1837s - needs to be reviewed for spec completeness 1837s 1837s Date#saturday? 1837s - should be saturday 1837s 1837s Date#start 1837s - needs to be reviewed for spec completeness 1837s 1837s Date#step 1837s - steps forward in time 1837s - steps backward in time 1837s 1837s Date#strftime 1837s - should be able to print the full day name 1837s - should be able to print the short day name 1837s - should be able to print the full month name 1837s - should be able to print the short month name 1837s - should be able to print the century 1837s - should be able to print the month day with leading zeroes 1837s - should be able to print the month day with leading spaces 1837s - should be able to print the commercial year with leading zeroes 1837s - should be able to print the commercial year with only two digits 1837s - should be able to print the hour with leading zeroes (hour is always 00) 1837s - should be able to print the hour in 12 hour notation with leading zeroes 1837s - should be able to print the julian day with leading zeroes 1837s - should be able to print the hour in 24 hour notation with leading spaces 1837s - should be able to print the hour in 12 hour notation with leading spaces 1837s - should be able to print the minutes with leading zeroes 1837s - should be able to print the month with leading zeroes 1837s - should be able to add a newline 1837s - should be able to show AM/PM 1837s - should be able to show am/pm 1837s - should be able to show the number of seconds with leading zeroes 1837s - should be able to show the number of seconds since the unix epoch for a date 1837s - should be able to add a tab 1837s - should be able to show the week number with the week starting on Sunday (%U) and Monday (%W) 1837s - should be able to show the commercial week day 1837s - should be able to show the commercial week with %V 1837s - should be able to show the week day 1837s - should be able to show the year in YYYY format 1837s - should be able to show the year in YY format 1837s - should be able to show the timezone of the date with a : separator 1837s - should be able to escape the % character 1837s - should be able to print the date in full 1837s - should be able to print the date with slashes 1837s - should be able to print the date as YYYY-MM-DD 1837s - should be able to show HH:MM for a date 1837s - should be able to show HH:MM:SS AM/PM for a date 1837s - should be able to show HH:MM:SS 1837s - should be able to show HH:MM:SS 1837s - should be able to show MM/DD/YY 1837s - supports GNU modificators 1837s - supports the '-' modifier to drop leading zeros 1837s - passes the format string's encoding to the result string 1837s - should be able to print the date with no argument 1837s - should be able to show the timezone with a : separator 1837s - should be able to show the commercial week 1837s - shows the number of milliseconds since epoch 1837s - should be able to show a full notation 1837s 1837s Date#strptime 1837s - returns January 1, 4713 BCE when given no arguments 1837s - uses the default format when not given a date format 1837s - parses a full day name 1837s - parses a short day name 1837s - parses a full month name 1837s - parses a short month name 1837s - parses a century 1837s - parses a month day with leading zeroes 1837s - parses a month day with leading spaces 1837s - parses a commercial year with leading zeroes 1837s - parses a commercial year with only two digits 1837s - parses a year day with leading zeroes 1837s - parses a month with leading zeroes 1837s - parses a week number for a week starting on Sunday 1837s - parses a week number for a week starting on Monday 1837s - parses a commercial week day 1837s - parses a commercial week 1837s - parses a week day 1837s - parses a year in YYYY format 1837s - parses a year in YY format 1837s - parses a full date 1837s - parses a date with slashes 1837s - parses a date given as YYYY-MM-DD 1837s - parses a commercial week 1837s - parses a date given MM/DD/YY 1837s - parses a date given in full notation 1837s 1837s Date.strptime 1837s - needs to be reviewed for spec completeness 1837s 1837s Date#succ 1837s - needs to be reviewed for spec completeness 1837s 1837s Date#sunday? 1837s - should be sunday 1837s 1837s Date#thursday? 1837s - should be thursday 1837s 1837s Date.time_to_day_fraction 1837s - needs to be reviewed for spec completeness 1837s 1837s Date#to_s 1837s - needs to be reviewed for spec completeness 1837s 1837s Date.today 1837s - returns a Date object 1837s - sets Date object to the current date 1837s 1837s Date#tuesday? 1837s - should be tuesday 1837s 1837s Date#upto 1837s - returns future dates for the default step value 1837s 1837s Date#valid_civil? 1837s - returns true if it is a valid civil date 1837s - returns false if it is not a valid civil date 1837s - handles negative months and days 1837s 1837s Date#valid_commercial? 1837s - returns true if it is a valid commercial date 1837s - returns false it is not a valid commercial date 1837s - handles negative week and day numbers 1837s 1837s Date#valid_date? 1837s - returns true if it is a valid civil date 1837s - returns false if it is not a valid civil date 1837s - handles negative months and days 1837s 1837s Date.valid_jd? 1837s - returns true if passed a number value 1837s - returns false if passed nil 1837s - returns false if passed symbol 1837s - returns false if passed false 1837s 1837s Date.valid_ordinal? 1837s - determines if the date is a valid ordinal date 1837s - handles negative day numbers 1837s 1837s Date.valid_time? 1837s - needs to be reviewed for spec completeness 1837s 1837s Date#wday 1837s - returns the week day as a number starting with Sunday as 0 1837s 1837s Date#wednesday? 1837s - should be wednesday 1837s 1837s Date#yday 1837s - needs to be reviewed for spec completeness 1837s 1837s Date#year 1837s - returns the year 1837s 1837s Date.zone_to_diff 1837s - needs to be reviewed for spec completeness 1837s 1837s DateTime._strptime 1837s - needs to be reviewed for spec completeness 1837s 1837s DateTime#+ 1837s - is able to add sub-millisecond precision values 1837s 1837s DateTime.civil 1837s - needs to be reviewed for spec completeness 1837s 1837s DateTime.commercial 1837s - needs to be reviewed for spec completeness 1837s 1837s DateTime#hour 1837s - returns 0 if no argument is passed 1837s - returns the hour given as argument 1837s - adds 24 to negative hours 1837s - raises an error, when the hour is smaller than -24 1837s - raises an error, when the hour is larger than 24 1837s - adds 1 to day, when 24 hours given 1837s 1837s DateTime.httpdate 1837s - needs to be reviewed for spec completeness 1837s 1837s DateTime.iso8601 1837s - needs to be reviewed for spec completeness 1837s 1837s DateTime#iso8601 1837s - needs to be reviewed for spec completeness 1837s 1837s DateTime.jd 1837s - needs to be reviewed for spec completeness 1837s 1837s DateTime.jisx0301 1837s - needs to be reviewed for spec completeness 1837s 1837s DateTime#jisx0301 1837s - needs to be reviewed for spec completeness 1837s 1837s DateTime.min 1837s - returns 0 if no argument is passed 1837s - returns the minute passed as argument 1837s - adds 60 to negative minutes 1837s - raises an error, when the minute is smaller than -60 1837s - raises an error, when the minute is greater or equal than 60 1837s 1837s DateTime.minute 1837s - returns 0 if no argument is passed 1837s - returns the minute passed as argument 1837s - adds 60 to negative minutes 1837s - raises an error, when the minute is smaller than -60 1837s - raises an error, when the minute is greater or equal than 60 1837s 1837s DateTime#new_offset 1837s - needs to be reviewed for spec completeness 1837s 1837s DateTime.new 1837s - sets all values to default if passed no arguments 1837s - takes the first argument as year 1837s - takes the second argument as month 1837s - takes the third argument as day 1837s - takes the forth argument as hour 1837s - takes the fifth argument as minute 1837s - takes the sixth argument as second 1837s - takes the seventh argument as an offset 1837s - takes the eighth argument as the date of calendar reform 1837s - raises an error on invalid arguments 1837s 1837s DateTime.now 1837s - creates an instance of DateTime 1837s - sets the current date 1837s - sets the current time 1837s - grabs the local timezone 1837s 1837s DateTime#offset 1837s - needs to be reviewed for spec completeness 1837s 1837s DateTime.ordinal 1837s - needs to be reviewed for spec completeness 1837s 1837s DateTime.parse 1837s - parses a day name into a DateTime object 1837s - parses a month name into a DateTime object 1837s - parses a month day into a DateTime object 1837s - throws an argument error for a single digit 1837s - parses DD as month day number 1837s - parses DDD as year day number 1837s - parses MMDD as month and day 1837s - parses YYYYMMDD as year, month and day 1837s - parses YYDDD as year and day number in 1969--2068 1837s - parses YYMMDD as year, month and day in 1969--2068 1837s - parses YYYYDDD as year and day number 1837s - parses YYYYMMDD as year, month and day number 1837s 1837s DateTime.parse YYYY-MM-DDTHH:MM:SS format 1837s - parses YYYY-MM-DDTHH:MM:SS into a DateTime object 1837s - throws an argument error for invalid month values 1837s - throws an argument error for invalid day values 1837s - throws an argument error for invalid hour values 1837s - throws an argument error for invalid minute values 1837s - throws an argument error for invalid second values 1837s 1837s DateTime.parse(.) 1837s - parses YYYY.MM.DD into a DateTime object 1837s - parses DD.MM.YYYY into a DateTime object 1837s - parses YY.MM.DD into a DateTime object using the year 20YY 1837s - parses YY.MM.DD using the year digits as 20YY when given true as additional argument 1837s 1837s DateTime.rfc2822 1837s - needs to be reviewed for spec completeness 1837s - raises DateError if passed nil 1837s 1837s DateTime.rfc3339 1837s - needs to be reviewed for spec completeness 1837s 1837s DateTime#rfc3339 1837s - needs to be reviewed for spec completeness 1837s 1837s DateTime.rfc822 1837s - needs to be reviewed for spec completeness 1837s 1837s DateTime#sec_fraction 1837s - needs to be reviewed for spec completeness 1837s 1837s DateTime.sec 1837s - returns 0 seconds if passed no arguments 1837s - returns the seconds passed in the arguments 1837s - adds 60 to negative values 1837s - returns the absolute value of a Rational 1837s - returns the absolute value of a float 1837s - raises an error, when the second is smaller than -60 1837s - raises an error, when the second is greater or equal than 60 1837s - raises an error for second fractions smaller than -60 1837s - takes a second fraction near 60 1837s 1837s DateTime#second_fraction 1837s - needs to be reviewed for spec completeness 1837s 1837s DateTime#second 1837s - returns 0 seconds if passed no arguments 1837s - returns the seconds passed in the arguments 1837s - adds 60 to negative values 1837s - returns the absolute value of a Rational 1837s - returns the absolute value of a float 1837s - raises an error, when the second is smaller than -60 1837s - raises an error, when the second is greater or equal than 60 1837s - raises an error for second fractions smaller than -60 1837s - takes a second fraction near 60 1837s 1837s DateTime#strftime 1837s - should be able to print the full day name 1837s - should be able to print the short day name 1837s - should be able to print the full month name 1837s - should be able to print the short month name 1837s - should be able to print the century 1837s - should be able to print the month day with leading zeroes 1837s - should be able to print the month day with leading spaces 1837s - should be able to print the commercial year with leading zeroes 1837s - should be able to print the commercial year with only two digits 1837s - should be able to print the hour with leading zeroes (hour is always 00) 1837s - should be able to print the hour in 12 hour notation with leading zeroes 1837s - should be able to print the julian day with leading zeroes 1837s - should be able to print the hour in 24 hour notation with leading spaces 1837s - should be able to print the hour in 12 hour notation with leading spaces 1837s - should be able to print the minutes with leading zeroes 1837s - should be able to print the month with leading zeroes 1837s - should be able to add a newline 1837s - should be able to show AM/PM 1837s - should be able to show am/pm 1837s - should be able to show the number of seconds with leading zeroes 1837s - should be able to show the number of seconds since the unix epoch for a date 1837s - should be able to add a tab 1837s - should be able to show the week number with the week starting on Sunday (%U) and Monday (%W) 1837s - should be able to show the commercial week day 1837s - should be able to show the commercial week with %V 1837s - should be able to show the week day 1837s - should be able to show the year in YYYY format 1837s - should be able to show the year in YY format 1837s - should be able to show the timezone of the date with a : separator 1837s - should be able to escape the % character 1837s - should be able to print the date in full 1837s - should be able to print the date with slashes 1837s - should be able to print the date as YYYY-MM-DD 1837s - should be able to show HH:MM for a date 1837s - should be able to show HH:MM:SS AM/PM for a date 1837s - should be able to show HH:MM:SS 1837s - should be able to show HH:MM:SS 1837s - should be able to show MM/DD/YY 1837s - supports GNU modificators 1837s - supports the '-' modifier to drop leading zeros 1837s - passes the format string's encoding to the result string 1837s - formats time according to the directives in the given format string 1837s - returns the 24-based hour with %H 1837s - returns the 12-based hour with %I 1837s - supports 24-hr formatting with %l 1837s - supports 12-hr formatting with %l 1837s - returns the minute with %M 1837s - supports am/pm formatting with %P 1837s - supports AM/PM formatting with %p 1837s - returns the second with %S 1837s - should be able to show the number of seconds since the unix epoch 1837s - returns the timezone with %Z 1837s - should be able to print the time in full 1837s - should be able to show HH:MM 1837s - should be able to show HH:MM:SS AM/PM 1837s - supports HH:MM:SS formatting with %T 1837s - supports HH:MM:SS formatting with %X 1837s - supports the '-' modifier to drop leading zeros 1837s - supports the '-' modifier for padded format directives 1837s - should be able to show default Logger format 1837s - should be able to print the datetime with no argument 1837s - should be able to show the timezone with a : separator 1837s - should be able to show the commercial week 1837s - shows the number of milliseconds since epoch 1837s - should be able to show a full notation 1837s 1837s DateTime#strftime with %L 1837s - formats the milliseconds of the second 1837s 1837s DateTime#strftime with %N 1837s - formats the nanoseconds of the second with %N 1837s - formats the milliseconds of the second with %3N 1837s - formats the microseconds of the second with %6N 1837s - formats the nanoseconds of the second with %9N 1837s - formats the picoseconds of the second with %12N 1837s 1837s DateTime#strftime with %z 1837s - formats a UTC time offset as '+0000' 1837s - formats a local time with positive UTC offset as '+HHMM' 1837s - formats a local time with negative UTC offset as '-HHMM' 1837s - formats a time with fixed positive offset as '+HHMM' 1837s - formats a time with fixed negative offset as '-HHMM' 1837s - formats a time with fixed offset as '+/-HH:MM' with ':' specifier 1837s - formats a time with fixed offset as '+/-HH:MM:SS' with '::' specifier 1837s 1837s DateTime.strptime 1837s - needs to be reviewed for spec completeness 1837s 1837s DateTime#- 1837s - is able to subtract sub-millisecond precision values 1837s - correctly calculates sub-millisecond time differences 1837s 1837s DateTime#to_date 1837s - returns an instance of Date 1837s - maintains the same year 1837s - maintains the same month 1837s - maintains the same day 1837s - maintains the same mday 1837s - maintains the same julian day regardless of local time or zone 1837s 1837s DateTime#to_datetime 1837s - returns itself 1837s 1837s DateTime#to_s 1837s - returns a new String object 1837s - maintains timezone regardless of local time 1837s 1837s DateTime#to_time 1837s - yields a new Time object 1837s - returns a Time representing the same instant 1837s - preserves the same time regardless of local time or zone 1837s 1837s DateTime.xmlschema 1837s - needs to be reviewed for spec completeness 1837s 1837s DateTime#xmlschema 1837s - needs to be reviewed for spec completeness 1837s 1837s DateTime#zone 1837s - needs to be reviewed for spec completeness 1837s 1837s DelegateClass.instance_method 1837s - returns a method object for public instance methods of the delegated class 1837s - returns a method object for protected instance methods of the delegated class 1837s - raises a NameError for a private instance methods of the delegated class 1837s - returns a method object for public instance methods of the DelegateClass class 1837s - returns a method object for protected instance methods of the DelegateClass class 1837s - returns a method object for private instance methods of the DelegateClass class 1837s - raises a NameError for an invalid method name 1837s 1837s DelegateClass.instance_methods 1837s - includes all public methods of the delegated class 1837s - includes all protected methods of the delegated class 1837s - includes instance methods of the DelegateClass class 1837s - does not include private methods 1837s 1837s DelegateClass.private_instance_methods 1837s - does not include any instance methods of the delegated class 1837s - includes private instance methods of the DelegateClass class 1837s - does not include public or protected instance methods of the DelegateClass class 1837s 1837s DelegateClass.protected_instance_methods 1837s - does not include public methods of the delegated class 1837s - includes the protected methods of the delegated class 1837s - includes protected instance methods of the DelegateClass class 1837s - does not include public instance methods of the DelegateClass class 1837s - does not include private methods 1837s 1837s DelegateClass.public_instance_methods 1837s - includes all public methods of the delegated class 1837s - does not include the protected methods of the delegated class 1837s - includes public instance methods of the DelegateClass class 1837s - does not include private methods 1837s 1837s DelegateClass#respond_to_missing? 1837s - is used for respond_to? behavior of late-bound delegated methods 1837s 1837s Delegator#=== 1837s - is delegated 1837s 1837s Delegator#<=> 1837s - is delegated 1837s 1837s Delegator#~ 1837s - is delegated 1837s 1837s Delegator#eql? 1837s - returns true when compared with same delegator 1837s - returns true when compared with the inner object 1837s - returns false when compared with the delegator with other object 1837s - returns false when compared with the other object 1837s 1837s Delegator#equal? 1837s - returns true only when compared with the delegator 1837s 1837s Delegator#== 1837s - is not delegated when passed self 1837s - is delegated when passed the delegated object 1837s - is delegated in general 1837s 1837s Delegator when frozen 1837s - is still readable 1837s - is frozen 1837s - is not writable 1837s - creates a frozen clone 1837s - creates an unfrozen dup 1837s - causes mutative calls to raise RuntimeError 1837s - returns false if only the delegated object is frozen 1837s 1837s Delegator#hash 1837s - is delegated 1837s 1837s SimpleDelegator 1837s - can be marshalled 1837s - can be marshalled with its instance variables intact 1837s 1837s Delegator#method 1837s - returns a method object for public methods of the delegate object 1837s - raises a NameError for protected methods of the delegate object 1837s - raises a NameError for a private methods of the delegate object 1837s - returns a method object for public methods of the Delegator class 1837s - returns a method object for protected methods of the Delegator class 1837s - returns a method object for private methods of the Delegator class 1837s - raises a NameError for an invalid method name 1837s - returns a method that respond_to_missing? 1837s - raises a NameError if method is no longer valid because object has changed 1837s 1837s Delegator#methods 1837s - returns singleton methods when passed false 1837s - includes all public methods of the delegate object 1837s - includes all protected methods of the delegate object 1837s - includes instance methods of the Delegator class 1837s - does not include private methods 1837s 1837s Delegator#!= 1837s - is not delegated when passed self 1837s - is delegated when passed the delegated object 1837s - is delegated in general 1837s 1837s Delegator#! 1837s - is delegated 1837s 1837s Delegator#private_methods 1837s - does not include any method of the delegate object 1837s - includes all private instance methods of the Delegate class 1837s 1837s Delegator#protected_methods 1837s - includes protected methods of the delegate object 1837s - includes protected instance methods of the Delegator class 1837s 1837s Delegator#public_methods 1837s - includes public methods of the delegate object 1837s - includes public instance methods of the Delegator class 1837s 1837s SimpleDelegator.new 1837s - forwards public method calls 1837s - forwards protected method calls 1837s - doesn't forward private method calls 1837s - doesn't forward private method calls even via send or __send__ 1837s 1837s Delegator#tap 1837s - yield the delegator object 1837s 1837s Digest.bubblebabble 1837s - returns a String 1837s - returns a String in the Bubble Babble Binary Data Encoding format 1837s - calls #to_str on an object and returns the bubble babble value of the result 1837s - raises a TypeError when passed nil 1837s - raises a TypeError when passed an Integer 1837s 1837s Digest.hexencode 1837s - returns '' when passed an empty String 1837s - returns the hex-encoded value of a non-empty String 1837s - calls #to_str on an object and returns the hex-encoded value of the result 1837s - raises a TypeError when passed nil 1837s - raises a TypeError when passed an Integer 1837s 1837s Digest::Instance#<< 1837s - raises a RuntimeError if called 1837s 1837s Digest::Instance#new 1837s - returns a copy of the digest instance 1837s - calls reset 1837s 1837s Digest::Instance#update 1837s - raises a RuntimeError if called 1837s 1837s Digest::MD5#<< 1837s - can update 1837s 1837s Digest::MD5#block_length 1837s - returns the length of digest block 1837s 1837s Digest::MD5#digest! 1837s - returns a digest and can digest! 1837s 1837s Digest::MD5#digest_length 1837s - returns the length of computed digests 1837s 1837s Digest::MD5#digest 1837s - returns a digest 1837s 1837s Digest::MD5.digest 1837s - returns a digest 1837s 1837s Digest::MD5#== 1837s - equals itself 1837s - equals the string representing its hexdigest 1837s - equals the appropriate object that responds to to_str 1837s - equals the same digest for a different object 1837s 1837s Digest::MD5.file 1837s - raises a Errno::ENOENT when passed a path that does not exist 1837s - raises a TypeError when passed nil 1837s 1837s Digest::MD5.file when passed a path to a file that exists 1837s - returns a Digest::MD5 object 1837s - returns a Digest::MD5 object with the correct digest 1837s - calls #to_str on an object and returns the Digest::MD5 with the result 1837s 1837s Digest::MD5#hexdigest! 1837s - returns a hexdigest and resets the state 1837s 1837s Digest::MD5#hexdigest 1837s - returns a hexdigest 1837s 1837s Digest::MD5.hexdigest 1837s - returns a hexdigest 1837s 1837s Digest::MD5#inspect 1837s - returns a Ruby object representation 1837s 1837s Digest::MD5#length 1837s - returns the length of the digest 1837s 1837s Digest::MD5#reset 1837s - returns digest state to initial conditions 1837s 1837s Digest::MD5#size 1837s - returns the length of the digest 1837s 1837s Digest::MD5#to_s 1837s - returns a hexdigest 1837s - does not change the internal state 1837s 1837s Digest::MD5#update 1837s - can update 1837s 1837s Digest::SHA1#digest 1837s - returns a digest 1837s 1837s Digest::SHA1.digest 1837s - returns a digest 1837s 1837s Digest::SHA1.file 1837s - raises a Errno::ENOENT when passed a path that does not exist 1837s - raises a TypeError when passed nil 1837s 1837s Digest::SHA1.file when passed a path to a file that exists 1837s - returns a Digest::SHA1 object 1837s - returns a Digest::SHA1 object with the correct digest 1837s - calls #to_str on an object and returns the Digest::SHA1 with the result 1837s 1837s Digest::SHA2#hexdigest 1837s - returns a SHA256 hexdigest by default 1837s 1837s Digest::SHA2.hexdigest 1837s - returns a SHA256 hexdigest by default 1837s 1837s Digest::SHA256#<< 1837s - can update 1837s 1837s Digest::SHA256#block_length 1837s - returns the length of digest block 1837s 1837s Digest::SHA256#digest! 1837s - returns a digest and can digest! 1837s 1837s Digest::SHA256#digest_length 1837s - returns the length of computed digests 1837s 1837s Digest::SHA256#digest 1837s - returns a digest 1837s 1837s Digest::SHA256.digest 1837s - returns a digest 1837s 1837s Digest::SHA256#== 1837s - equals itself 1837s - equals the string representing its hexdigest 1837s - equals the appropriate object that responds to to_str 1837s - equals the same digest for a different object 1837s 1837s Digest::SHA256.file 1837s - raises a Errno::ENOENT when passed a path that does not exist 1837s - raises a TypeError when passed nil 1837s 1837s Digest::SHA256.file when passed a path to a file that exists 1837s - returns a Digest::SHA256 object 1837s - returns a Digest::SHA256 object with the correct digest 1841s - can be used with frozen-string-literal 1841s - calls #to_str on an object and returns the Digest::SHA256 with the result 1841s 1841s Digest::SHA256#hexdigest! 1841s - returns a hexdigest and resets the state 1841s 1841s Digest::SHA256#hexdigest 1841s - returns a hexdigest 1841s 1841s Digest::SHA256.hexdigest 1841s - returns a hexdigest 1841s 1841s Digest::SHA256#inspect 1841s - returns a Ruby object representation 1841s 1841s Digest::SHA256#length 1841s - returns the length of the digest 1841s 1841s Digest::SHA256#reset 1841s - returns digest state to initial conditions 1841s 1841s Digest::SHA256#size 1841s - returns the length of the digest 1841s 1841s Digest::SHA256#to_s 1841s - returns a hexdigest 1841s - does not change the internal state 1841s 1841s Digest::SHA256#update 1841s - can update 1841s 1841s Digest::SHA384#<< 1841s - can update 1841s 1841s Digest::SHA384#block_length 1841s - returns the length of digest block 1841s 1841s Digest::SHA384#digest! 1841s - returns a digest and can digest! 1841s 1841s Digest::SHA384#digest_length 1841s - returns the length of computed digests 1841s 1841s Digest::SHA384#digest 1841s - returns a digest 1841s 1841s Digest::SHA384.digest 1841s - returns a digest 1841s 1841s Digest::SHA384#== 1841s - equals itself 1841s - equals the string representing its hexdigest 1841s - equals the appropriate object that responds to to_str 1841s - equals the same digest for a different object 1841s 1841s Digest::SHA384.file 1841s - raises a Errno::ENOENT when passed a path that does not exist 1841s - raises a TypeError when passed nil 1841s 1841s Digest::SHA384.file when passed a path to a file that exists 1841s - returns a Digest::SHA384 object 1841s - returns a Digest::SHA384 object with the correct digest 1841s - calls #to_str on an object and returns the Digest::SHA384 with the result 1841s 1841s Digest::SHA384#hexdigest! 1841s - returns a hexdigest and resets the state 1841s 1841s Digest::SHA384#hexdigest 1841s - returns a hexdigest 1841s 1841s Digest::SHA384.hexdigest 1841s - returns a hexdigest 1841s 1841s Digest::SHA384#inspect 1841s - returns a Ruby object representation 1841s 1841s Digest::SHA384#length 1841s - returns the length of the digest 1841s 1841s Digest::SHA384#reset 1841s - returns digest state to initial conditions 1841s 1841s Digest::SHA384#size 1841s - returns the length of the digest 1841s 1841s Digest::SHA384#to_s 1841s - returns a hexdigest 1841s - does not change the internal state 1841s 1841s Digest::SHA384#update 1841s - can update 1841s 1841s Digest::SHA512#<< 1841s - can update 1841s 1841s Digest::SHA512#block_length 1841s - returns the length of digest block 1841s 1841s Digest::SHA512#digest! 1841s - returns a digest and can digest! 1841s 1841s Digest::SHA512#digest_length 1841s - returns the length of computed digests 1841s 1841s Digest::SHA512#digest 1841s - returns a digest 1841s 1841s Digest::SHA512.digest 1841s - returns a digest 1841s 1841s Digest::SHA512#== 1841s - equals itself 1841s - equals the string representing its hexdigest 1841s - equals the appropriate object that responds to to_str 1841s - equals the same digest for a different object 1841s 1841s Digest::SHA512.file 1841s - raises a Errno::ENOENT when passed a path that does not exist 1841s - raises a TypeError when passed nil 1841s 1841s Digest::SHA512.file when passed a path to a file that exists 1841s - returns a Digest::SHA512 object 1841s - returns a Digest::SHA512 object with the correct digest 1841s - calls #to_str on an object and returns the Digest::SHA512 with the result 1841s 1841s Digest::SHA512#hexdigest! 1841s - returns a hexdigest and resets the state 1841s 1841s Digest::SHA512#hexdigest 1841s - returns a hexdigest 1841s 1841s Digest::SHA512.hexdigest 1841s - returns a hexdigest 1841s 1841s Digest::SHA512#inspect 1841s - returns a Ruby object representation 1841s 1841s Digest::SHA512#length 1841s - returns the length of the digest 1841s 1841s Digest::SHA512#reset 1841s - returns digest state to initial conditions 1841s 1841s Digest::SHA512#size 1841s - returns the length of the digest 1841s 1841s Digest::SHA512#to_s 1841s - returns a hexdigest 1841s - does not change the internal state 1841s 1841s Digest::SHA512#update 1841s - can update 1841s 1841s DRb.start_service 1841s - runs a basic remote call 1841s - runs a basic remote call passing a block 1841s 1841s ERB#def_class 1841s - return an unnamed class which has instance method to render eRuby script 1841s 1841s ERB#def_method 1841s - define module's instance method to render eRuby file 1841s 1841s ERB#def_module 1841s - return unnamed module which has instance method to render eRuby 1841s 1841s ERB::DefMethod.def_erb_method 1841s - define method to render eRuby file as an instance method of current module 1841s - define method to render eRuby object as an instance method of current module 1841s 1841s ERB#filename 1841s - raises an exception if there are errors processing content 1841s - uses '(erb)' as filename when filename is not set 1841s 1841s ERB.new 1841s - compiles eRuby script into ruby code when trim mode is 0 or not specified 1841s - warns invalid trim_mode 1841s - removes ' 1841s ' when trim_mode is 1 or '>' 1841s - removes spaces at beginning of line and ' 1841s ' when trim_mode is 2 or '<>' 1841s - removes spaces around '<%- -%>' when trim_mode is '-' 1841s - does not support '<%-= expr %> even when trim_mode is '-' 1841s - regards lines starting with '%' as '<% ... %>' when trim_mode is '%' 1841s - regards lines starting with '%' as '<% ... %>' and remove "\n" when trim_mode is '%>' 1841s - regard lines starting with '%' as '<% ... %>' and remove "\n" when trim_mode is '%<>' 1841s - regard lines starting with '%' as '<% ... %>' and spaces around '<%- -%>' when trim_mode is '%-' 1841s - changes '_erbout' variable name in the produced source 1841s - ignores '<%# ... %>' 1841s - forget local variables defined previous one 1841s 1841s ERB.new warning about arguments 1841s - warns when passed safe_level and later arguments 1841s - does not warn when passed arguments as keyword argument 1841s 1841s ERB#result 1841s - return the result of compiled ruby code 1841s - share local variables 1841s - is not able to h() or u() unless including ERB::Util 1841s - is able to h() or u() if ERB::Util is included 1841s 1841s ERB#run 1841s - print the result of compiled ruby code 1841s - share local variables 1841s - is not able to h() or u() unless including ERB::Util 1841s - is able to h() or u() if ERB::Util is included 1841s 1841s ERB#src 1841s - returns the compiled ruby code evaluated to a String 1841s 1841s ERB::Util.h 1841s - escape (& < > " ') to (& < > " ') 1841s - not escape characters except (& < > " ') 1841s - return empty string when argument is nil 1841s - returns string when argument is number 1841s - returns string when argument is boolean 1841s 1841s ERB::Util.html_escape 1841s - escape (& < > " ') to (& < > " ') 1841s - not escape characters except (& < > " ') 1841s - return empty string when argument is nil 1841s - returns string when argument is number 1841s - returns string when argument is boolean 1841s 1841s ERB::Util.u 1841s - encode characters 1841s - does not escape tilde 1841s - encode unicode string 1841s - returns empty string when argument is nil 1841s - returns string when argument is number 1841s - returns string when argument is boolean 1841s 1841s ERB::Util.url_encode 1841s - encode characters 1841s - does not escape tilde 1841s - encode unicode string 1841s - returns empty string when argument is nil 1841s - returns string when argument is number 1841s - returns string when argument is boolean 1841s 1841s Etc.confstr 1841s - returns a String for Etc::CS_PATH 1841s - raises Errno::EINVAL for unknown configuration variables 1841s 1841s Etc.getgrgid 1841s - returns a Etc::Group struct instance for the given user 1841s - returns the Etc::Group for a given gid if it exists 1841s - uses Process.gid as the default value for the argument 1841s - raises if the group does not exist 1841s - raises a TypeError if not passed an Integer 1841s - can be called safely by multiple threads 1841s 1841s Etc.getgrnam 1841s - returns a Etc::Group struct instance for the given group 1841s - only accepts strings as argument 1841s 1841s Etc.getpwnam 1841s - returns a Etc::Passwd struct instance for the given user 1841s - only accepts strings as argument 1841s 1841s Etc.getpwuid 1841s - returns a Etc::Passwd struct instance for the given user 1841s - uses Process.uid as the default value for the argument 1841s - only accepts integers as argument 1841s 1841s Etc.group 1841s - returns a Etc::Group struct 1841s - raises a RuntimeError for parallel iteration 1841s 1841s Etc.nprocessors 1841s - returns the number of online processors 1841s 1841s Etc.passwd 1841s - returns a Etc::Passwd struct 1841s 1841s Etc::Group 1841s - returns group name 1841s - returns group password 1841s - returns group id 1841s - returns an array of users belonging to the group 1841s - can be compared to another object 1841s 1841s Etc::Passwd 1841s - returns user name 1841s - returns user password 1841s - returns user id 1841s - returns user group id 1841s - returns user personal information (gecos field) 1841s - returns user home directory 1841s - returns user shell 1841s - can be compared to another object 1841s 1841s Etc.sysconf 1841s - returns the value of POSIX.1 system configuration variable SC_ARG_MAX 1841s - returns the value of POSIX.1 system configuration variable SC_HOST_NAME_MAX 1841s - returns the value of POSIX.1 system configuration variable SC_LOGIN_NAME_MAX 1841s - returns the value of POSIX.1 system configuration variable SC_NGROUPS_MAX 1841s - returns the value of POSIX.1 system configuration variable SC_CLK_TCK 1841s - returns the value of POSIX.1 system configuration variable SC_OPEN_MAX 1841s - returns the value of POSIX.1 system configuration variable SC_PAGESIZE 1841s - returns the value of POSIX.1 system configuration variable SC_RE_DUP_MAX 1841s - returns the value of POSIX.1 system configuration variable SC_STREAM_MAX 1841s - returns the value of POSIX.1 system configuration variable SC_TTY_NAME_MAX 1841s - returns the value of POSIX.1 system configuration variable SC_VERSION 1841s 1841s Etc.sysconfdir 1841s - returns a String 1841s 1841s Etc.systmpdir 1841s - returns a String 1841s 1841s Etc.uname 1841s - returns a Hash with the documented keys 1841s 1841s IO#expect 1841s - matches data against a Regexp 1841s - matches data against a String 1841s - returns any captures of the Regexp 1841s - returns raises IOError if the IO is closed 1841s - returns nil if eof is hit 1841s - yields the result if a block is given 1841s 1841s Fiber#alive? 1841s - returns true for a Fiber that hasn't had #resume called 1841s - returns true for a Fiber that's yielded to the caller 1841s - returns true when called from its Fiber 1841s - doesn't invoke the block associated with the Fiber 1841s - returns false for a Fiber that's dead 1841s - always returns false for a dead Fiber 1841s 1841s Fiber.current 1843s - is available without an extra require 1843s - returns the root Fiber when called outside of a Fiber 1843s - returns the current Fiber when called from a Fiber 1843s 1843s Fiber#resume 1843s - raises a FiberError if the Fiber attempts to resume a resuming fiber 1843s 1843s Fiber#transfer 1843s - can be invoked from the root Fiber 1843s - raises a FiberError if invoked from a different Thread 1843s - passes control to the beginning of the block on first invocation 1843s - returns the last value encountered on first invocation 1843s - runs until the end of the block 1843s - accepts any number of arguments 1843s - raises a FiberError if the Fiber is dead 1843s - raises a LocalJumpError if the block includes a break statement 1843s 1843s Fiber#transfer 1843s - returns to the root Fiber when finished 1843s - works if Fibers in different Threads each transfer to a Fiber in the same Thread 1843s - transfers control between a non-main thread's root fiber to a child fiber and back again 1843s 1843s Find.find 1843s - should recursively yield every file in the directory 1843s 1843s Find.find when called without a block 1843s - returns an Enumerator 1843s 1843s Find.prune 1843s - should throw :prune 1843s 1843s GetoptLong#each_option 1843s - passes each argument/value pair to the block 1843s 1843s GetoptLong#each 1843s - passes each argument/value pair to the block 1843s 1843s GetoptLong#error_message 1843s - returns nil if no error occurred 1843s - returns the error message of the last error that occurred 1843s 1843s GetoptLong#get_option 1843s - returns the next option name and its argument as an Array 1843s - shifts ARGV on each call 1843s - terminates processing when encountering '--' 1843s - raises a if an argument was required, but none given 1843s - returns multiline argument 1843s 1843s GetoptLong#get 1843s - returns the next option name and its argument as an Array 1843s - shifts ARGV on each call 1843s - terminates processing when encountering '--' 1843s - raises a if an argument was required, but none given 1843s - returns multiline argument 1843s 1843s GetoptLong#initialize 1843s - sets ordering to REQUIRE_ORDER if ENV['POSIXLY_CORRECT'] is set 1843s - sets ordering to PERMUTE if ENV['POSIXLY_CORRECT'] is not set 1843s 1843s GetoptLong#ordering= 1843s - raises an ArgumentError if called after processing has started 1843s - raises an ArgumentError if given an invalid value 1843s - does not allow changing ordering to PERMUTE if ENV['POSIXLY_CORRECT'] is set 1843s 1843s GetoptLong#set_options 1843s - allows setting command line options 1843s - discards previously defined command line options 1843s - raises an ArgumentError if too many argument flags where given 1843s - raises a RuntimeError if processing has already started 1843s - raises an ArgumentError if no argument flag was given 1843s - raises an ArgumentError if one of the given arguments is not an Array 1843s - raises an ArgumentError if the same option is given twice 1843s - raises an ArgumentError if the given option is invalid 1843s 1843s GetoptLong#terminate 1843s - terminates option processing 1843s - returns self when option processing is terminated 1843s - returns nil when option processing was already terminated 1843s 1843s GetoptLong#terminated? 1843s - returns true if option processing has terminated 1843s 1843s IO#wait [timeout, mode] passed 1843s - raises ArgumentError when passed wrong Symbol value as mode argument 1843s 1843s IO#wait_writable 1843s - waits for the IO to become writable with no timeout 1843s - waits for the IO to become writable with the given timeout 1843s - waits for the IO to become writable with the given large timeout 1843s 1843s IPAddr#hton 1843s - converts IPAddr to network byte order 1843s 1843s IPAddr#new_ntoh 1843s - creates a new IPAddr using hton notation 1843s 1843s IPAddr#ipv4_compat 1843s - should ipv4_compat? 1843s 1843s IPAddr#ipv4_mapped 1843s - should ipv4_mapped 1843s 1843s IPAddr#new 1843s - initializes IPAddr 1843s - initializes IPAddr ipv6 address with short notation 1843s - initializes IPAddr ipv6 address with long notation 1843s - initializes IPAddr ipv6 address with / subnet notation 1843s - initializes IPAddr ipv6 address with mask subnet notation 1843s - initializes IPAddr ipv4 address with all zeroes 1843s - initializes IPAddr ipv4 address 1843s - initializes IPAddr ipv4 address with / subnet notation 1843s - initializes IPAddr ipv4 address with subnet mask 1843s - initializes IPAddr ipv4 mapped address with subnet mask 1843s - raises on incorrect IPAddr strings 1843s 1843s IPAddr Operator 1843s - bitwises or 1843s - bitwises and 1843s - bitshifts right 1843s - bitshifts left 1843s - inverts 1843s - tests for equality 1843s - tests for equality correctly if object cannot be converted to IPAddr 1843s - sets a mask 1843s - checks whether an address is included in a range 1843s 1843s IPAddr#reverse 1843s - generates the reverse DNS lookup entry 1843s 1843s IPAddr#ip6_arpa 1843s - converts an IPv6 address into the reverse DNS lookup representation according to RFC3172 1843s 1843s IPAddr#ip6_int 1843s - converts an IPv6 address into the reverse DNS lookup representation according to RFC1886 1843s 1843s IPAddr#to_s 1843s - displays IPAddr using short notation 1843s 1843s IPAddr#to_string 1843s - displays an IPAddr using full notation 1843s 1843s Logger::LogDevice#close 1843s - closes the LogDevice's stream 1843s 1843s Logger::LogDevice#new 1843s - creates a new log device 1843s - receives an IO object to log there as first argument 1843s - creates a File if the IO object does not exist 1843s - receives options via a hash as second argument 1843s 1843s Logger::LogDevice#write 1843s - writes a message to the device 1843s - can create a file and writes empty message 1843s - fails if the device is already closed 1843s 1843s Logger#add 1843s - writes a new message to the logger 1843s - receives a severity 1843s - receives a message 1843s - receives a program name 1843s - receives a block 1843s - calls the block if message is nil 1843s - ignores the block if the message is not nil 1843s 1843s Logger#close 1843s - closes the logging device 1843s 1843s Logger#datetime_format 1843s - returns the date format used for the logs 1843s - returns nil logger is using the default date format 1843s 1843s Logger#datetime_format= 1843s - sets the date format for the logs 1843s - follows the Time#strftime format 1843s 1843s Logger#debug? 1843s - returns true if severity level allows debug messages 1843s - returns false if severity level does not allow debug messages 1843s 1843s Logger#debug 1843s - logs a DEBUG message 1843s - accepts an application name with a block 1843s 1843s Logger#error? 1843s - returns true if severity level allows printing errors 1843s - returns false if severity level does not allow errors 1843s 1843s Logger#error 1843s - logs a ERROR message 1843s - accepts an application name with a block 1843s 1843s Logger#fatal? 1843s - returns true if severity level allows fatal messages 1843s - returns false if severity level does not allow fatal messages 1843s 1843s Logger#fatal 1843s - logs a FATAL message 1843s - accepts an application name with a block 1843s 1843s Logger#info? 1843s - returns true if severity level allows info messages 1843s - returns false if severity level does not allow info messages 1843s 1843s Logger#info 1843s - logs a INFO message 1843s - accepts an application name with a block 1843s 1843s Logger#new 1843s - creates a new logger object 1843s - receives a logging device as first argument 1843s - receives a frequency rotation as second argument 1843s - also receives a number of log files to keep as second argument 1844s - receives a maximum logfile size as third argument 1844s - receives level symbol as keyword argument 1844s - receives level as keyword argument 1844s - receives progname as keyword argument 1844s - receives datetime_format as keyword argument 1844s - receives formatter as keyword argument 1844s - receives shift_period_suffix 1844s 1844s Logger#unknown 1844s - logs a message with unknown severity 1844s - defaults the priority value to 5 and text value to ANY 1844s - receives empty messages 1844s 1844s Logger#warn? 1844s - returns true if severity level allows printing warn messages 1844s - returns false if severity level does not allow printing warn messages 1844s 1844s Logger#warn 1844s - logs a WARN message 1844s - accepts an application name with a block 1844s 1844s Logger::Severity 1844s - defines Logger severity constants 1844s 1844s mkmf 1847s - can be required with --enable-frozen-string-literal 1847s 1847s Monitor#enter 1847s - acquires the monitor 1847s 1847s Monitor#exit 1847s - raises ThreadError when monitor is not entered 1847s 1847s MonitorMixin#mon_initialize 1847s - can be called in initialize_copy to get a new Mutex and used with synchronize 1847s 1847s Monitor#new_cond 1847s - creates a MonitorMixin::ConditionVariable 1847s - returns a condition variable which can be waited on by a thread holding the monitor 1847s - returns a condition variable which can be waited on by a thread holding the monitor inside multiple synchronize blocks 1847s - returns a condition variable which can be signalled by a thread holding the monitor inside multiple synchronize blocks 1847s 1847s Monitor#synchronize 1847s - unlocks after return, even if it was interrupted by Thread#raise 1847s - raises a LocalJumpError if not passed a block 1847s - raises a thread error if the monitor is not owned on exiting the block 1847s 1847s Monitor#try_enter 1847s - will acquire a monitor not held by another thread 1847s - will not acquire a monitor already held by another thread 1847s 1847s Observer#add_observer 1847s - adds the observer 1847s 1847s Observer#count_observers 1847s - returns the number of observers 1847s - returns the number of unique observers 1847s 1847s Observer#delete_observer 1847s - deletes the observer 1847s 1847s Observer#delete_observers 1847s - deletes the observers 1847s 1847s Observer#notify_observers 1847s - must call changed before notifying observers 1847s - verifies observer responds to update 1847s - receives the callback 1847s 1847s Open3.capture2 1847s - needs to be reviewed for spec completeness 1847s 1847s Open3.capture2e 1847s - needs to be reviewed for spec completeness 1847s 1847s Open3.capture3 1847s - needs to be reviewed for spec completeness 1847s 1847s Open3.pipeline_r 1847s - needs to be reviewed for spec completeness 1847s 1847s Open3.pipeline_rw 1847s - needs to be reviewed for spec completeness 1847s 1847s Open3.pipeline 1847s - needs to be reviewed for spec completeness 1847s 1847s Open3.pipeline_start 1847s - needs to be reviewed for spec completeness 1847s 1847s Open3.pipeline_w 1847s - needs to be reviewed for spec completeness 1847s 1847s Open3.popen2 1847s - needs to be reviewed for spec completeness 1847s 1847s Open3.popen2e 1847s - needs to be reviewed for spec completeness 1847s 1847s Open3.popen3 1851s - returns in, out, err and a thread waiting the process 1854s - executes a process with a pipe to read stdout 1859s - executes a process with a pipe to read stderr 1861s - executes a process with a pipe to write stdin 1862s 1862s OpenSSL::Cipher's CipherError 1862s - exists under OpenSSL::Cipher namespace 1862s 1862s OpenSSL::Digest#<< when given input as a single string 1862s - returns a SHA1 digest 1862s - returns a SHA256 digest 1862s - returns a SHA384 digest 1862s - returns a SHA512 digest 1862s 1862s OpenSSL::Digest#<< when given input as multiple smaller substrings 1862s - returns a SHA1 digest 1862s - returns a SHA256 digest 1862s - returns a SHA384 digest 1862s - returns a SHA512 digest 1862s 1862s OpenSSL::Digest#block_length when the digest object is created via a name argument 1862s - returns a SHA1 block length 1862s - returns a SHA256 block length 1862s - returns a SHA384 block length 1862s - returns a SHA512 block length 1862s 1862s OpenSSL::Digest#block_length when the digest object is created via a subclass 1862s - returns a SHA1 block length 1862s - returns a SHA256 block length 1862s - returns a SHA384 block length 1862s - returns a SHA512 block length 1862s 1862s OpenSSL::Digest#digest_length when the digest object is created via a name argument 1862s - returns a SHA1 digest length 1862s - returns a SHA256 digest length 1862s - returns a SHA384 digest length 1862s - returns a SHA512 digest length 1862s 1862s OpenSSL::Digest#digest_length when the digest object is created via a subclass 1862s - returns a SHA1 digest length 1862s - returns a SHA256 digest length 1862s - returns a SHA384 digest length 1862s - returns a SHA512 digest length 1862s 1862s OpenSSL::Digest class methods .digest 1862s - returns a SHA1 digest 1862s - returns a SHA256 digest 1862s - returns a SHA384 digest 1862s - returns a SHA512 digest 1862s 1862s OpenSSL::Digest class methods .hexdigest 1862s - returns a SHA1 hexdigest 1862s - returns a SHA256 hexdigest 1862s - returns a SHA384 hexdigest 1862s - returns a SHA512 hexdigest 1862s 1862s OpenSSL::Digest class methods .base64digest 1862s - returns a SHA1 base64digest 1862s - returns a SHA256 base64digest 1862s - returns a SHA384 base64digest 1862s - returns a SHA512 base64digest 1862s 1862s OpenSSL::Digest#initialize when called without an initial String argument 1862s - returns a SHA1 digest 1862s - returns a SHA256 digest 1862s - returns a SHA384 digest 1862s - returns a SHA512 digest 1862s 1862s OpenSSL::Digest#initialize when called with an initial String argument 1862s - returns a SHA1 digest of that argument 1862s - returns a SHA256 digest of that argument 1862s - returns a SHA384 digest of that argument 1862s - returns a SHA512 digest of that argument 1862s 1862s OpenSSL::Digest#initialize can be called on subclasses can be called without an initial String argument on subclasses 1862s - returns a SHA1 digest 1862s - returns a SHA256 digest 1862s - returns a SHA384 digest 1862s - returns a SHA512 digest 1862s 1862s OpenSSL::Digest#initialize can be called on subclasses can be called with an initial String argument on subclasses 1862s - returns a SHA1 digest 1862s - returns a SHA256 digest 1862s - returns a SHA384 digest 1862s - returns a SHA512 digest 1862s 1862s OpenSSL::Digest#name 1862s - returns the name of digest 1862s - works on subclasses too 1862s 1862s OpenSSL::Digest#reset 1862s - works for a SHA1 digest 1862s - works for a SHA256 digest 1862s - works for a SHA384 digest 1862s - works for a SHA512 digest 1862s 1862s OpenSSL::Digest#update when given input as a single string 1862s - returns a SHA1 digest 1862s - returns a SHA256 digest 1862s - returns a SHA384 digest 1862s - returns a SHA512 digest 1862s 1862s OpenSSL::Digest#update when given input as multiple smaller substrings 1862s - returns a SHA1 digest 1862s - returns a SHA256 digest 1862s - returns a SHA384 digest 1862s - returns a SHA512 digest 1862s 1862s OpenSSL.fixed_length_secure_compare 1862s - returns true for two strings with the same content 1862s - returns false for two strings of equal size with different content 1862s - converts both arguments to strings using #to_str 1862s - does not accept arguments that are not string and cannot be coerced into strings 1862s - raises an ArgumentError for two strings of different size 1862s 1862s OpenSSL::HMAC.digest 1862s - returns an SHA1 digest 1862s 1862s OpenSSL::HMAC.hexdigest 1862s - returns an SHA1 hex digest 1862s 1862s OpenSSL::KDF.pbkdf2_hmac 1862s - creates the same value with the same input 1863s - supports nullbytes embedded in the password 1863s - coerces the password into a String using #to_str 1863s - coerces the salt into a String using #to_str 1863s - coerces the iterations into an Integer using #to_int 1864s - coerces the length into an Integer using #to_int 1864s - accepts a OpenSSL::Digest object as hash 1864s - accepts an empty password 1864s - accepts an empty salt 1865s - accepts an empty length 1865s - accepts an arbitrary length 1867s - accepts any hash function known to OpenSSL 1867s - raises a TypeError when password is not a String and does not respond to #to_str 1867s - raises a TypeError when salt is not a String and does not respond to #to_str 1867s - raises a TypeError when iterations is not an Integer and does not respond to #to_int 1867s - raises a TypeError when length is not an Integer and does not respond to #to_int 1867s 1867s OpenSSL::Random.pseudo_bytes 1867s - generates a random binary string of specified length 1867s - generates different binary strings with subsequent invocations 1867s - raises ArgumentError on negative arguments 1867s 1867s OpenSSL::Random.random_bytes 1867s - generates a random binary string of specified length 1867s - generates different binary strings with subsequent invocations 1867s - raises ArgumentError on negative arguments 1867s 1867s OpenSSL.secure_compare 1867s - returns true for two strings with the same content 1867s - returns false for two strings with different content 1867s 1867s OpenSSL::X509::Name.parse 1867s - parses a /-delimited string of key-value pairs into a Name 1867s - parses a comma-delimited string of key-value pairs into a name 1867s - raises OpenSSL::X509::NameError if the given string contains invalid keys 1867s 1867s OpenSSL::X509::Store#verify 1868s - returns true for valid certificate 1869s - returns false for an expired certificate 1870s - returns false for an expired root certificate 1870s 1870s OpenStruct#delete_field 1870s - removes the named field from self's method/value table 1870s - does remove the accessor methods 1870s 1870s OpenStruct#[] 1870s - returns the associated value 1870s 1870s OpenStruct#[]= 1870s - sets the associated value 1870s 1870s OpenStruct#== 1870s - returns false when the passed argument is no OpenStruct 1870s - returns true when self and other are equal method/value wise 1870s 1870s OpenStruct.new when frozen 1870s - is still readable 1870s - is not writable 1870s - cannot create new fields 1870s - creates a frozen clone 1870s - creates an unfrozen dup 1870s 1870s OpenStruct#initialize 1870s - is private 1870s 1870s OpenStruct#inspect 1870s - returns a String representation of self 1870s - correctly handles self-referential OpenStructs 1870s - correctly handles OpenStruct subclasses 1870s 1870s OpenStruct#marshal_dump 1870s - returns the method/value table 1870s 1870s OpenStruct#marshal_load when passed [Hash] 1870s - defines methods based on the passed Hash 1870s 1870s OpenStruct#method_missing when called with a method name ending in '=' 1870s - raises an ArgumentError when not passed any additional arguments 1870s 1870s OpenStruct#method_missing when passed additional arguments 1870s - raises a NoMethodError when the key does not exist 1870s - raises an ArgumentError when the key exists 1870s 1870s OpenStruct.new when passed [Hash] 1870s - creates an attribute for each key of the passed Hash 1870s 1870s OpenStruct.new when passed no arguments 1870s - returns a new OpenStruct Object without any attributes 1870s 1870s OpenStruct#to_h 1870s - returns a Hash with members as keys 1870s - returns a Hash with keys as symbols 1870s - does not return the hash used as initializer 1870s - returns a Hash that is independent from the struct 1870s 1870s OpenStruct#to_h with block 1870s - converts [key, value] pairs returned by the block to a hash 1870s - raises ArgumentError if block returns longer or shorter array 1870s - raises TypeError if block returns something other than Array 1870s - coerces returned pair to Array with #to_ary 1870s - does not coerce returned pair to Array with #to_a 1870s 1870s OpenStruct#to_s 1870s - returns a String representation of self 1870s - correctly handles self-referential OpenStructs 1870s - correctly handles OpenStruct subclasses 1870s 1870s OptionParser#order 1870s - accepts `into` keyword argument and stores result in it 1870s 1870s OptionParser#order! 1870s - accepts `into` keyword argument and stores result in it 1870s 1870s OptionParser#parse 1870s - accepts `into` keyword argument and stores result in it 1870s 1870s OptionParser#parse! 1870s - accepts `into` keyword argument and stores result in it 1870s 1870s Pathname#absolute? 1870s - returns true for the root directory 1870s - returns true for a dir starting with a slash 1870s - returns false for a dir not starting with a slash 1870s - returns false for a dir not starting with a slash 1870s 1870s Pathname#/ 1870s - appends a pathname to self 1870s 1870s Pathname#empty? 1870s - returns true when file is not empty 1870s - returns false when the directory is not empty 1870s - return true when file is empty 1870s - returns true when directory is empty 1870s 1870s Pathname#== 1870s - returns true when identical paths are used 1870s - returns true when identical paths are used 1870s 1870s Pathname.glob 1870s - returns [] for no match 1870s - returns matching file paths 1870s - returns matching file paths when a flag is provided 1870s - returns matching file paths when supplied :base keyword argument 1870s - raises an ArgumentError when supplied a keyword argument other than :base 1870s - does not raise an ArgumentError when supplied a flag and :base keyword argument 1870s 1870s Pathname#glob 1870s - returns [] for no match 1870s - returns matching file paths 1870s - yields matching file paths to block 1870s - returns matching file paths when a flag is provided 1870s 1870s Pathname#hash 1870s - is equal to the hash of the pathname 1870s - is not equal the hash of a different pathname 1870s 1870s Pathname#inspect 1870s - returns a consistent String 1870s 1870s Pathname#join 1870s - without separators 1870s - with separators 1870s - with a string 1870s - with root 1870s - with a relative path 1870s - a relative path with current 1870s - an absolute path with current 1870s - a prefixed relative path with current 1870s - multiple paths 1870s 1870s Pathname.new 1870s - returns a new Pathname Object with 1 argument 1870s - raises an ArgumentError when called with - raises a TypeError if not passed a String type 1870s - initializes with an object with to_path 1870s 1870s Pathname#parent 1870s - has parent of root as root 1870s - has parent of /usr/ as root 1870s - has parent of /usr/local as root 1870s 1870s Kernel#Pathname 1870s - is a private instance method 1870s - is also a public method 1870s - returns same argument when called with a pathname argument 1870s 1870s Pathname#+ 1870s - appends a pathname to self 1870s 1870s Pathname#realdirpath 1870s - returns a Pathname 1870s 1870s Pathname#realpath 1870s - returns a Pathname 1870s 1870s Pathname#relative_path_from 1870s - raises an error when the two paths do not share a common prefix 1870s - raises an error when the base directory has .. 1870s - returns a path relative from root 1870s - returns 1 level up when both paths are relative 1870s - returns a relative path when both are absolute 1870s - returns a path relative to the current directory 1870s - returns a . when base and dest are the same 1870s - returns the same directory with a non clean base that matches the current dir 1870s - returns a relative path with a non clean base that matches a different dir 1870s - returns current and pattern when only those patterns are used 1870s - converts string argument to Pathname 1870s 1870s Pathname#relative? 1870s - returns false for the root directory 1870s - returns false for a dir starting with a slash 1870s - returns true for a dir not starting with a slash 1870s - returns true for a dir not starting with a slash 1870s 1870s Pathname#root? 1870s - returns true for root directories 1870s - returns false for empty string 1870s - returns false for a top level directory 1870s - returns false for a top level with .. appended directory 1870s - returns false for a directory below top level 1870s 1870s Pathname#sub 1870s - replaces the pattern with rest 1870s - returns a new object 1870s 1870s PP.pp 1870s - works with default arguments 1870s - allows specifying out explicitly 1870s - correctly prints a Hash 1870s 1870s RbConfig::CONFIG 1870s - values are all strings 1870s - ['rubylibdir'] returns the directory containing Ruby standard libraries 1870s - ['sitelibdir'] is set and is part of $LOAD_PATH 1873s - contains no frozen strings even with --enable-frozen-string-literal 1873s 1873s RbConfig::TOPDIR 1873s - either returns nil (if not installed) or the prefix 1873s 1873s RbConfig::LIMITS 1873s - is a Hash 1873s - has string keys and numeric values 1873s - contains FIXNUM_MIN and FIXNUM_MAX 1873s - contains INT_MIN and INT_MAX 1873s - contains LONG_MIN and LONG_MAX 1873s 1873s RbConfig::SIZEOF 1873s - is a Hash 1873s - has string keys and integer values 1873s - contains the sizeof(void*) 1873s - contains the sizeof(float) and sizeof(double) 1873s - contains the size of short, int and long 1873s 1873s RbConfig::CONFIG['UNICODE_EMOJI_VERSION'] 1873s - is 13.1 1873s 1873s RbConfig::CONFIG['UNICODE_VERSION'] 1873s - is 13.0.0 1873s 1873s Readline.basic_word_break_characters 1873s - returns not nil 1873s 1873s Readline.basic_word_break_characters= 1873s - returns the passed string 1873s 1873s Readline.completer_quote_characters 1873s - returns nil 1873s 1873s Readline.completer_word_break_characters 1873s - returns nil 1873s 1873s Readline.completion_append_character 1873s /tmp/autopkgtest.nFBjtB/autopkgtest_tmp/spec/ruby/library/readline/completion_case_fold_spec.rb:12: warning: already initialized constant Readline::COMPLETION_CASE_FOLD 1873s /tmp/autopkgtest.nFBjtB/autopkgtest_tmp/spec/ruby/library/readline/completion_case_fold_spec.rb:14: warning: already initialized constant Readline::COMPLETION_CASE_FOLD 1874s - returns not nil 1874s 1874s Readline.completion_case_fold 1874s - returns nil 1874s 1874s Readline.completion_case_fold= 1874s - returns the passed boolean 1874s 1874s Readline.completion_proc 1874s - returns nil 1874s 1874s Readline.completion_proc= 1874s - returns the passed Proc 1874s - returns an ArgumentError if not given an Proc or #call 1874s 1874s Readline::HISTORY 1874s - is defined 1874s 1874s Readline::VERSION 1874s - is defined and is a non-empty String 1874s 1874s Readline.emacs_editing_mode 1874s - returns nil 1874s 1874s Readline.filename_quote_characters 1874s - returns nil 1874s 1874s Readline::HISTORY.<< 1874s - appends the given Object to the history 1874s - tries to convert the passed Object to a String using #to_str 1874s - raises a TypeError when the passed Object can't be converted to a String 1874s 1874s Readline::HISTORY.delete_at 1874s - deletes and returns the history entry at the specified index 1874s - raises an IndexError when the given index is greater than the history size 1874s 1874s Readline::HISTORY.each 1874s - yields each item in the history 1874s 1874s Readline::HISTORY.[] 1874s - returns the history item at the passed index 1874s - raises an IndexError when there is no item at the passed index 1874s 1874s Readline::HISTORY.[]= 1874s - returns the new value for the passed index 1874s - raises an IndexError when there is no item at the passed positive index 1874s - sets the item at the given index 1874s - raises an IndexError when there is no item at the passed negative index 1874s 1874s Readline::HISTORY.empty? 1874s - returns true when the history is empty 1874s 1874s Readline::HISTORY 1874s - is extended with the Enumerable module 1874s 1874s Readline::HISTORY.length 1874s - returns the size of the history 1874s 1874s Readline::HISTORY.pop 1874s - returns nil when the history is empty 1874s - returns and removes the last item from the history 1874s 1874s Readline::HISTORY.push 1874s - pushes all passed Objects into the history 1874s - tries to convert the passed Object to a String using #to_str 1874s - raises a TypeError when the passed Object can't be converted to a String 1874s 1874s Readline::HISTORY.shift 1874s - returns nil when the history is empty 1874s - returns and removes the first item from the history 1874s 1874s Readline::HISTORY.size 1874s - returns the size of the history 1874s 1874s Readline::HISTORY.to_s 1874s - returns 'HISTORY' 1874s 1874s Readline.vi_editing_mode 1874s - returns nil 1874s 1874s Resolv#getaddress 1874s - resolves localhost 1874s - raises ResolvError if the name can not be looked up 1874s 1874s Resolv#getaddresses 1874s - resolves localhost 1874s 1874s Resolv#getname 1874s - resolves 127.0.0.1 1874s - raises ResolvError when there is no result 1874s 1874s Resolv#getnames 1874s - resolves 127.0.0.1 1874s 1874s Ripper.lex 1874s - lexes a simple method declaration 1874s 1874s Ripper.sexp 1874s - returns an s-expression for a method declaration 1874s 1874s Gem.bin_path 1874s - finds executables of default gems, which are the only files shipped for default gems 1874s 1874s Gem.load_path_insert_index 1874s - is set for an installed Ruby 1874s 1874s SecureRandom.base64 1874s - generates a random base64 string out of specified number of random bytes 1874s - returns an empty string when argument is 0 1874s - generates different base64 strings with subsequent invocations 1874s - generates a random base64 string out of 32 random bytes 1874s - treats nil argument as default one and generates a random base64 string 1874s - raises ArgumentError on negative arguments 1874s - tries to convert the passed argument to an Integer using #to_int 1874s 1874s SecureRandom.bytes 1874s - returns a String 1874s - returns a String of the length given as argument 1874s - returns a binary String 1874s - returns a random binary String 1874s 1874s SecureRandom.hex 1874s - generates a random hex string of length twice the specified argument 1874s - returns an empty string when argument is 0 1874s - generates different hex strings with subsequent invocations 1874s - generates a random hex string of length 32 if no argument is provided 1874s - treats nil argument as default one and generates a random hex string of length 32 1874s - raises ArgumentError on negative arguments 1874s - tries to convert the passed argument to an Integer using #to_int 1874s 1874s SecureRandom.random_bytes 1874s - returns a String 1874s - returns a String of the length given as argument 1874s - returns a binary String 1874s - returns a random binary String 1874s - generates a random binary string of length 16 if no argument is provided 1874s - generates a random binary string of length 16 if argument is nil 1874s - generates a random binary string of specified length 1874s - generates different binary strings with subsequent invocations 1874s - raises ArgumentError on negative arguments 1874s - tries to convert the passed argument to an Integer using #to_int 1874s 1874s SecureRandom.random_number 1874s - returns a Float if no max argument is passed 1874s - returns an Integer if an Integer argument is passed 1874s - returns a Float if no max argument is passed 1874s - returns an Integer if an Integer argument is passed 1874s - generates a random positive number smaller then the positive integer argument 1874s - generates a random (potentially bignum) integer value for bignum argument 1874s - generates a random float number between 0.0 and 1.0 if no argument provided 1874s - generates a random value in given (integer) range limits 1874s - generates a random value in given big (integer) range limits 1874s - generates a random value in given (float) range limits 1874s - generates a random float number between 0.0 and 1.0 if argument is negative 1874s - generates a random float number between 0.0 and 1.0 if argument is negative float 1874s - generates different float numbers with subsequent invocations 1874s - raises ArgumentError if the argument is non-numeric 1874s 1874s Set#add 1874s - adds the passed Object to self 1874s - returns self 1874s 1874s Set#add? 1874s - adds the passed Object to self 1874s - returns self when the Object has not yet been added to self 1874s - returns nil when the Object has already been added to self 1874s 1874s Set#<< 1874s - adds the passed Object to self 1874s - returns self 1874s 1874s Set#=== 1874s - returns true when self contains the passed Object 1874s - is an alias for include? 1874s 1874s Set#=== member equality 1874s - is checked using both #hash and #eql? 1874s - is not checked using #== 1874s 1874s Set#=== 1874s - returns true when self contains the passed Object 1874s 1874s Set#=== member equality 1874s - is checked using both #hash and #eql? 1874s - is not checked using #== 1874s 1874s Set#classify 1874s - yields each Object in self 1874s - returns an Enumerator when passed no block 1874s - classifies the Objects in self based on the block's return value 1874s 1874s Set#clear 1874s - removes all elements from self 1874s - returns self 1874s 1874s Set#collect! 1874s - yields each Object in self 1874s - returns self 1874s - replaces self with the return values of the block 1874s 1874s Set#compare_by_identity 1874s - compares its members by identity 1874s - causes future comparisons on the receiver to be made by identity 1874s - rehashes internally so that old members can be looked up 1874s - returns self 1874s - is idempotent and has no effect on an already compare_by_identity set 1874s - uses the semantics of BasicObject#equal? to determine members identity 1874s - uses #equal? semantics, but doesn't actually call #equal? to determine identity 1874s - does not call #hash on members 1874s - regards #dup'd objects as having different identities 1874s - regards #clone'd objects as having different identities 1874s - raises a FrozenError on frozen sets 1874s - persists over #dups 1874s - persists over #clones 1874s 1874s Set#compare_by_identity? 1874s - returns false by default 1874s - returns true once #compare_by_identity has been invoked on self 1874s - returns true when called multiple times on the same set 1874s 1874s Set#<=> 1874s - returns 0 if the sets are equal 1874s - returns -1 if the set is a proper subset of the other set 1874s - returns +1 if the set is a proper superset of other set 1874s - returns nil if the set has unique elements 1874s - returns nil when the argument is not set-like 1874s 1874s Set[] 1874s - returns a new Set populated with the passed Objects 1874s 1874s Set#delete_if 1874s - yields every element of self 1874s - deletes every element from self for which the passed block returns true 1874s - returns self 1874s - returns an Enumerator when passed no block 1874s 1874s Set#delete 1874s - deletes the passed Object from self 1874s - returns self 1874s 1874s Set#delete? 1874s - deletes the passed Object from self 1874s - returns self when the passed Object is in self 1874s - returns nil when the passed Object is not in self 1874s 1874s Set#difference 1874s - returns a new Set containing self's elements excluding the elements in the passed Enumerable 1874s - raises an ArgumentError when passed a non-Enumerable 1874s 1874s Set#disjoint? 1874s - returns false when two Sets have at least one element in common 1874s - returns true when two Sets have no element in common 1874s 1874s Set#divide 1874s - divides self into a set of subsets based on the blocks return values 1874s - yields each Object to the block 1874s - returns an enumerator when not passed a block 1874s 1874s Set#divide when passed a block with an arity of 2 1874s - divides self into a set of subsets based on the blocks return values 1874s - yields each two Object to the block 1874s 1874s Set#divide when passed a block with an arity of > 2 1874s - only uses the first element if the arity > 2 1874s - only uses the first element if the arity = -1 1874s 1874s Set#each 1874s - yields each Object in self 1874s - returns self 1874s - returns an Enumerator when not passed a block 1874s 1874s Set#empty? 1874s - returns true if self is empty 1874s 1874s Enumerable#to_set 1874s - returns a new Set created from self 1874s - passes down passed blocks 1874s 1874s Set#eql? 1874s - returns true when the passed argument is a Set and contains the same elements 1874s 1874s Set#== 1874s - returns true when the passed Object is a Set and self and the Object contain the same elements 1874s - does not depend on the order of the elements 1874s - does not depend on the order of nested Sets 1874s 1874s Set#^ 1874s - returns a new Set containing elements that are not in both self and the passed Enumerable 1874s - raises an ArgumentError when passed a non-Enumerable 1874s 1874s Set#filter! 1874s - yields every element of self 1874s - keeps every element from self for which the passed block returns true 1874s - returns self when self was modified 1874s - returns nil when self was not modified 1874s - returns an Enumerator when passed no block 1874s 1874s Set#flatten_merge 1874s - is protected 1874s - flattens the passed Set and merges it into self 1874s - raises an ArgumentError when trying to flatten a recursive Set 1874s 1874s Set#flatten 1874s - returns a copy of self with each included Set flattened 1874s - raises an ArgumentError when self is recursive 1874s 1874s Set#flatten! 1874s - flattens self 1874s - returns self when self was modified 1874s - returns nil when self was not modified 1874s - raises an ArgumentError when self is recursive 1874s 1874s Set#hash 1874s - is static 1874s 1874s Set#include? 1874s - returns true when self contains the passed Object 1874s 1874s Set#include? member equality 1874s - is checked using both #hash and #eql? 1874s - is not checked using #== 1874s 1874s Set#initialize_clone 1874s - does not freeze the new Set when called from clone(freeze: false) 1874s 1874s Set#initialize 1874s - is private 1874s - adds all elements of the passed Enumerable to self 1874s - uses #each_entry on the provided Enumerable 1874s - uses #each on the provided Enumerable if it does not respond to #each_entry 1874s - raises if the provided Enumerable does not respond to #each_entry or #each 1874s - should initialize with empty array and set 1874s - preprocesses all elements by a passed block before adding to self 1874s - should initialize with empty array and block 1874s - should initialize with empty set and block 1874s - should initialize with just block 1874s 1874s Set#inspect 1874s - returns a String representation of self 1874s - does include the elements of the set 1874s - puts spaces between the elements 1874s - correctly handles cyclic-references 1874s 1874s Set#intersect? 1874s - returns true when two Sets have at least one element in common 1874s - returns false when two Sets have no element in common 1874s 1874s Set#intersection 1874s - returns a new Set containing only elements shared by self and the passed Enumerable 1874s - raises an ArgumentError when passed a non-Enumerable 1874s 1874s Set#& 1874s - returns a new Set containing only elements shared by self and the passed Enumerable 1874s - raises an ArgumentError when passed a non-Enumerable 1874s 1874s Set#join 1874s - returns an empty string if the Set is empty 1874s - returns a new string formed by joining elements after conversion 1874s - does not separate elements when the passed separator is nil 1874s - returns a string formed by concatenating each element separated by the separator 1874s - calls #to_a to convert the Set in to an Array 1874s 1874s Set#keep_if 1874s - yields every element of self 1874s - keeps every element from self for which the passed block returns true 1874s - returns self 1874s - returns an Enumerator when passed no block 1874s 1874s Set#length 1874s - returns the number of elements in the set 1874s 1874s Set#map! 1874s - yields each Object in self 1874s - returns self 1874s - replaces self with the return values of the block 1874s 1874s Set#member? 1874s - returns true when self contains the passed Object 1874s 1874s Set#member? member equality 1874s - is checked using both #hash and #eql? 1874s - is not checked using #== 1874s 1874s Set#merge 1874s - adds the elements of the passed Enumerable to self 1874s - returns self 1874s - raises an ArgumentError when passed a non-Enumerable 1874s 1874s Set#- 1874s - returns a new Set containing self's elements excluding the elements in the passed Enumerable 1874s - raises an ArgumentError when passed a non-Enumerable 1874s 1874s Set#+ 1874s - returns a new Set containing all elements of self and the passed Enumerable 1874s - raises an ArgumentError when passed a non-Enumerable 1874s 1874s Set#pretty_print_cycle 1874s - passes the 'pretty print' representation of a self-referencing Set to the pretty print writer 1874s 1874s Set#proper_subset? 1874s - returns true if passed a Set that self is a proper subset of 1874s - raises an ArgumentError when passed a non-Set 1874s 1874s Set#proper_superset? 1874s - returns true if passed a Set that self is a proper superset of 1874s - raises an ArgumentError when passed a non-Set 1874s 1874s Set#reject! 1874s - yields every element of self 1874s - deletes every element from self for which the passed block returns true 1874s - returns self when self was modified 1874s - returns nil when self was not modified 1874s - returns an Enumerator when passed no block 1874s 1874s Set#replace 1874s - replaces the contents with other and returns self 1874s - accepts any enumerable as other 1874s 1874s Set#select! 1874s - yields every element of self 1874s - keeps every element from self for which the passed block returns true 1874s - returns self when self was modified 1874s - returns nil when self was not modified 1874s - returns an Enumerator when passed no block 1874s 1874s Set#size 1874s - returns the number of elements in the set 1874s 1874s Set#subset? 1874s - returns true if passed a Set that is equal to self or self is a subset of 1874s - raises an ArgumentError when passed a non-Set 1874s 1874s Set#subtract 1874s - deletes any elements contained in other and returns self 1874s - accepts any enumerable as other 1874s 1874s Set#superset? 1874s - returns true if passed a Set that equals self or self is a proper superset of 1874s - raises an ArgumentError when passed a non-Set 1874s 1874s Set#to_a 1874s - returns an array containing elements of self 1874s 1874s Set#to_s 1874s - returns a String representation of self 1874s - does include the elements of the set 1874s - puts spaces between the elements 1874s - correctly handles cyclic-references 1874s - is an alias of inspect 1874s 1874s Set#union 1874s - returns a new Set containing all elements of self and the passed Enumerable 1874s - raises an ArgumentError when passed a non-Enumerable 1874s 1874s Set#| 1874s - returns a new Set containing all elements of self and the passed Enumerable 1874s - raises an ArgumentError when passed a non-Enumerable 1874s 1874s Shellwords#shellwords 1874s - honors quoted strings 1874s - honors escaped double quotes 1874s - honors escaped single quotes 1874s - honors escaped spaces 1874s - raises ArgumentError when double quoted strings are misquoted 1874s - raises ArgumentError when single quoted strings are misquoted 1874s - matches POSIX sh behavior for backslashes within double quoted strings 1874s 1874s Singleton.allocate 1874s - is a private method 1874s 1874s Singleton#clone 1874s - is prevented 1874s 1874s Singleton#_dump 1874s - returns an empty string 1874s - returns an empty string from a singleton subclass 1874s 1874s Singleton#dup 1874s - is prevented 1874s 1874s Singleton.instance 1874s - returns an instance of the singleton class 1874s - returns the same instance for multiple calls to instance 1874s - returns an instance of the singleton's subclasses 1874s - returns the same instance for multiple class to instance on subclasses 1874s - returns an instance of the singleton's clone 1874s - returns the same instance for multiple class to instance on clones 1874s 1874s Singleton._load 1874s - returns the singleton instance for anything passed in 1874s - returns the singleton instance for anything passed in to subclass 1874s 1874s Singleton.new 1874s - is a private method 1874s 1874s Addrinfo#afamily for an ipv4 socket 1874s - returns Socket::AF_INET 1874s 1874s Addrinfo#afamily for an ipv6 socket 1874s - returns Socket::AF_INET6 1874s 1874s Addrinfo#afamily for a unix socket 1874s - returns Socket::AF_UNIX 1874s 1874s Addrinfo#bind 1874s - returns a bound socket when no block is given 1874s - yields the socket if a block is given 1874s 1874s Addrinfo#canonname 1874s - returns the canonical name for a host 1874s 1874s Addrinfo#canonname when the canonical name is not available 1874s - returns nil 1874s 1874s Addrinfo#connect_from using IPv4 using separate arguments 1874s - returns a Socket when no block is given 1874s - yields the Socket when a block is given 1874s - treats the last argument as a set of options if it is a Hash 1874s - binds the socket to the local address 1874s 1874s Addrinfo#connect_from using IPv4 using an Addrinfo as the 1st argument 1874s - returns a Socket when no block is given 1874s - yields the Socket when a block is given 1874s - treats the last argument as a set of options if it is a Hash 1874s - binds the socket to the local address 1874s 1874s Addrinfo#connect_from using IPv6 using separate arguments 1874s - returns a Socket when no block is given 1874s - yields the Socket when a block is given 1874s - treats the last argument as a set of options if it is a Hash 1874s - binds the socket to the local address 1874s 1874s Addrinfo#connect_from using IPv6 using an Addrinfo as the 1st argument 1874s - returns a Socket when no block is given 1874s - yields the Socket when a block is given 1874s - treats the last argument as a set of options if it is a Hash 1874s - binds the socket to the local address 1874s 1874s Addrinfo#connect using IPv4 1874s - returns a Socket when no block is given 1874s - yields a Socket when a block is given 1874s - accepts a Hash of options 1874s 1874s Addrinfo#connect using IPv6 1874s - returns a Socket when no block is given 1874s - yields a Socket when a block is given 1874s - accepts a Hash of options 1874s 1874s Addrinfo#connect_to using IPv4 using separate arguments 1874s - returns a Socket when no block is given 1874s - yields the Socket when a block is given 1874s - treats the last argument as a set of options if it is a Hash 1874s - binds the Addrinfo to the local address 1874s 1874s Addrinfo#connect_to using IPv4 using an Addrinfo as the 1st argument 1874s - returns a Socket when no block is given 1874s - yields the Socket when a block is given 1874s - treats the last argument as a set of options if it is a Hash 1874s - binds the socket to the local address 1874s 1874s Addrinfo#connect_to using IPv6 using separate arguments 1874s - returns a Socket when no block is given 1874s - yields the Socket when a block is given 1874s - treats the last argument as a set of options if it is a Hash 1874s - binds the Addrinfo to the local address 1874s 1874s Addrinfo#connect_to using IPv6 using an Addrinfo as the 1st argument 1874s - returns a Socket when no block is given 1874s - yields the Socket when a block is given 1874s - treats the last argument as a set of options if it is a Hash 1874s - binds the socket to the local address 1874s 1874s Addrinfo#family_addrinfo 1874s - raises ArgumentError if no arguments are given 1874s 1874s Addrinfo#family_addrinfo using multiple arguments with an IP Addrinfo 1874s - raises ArgumentError if only 1 argument is given 1874s - raises ArgumentError if more than 2 arguments are given 1874s - returns an Addrinfo when a host and port are given 1874s 1874s Addrinfo#family_addrinfo using multiple arguments with an IP Addrinfo the returned Addrinfo 1874s - uses the same address family as the source Addrinfo 1874s - uses the same protocol family as the source Addrinfo 1874s - uses the same socket type as the source Addrinfo 1874s - uses the same protocol as the source Addrinfo 1874s 1874s Addrinfo#family_addrinfo using multiple arguments with a UNIX Addrinfo 1874s - raises ArgumentError if more than 1 argument is given 1874s - returns an Addrinfo when a UNIX socket path is given 1874s 1874s Addrinfo#family_addrinfo using multiple arguments with a UNIX Addrinfo the returned Addrinfo 1874s - uses AF_UNIX as the address family 1874s - uses PF_UNIX as the protocol family 1874s - uses the given socket path 1874s 1874s Addrinfo#family_addrinfo using an Addrinfo as the 1st argument 1874s - returns the input Addrinfo 1874s - raises ArgumentError if more than 1 argument is given 1874s - raises ArgumentError if the protocol families don't match 1874s - raises ArgumentError if the socket types don't match 1874s 1874s Addrinfo.foreach 1874s - yields Addrinfo instances to the supplied block 1874s 1874s Addrinfo.getaddrinfo 1874s - returns an Array of Addrinfo instances 1874s - sets a custom protocol family of the Addrinfo instances 1874s - sets a corresponding address family based on a custom protocol family 1874s - sets the default socket type of the Addrinfo instances 1874s - sets a custom socket type of the Addrinfo instances 1874s - sets the default socket protocol of the Addrinfo instances 1874s - sets the canonical name when AI_CANONNAME is given as a flag 1874s 1874s Addrinfo.getaddrinfo using IPv4 1874s - sets the IP address of the Addrinfo instances 1874s - sets the port of the Addrinfo instances 1874s - sets the address family of the Addrinfo instances 1874s - sets the protocol family of the Addrinfo instances 1874s 1874s Addrinfo.getaddrinfo using IPv6 1874s - sets the IP address of the Addrinfo instances 1874s - sets the port of the Addrinfo instances 1874s - sets the address family of the Addrinfo instances 1874s - sets the protocol family of the Addrinfo instances 1874s 1874s Addrinfo#getnameinfo using an IP Addrinfo using IPv4 1874s - returns the node and service names 1874s - accepts flags as an Integer as the first argument 1874s 1874s Addrinfo#getnameinfo using an IP Addrinfo using IPv6 1874s - returns the node and service names 1874s - accepts flags as an Integer as the first argument 1874s 1874s Addrinfo#getnameinfo using a UNIX Addrinfo 1874s - returns the hostname and UNIX socket path 1874s 1874s Addrinfo#initialize with a sockaddr string without a family 1874s - stores the ip address from the sockaddr 1874s - stores the port number from the sockaddr 1874s - returns the Socket::UNSPEC pfamily 1874s - returns AF_INET as the default address family 1874s - returns the INET6 afamily 1874s - returns the 0 socket type 1874s - returns the 0 protocol 1874s 1874s Addrinfo#initialize with a sockaddr string with a family given 1874s - stores the ip address from the sockaddr 1874s - stores the port number from the sockaddr 1874s - returns the Socket::UNSPEC pfamily 1874s - returns the INET6 afamily 1874s - returns the 0 socket type 1874s - returns the 0 protocol 1874s 1874s Addrinfo#initialize with a sockaddr string with a family and socket type 1874s - stores the ip address from the sockaddr 1874s - stores the port number from the sockaddr 1874s - returns the Socket::UNSPEC pfamily 1874s - returns the INET6 afamily 1874s - returns the specified socket type 1874s - returns the 0 protocol 1874s 1874s Addrinfo#initialize with a sockaddr string with a family, socket type and protocol 1874s - stores the ip address from the sockaddr 1874s - stores the port number from the sockaddr 1874s - returns the Socket::UNSPEC pfamily 1874s - returns the INET6 afamily 1874s - returns the specified socket type 1874s - returns the specified protocol 1874s 1874s Addrinfo#initialize with a sockaddr array without a family 1874s - stores the ip address from the sockaddr 1874s - stores the port number from the sockaddr 1874s - returns the Socket::PF_INET pfamily 1874s - returns the INET6 afamily 1874s - returns the 0 socket type 1874s - returns the 0 protocol 1874s 1874s Addrinfo#initialize with a sockaddr array with a valid IP address 1874s - returns an Addrinfo with the correct IP 1874s - returns an Addrinfo with the correct address family 1874s - returns an Addrinfo with the correct protocol family 1874s - returns an Addrinfo with the correct port 1874s 1874s Addrinfo#initialize with a sockaddr array with an invalid IP address 1874s - raises SocketError 1874s 1874s Addrinfo#initialize with a sockaddr array with a family given 1874s - stores the ip address from the sockaddr 1874s - stores the port number from the sockaddr 1874s - returns the Socket::UNSPEC pfamily 1874s - returns the INET6 afamily 1874s - returns the 0 socket type 1874s - returns the 0 protocol 1874s 1874s Addrinfo#initialize with a sockaddr array with a family and socket type 1874s - stores the ip address from the sockaddr 1874s - stores the port number from the sockaddr 1874s - returns the Socket::UNSPEC pfamily 1874s - returns the INET6 afamily 1874s - returns the 0 socket type 1874s - returns the 0 protocol 1874s - overwrites the socket type SOCK_STREAM 1874s - overwrites the socket type SOCK_DGRAM 1874s - overwrites the socket type SOCK_RAW 1874s - raises SocketError when using SOCK_RDM 1874s 1874s Addrinfo#initialize with a sockaddr array with a family, socket type and protocol 1874s - stores the ip address from the sockaddr 1874s - stores the port number from the sockaddr 1874s - returns the Socket::UNSPEC pfamily 1874s - returns the INET6 afamily 1874s - returns the 0 socket type 1874s - returns the specified protocol 1874s 1874s Addrinfo#initialize using an Array with extra arguments with the AF_INET6 address family and an explicit protocol family 1874s - raises SocketError when using any Socket constant except except AF_INET(6)/PF_INET(6) 1874s 1874s Addrinfo#initialize using an Array with extra arguments with the AF_INET address family and an explicit socket protocol and no socket type is given 1874s - overwrites the protocol when using IPPROTO_IP 1874s - overwrites the protocol when using IPPROTO_UDP 1874s - overwrites the protocol when using IPPROTO_HOPOPTS 1874s - raises SocketError when using IPPROTO_AH 1874s - raises SocketError when using IPPROTO_PUP 1874s - raises SocketError when using IPPROTO_ENCAP 1874s - raises SocketError when using IPPROTO_FRAGMENT 1874s - raises SocketError when using IPPROTO_TP 1874s - raises SocketError when using IPPROTO_ICMP 1874s - raises SocketError when using IPPROTO_DSTOPTS 1874s - raises SocketError when using IPPROTO_IPV6 1874s - raises SocketError when using IPPROTO_IDP 1874s - raises SocketError when using IPPROTO_GRE 1874s - raises SocketError when using IPPROTO_RSVP 1874s - raises SocketError when using IPPROTO_TCP 1874s - raises SocketError when using IPPROTO_ROUTING 1874s - raises SocketError when using IPPROTO_EGP 1874s - raises SocketError when using IPPROTO_IPIP 1874s - raises SocketError when using IPPROTO_RAW 1874s - raises SocketError when using IPPROTO_SCTP 1874s - raises SocketError when using IPPROTO_NONE 1874s - raises SocketError when using IPPROTO_IGMP 1874s - raises SocketError when using IPPROTO_PIM 1874s - raises SocketError when using IPPROTO_ESP 1874s - raises SocketError when using IPPROTO_COMP 1874s - raises SocketError when using IPPROTO_MTP 1874s - raises SocketError when using IPPROTO_ICMPV6 1874s 1874s Addrinfo#initialize using an Array with extra arguments with the AF_INET address family and an explicit socket protocol and the socket type is set to SOCK_DGRAM 1874s - overwrites the protocol when using IPPROTO_IP 1874s - overwrites the protocol when using IPPROTO_UDP 1874s - overwrites the protocol when using IPPROTO_HOPOPTS 1874s - raises SocketError when using IPPROTO_AH 1874s - raises SocketError when using IPPROTO_PUP 1874s - raises SocketError when using IPPROTO_ENCAP 1874s - raises SocketError when using IPPROTO_FRAGMENT 1874s - raises SocketError when using IPPROTO_TP 1874s - raises SocketError when using IPPROTO_ICMP 1874s - raises SocketError when using IPPROTO_DSTOPTS 1874s - raises SocketError when using IPPROTO_IPV6 1874s - raises SocketError when using IPPROTO_IDP 1874s - raises SocketError when using IPPROTO_GRE 1874s - raises SocketError when using IPPROTO_RSVP 1874s - raises SocketError when using IPPROTO_TCP 1874s - raises SocketError when using IPPROTO_ROUTING 1874s - raises SocketError when using IPPROTO_EGP 1874s - raises SocketError when using IPPROTO_IPIP 1874s - raises SocketError when using IPPROTO_RAW 1874s - raises SocketError when using IPPROTO_SCTP 1874s - raises SocketError when using IPPROTO_NONE 1874s - raises SocketError when using IPPROTO_IGMP 1874s - raises SocketError when using IPPROTO_PIM 1874s - raises SocketError when using IPPROTO_ESP 1874s - raises SocketError when using IPPROTO_COMP 1874s - raises SocketError when using IPPROTO_MTP 1874s - raises SocketError when using IPPROTO_ICMPV6 1874s 1874s Addrinfo#initialize using an Array with extra arguments with the AF_INET address family and an explicit socket protocol and the socket type is set to SOCK_RAW 1874s - overwrites the protocol when using IPPROTO_AH 1874s - overwrites the protocol when using IPPROTO_PUP 1874s - overwrites the protocol when using IPPROTO_ENCAP 1874s - overwrites the protocol when using IPPROTO_FRAGMENT 1874s - overwrites the protocol when using IPPROTO_TP 1874s - overwrites the protocol when using IPPROTO_ICMP 1874s - overwrites the protocol when using IPPROTO_DSTOPTS 1874s - overwrites the protocol when using IPPROTO_IPV6 1874s - overwrites the protocol when using IPPROTO_IDP 1874s - overwrites the protocol when using IPPROTO_GRE 1874s - overwrites the protocol when using IPPROTO_RSVP 1874s - overwrites the protocol when using IPPROTO_TCP 1874s - overwrites the protocol when using IPPROTO_ROUTING 1874s - overwrites the protocol when using IPPROTO_IP 1874s - overwrites the protocol when using IPPROTO_EGP 1874s - overwrites the protocol when using IPPROTO_IPIP 1874s - overwrites the protocol when using IPPROTO_RAW 1874s - overwrites the protocol when using IPPROTO_SCTP 1874s - overwrites the protocol when using IPPROTO_NONE 1874s - overwrites the protocol when using IPPROTO_IGMP 1874s - overwrites the protocol when using IPPROTO_PIM 1874s - overwrites the protocol when using IPPROTO_HOPOPTS 1874s - overwrites the protocol when using IPPROTO_ESP 1874s - overwrites the protocol when using IPPROTO_COMP 1874s - overwrites the protocol when using IPPROTO_UDP 1874s - overwrites the protocol when using IPPROTO_ICMPV6 1874s 1874s Addrinfo#initialize using an Array with extra arguments with the AF_INET address family and an explicit socket protocol and the socket type is set to SOCK_RDM 1874s - raises SocketError when using IPPROTO_AH 1874s - raises SocketError when using IPPROTO_PUP 1874s - raises SocketError when using IPPROTO_ENCAP 1874s - raises SocketError when using IPPROTO_FRAGMENT 1874s - raises SocketError when using IPPROTO_TP 1874s - raises SocketError when using IPPROTO_ICMP 1874s - raises SocketError when using IPPROTO_DSTOPTS 1874s - raises SocketError when using IPPROTO_IPV6 1874s - raises SocketError when using IPPROTO_IDP 1874s - raises SocketError when using IPPROTO_GRE 1874s - raises SocketError when using IPPROTO_RSVP 1874s - raises SocketError when using IPPROTO_TCP 1874s - raises SocketError when using IPPROTO_ROUTING 1874s - raises SocketError when using IPPROTO_IP 1874s - raises SocketError when using IPPROTO_EGP 1874s - raises SocketError when using IPPROTO_IPIP 1874s - raises SocketError when using IPPROTO_RAW 1874s - raises SocketError when using IPPROTO_SCTP 1874s - raises SocketError when using IPPROTO_NONE 1874s - raises SocketError when using IPPROTO_IGMP 1874s - raises SocketError when using IPPROTO_PIM 1874s - raises SocketError when using IPPROTO_HOPOPTS 1874s - raises SocketError when using IPPROTO_ESP 1874s - raises SocketError when using IPPROTO_COMP 1874s - raises SocketError when using IPPROTO_MTP 1874s - raises SocketError when using IPPROTO_UDP 1874s - raises SocketError when using IPPROTO_ICMPV6 1874s 1874s Addrinfo#initialize using an Array with extra arguments with the AF_INET address family and an explicit socket protocol and the socket type is set to SOCK_SEQPACKET 1874s - overwrites the protocol when using IPPROTO_IP 1874s - overwrites the protocol when using IPPROTO_HOPOPTS 1874s - raises SocketError when using IPPROTO_AH 1874s - raises SocketError when using IPPROTO_PUP 1874s - raises SocketError when using IPPROTO_ENCAP 1874s - raises SocketError when using IPPROTO_FRAGMENT 1874s - raises SocketError when using IPPROTO_TP 1874s - raises SocketError when using IPPROTO_ICMP 1874s - raises SocketError when using IPPROTO_DSTOPTS 1874s - raises SocketError when using IPPROTO_IPV6 1874s - raises SocketError when using IPPROTO_IDP 1874s - raises SocketError when using IPPROTO_GRE 1874s - raises SocketError when using IPPROTO_RSVP 1874s - raises SocketError when using IPPROTO_TCP 1874s - raises SocketError when using IPPROTO_ROUTING 1874s - raises SocketError when using IPPROTO_EGP 1874s - raises SocketError when using IPPROTO_IPIP 1874s - raises SocketError when using IPPROTO_RAW 1874s - raises SocketError when using IPPROTO_SCTP 1874s - raises SocketError when using IPPROTO_NONE 1874s - raises SocketError when using IPPROTO_IGMP 1874s - raises SocketError when using IPPROTO_PIM 1874s - raises SocketError when using IPPROTO_ESP 1874s - raises SocketError when using IPPROTO_COMP 1874s - raises SocketError when using IPPROTO_MTP 1874s - raises SocketError when using IPPROTO_UDP 1874s - raises SocketError when using IPPROTO_ICMPV6 1874s 1874s Addrinfo#initialize using an Array with extra arguments with the AF_INET address family and an explicit socket protocol and the socket type is set to SOCK_STREAM 1874s - overwrites the protocol when using IPPROTO_IP 1874s - overwrites the protocol when using IPPROTO_TCP 1874s - overwrites the protocol when using IPPROTO_HOPOPTS 1874s - raises SocketError when using IPPROTO_AH 1874s - raises SocketError when using IPPROTO_PUP 1874s - raises SocketError when using IPPROTO_ENCAP 1874s - raises SocketError when using IPPROTO_FRAGMENT 1874s - raises SocketError when using IPPROTO_TP 1874s - raises SocketError when using IPPROTO_ICMP 1874s - raises SocketError when using IPPROTO_DSTOPTS 1874s - raises SocketError when using IPPROTO_IPV6 1874s - raises SocketError when using IPPROTO_IDP 1874s - raises SocketError when using IPPROTO_GRE 1874s - raises SocketError when using IPPROTO_RSVP 1874s - raises SocketError when using IPPROTO_ROUTING 1874s - raises SocketError when using IPPROTO_EGP 1874s - raises SocketError when using IPPROTO_IPIP 1874s - raises SocketError when using IPPROTO_RAW 1874s - raises SocketError when using IPPROTO_SCTP 1874s - raises SocketError when using IPPROTO_NONE 1874s - raises SocketError when using IPPROTO_IGMP 1874s - raises SocketError when using IPPROTO_PIM 1874s - raises SocketError when using IPPROTO_ESP 1874s - raises SocketError when using IPPROTO_COMP 1874s - raises SocketError when using IPPROTO_MTP 1874s - raises SocketError when using IPPROTO_UDP 1874s - raises SocketError when using IPPROTO_ICMPV6 1874s 1874s Addrinfo#initialize with Symbols 1874s - returns an Addrinfo with :PF_INET family 1874s - returns an Addrinfo with :INET family 1874s - returns an Addrinfo with :SOCK_STREAM as the socket type 1874s - returns an Addrinfo with :STREAM as the socket type 1874s 1874s Addrinfo#initialize with Strings 1874s - returns an Addrinfo with "PF_INET" family 1874s - returns an Addrinfo with "INET" family 1874s - returns an Addrinfo with "SOCK_STREAM" as the socket type 1874s - returns an Addrinfo with "STREAM" as the socket type 1874s 1874s Addrinfo#initialize using separate arguments for a Unix socket 1874s - returns an Addrinfo with the correct unix path 1874s - returns an Addrinfo with the correct protocol family 1874s - returns an Addrinfo with the correct address family 1874s 1874s Addrinfo#inspect_sockaddr using an IPv4 address 1874s - returns a String containing the IP address and port number 1874s - returns a String containing just the IP address when no port is given 1874s 1874s Addrinfo#inspect_sockaddr using an IPv6 address 1874s - returns a String containing the IP address and port number 1874s - returns a String containing just the IP address when no port is given 1874s 1874s Addrinfo#inspect_sockaddr using a UNIX path 1874s - returns a String containing the UNIX path 1874s - returns a String containing the UNIX path when using a relative path 1874s 1874s Addrinfo#inspect using an IPv4 Addrinfo 1874s - returns a String when using a TCP Addrinfo 1874s - returns a String when using an UDP Addrinfo 1874s - returns a String when using an Addrinfo without a port 1874s 1874s Addrinfo#inspect using an IPv6 Addrinfo 1874s - returns a String when using a TCP Addrinfo 1874s - returns a String when using an UDP Addrinfo 1874s - returns a String when using an Addrinfo without a port 1874s 1874s Addrinfo#inspect using a UNIX Addrinfo 1874s - returns a String 1874s - returns a String when using a relative UNIX path 1874s - returns a String when using a DGRAM socket 1874s 1874s Addrinfo#ip_address for an ipv4 socket 1874s - returns the ip address 1874s 1874s Addrinfo#ip_address for an ipv6 socket 1874s - returns the ip address 1874s 1874s Addrinfo#ip_address for a unix socket 1874s - raises an exception 1874s 1874s Addrinfo#ip_address with an Array as the socket address 1874s - returns the IP as a String 1874s 1874s Addrinfo#ip_address without an IP address 1874s - returns the local IP address when using an empty String as the IP 1874s - returns the local IP address when using nil as the IP 1874s 1874s Addrinfo#ip_port for an ipv4 socket 1874s - returns the port 1874s 1874s Addrinfo#ip_port for an ipv6 socket 1874s - returns the port 1874s 1874s Addrinfo#ip_port for a unix socket 1874s - raises an exception 1874s 1874s Addrinfo#ip? for an ipv4 socket 1874s - returns true 1874s 1874s Addrinfo#ip? for an ipv6 socket 1874s - returns true 1874s 1874s Addrinfo#ip? for a unix socket 1874s - returns false 1874s 1874s Addrinfo.ip using IPv4 1874s - returns an Addrinfo instance 1874s - sets the IP address 1874s - sets the port to 0 1874s - sets the address family 1874s - sets the protocol family 1874s - sets the socket type to 0 1874s 1874s Addrinfo.ip using IPv6 1874s - returns an Addrinfo instance 1874s - sets the IP address 1874s - sets the port to 0 1874s - sets the address family 1874s - sets the protocol family 1874s - sets the socket type to 0 1874s 1874s Addrinfo#ip_unpack for an ipv4 socket 1874s - returns the ip address and port pair 1874s 1874s Addrinfo#ip_unpack for an ipv6 socket 1874s - returns the ip address and port pair 1874s 1874s Addrinfo#ip_unpack for a unix socket 1874s - raises an exception 1874s 1874s Addrinfo#ipv4_loopback? for an ipv4 socket 1874s - returns true for the loopback address 1874s - returns false for another address 1874s 1874s Addrinfo#ipv4_loopback? for an ipv6 socket 1874s - returns false for the loopback address 1874s - returns false for another address 1874s 1874s Addrinfo#ipv4_loopback? for a unix socket 1874s - returns false 1874s 1874s Addrinfo#ipv4_multicast? 1874s - returns true for a multicast address 1874s - returns false for a regular address 1874s - returns false for an IPv6 address 1874s 1874s Addrinfo#ipv4_multicast? for a unix socket 1874s - returns false 1874s 1874s Addrinfo#ipv4_private? for an ipv4 socket 1874s - returns true for a private address 1874s - returns false for a public address 1874s 1874s Addrinfo#ipv4_private? for an ipv6 socket 1874s - returns false 1874s 1874s Addrinfo#ipv4_private? for a unix socket 1874s - returns false 1874s 1874s Addrinfo#ipv4? for an ipv4 socket 1874s - returns true 1874s 1874s Addrinfo#ipv4? for an ipv6 socket 1874s - returns false 1874s 1874s Addrinfo#ipv4? for a unix socket 1874s - returns false 1874s 1874s Addrinfo#ipv6_linklocal? 1874s - returns true for a link-local address 1874s - returns false for a regular address 1874s - returns false for an IPv4 address 1874s 1874s Addrinfo#ipv6_loopback? for an ipv4 socket 1874s - returns false for the loopback address 1874s - returns false for another address 1874s 1874s Addrinfo#ipv6_loopback? for an ipv6 socket 1874s - returns true for the loopback address 1874s - returns false for another address 1874s 1874s Addrinfo#ipv6_loopback? for a unix socket 1874s - returns false 1874s 1874s Addrinfo#ipv6_mc_global? 1874s - returns true for a multi-cast address in the global scope 1874s - returns false for a regular IPv6 address 1874s - returns false for an IPv4 address 1874s 1874s Addrinfo#ipv6_mc_linklocal? 1874s - returns true for a multi-cast link-local address 1874s - returns false for a regular IPv6 address 1874s - returns false for an IPv4 address 1874s 1874s Addrinfo#ipv6_mc_nodelocal? 1874s - returns true for a multi-cast node-local address 1874s - returns false for a regular IPv6 address 1874s - returns false for an IPv4 address 1874s 1874s Addrinfo#ipv6_mc_orglocal? 1874s - returns true for a multi-cast org-local address 1874s - returns false for a regular IPv6 address 1874s - returns false for an IPv4 address 1874s 1874s Addrinfo#ipv6_mc_sitelocal? 1874s - returns true for a multi-cast site-local address 1874s - returns false for a regular IPv6 address 1874s - returns false for an IPv4 address 1874s 1874s Addrinfo#ipv6_multicast? for an ipv4 socket 1874s - returns true for a multicast address 1874s - returns false for another address 1874s 1874s Addrinfo#ipv6_multicast? for an ipv6 socket 1874s - returns true for a multicast address 1874s - returns false for another address 1874s 1874s Addrinfo#ipv6_multicast? for a unix socket 1874s - returns false 1874s 1874s Addrinfo#ipv6_sitelocal? 1874s - returns true for a site-local address 1874s - returns false for a regular IPv6 address 1874s - returns false for an IPv4 address 1874s 1874s Addrinfo#ipv6? for an ipv4 socket 1874s - returns true 1874s 1874s Addrinfo#ipv6? for an ipv6 socket 1874s - returns false 1874s 1874s Addrinfo#ipv6? for a unix socket 1874s - returns false 1874s 1874s Addrinfo#ipv6_to_ipv4 1874s - returns an Addrinfo for ::192.168.1.1 1874s - returns an Addrinfo for ::0.0.1.1 1874s - returns an Addrinfo for ::0.0.1.0 1874s - returns an Addrinfo for ::0.1.0.0 1874s - returns an Addrinfo for ::ffff:192.168.1.1 1874s - returns nil for ::0.0.0.1 1874s - returns nil for a pure IPv6 Addrinfo 1874s - returns nil for an IPv4 Addrinfo 1874s - returns nil for a UNIX Addrinfo 1874s 1874s Addrinfo#ipv6_unique_local? 1874s - returns true for an unique local IPv6 address 1874s - returns false for a regular IPv6 address 1874s - returns false for an IPv4 address 1874s 1874s Addrinfo#ipv6_unspecified? 1874s - returns true for an unspecified IPv6 address 1874s - returns false for a regular IPv6 address 1874s - returns false for an IPv4 address 1874s 1874s Addrinfo#ipv6_v4compat? 1874s - returns true for an IPv4 compatible address 1874s - returns false for an IPv4 mapped address 1874s - returns false for a regular IPv6 address 1874s - returns false for an IPv4 address 1874s 1874s Addrinfo#ipv6_v4mapped? 1874s - returns true for an IPv4 compatible address 1874s - returns false for an IPv4 compatible address 1874s - returns false for a regular IPv6 address 1874s - returns false for an IPv4 address 1874s 1874s Addrinfo#listen 1874s - closes the socket if a block is given 1874s 1874s Addrinfo#pfamily 1874s - returns PF_UNSPEC as the default socket family 1874s 1874s Addrinfo#pfamily for an ipv4 socket 1874s - returns Socket::PF_INET 1874s 1874s Addrinfo#pfamily for an ipv6 socket 1874s - returns Socket::PF_INET6 1874s 1874s Addrinfo#pfamily for a unix socket 1874s - returns Socket::PF_UNIX 1874s 1874s Addrinfo#protocol 1874s - returns 0 by default 1874s - returns a custom protocol when given 1874s 1874s Addrinfo#protocol for a unix socket 1874s - returns 0 1874s 1874s Addrinfo#socktype 1874s - returns 0 by default 1874s - returns the socket type when given 1874s 1874s Addrinfo#socktype for a unix socket 1874s - returns Socket::SOCK_STREAM 1874s 1874s Addrinfo.tcp using IPv4 1874s - returns an Addrinfo instance 1874s - sets the IP address 1874s - sets the port 1874s - sets the address family 1874s - sets the protocol family 1874s - sets the socket type 1874s - sets the socket protocol 1874s 1874s Addrinfo.tcp using IPv6 1874s - returns an Addrinfo instance 1874s - sets the IP address 1874s - sets the port 1874s - sets the address family 1874s - sets the protocol family 1874s - sets the socket type 1874s - sets the socket protocol 1874s 1874s Addrinfo#to_s for an ipv4 socket 1874s - returns a sockaddr packed structure 1874s 1874s Addrinfo#to_s for an ipv6 socket 1874s - returns a sockaddr packed structure 1874s 1874s Addrinfo#to_s for a unix socket 1874s - returns a sockaddr packed structure 1874s 1874s Addrinfo#to_s using a Addrinfo with just an IP address 1874s - returns a String 1874s 1874s Addrinfo#to_sockaddr for an ipv4 socket 1874s - returns a sockaddr packed structure 1874s 1874s Addrinfo#to_sockaddr for an ipv6 socket 1874s - returns a sockaddr packed structure 1874s 1874s Addrinfo#to_sockaddr for a unix socket 1874s - returns a sockaddr packed structure 1874s 1874s Addrinfo#to_sockaddr using a Addrinfo with just an IP address 1874s - returns a String 1874s 1874s Addrinfo.udp using IPv4 1874s - returns an Addrinfo instance 1874s - sets the IP address 1874s - sets the port 1874s - sets the address family 1874s - sets the protocol family 1874s - sets the socket type 1874s - sets the socket protocol 1874s 1874s Addrinfo.udp using IPv6 1874s - returns an Addrinfo instance 1874s - sets the IP address 1874s - sets the port 1874s - sets the address family 1874s - sets the protocol family 1874s - sets the socket type 1874s - sets the socket protocol 1874s 1874s Addrinfo#unix_path for an ipv4 socket 1874s - raises an exception 1874s 1874s Addrinfo#unix_path for an ipv6 socket 1874s - raises an exception 1874s 1874s Addrinfo#unix_path for a unix socket 1874s - returns the socket path 1874s 1874s Addrinfo.unix 1874s - returns an Addrinfo instance 1874s - sets the IP address 1874s - sets the address family 1874s - sets the protocol family 1874s - sets the socket type 1874s - sets a custom socket type 1874s - sets the socket protocol to 0 1874s 1874s Addrinfo#unix? for an ipv4 socket 1874s - returns false 1874s 1874s Addrinfo#unix? for an ipv6 socket 1874s - returns false 1874s 1874s Addrinfo#unix? for a unix socket 1874s - returns true 1874s 1874s Socket::BasicSocket#close_read 1874s - closes the reading end of the socket 1874s - does not raise when called on a socket already closed for reading 1874s - does not fully close the socket 1874s - fully closes the socket if it was already closed for writing 1874s - raises IOError when called on a fully closed socket 1874s - returns nil 1874s 1874s Socket::BasicSocket#close_write 1874s - closes the writing end of the socket 1874s - does not raise when called on a socket already closed for writing 1874s - does not fully close the socket 1874s - does not prevent reading 1874s - fully closes the socket if it was already closed for reading 1874s - raises IOError when called on a fully closed socket 1874s - returns nil 1874s 1874s Socket#connect_address using a socket bound to 0.0.0.0 1874s - returns an Addrinfo 1874s - uses the correct port number 1874s - uses SOCK_STREAM as the socket type 1874s 1874s Socket#connect_address using a socket bound to :: 1874s - returns an Addrinfo 1874s - uses ::1 as the IP address 1874s - uses the correct port number 1874s - uses AF_INET6 as the address family 1874s - uses PF_INET6 as the address family 1874s - uses SOCK_STREAM as the socket type 1874s 1874s Socket#connect_address using an unbound UNIX socket 1874s - raises SocketError 1874s 1874s Socket#connect_address using a bound UNIX socket 1874s - returns an Addrinfo 1874s - uses the correct socket path 1874s - uses AF_UNIX as the address family 1874s - uses PF_UNIX as the protocol family 1874s - uses SOCK_STREAM as the socket type 1874s - uses 0 as the protocol 1874s 1874s BasicSocket.do_not_reverse_lookup 1874s - defaults to true 1874s - causes 'peeraddr' to avoid name lookups 1874s - looks for hostnames when set to false 1874s - looks for numeric addresses when set to true 1874s 1874s BasicSocket#do_not_reverse_lookup for an TCPSocket.new socket 1874s - inherits from BasicSocket.do_not_reverse_lookup when the socket is created 1874s - is true when BasicSocket.do_not_reverse_lookup is true 1874s - is false when BasicSocket.do_not_reverse_lookup is false 1874s - can be changed with #do_not_reverse_lookup= 1874s 1874s BasicSocket#do_not_reverse_lookup for an TCPServer#accept socket 1874s - inherits from BasicSocket.do_not_reverse_lookup when the socket is created 1874s - is true when BasicSocket.do_not_reverse_lookup is true 1874s - is false when BasicSocket.do_not_reverse_lookup is false 1874s - can be changed with #do_not_reverse_lookup= 1874s 1874s BasicSocket.for_fd 1874s - return a Socket instance wrapped around the descriptor 1874s - returns a new socket for a file descriptor 1874s - sets the socket into binary mode 1874s 1874s Socket::BasicSocket#getpeername 1874s - returns the sockaddr of the other end of the connection 1874s 1874s Socket::BasicSocket#getsockname 1874s - returns the sockaddr associated with the socket 1874s - works on sockets listening in ipaddr_any 1874s - returns a default socket address for a disconnected socket 1874s 1874s BasicSocket#getsockopt 1874s - gets a socket option Socket::SO_TYPE 1874s - gets a socket option Socket::SO_OOBINLINE 1874s - gets a socket option Socket::SO_LINGER 1874s - gets a socket option Socket::SO_SNDBUF 1874s - raises a SystemCallError with an invalid socket option 1874s - returns a Socket::Option using a constant 1874s - returns a Socket::Option for a boolean option 1874s - returns a Socket::Option for a struct option 1874s - raises Errno::ENOPROTOOPT when requesting an invalid option 1874s 1874s BasicSocket#getsockopt using Symbols as arguments 1874s - returns a Socket::Option for arguments :SOCKET and :TYPE 1874s - returns a Socket::Option for arguments :SOCKET and :REUSEADDR 1874s - returns a Socket::Option for arguments :SOCKET and :LINGER 1874s 1874s BasicSocket#getsockopt using Strings as arguments 1874s - returns a Socket::Option for arguments "SOCKET" and "TYPE" 1874s - returns a Socket::Option for arguments "SOCKET" and "REUSEADDR" 1874s - returns a Socket::Option for arguments "SOCKET" and "LINGER" 1874s 1874s BasicSocket#getsockopt using a String based option 1874s - allows unpacking of a boolean option 1874s - allows unpacking of a struct option 1874s 1874s BasicSocket#local_address using TCPSocket 1874s - uses AF_INET as the address family 1874s - uses PF_INET as the protocol family 1874s - uses SOCK_STREAM as the socket type 1874s - uses the correct IP address 1874s - uses the correct port 1874s - equals address of peer socket 1874s - returns an Addrinfo 1874s - can be used to connect to the server 1874s 1874s BasicSocket#local_address using IPv6 1874s - uses AF_INET6 as the address family 1874s - uses PF_INET6 as the protocol family 1874s - uses SOCK_STREAM as the socket type 1874s - uses the correct IP address 1874s - uses the correct port 1874s - equals address of peer socket 1874s - returns an Addrinfo 1874s - can be used to connect to the server 1874s 1874s BasicSocket#local_address using UNIXSocket 1874s - uses AF_UNIX as the address family 1874s - uses PF_UNIX as the protocol family 1874s - uses SOCK_STREAM as the socket type 1874s - uses the correct socket path 1874s - equals address of peer socket 1874s - returns an Addrinfo 1874s - uses 0 as the protocol 1874s - can be used to connect to the server 1874s 1874s BasicSocket#local_address using UDPSocket 1874s - uses the correct address family 1874s - uses the correct protocol family 1874s - uses SOCK_DGRAM as the socket type 1874s - uses the correct IP address 1874s - uses the correct port 1874s - returns an Addrinfo 1874s - can be used to connect to the peer 1874s 1874s BasicSocket#read_nonblock using IPv4 1874s - receives data after it's ready 1874s - does not set the IO in nonblock mode 1874s 1874s BasicSocket#read_nonblock using IPv6 1875s - receives data after it's ready 1875s - does not set the IO in nonblock mode 1875s 1875s Socket::BasicSocket#recv_nonblock using IPv4 1875s - raises an exception extending IO::WaitReadable if there's no data available 1875s - returns :wait_readable with exception: false 1875s - receives data after it's ready 1875s - allows an output buffer as third argument 1875s - does not block if there's no data available 1875s 1875s Socket::BasicSocket#recv_nonblock using IPv4 using an unbound socket 1875s - raises an exception extending IO::WaitReadable 1875s 1875s Socket::BasicSocket#recv_nonblock using IPv6 1875s - raises an exception extending IO::WaitReadable if there's no data available 1875s - returns :wait_readable with exception: false 1875s - receives data after it's ready 1875s - allows an output buffer as third argument 1875s - does not block if there's no data available 1875s 1875s Socket::BasicSocket#recv_nonblock using IPv6 using an unbound socket 1875s - raises an exception extending IO::WaitReadable 1875s 1875s BasicSocket#recv 1875s - receives a specified number of bytes of a message from another socket 1875s - gets lines delimited with a custom separator 1875s 1875s BasicSocket#recv using IPv4 using a bound socket with data available 1875s - reads the given amount of bytes 1875s - reads the given amount of bytes when it exceeds the data size 1875s 1875s BasicSocket#recv using IPv6 using a bound socket with data available 1875s - reads the given amount of bytes 1875s - reads the given amount of bytes when it exceeds the data size 1875s 1875s BasicSocket#remote_address using TCPSocket 1875s - uses AF_INET as the address family 1875s - uses PF_INET as the protocol family 1875s - uses SOCK_STREAM as the socket type 1875s - uses the correct IP address 1875s - uses the correct port 1875s - equals address of peer socket 1875s - returns an Addrinfo 1875s - can be used to connect to the server 1875s 1875s BasicSocket#remote_address using IPv6 1875s - uses AF_INET6 as the address family 1875s - uses PF_INET6 as the protocol family 1875s - uses SOCK_STREAM as the socket type 1875s - uses the correct IP address 1875s - uses the correct port 1875s - equals address of peer socket 1875s - returns an Addrinfo 1875s - can be used to connect to the server 1875s 1875s BasicSocket#remote_address using UNIXSocket 1875s - uses AF_UNIX as the address family 1875s - uses PF_UNIX as the protocol family 1875s - uses SOCK_STREAM as the socket type 1875s - uses the correct socket path 1875s - equals address of peer socket 1875s - returns an Addrinfo 1875s - uses 0 as the protocol 1875s - can be used to connect to the server 1875s 1875s BasicSocket#remote_address using UDPSocket 1875s - uses the correct address family 1875s - uses the correct protocol family 1875s - uses SOCK_DGRAM as the socket type 1875s - uses the correct IP address 1875s - uses the correct port 1875s - returns an Addrinfo 1875s - can be used to connect to the peer 1875s 1875s BasicSocket#send 1875s - sends a message to another socket and returns the number of bytes sent 1875s - accepts a sockaddr as recipient address 1875s 1875s BasicSocket#send using IPv4 using a disconnected socket with an object implementing #to_str 1875s - returns the amount of sent bytes 1875s 1875s BasicSocket#send using IPv4 using a disconnected socket with a destination address as a String 1875s - returns the amount of sent bytes 1875s 1875s BasicSocket#send using IPv4 using a disconnected socket with a destination address as an Addrinfo 1875s - returns the amount of sent bytes 1875s 1875s BasicSocket#send using IPv4 using a connected UDP socket without a destination address argument 1875s - returns the amount of bytes written 1875s 1875s BasicSocket#send using IPv4 using a connected UDP socket with a destination address argument 1875s - does not persist the alternative connection after writing to the socket 1875s 1875s BasicSocket#send using IPv6 using a disconnected socket with an object implementing #to_str 1875s - returns the amount of sent bytes 1875s 1875s BasicSocket#send using IPv6 using a disconnected socket with a destination address as a String 1875s - returns the amount of sent bytes 1875s 1875s BasicSocket#send using IPv6 using a disconnected socket with a destination address as an Addrinfo 1875s - returns the amount of sent bytes 1875s 1875s BasicSocket#send using IPv6 using a connected UDP socket without a destination address argument 1875s - returns the amount of bytes written 1875s 1875s BasicSocket#send using IPv6 using a connected UDP socket with a destination address argument 1875s - does not persist the alternative connection after writing to the socket 1875s 1875s BasicSocket#setsockopt 1875s - sets the socket linger to 0 1875s - sets the socket linger to some positive value 1875s - raises EINVAL if passed wrong linger value 1875s - sets the socket option Socket::SO_OOBINLINE 1875s - sets the socket option Socket::SO_SNDBUF 1875s 1875s BasicSocket#setsockopt accepts Socket::Option as argument 1875s - boolean 1875s - int 1875s 1875s BasicSocket#setsockopt accepts Socket::Option as argument 1875s - linger 1875s 1875s BasicSocket#setsockopt using a STREAM socket using separate arguments with Symbols 1875s - raises TypeError when the first argument is nil 1875s - sets a boolean option 1875s - raises Errno::EINVAL when setting an invalid option value 1875s 1875s BasicSocket#setsockopt using a STREAM socket using separate arguments with Symbols 1875s - sets a boolean option 1875s 1875s BasicSocket#setsockopt using a STREAM socket using separate arguments with constants 1875s - sets a boolean option 1875s 1875s BasicSocket#setsockopt using a STREAM socket using separate arguments with custom objects 1875s - sets a boolean option 1875s 1875s BasicSocket#setsockopt using a STREAM socket using a Socket::Option as the first argument 1875s - sets a boolean option 1875s - raises TypeError when passing 3 arguments 1875s 1875s BasicSocket#write_nonblock using IPv4 1875s - sends data 1875s 1875s BasicSocket#write_nonblock using IPv6 1875s - sends data 1875s 1875s Socket::Constants 1875s - defines socket types 1875s - defines protocol families 1875s - defines PF_IPX protocol 1875s - defines address families 1875s - defines AF_IPX address 1875s - defines send/receive options 1875s - defines socket level options 1875s - defines socket options 1875s - defines multicast options 1875s - defines multicast options 1875s - defines TCP options 1875s 1875s Socket::IPSocket#addr 1875s - returns an array with the socket's information 1875s - returns an address in the array if do_not_reverse_lookup is true 1875s - returns an address in the array if passed false 1875s 1875s Socket::IPSocket#addr using IPv4 without reverse lookups 1875s - returns an Array containing address information 1875s 1875s Socket::IPSocket#addr using IPv4 with reverse lookups using true as the argument 1875s - returns an Array containing address information 1875s 1875s Socket::IPSocket#addr using IPv4 with reverse lookups using :hostname as the argument 1875s - returns an Array containing address information 1875s 1875s Socket::IPSocket#addr using IPv4 with reverse lookups using :cats as the argument 1875s - raises ArgumentError 1875s 1875s Socket::IPSocket#addr using IPv4 with do_not_reverse_lookup disabled on socket level 1875s - returns an Array containing address information 1875s 1875s Socket::IPSocket#addr using IPv6 with reverse lookups using :cats as the argument 1875s - raises ArgumentError 1875s 1875s Socket::IPSocket#getaddress 1875s - returns the IP address of hostname 1875s - raises an error on unknown hostnames 1875s 1875s Socket::IPSocket#peeraddr 1875s - returns an array of information on the peer 1875s - returns an IP instead of hostname if do_not_reverse_lookup is true 1875s - returns an IP instead of hostname if passed false 1875s 1875s Socket::IPSocket#peeraddr using IPv4 without reverse lookups 1875s - returns an Array containing address information 1875s 1875s Socket::IPSocket#peeraddr using IPv4 with reverse lookups using true as the argument 1875s - returns an Array containing address information 1875s 1875s Socket::IPSocket#peeraddr using IPv4 with reverse lookups using :hostname as the argument 1875s - returns an Array containing address information 1875s 1875s Socket::IPSocket#peeraddr using IPv4 with reverse lookups using :cats as the argument 1875s - raises ArgumentError 1875s 1875s Socket::IPSocket#peeraddr using IPv4 with do_not_reverse_lookup disabled on socket level 1875s - returns an Array containing address information 1875s 1875s Socket::IPSocket#peeraddr using IPv6 with reverse lookups using :cats as the argument 1875s - raises ArgumentError 1875s 1875s Socket::IPSocket#recvfrom 1875s - reads data from the connection 1875s - reads up to len bytes 1875s - returns an array with the data and connection info 1875s 1875s Socket::IPSocket#recvfrom using IPv4 1875s - returns an Array containing up to N bytes and address information 1875s 1875s Socket::IPSocket#recvfrom using IPv4 using reverse lookups 1875s - includes the hostname in the address Array 1875s 1875s Socket::Option.bool 1875s - creates a new Socket::Option 1875s 1875s Socket::Option#bool 1875s - returns boolean value 1875s - raises TypeError when called on a non boolean option 1875s 1875s Socket::Option#initialize using Integers 1875s - returns a Socket::Option 1875s 1875s Socket::Option#initialize using Symbols 1875s - returns a Socket::Option 1875s - raises when using an invalid address family 1875s - raises when using an invalid level 1875s - raises when using an invalid option name 1875s 1875s Socket::Option#initialize using Strings 1875s - returns a Socket::Option 1875s - raises when using an invalid address family 1875s - raises when using an invalid level 1875s - raises when using an invalid option name 1875s 1875s Socket::Option#inspect 1875s - correctly returns SO_LINGER value 1875s 1875s Socket::Option.int 1875s - creates a new Socket::Option 1875s 1875s Socket::Option#int 1875s - raises TypeError when called on a non integer option 1875s 1875s Socket::Option.linger 1875s - creates a new Socket::Option for SO_LINGER 1875s - accepts boolean as onoff argument 1875s 1875s Socket::Option#linger 1875s - returns linger option 1875s - raises TypeError if not a SO_LINGER 1875s - raises TypeError if option has not good size 1875s - raises TypeError when called on a non linger option 1875s 1875s Socket::Option.new 1875s - should accept integers 1875s - should accept symbols 1875s - should raise error on unknown family 1875s - should raise error on unknown level 1875s - should raise error on unknown option name 1875s 1875s Socket#bind on SOCK_DGRAM socket 1875s - binds to a port 1875s - returns 0 if successful 1875s - raises Errno::EINVAL when already bound 1875s - raises Errno::EADDRNOTAVAIL when the specified sockaddr is not available from the local machine 1875s - raises Errno::EACCES when the current user does not have permission to bind 1875s 1875s Socket#bind on SOCK_STREAM socket 1875s - binds to a port 1875s - returns 0 if successful 1875s - raises Errno::EINVAL when already bound 1875s - raises Errno::EADDRNOTAVAIL when the specified sockaddr is not available from the local machine 1875s - raises Errno::EACCES when the current user does not have permission to bind 1875s 1875s Socket#bind using IPv4 using a packed socket address 1875s - returns 0 when successfully bound 1875s - raises Errno::EINVAL when binding to an already bound port 1875s - raises Errno::EADDRNOTAVAIL when the specified sockaddr is not available 1875s - raises Errno::EACCES when the user is not allowed to bind to the port 1875s 1875s Socket#bind using IPv4 using an Addrinfo 1875s - binds to an Addrinfo 1875s - uses a new Addrinfo for the local address 1875s 1875s Socket#bind using IPv6 using a packed socket address 1875s - returns 0 when successfully bound 1875s - raises Errno::EINVAL when binding to an already bound port 1875s - raises Errno::EADDRNOTAVAIL when the specified sockaddr is not available 1875s - raises Errno::EACCES when the user is not allowed to bind to the port 1875s 1875s Socket#bind using IPv6 using an Addrinfo 1875s - binds to an Addrinfo 1875s - uses a new Addrinfo for the local address 1875s 1875s Socket#connect_nonblock 1875s - connects the socket to the remote side 1875s - raises Errno::EINPROGRESS when the connect would block 1875s - raises Errno::EINPROGRESS with IO::WaitWritable mixed in when the connect would block 1875s - returns :wait_writable in exceptionless mode when the connect would block 1875s 1875s Socket#connect_nonblock using IPv4 using a DGRAM socket 1875s - returns 0 when successfully connected using a String 1875s - returns 0 when successfully connected using an Addrinfo 1875s - raises TypeError when passed an Integer 1875s 1875s Socket#connect_nonblock using IPv4 using a STREAM socket 1875s - raises IO:EINPROGRESSWaitWritable when the connection would block 1875s 1875s Socket#connect_nonblock using IPv6 using a DGRAM socket 1875s - returns 0 when successfully connected using a String 1875s - returns 0 when successfully connected using an Addrinfo 1875s - raises TypeError when passed an Integer 1875s 1875s Socket#connect_nonblock using IPv6 using a STREAM socket 1875s - raises IO:EINPROGRESSWaitWritable when the connection would block 1875s 1875s Socket#connect using IPv4 1875s - raises Errno::ECONNREFUSED or Errno::ETIMEDOUT when the connection failed 1875s 1875s Socket#connect using IPv6 1875s - raises Errno::ECONNREFUSED or Errno::ETIMEDOUT when the connection failed 1875s 1875s Socket.for_fd 1875s - creates a new Socket that aliases the existing Socket's file descriptor 1875s 1875s Socket.getaddrinfo 1875s - gets the address information 1875s - accepts empty addresses for IPv4 passive sockets 1875s - accepts empty addresses for IPv4 non-passive sockets 1875s - accepts empty addresses for IPv6 passive sockets 1875s - accepts empty addresses for IPv6 non-passive sockets 1875s 1875s Socket.getaddrinfo without global reverse lookups 1875s - returns an Array 1875s - accepts an Integer as the address family 1875s - accepts a Symbol as the address family 1875s - accepts a String as the address family 1875s - accepts an object responding to #to_str as the host 1875s - accepts an object responding to #to_str as the address family 1875s - accepts an Integer as the socket type 1875s - accepts a Symbol as the socket type 1875s - accepts a String as the socket type 1875s - accepts an object responding to #to_str as the socket type 1875s - accepts an Integer as the protocol family 1875s - accepts an Integer as the flags 1875s 1875s Socket.getaddrinfo with global reverse lookups 1875s - returns an address honoring the global lookup option 1875s 1875s Socket.gethostbyaddr using an IPv4 address without an explicit address family 1875s - returns an Array 1875s 1875s Socket.gethostbyaddr using an IPv4 address without an explicit address family the returned Array 1875s - includes the aliases as the 2nd value 1875s - includes the address type as the 3rd value 1875s - includes all address strings as the remaining values 1875s 1875s Socket.gethostbyaddr using an IPv4 address with an explicit address family 1875s - returns an Array when using an Integer as the address family 1875s - returns an Array when using a Symbol as the address family 1875s 1875s Socket.gethostbyaddr using an IPv6 address without an explicit address family 1875s - returns an Array 1875s 1875s Socket.gethostbyaddr using an IPv6 address without an explicit address family the returned Array 1875s - includes the aliases as the 2nd value 1875s - includes all address strings as the remaining values 1875s 1875s Socket.gethostbyaddr using an IPv6 address with an explicit address family 1875s - returns an Array when using an Integer as the address family 1875s - returns an Array when using a Symbol as the address family 1875s 1875s Socket.gethostbyname 1875s - returns broadcast address info for '' 1875s - returns broadcast address info for '' 1875s 1875s Socket.gethostbyname 1875s - returns an Array 1875s 1875s Socket.gethostbyname the returned Array 1875s - includes the aliases as the 2nd value 1875s - includes the address type as the 3rd value 1875s - includes the address strings as the remaining values 1875s 1875s Socket.gethostbyname using as the input address the returned Array 1875s - includes the broadcast address as the first value 1875s - includes the address type as the 3rd value 1875s - includes the address string as the 4th value 1875s 1875s Socket.gethostbyname using as the input address the returned Array 1875s - includes the wildcard address as the first value 1875s - includes the address type as the 3rd value 1875s - includes the address string as the 4th value 1875s 1875s Socket.gethostbyname using an IPv4 address the returned Array 1875s - includes the address type as the 3rd value 1875s - includes the address string as the 4th value 1875s 1875s Socket.gethostbyname using an IPv6 address the returned Array 1875s - includes the address string as the 4th value 1875s 1875s Socket.gethostname 1875s - returns the host name 1875s 1875s Socket.getifaddrs 1875s - returns an Array 1875s 1875s Socket.getifaddrs the returned Array 1875s - should not be empty 1875s - contains instances of Socket::Ifaddr 1875s 1875s Socket.getifaddrs each returned Socket::Ifaddr 1875s - has an interface index 1875s - has an interface name 1875s 1875s Socket.getifaddrs the Socket::Ifaddr address 1875s - is an Addrinfo 1875s 1875s Socket.getifaddrs the Socket::Ifaddr broadcast address 1875s - is an Addrinfo 1875s 1875s Socket.getifaddrs the Socket::Ifaddr netmask address 1875s - is an Addrinfo 1875s - has an address family 1875s - has an IP address 1875s 1875s Socket.getnameinfo 1875s - gets the name information and don't resolve it 1875s - gets the name information and resolve the host 1875s - gets the name information and resolves the service 1875s - gets a 3-element array and doesn't resolve hostname 1875s - gets a 3-element array and resolves the service 1875s - gets a 4-element array and doesn't resolve hostname 1875s - gets a 4-element array and resolves the service 1875s 1875s Socket.getnameinfo using a String as the first argument using NI_NUMERICHOST as the flag 1875s - returns an Array containing the numeric hostname and service name 1875s 1875s Socket.getnameinfo using IPv4 using a 3 element Array as the first argument 1875s - raises ArgumentError when using an invalid Array 1875s 1875s Socket.getnameinfo using IPv4 using a 3 element Array as the first argument using NI_NUMERICHOST as the flag 1875s - returns an Array containing the numeric hostname and service name 1875s 1875s Socket.getnameinfo using IPv4 using a 4 element Array as the first argument using NI_NUMERICHOST as the flag 1875s - returns an Array containing the numeric hostname and service name 1875s 1875s Socket.getnameinfo using IPv6 using a 3 element Array as the first argument 1875s - raises ArgumentError when using an invalid Array 1875s 1875s Socket#getservbyname 1875s - returns the port for service 'discard' 1875s - returns the port for service 'discard' with protocol 'tcp' 1875s - returns the port for service "ftp" 1875s - returns the port for service "ftp" with protocol "tcp" 1875s - returns the port for service 'domain' with protocol 'udp' 1875s - returns the port for service 'daytime' 1875s - raises a SocketError when the service or port is invalid 1875s 1875s Socket#initialize 1875s - sets the do_not_reverse_lookup option 1875s - sets basic IO accessors 1875s - sets the socket to binary mode 1875s 1875s Socket#initialize using an Integer as the 1st and 2nd arguments 1875s - returns a Socket 1875s 1875s Socket#initialize using Symbols as the 1st and 2nd arguments 1875s - returns a Socket 1875s 1875s Socket#initialize using Strings as the 1st and 2nd arguments 1875s - returns a Socket 1875s 1875s Socket#initialize using objects that respond to #to_str 1875s - returns a Socket 1875s - raises TypeError when the #to_str method does not return a String 1875s 1875s Socket#initialize using a custom protocol 1875s - returns a Socket when using an Integer 1875s 1875s Socket.ip_address_list 1875s - returns an Array 1875s 1875s Socket.ip_address_list the returned Array 1875s - is not empty 1875s - contains Addrinfo objects 1875s 1875s Socket.ip_address_list each returned Addrinfo 1875s - has a non-empty IP address 1875s - has an address family 1875s - uses 0 as the port number 1875s 1875s Socket.pack_sockaddr_in 1875s - resolves the service name to a port 1875s 1875s Socket.pack_sockaddr_in using an IPv4 address 1875s - returns a String of 16 bytes 1875s 1875s Socket.pack_sockaddr_in using an IPv6 address 1875s - returns a String of 28 bytes 1875s 1875s Socket#pack_sockaddr_un 1875s - should be idempotent 1875s - packs and unpacks 1875s - handles correctly paths with multibyte chars 1875s - returns a String of 110 bytes 1875s - raises ArgumentError for paths that are too long 1875s 1875s Socket.pair 1875s - ensures the returned sockets are connected 1875s - responses with array of two sockets 1875s - accepts a custom protocol as an Integer as the 3rd argument 1875s - connects the returned Socket objects 1875s 1875s Socket.pair using an Integer as the 1st and 2nd argument 1875s - returns two Socket objects 1875s 1875s Socket.pair using a Symbol as the 1st and 2nd argument 1875s - returns two Socket objects 1875s - raises SocketError for an unknown address family 1875s - raises SocketError for an unknown socket type 1875s 1875s Socket.pair using a String as the 1st and 2nd argument 1875s - returns two Socket objects 1875s - raises SocketError for an unknown address family 1875s - raises SocketError for an unknown socket type 1875s 1875s Socket.pair using an object that responds to #to_str as the 1st and 2nd argument 1875s - returns two Socket objects 1875s - raises TypeError when #to_str does not return a String 1875s - raises SocketError for an unknown address family 1875s - raises SocketError for an unknown socket type 1875s 1875s Socket#recvfrom_nonblock using IPv4 using an unbound socket 1875s - raises IO::WaitReadable 1875s 1875s Socket#recvfrom_nonblock using IPv4 using a bound socket without any data available 1875s - raises IO::WaitReadable 1875s - returns :wait_readable with exception: false 1875s 1875s Socket#recvfrom_nonblock using IPv4 using a bound socket with data available 1875s - returns an Array containing the data and an Addrinfo 1875s 1875s Socket#recvfrom_nonblock using IPv4 using a bound socket with data available the returned data 1875s - is the same as the sent data 1875s 1875s Socket#recvfrom_nonblock using IPv4 using a bound socket with data available the returned Array 1875s - contains the data at index 0 1875s - contains an Addrinfo at index 1 1875s 1875s Socket#recvfrom_nonblock using IPv4 using a bound socket with data available the returned Addrinfo 1875s - uses AF_INET as the address family 1875s - uses SOCK_DGRAM as the socket type 1875s - uses PF_INET as the protocol family 1875s - uses the IP address of the client 1875s - uses the port of the client 1875s 1875s Socket#recvfrom_nonblock using IPv6 using an unbound socket 1875s - raises IO::WaitReadable 1875s 1875s Socket#recvfrom_nonblock using IPv6 using a bound socket without any data available 1875s - raises IO::WaitReadable 1875s - returns :wait_readable with exception: false 1875s 1875s Socket#recvfrom_nonblock using IPv6 using a bound socket with data available 1875s - returns an Array containing the data and an Addrinfo 1875s 1875s Socket#recvfrom_nonblock using IPv6 using a bound socket with data available the returned data 1875s - is the same as the sent data 1875s 1875s Socket#recvfrom_nonblock using IPv6 using a bound socket with data available the returned Array 1875s - contains the data at index 0 1875s - contains an Addrinfo at index 1 1875s 1875s Socket#recvfrom_nonblock using IPv6 using a bound socket with data available the returned Addrinfo 1875s - uses AF_INET as the address family 1875s - uses SOCK_DGRAM as the socket type 1875s - uses PF_INET as the protocol family 1875s - uses the IP address of the client 1875s - uses the port of the client 1875s 1875s Socket#recvfrom using IPv4 using a bound socket with data available 1875s - returns an Array containing the data and an Addrinfo 1875s 1875s Socket#recvfrom using IPv4 using a bound socket with data available the returned Array 1875s - contains the data at index 0 1875s - contains an Addrinfo at index 1 1875s 1875s Socket#recvfrom using IPv4 using a bound socket with data available the returned Addrinfo 1875s - uses AF_INET as the address family 1875s - uses SOCK_DGRAM as the socket type 1875s - uses PF_INET as the protocol family 1875s - uses the IP address of the client 1875s - uses the port of the client 1875s 1875s Socket#recvfrom using IPv6 using a bound socket with data available 1875s - returns an Array containing the data and an Addrinfo 1875s 1875s Socket#recvfrom using IPv6 using a bound socket with data available the returned Array 1875s - contains the data at index 0 1875s - contains an Addrinfo at index 1 1875s 1875s Socket#recvfrom using IPv6 using a bound socket with data available the returned Addrinfo 1875s - uses AF_INET as the address family 1875s - uses SOCK_DGRAM as the socket type 1875s - uses PF_INET as the protocol family 1875s - uses the IP address of the client 1875s - uses the port of the client 1875s 1875s Socket#sockaddr_in 1875s - resolves the service name to a port 1875s 1875s Socket#sockaddr_in using an IPv4 address 1875s - returns a String of 16 bytes 1875s 1875s Socket#sockaddr_in using an IPv6 address 1875s - returns a String of 28 bytes 1875s 1875s Socket#sockaddr_un 1875s - should be idempotent 1875s - packs and unpacks 1875s - handles correctly paths with multibyte chars 1875s - returns a String of 110 bytes 1875s - raises ArgumentError for paths that are too long 1875s 1875s Socket 1875s - inherits from BasicSocket and IO 1875s 1875s The socket class hierarchy 1875s - has an IPSocket in parallel to Socket 1875s - has TCPSocket and UDPSocket subclasses of IPSocket 1875s - has a UNIXSocket in parallel to Socket 1875s 1875s Server class hierarchy 1875s - contains UNIXServer 1875s 1875s Socket.socketpair 1875s - ensures the returned sockets are connected 1875s - responses with array of two sockets 1875s - accepts a custom protocol as an Integer as the 3rd argument 1875s - connects the returned Socket objects 1875s 1875s Socket.socketpair using an Integer as the 1st and 2nd argument 1875s - returns two Socket objects 1875s 1875s Socket.socketpair using a Symbol as the 1st and 2nd argument 1875s - returns two Socket objects 1875s - raises SocketError for an unknown address family 1875s - raises SocketError for an unknown socket type 1875s 1875s Socket.socketpair using a String as the 1st and 2nd argument 1875s - returns two Socket objects 1875s - raises SocketError for an unknown address family 1875s - raises SocketError for an unknown socket type 1875s 1875s Socket.socketpair using an object that responds to #to_str as the 1st and 2nd argument 1875s - returns two Socket objects 1875s - raises TypeError when #to_str does not return a String 1875s - raises SocketError for an unknown address family 1875s - raises SocketError for an unknown socket type 1875s 1875s Socket.tcp_server_loop when no connections are available 1875s - blocks the caller 1875s 1875s Socket.tcp_server_loop when a connection is available 1875s - yields a Socket and an Addrinfo 1875s 1875s Socket.tcp_server_sockets with a block 1875s - closes all sockets after the block returns 1875s 1875s Socket.udp_server_loop_on when no connections are available 1875s - blocks the caller 1875s 1875s Socket.unix when no block is given 1875s - returns a Socket 1875s 1875s Socket.unix when a block is given 1875s - yields a Socket 1875s - closes the Socket when the block returns 1875s 1875s Socket.unpack_sockaddr_in 1875s - decodes the host name and port number of a packed sockaddr_in 1875s - gets the hostname and port number from a passed Addrinfo 1875s - raises an ArgumentError when the sin_family is not AF_INET 1875s - raises an ArgumentError when passed addrinfo is not AF_INET/AF_INET6 1875s 1875s Socket.unpack_sockaddr_in using an IPv4 address 1875s - returns an Array containing the port and IP address 1875s 1875s Socket.unpack_sockaddr_in using an IPv6 address 1875s - returns an Array containing the port and IP address 1875s 1875s Socket.unpack_sockaddr_un 1875s - decodes sockaddr to unix path 1875s - returns unix path from a passed Addrinfo 1875s - raises an ArgumentError when the sa_family is not AF_UNIX 1875s - raises an ArgumentError when passed addrinfo is not AF_UNIX 1875s 1875s Socket::TCPServer.accept_nonblock 1875s - accepts non blocking connections 1875s - raises an IOError if the socket is closed 1875s 1875s Socket::TCPServer.accept_nonblock without a connected client 1875s - raises error 1875s - returns :wait_readable in exceptionless mode 1875s 1875s TCPServer#accept_nonblock using IPv4 without a connected client 1875s - raises IO::WaitReadable 1875s 1875s TCPServer#accept_nonblock using IPv4 with a connected client 1875s - returns a TCPSocket 1875s 1875s TCPServer#accept_nonblock using IPv6 without a connected client 1875s - raises IO::WaitReadable 1875s 1875s TCPServer#accept_nonblock using IPv6 with a connected client 1875s - returns a TCPSocket 1875s 1875s TCPServer#accept 1875s - accepts a connection and returns a TCPSocket 1875s - can be interrupted by Thread#kill 1875s - can be interrupted by Thread#raise 1875s - raises an IOError if the socket is closed 1875s 1875s TCPServer#accept using IPv4 without a connected client 1875s - blocks the caller 1875s 1875s TCPServer#accept using IPv4 with a connected client 1875s - returns a TCPSocket 1875s - returns a TCPSocket which is set to close on exec 1875s 1875s TCPServer#accept using IPv6 without a connected client 1875s - blocks the caller 1875s 1875s TCPServer#accept using IPv6 with a connected client 1875s - returns a TCPSocket 1875s - returns a TCPSocket which is set to close on exec 1875s 1875s TCPServer#gets 1875s - raises Errno::ENOTCONN on gets 1875s 1875s TCPServer#initialize with a single Integer argument 1875s - sets the port to the given argument 1875s - sets the hostname to 0.0.0.0 or :: 1875s - sets the socket to binmode 1875s 1875s TCPServer#initialize with a single String argument containing a numeric value 1875s - sets the port to the given argument 1875s - sets the hostname to 0.0.0.0 or :: 1875s 1875s TCPServer#initialize with a single String argument containing a non numeric value 1875s - raises SocketError 1875s 1875s TCPServer#initialize with a String and an Integer using IPv4 1875s - sets the port to the given port argument 1875s - sets the hostname to the given host argument 1875s 1875s TCPServer#initialize with a String and an Integer using IPv6 1875s - sets the port to the given port argument 1875s - sets the hostname to the given host argument 1875s 1875s TCPServer#initialize with a String and a custom object 1875s - sets the port to the given port argument 1875s - sets the hostname to the given host argument 1875s 1875s TCPServer#listen using IPv4 1875s - returns 0 1875s 1875s TCPServer#listen using IPv6 1875s - returns 0 1875s 1875s TCPServer.new 1875s - binds to a host and a port 1875s - binds to localhost and a port with either IPv4 or IPv6 1875s - coerces port to string, then determines port from that number or service name 1875s - has a single argument form and treats it as a port number 1875s - coerces port to a string when it is the only argument 1875s - does not use the given block and warns to use TCPServer::open 1875s - raises Errno::EADDRNOTAVAIL when the address is unknown 1875s - raises Errno::EADDRINUSE when address is already in use 1875s - sets SO_REUSEADDR on the resulting server 1875s 1875s TCPServer#sysaccept 1875s - blocks if no connections 1875s - returns file descriptor of an accepted connection 1875s 1875s TCPServer#sysaccept using IPv4 without a connected client 1875s - blocks the caller 1875s 1875s TCPServer#sysaccept using IPv6 without a connected client 1875s - blocks the caller 1875s 1875s TCPSocket#gethostbyname 1875s - returns an array elements of information on the hostname 1875s - returns the canonical name as first value 1875s - returns the address type as the third value 1875s - returns the IP address as the fourth value 1875s - returns any aliases to the address as second value 1875s 1875s TCPSocket#gethostbyname 1875s - returns an Array 1875s 1875s TCPSocket#gethostbyname using a hostname the returned Array 1875s - includes the canonical name as the 1st value 1875s - includes an array of alternative hostnames as the 2nd value 1875s - includes the address family as the 3rd value 1875s - includes the IP addresses as all the remaining values 1875s 1875s TCPSocket#gethostbyname using IPv4 the returned Array 1875s - includes the IP address as the 1st value 1875s - includes an empty list of aliases as the 2nd value 1875s - includes the address family as the 3rd value 1875s - includes the IP address as the 4th value 1875s 1875s TCPSocket#gethostbyname using IPv6 the returned Array 1875s - includes an empty list of aliases as the 2nd value 1875s - includes the address family as the 3rd value 1875s 1875s TCPSocket#initialize 1875s - requires a hostname and a port as arguments 1875s - refuses the connection when there is no server to connect to 1875s - raises Errno::ETIMEDOUT with :connect_timeout when no server is listening on the given address 1875s 1875s TCPSocket#initialize with a running server 1875s - silently ignores 'nil' as the third parameter 1875s - connects to a listening server with host and port 1875s - connects to a server when passed local_host argument 1875s - connects to a server when passed local_host and local_port arguments 1875s - has an address once it has connected to a listening server 1875s - connects to a server when passed connect_timeout argument 1875s 1875s TCPSocket#initialize with a running server 1875s - does not use the given block and warns to use TCPSocket::open 1875s 1875s TCPSocket#initialize using IPv4 when no server is listening on the given address 1875s - raises Errno::ECONNREFUSED 1875s 1875s TCPSocket#initialize using IPv4 when a server is listening on the given address 1875s - returns a TCPSocket when using an Integer as the port 1875s - returns a TCPSocket when using a String as the port 1875s - raises SocketError when the port number is a non numeric String 1875s - set the socket to binmode 1875s - connects to the right address 1875s - creates a socket which is set to close on exec 1875s 1875s TCPSocket#initialize using IPv4 when a server is listening on the given address using a local address and service 1875s - binds the client socket to the local address and service 1875s 1875s TCPSocket#initialize using IPv6 when no server is listening on the given address 1875s - raises Errno::ECONNREFUSED 1875s 1875s TCPSocket#initialize using IPv6 when a server is listening on the given address 1875s - returns a TCPSocket when using an Integer as the port 1875s - returns a TCPSocket when using a String as the port 1875s - raises SocketError when the port number is a non numeric String 1875s - set the socket to binmode 1875s - connects to the right address 1875s - creates a socket which is set to close on exec 1875s 1875s TCPSocket#initialize using IPv6 when a server is listening on the given address using a local address and service 1875s - binds the client socket to the local address and service 1875s 1875s TCPSocket#local_address using IPv4 using an explicit hostname 1875s - returns an Addrinfo 1875s 1875s TCPSocket#local_address using IPv4 using an explicit hostname the returned Addrinfo 1875s - uses AF_INET as the address family 1875s - uses PF_INET as the protocol family 1875s - uses SOCK_STREAM as the socket type 1875s - uses the correct IP address 1875s - uses a randomly assigned local port 1875s 1875s TCPSocket#local_address using IPv4 using an implicit hostname the returned Addrinfo 1875s - uses the correct IP address 1875s 1875s TCPSocket#local_address using IPv6 using an explicit hostname 1875s - returns an Addrinfo 1875s 1875s TCPSocket#local_address using IPv6 using an explicit hostname the returned Addrinfo 1875s - uses AF_INET as the address family 1875s - uses PF_INET as the protocol family 1875s - uses SOCK_STREAM as the socket type 1875s - uses the correct IP address 1875s - uses a randomly assigned local port 1875s 1875s TCPSocket#local_address using IPv6 using an implicit hostname the returned Addrinfo 1875s - uses the correct IP address 1875s 1875s TCPSocket.open 1875s - requires a hostname and a port as arguments 1875s - refuses the connection when there is no server to connect to 1875s - raises Errno::ETIMEDOUT with :connect_timeout when no server is listening on the given address 1875s 1875s TCPSocket.open with a running server 1875s - silently ignores 'nil' as the third parameter 1875s - connects to a listening server with host and port 1875s - connects to a server when passed local_host argument 1875s - connects to a server when passed local_host and local_port arguments 1875s - has an address once it has connected to a listening server 1875s - connects to a server when passed connect_timeout argument 1875s 1875s TCPSocket partial closability 1875s - if the write end is closed then the other side can read past EOF without blocking 1875s - closing the write end ensures that the other side can read until EOF 1875s 1875s TCPSocket#recv_nonblock 1875s - returns a String read from the socket 1875s - writes the read to a buffer from the socket 1875s - returns :wait_readable in exceptionless mode 1875s 1875s TCPSocket#recv using IPv4 1875s - returns the message data 1875s 1875s TCPSocket#recv using IPv6 1875s - returns the message data 1875s 1875s TCPSocket#remote_address using IPv4 using an explicit hostname 1875s - returns an Addrinfo 1875s 1875s TCPSocket#remote_address using IPv4 using an explicit hostname the returned Addrinfo 1875s - uses AF_INET as the address family 1875s - uses PF_INET as the protocol family 1875s - uses SOCK_STREAM as the socket type 1875s - uses the correct IP address 1875s - uses the correct port 1875s 1875s TCPSocket#remote_address using IPv4 using an implicit hostname the returned Addrinfo 1875s - uses the correct IP address 1875s 1875s TCPSocket#remote_address using IPv6 using an explicit hostname 1875s - returns an Addrinfo 1875s 1875s TCPSocket#remote_address using IPv6 using an explicit hostname the returned Addrinfo 1875s - uses AF_INET as the address family 1875s - uses PF_INET as the protocol family 1875s - uses SOCK_STREAM as the socket type 1875s - uses the correct IP address 1875s - uses the correct port 1875s 1875s TCPSocket#remote_address using IPv6 using an implicit hostname the returned Addrinfo 1875s - uses the correct IP address 1875s 1875s TCPSocket#setsockopt using constants 1875s - sets the TCP nodelay to 1 1875s 1875s UDPSocket#bind 1875s - binds the socket to a port 1875s - raises Errno::EINVAL when already bound 1875s - receives a hostname and a port 1875s - binds to INADDR_ANY if the hostname is empty 1875s 1875s UDPSocket#bind using IPv4 1875s - binds to an address and port 1875s - binds to an address and port using String arguments 1875s - can receive data after being bound to an address 1875s 1875s UDPSocket#bind using IPv6 1875s - binds to an address and port 1875s - binds to an address and port using String arguments 1875s - can receive data after being bound to an address 1875s 1875s UDPSocket#connect using IPv4 1875s - connects to an address even when it is not used 1875s - can send data after connecting 1875s 1875s UDPSocket#connect using IPv6 1875s - connects to an address even when it is not used 1875s - can send data after connecting 1875s 1875s UDPSocket#initialize 1875s - initializes a new UDPSocket 1875s - initializes a new UDPSocket using an Integer 1875s - initializes a new UDPSocket using a Symbol 1875s - initializes a new UDPSocket using a String 1875s - sets the socket to binmode 1875s - sets the socket to close on exec 1875s - raises Errno::EAFNOSUPPORT or Errno::EPROTONOSUPPORT when given an invalid address family 1875s 1875s UDPSocket#inspect 1875s - returns a String with the fd, family, address and port 1875s 1875s UDPSocket#local_address using IPv4 using an explicit hostname 1875s - returns an Addrinfo 1875s 1875s UDPSocket#local_address using IPv4 using an explicit hostname the returned Addrinfo 1875s - uses the correct address family 1875s - uses the correct protocol family 1875s - uses SOCK_DGRAM as the socket type 1875s - uses the correct IP address 1875s - uses a randomly assigned local port 1875s 1875s UDPSocket#local_address using IPv4 using an implicit hostname the returned Addrinfo 1875s - uses the correct IP address 1875s 1875s UDPSocket#local_address using IPv6 using an explicit hostname 1875s - returns an Addrinfo 1875s 1875s UDPSocket#local_address using IPv6 using an explicit hostname the returned Addrinfo 1875s - uses the correct address family 1875s - uses the correct protocol family 1875s - uses SOCK_DGRAM as the socket type 1875s - uses the correct IP address 1875s - uses a randomly assigned local port 1875s 1875s UDPSocket#local_address using IPv6 using an implicit hostname the returned Addrinfo 1875s - uses the correct IP address 1875s 1875s UDPSocket.new 1875s - without arguments 1875s - using Integer argument 1875s - using Symbol argument 1875s - using String argument 1875s - does not use the given block and warns to use UDPSocket::open 1875s - raises Errno::EAFNOSUPPORT or Errno::EPROTONOSUPPORT if unsupported family passed 1875s 1875s UDPSocket.open 1875s - allows calls to open without arguments 1875s 1875s UDPSocket#recvfrom_nonblock using IPv4 using an unbound socket 1875s - raises IO::WaitReadable 1875s 1875s UDPSocket#recvfrom_nonblock using IPv4 using a bound socket without any data available 1875s - raises IO::WaitReadable 1875s - returns :wait_readable with exception: false 1875s 1875s UDPSocket#recvfrom_nonblock using IPv4 using a bound socket with data available 1875s - returns an Array containing the data and an Array 1875s - writes the data to the buffer when one is present 1875s 1875s UDPSocket#recvfrom_nonblock using IPv4 using a bound socket with data available the returned Array 1875s - contains the data at index 0 1875s - contains an Array at index 1 1875s 1875s UDPSocket#recvfrom_nonblock using IPv4 using a bound socket with data available the returned address Array 1875s - uses the correct address family 1875s - uses the port of the client 1875s - uses the hostname of the client 1875s - uses the IP address of the client 1875s 1875s UDPSocket#recvfrom_nonblock using IPv6 using an unbound socket 1875s - raises IO::WaitReadable 1875s 1875s UDPSocket#recvfrom_nonblock using IPv6 using a bound socket without any data available 1875s - raises IO::WaitReadable 1875s - returns :wait_readable with exception: false 1875s 1875s UDPSocket#recvfrom_nonblock using IPv6 using a bound socket with data available 1875s - returns an Array containing the data and an Array 1875s - writes the data to the buffer when one is present 1875s 1875s UDPSocket#recvfrom_nonblock using IPv6 using a bound socket with data available the returned Array 1875s - contains the data at index 0 1875s - contains an Array at index 1 1875s 1875s UDPSocket#recvfrom_nonblock using IPv6 using a bound socket with data available the returned address Array 1875s - uses the correct address family 1875s - uses the port of the client 1875s 1875s UDPSocket#remote_address using IPv4 using an explicit hostname 1875s - returns an Addrinfo 1875s 1875s UDPSocket#remote_address using IPv4 using an explicit hostname the returned Addrinfo 1875s - uses the correct address family 1875s - uses the correct protocol family 1875s - uses SOCK_DGRAM as the socket type 1875s - uses the correct IP address 1875s - uses the correct port 1875s 1875s UDPSocket#remote_address using IPv4 using an implicit hostname the returned Addrinfo 1875s - uses the correct IP address 1875s 1875s UDPSocket#remote_address using IPv6 using an explicit hostname 1875s - returns an Addrinfo 1875s 1875s UDPSocket#remote_address using IPv6 using an explicit hostname the returned Addrinfo 1875s - uses the correct address family 1875s - uses the correct protocol family 1875s - uses SOCK_DGRAM as the socket type 1875s - uses the correct IP address 1875s - uses the correct port 1875s 1875s UDPSocket#remote_address using IPv6 using an implicit hostname the returned Addrinfo 1875s - uses the correct IP address 1875s 1875s UDPSocket#send 1875s - sends data in ad hoc mode 1875s - sends data in connection mode 1875s - raises EMSGSIZE if data is too too big 1875s 1875s UDPSocket#send using IPv4 using a disconnected socket without a destination address 1875s - raises Errno::EDESTADDRREQ 1875s 1875s UDPSocket#send using IPv4 using a disconnected socket with a destination address as separate arguments 1875s - returns the amount of sent bytes 1875s - does not persist the connection after sending data 1875s 1875s UDPSocket#send using IPv4 using a disconnected socket with a destination address as a single String argument 1875s - returns the amount of sent bytes 1875s 1875s UDPSocket#send using IPv4 using a connected socket without an explicit destination address 1875s - returns the amount of bytes written 1875s 1875s UDPSocket#send using IPv6 using a disconnected socket without a destination address 1875s - raises Errno::EDESTADDRREQ 1875s 1875s UDPSocket#send using IPv6 using a disconnected socket with a destination address as separate arguments 1875s - returns the amount of sent bytes 1875s - does not persist the connection after sending data 1875s 1875s UDPSocket#send using IPv6 using a disconnected socket with a destination address as a single String argument 1875s - returns the amount of sent bytes 1875s 1875s UDPSocket#send using IPv6 using a connected socket without an explicit destination address 1875s - returns the amount of bytes written 1875s 1875s UDPSocket#write 1875s - raises EMSGSIZE if msg is too long 1875s 1875s UNIXServer#accept_nonblock 1875s - accepts a connection in a non-blocking way 1875s - returns a UNIXSocket 1875s - returns :wait_readable in exceptionless mode 1875s 1875s UNIXServer#accept_nonblock without a client 1875s - raises IO::WaitReadable 1875s 1875s UNIXServer#accept_nonblock with a client without any data 1875s - returns a UNIXSocket 1875s 1875s UNIXServer#accept_nonblock with a client with data available 1875s - returns a UNIXSocket 1875s 1875s UNIXServer#accept_nonblock with a client with data available the returned UNIXSocket 1875s - can read the data written 1875s 1875s UNIXServer#accept 1875s - accepts what is written by the client 1875s - can be interrupted by Thread#kill 1875s - can be interrupted by Thread#raise 1875s 1875s UNIXServer#accept without a client 1875s - blocks the calling thread 1875s 1875s UNIXServer#accept with a client without any data 1875s - returns a UNIXSocket 1875s 1875s UNIXServer#accept with a client with data available 1875s - returns a UNIXSocket 1875s 1875s UNIXServer#accept with a client with data available the returned UNIXSocket 1875s - can read the data written 1875s - is set to close on exec 1875s 1875s UNIXServer#initialize 1875s - returns a new UNIXServer 1875s - raises Errno::EADDRINUSE when the socket is already in use 1875s 1875s UNIXServer#listen 1875s - returns 0 1875s 1875s UNIXServer.new 1875s - creates a new UNIXServer 1875s - does not use the given block and warns to use UNIXServer::open 1875s 1875s UNIXServer.open 1875s - creates a new UNIXServer 1875s - yields the new UNIXServer object to the block, if given 1875s 1875s UNIXServer#sysaccept without a client 1875s - blocks the calling thread 1875s 1875s UNIXServer#sysaccept with a client without any data 1875s - returns an Integer 1875s 1875s UNIXServer#sysaccept with a client with data available 1875s - returns an Integer 1875s 1875s UNIXSocket#addr 1875s - returns an array 1875s - returns the address family of this socket in an array 1875s - returns the path of the socket in an array if it's a server 1875s - returns an empty string for path if it's a client 1875s 1875s UNIXSocket#initialize using a non existing path 1875s - raises Errno::ENOENT 1875s 1875s UNIXSocket#initialize using an existing socket path 1875s - returns a new UNIXSocket 1875s - sets the socket path to an empty String 1875s - sets the socket to close on exec 1875s 1875s UNIXSocket#inspect 1875s - returns sockets fd for unnamed sockets 1875s 1875s UNIXSocket#local_address 1875s - returns an Addrinfo 1875s 1875s UNIXSocket#local_address the returned Addrinfo 1875s - uses AF_UNIX as the address family 1875s - uses PF_UNIX as the protocol family 1875s - uses SOCK_STREAM as the socket type 1875s - uses an empty socket path 1875s - uses 0 as the protocol 1875s 1875s UNIXSocket#local_address with a UNIX socket pair 1875s - returns an Addrinfo 1875s 1875s UNIXSocket#local_address with a UNIX socket pair the returned Addrinfo 1875s - uses AF_UNIX as the address family 1875s - uses PF_UNIX as the protocol family 1875s - uses SOCK_STREAM as the socket type 1875s - raises SocketError for #ip_address 1875s - raises SocketError for #ip_port 1875s - uses 0 as the protocol 1875s 1875s UNIXSocket.new 1875s - opens a unix socket on the specified file 1875s - does not use the given block and warns to use UNIXSocket::open 1875s 1875s UNIXSocket.open 1875s - opens a unix socket on the specified file 1875s 1875s UNIXSocket.open 1875s - opens a unix socket on the specified file and yields it to the block 1875s 1875s UNIXSocket.pair 1875s - if the write end is closed then the other side can read past EOF without blocking 1875s - closing the write end ensures that the other side can read until EOF 1875s - returns a pair of connected sockets 1875s - returns sockets with no name 1875s - returns sockets with no address 1875s - returns sockets with no peeraddr 1875s 1875s UNIXSocket partial closability 1875s - if the write end is closed then the other side can read past EOF without blocking 1875s - closing the write end ensures that the other side can read until EOF 1875s 1875s UNIXSocket#path 1875s - returns the path of the socket if it's a server 1875s - returns an empty string for path if it's a client 1875s 1875s UNIXSocket#peeraddr 1875s - returns the address family and path of the server end of the connection 1875s - raises an error in server sockets 1875s 1875s UNIXSocket#recv_io 1875s - reads an IO object across the socket 1875s - takes an optional class to use 1875s 1875s UNIXSocket#recv_io without a custom class 1875s - returns an IO 1875s 1875s UNIXSocket#recv_io with a custom class 1875s - returns an instance of the custom class 1875s 1875s UNIXSocket#recv_io with a custom mode 1875s - opens the IO using the given mode 1875s 1875s UNIXSocket#recvfrom 1875s - receives len bytes from sock 1875s - returns an array with data and information on the sender 1875s 1875s UNIXSocket#recvfrom using a socket pair 1875s - returns an Array containing the data and address information 1875s 1875s UNIXSocket#remote_address 1875s - returns an Addrinfo 1875s 1875s UNIXSocket#remote_address the returned Addrinfo 1875s - uses AF_UNIX as the address family 1875s - uses PF_UNIX as the protocol family 1875s - uses SOCK_STREAM as the socket type 1875s - uses the correct socket path 1875s - uses 0 as the protocol 1875s 1875s UNIXSocket#send_io 1875s - sends the fd for an IO object across the socket 1875s 1875s UNIXSocket#send_io 1875s - sends an IO object 1875s 1875s UNIXSocket.socketpair 1875s - returns two UNIXSockets 1875s - connects the sockets to each other 1875s - sets the socket paths to empty Strings 1875s - sets the socket addresses to empty Strings 1875s - sets the socket peer addresses to empty Strings 1875s 1875s StringIO#<< when passed [Object] 1875s - returns self 1875s - writes the passed argument onto self 1875s - writes the passed argument at the current position 1875s - pads self with \000 when the current position is after the end 1875s - updates self's position 1875s - tries to convert the passed argument to a String using #to_s 1875s 1875s StringIO#<< when self is not writable 1875s - raises an IOError 1875s 1875s StringIO#<< when in append mode 1875s - appends the passed argument to the end of self, ignoring current position 1875s - correctly updates self's position 1875s 1875s StringIO#binmode 1875s - returns self 1875s - changes external encoding to BINARY 1875s - does not set internal encoding 1875s 1875s StringIO#close_read 1875s - returns nil 1875s - prevents further reading 1875s - allows further writing 1875s - raises an IOError when in write-only mode 1875s 1875s StringIO#close 1875s - returns nil 1875s - prevents further reading and/or writing 1875s - does not raise anything when self was already closed 1875s 1875s StringIO#close_write 1875s - returns nil 1875s - prevents further writing 1875s - allows further reading 1875s - raises an IOError when in read-only mode 1875s 1875s StringIO#closed_read? 1875s - returns true if self is not readable 1875s 1875s StringIO#closed? 1875s - returns true if self is completely closed 1875s 1875s StringIO#closed_write? 1875s - returns true if self is not writable 1875s 1875s StringIO#each_byte 1875s - yields each character code in turn 1875s - updates the position before each yield 1875s - does not yield if the current position is out of bounds 1875s - returns self 1875s - returns an Enumerator when passed no block 1875s 1875s StringIO#each_byte when self is not readable 1875s - raises an IOError 1875s 1875s StringIO#each_char 1875s - yields each character code in turn 1875s - returns self 1875s - returns an Enumerator when passed no block 1875s 1875s StringIO#each_char when self is not readable 1875s - raises an IOError 1875s 1875s StringIO#each_codepoint 1875s - returns an Enumerator 1875s - yields each codepoint code in turn 1875s - yields each codepoint starting from the current position 1875s - raises an error if reading invalid sequence 1875s - raises an IOError if not readable 1875s - calls the given block 1875s - returns self 1875s 1875s StringIO#each_line when passed a separator 1875s - uses the passed argument as the line separator 1875s - does not change $_ 1875s - returns self 1875s - tries to convert the passed separator to a String using #to_str 1875s - yields self's content starting from the current position when the passed separator is nil 1875s 1875s StringIO#each_line when passed no arguments 1875s - yields each line to the passed block 1875s - yields each line starting from the current position 1875s - does not change $_ 1875s - uses $/ as the default line separator 1875s - returns self 1875s - returns an Enumerator when passed no block 1875s 1875s StringIO#each_line when self is not readable 1875s - raises an IOError 1875s 1875s StringIO#each_line when passed chomp 1875s - yields each line with removed newline characters to the passed block 1875s - returns each line with removed newline characters when called without block 1875s 1875s StringIO#each_line when passed limit 1875s - returns the data read until the limit is met 1875s 1875s StringIO#each when passed a separator 1875s - uses the passed argument as the line separator 1875s - does not change $_ 1875s - returns self 1875s - tries to convert the passed separator to a String using #to_str 1875s - yields self's content starting from the current position when the passed separator is nil 1875s 1875s StringIO#each when passed no arguments 1875s - yields each line to the passed block 1875s - yields each line starting from the current position 1875s - does not change $_ 1875s - uses $/ as the default line separator 1875s - returns self 1875s - returns an Enumerator when passed no block 1875s 1875s StringIO#each when self is not readable 1875s - raises an IOError 1875s 1875s StringIO#each when passed chomp 1875s - yields each line with removed newline characters to the passed block 1875s - returns each line with removed newline characters when called without block 1875s 1875s StringIO#each when passed chomp 1875s - yields each line with removed separator to the passed block 1875s - returns each line with removed separator when called without block 1875s 1875s StringIO#each when passed limit 1875s - returns the data read until the limit is met 1875s 1875s StringIO#eof? 1875s - returns true when self's position is greater than or equal to self's size 1875s - returns false when self's position is less than self's size 1875s 1875s StringIO#eof 1875s - returns true when self's position is greater than or equal to self's size 1875s - returns false when self's position is less than self's size 1875s 1875s StringIO#external_encoding 1875s - gets the encoding of the underlying String 1875s - changes to match string if string's encoding is changed 1875s - does not set the encoding of its buffer string if the string is frozen 1875s 1875s StringIO#fcntl 1875s - raises a NotImplementedError 1875s 1875s StringIO#fileno 1875s - returns nil 1875s 1875s StringIO#flush 1875s - returns self 1875s 1875s StringIO#fsync 1875s - returns zero 1875s 1875s StringIO#getbyte 1875s - increases self's position by one 1875s - returns nil when called at the end of self 1875s - does not increase self's position when called at the end of file 1875s - returns the 8-bit byte at the current position 1875s 1875s StringIO#getbyte when self is not readable 1875s - raises an IOError 1875s 1875s StringIO#getc 1875s - increases self's position by one 1875s - returns nil when called at the end of self 1875s - does not increase self's position when called at the end of file 1875s - returns the character at the current position 1875s 1875s StringIO#getc when self is not readable 1875s - raises an IOError 1875s 1875s StringIO#getch 1875s - increases self's position by one 1875s - returns nil when called at the end of self 1875s - does not increase self's position when called at the end of file 1875s - returns the character at the current position 1875s - increments #pos by the byte size of the character in multibyte strings 1875s - returns nil at the end of the string 1875s 1875s StringIO#getch StringIO#getch when self is not readable 1875s - raises an IOError 1875s 1875s StringIO#getpass 1875s - is defined by io/console 1875s 1875s StringIO#gets when passed [separator] 1875s - returns the data read till the next occurrence of the passed separator 1875s - sets $_ to the read content 1875s - accepts string as separator 1875s - updates self's lineno by one 1875s - returns the next paragraph when the passed separator is an empty String 1875s - returns the remaining content starting at the current position when passed nil 1875s - tries to convert the passed separator to a String using #to_str 1875s 1875s StringIO#gets when passed no argument 1875s - returns the data read till the next occurrence of $/ or till eof 1875s - sets $_ to the read content 1875s - updates self's position 1875s - updates self's lineno 1875s - returns nil if self is at the end 1875s 1875s StringIO#gets when passed [limit] 1875s - returns the data read until the limit is met 1875s - sets $_ to the read content 1875s - updates self's lineno by one 1875s - tries to convert the passed limit to an Integer using #to_int 1875s - returns a blank string when passed a limit of 0 1875s - ignores it when passed a negative limit 1875s 1875s StringIO#gets when passed [separator] and [limit] 1875s - returns the data read until the limit is consumed or the separator is met 1875s - sets $_ to the read content 1875s - updates self's lineno by one 1875s - tries to convert the passed separator to a String using #to_str 1875s - does not raise TypeError if passed separator is nil 1875s - tries to convert the passed limit to an Integer using #to_int 1875s 1875s StringIO#gets when in write-only mode 1875s - raises an IOError 1875s 1875s StringIO#gets when passed [chomp] 1875s - returns the data read without a trailing newline character 1875s 1875s StringIO#initialize when passed [Object, mode] 1875s - uses the passed Object as the StringIO backend 1875s - sets the mode based on the passed mode 1875s - allows passing the mode as an Integer 1875s - raises a FrozenError when passed a frozen String in truncate mode as StringIO backend 1875s - tries to convert the passed mode to a String using #to_str 1875s - raises an Errno::EACCES error when passed a frozen string with a write-mode 1875s 1875s StringIO#initialize when passed [Object] 1875s - uses the passed Object as the StringIO backend 1875s - sets the mode to read-write 1875s - tries to convert the passed Object to a String using #to_str 1875s - automatically sets the mode to read-only when passed a frozen string 1875s 1875s StringIO#initialize when passed keyword arguments 1875s - sets the mode based on the passed :mode option 1875s 1875s StringIO#initialize when passed keyword arguments and error happens 1875s - raises an error if passed encodings two ways 1875s - raises an error if passed matching binary/text mode two ways 1875s - raises an error if passed conflicting binary/text mode two ways 1875s - raises an error when trying to set both binmode and textmode 1875s 1875s StringIO#initialize when passed no arguments 1875s - is private 1875s - sets the mode to read-write 1875s - uses an empty String as the StringIO backend 1875s 1875s StringIO#initialize sets 1875s - the encoding to Encoding.default_external when passed no arguments 1875s - the encoding to the encoding of the String when passed a String 1875s - the #external_encoding to the encoding of the String when passed a String 1875s 1875s StringIO#inspect 1875s - returns the same as #to_s 1875s - does not include the contents 1875s - uses the regular Object#inspect without any instance variable 1875s 1875s StringIO#internal_encoding 1875s - returns nil 1875s 1875s StringIO#isatty 1875s - returns false 1875s 1875s StringIO#length 1875s - returns the length of the wrapped string 1875s 1875s StringIO#lineno 1875s - returns the number of lines read 1875s 1875s StringIO#lineno= 1875s - sets the current line number, but has no impact on the position 1875s 1875s StringIO.new 1875s - does not use the given block and warns to use StringIO::open 1875s 1875s StringIO.open when passed [Object, mode] 1875s - uses the passed Object as the StringIO backend 1875s - returns the blocks return value when yielding 1875s - yields self to the passed block 1875s - closes self after yielding 1875s - even closes self when an exception is raised while yielding 1875s - sets self's string to nil after yielding 1875s - even sets self's string to nil when an exception is raised while yielding 1875s - sets the mode based on the passed mode 1875s - allows passing the mode as an Integer 1875s - raises a FrozenError when passed a frozen String in truncate mode as StringIO backend 1875s - tries to convert the passed mode to a String using #to_str 1875s - raises an Errno::EACCES error when passed a frozen string with a write-mode 1875s 1875s StringIO.open when passed [Object] 1875s - uses the passed Object as the StringIO backend 1875s - yields self to the passed block 1875s - sets the mode to read-write (r+) 1875s - tries to convert the passed Object to a String using #to_str 1875s - automatically sets the mode to read-only when passed a frozen string 1875s 1875s StringIO.open when passed no arguments 1875s - yields self to the passed block 1875s - sets the mode to read-write (r+) 1875s - uses an empty String as the StringIO backend 1875s 1875s StringIO#path 1875s - is not defined 1875s 1875s StringIO#pid 1875s - returns nil 1875s 1875s StringIO#pos 1875s - returns the current byte offset 1875s 1875s StringIO#pos= 1875s - updates the current byte offset 1875s - raises an EINVAL if given a negative argument 1875s - updates the current byte offset after reaching EOF 1875s 1875s StringIO#print 1875s - prints $_ when passed no arguments 1875s - prints the passed arguments to self 1875s - tries to convert the passed Object to a String using #to_s 1875s - returns nil 1875s - pads self with \000 when the current position is after the end 1875s - honors the output record separator global 1875s - updates the current position 1875s - correctly updates the current position when honoring the output record separator global 1875s 1875s StringIO#print when in append mode 1875s - appends the passed argument to the end of self 1875s - correctly updates self's position 1875s 1875s StringIO#print when self is not writable 1875s - raises an IOError 1875s 1875s StringIO#printf 1875s - returns nil 1875s - pads self with \000 when the current position is after the end 1875s - performs format conversion 1875s - updates the current position 1875s 1875s StringIO#printf formatting 1875s - does not raise error when passed more arguments than needed 1875s 1875s StringIO#printf formatting integer formats 1875s - converts argument into Integer with to_int 1875s - converts argument into Integer with to_i if to_int isn't available 1875s - converts String argument with Kernel#Integer 1875s - raises TypeError exception if cannot convert to Integer 1875s 1875s StringIO#printf formatting integer formats b 1875s - converts argument as a binary number 1875s - displays negative number as a two's complement prefixed with '..1' 1875s - collapse negative number representation if it equals 1 1875s 1875s StringIO#printf formatting integer formats B 1875s - converts argument as a binary number 1875s - displays negative number as a two's complement prefixed with '..1' 1875s - collapse negative number representation if it equals 1 1875s 1875s StringIO#printf formatting integer formats d 1875s - converts argument as a decimal number 1875s - works well with large numbers 1875s 1875s StringIO#printf formatting integer formats i 1875s - converts argument as a decimal number 1875s - works well with large numbers 1875s 1875s StringIO#printf formatting integer formats u 1875s - converts argument as a decimal number 1875s - works well with large numbers 1875s 1875s StringIO#printf formatting integer formats o 1875s - converts argument as an octal number 1875s - displays negative number as a two's complement prefixed with '..7' 1875s - collapse negative number representation if it equals 7 1875s 1875s StringIO#printf formatting integer formats x 1875s - converts argument as a hexadecimal number 1875s - displays negative number as a two's complement prefixed with '..f' 1875s - collapse negative number representation if it equals f 1875s 1875s StringIO#printf formatting integer formats X 1875s - converts argument as a hexadecimal number with uppercase letters 1875s - displays negative number as a two's complement prefixed with '..f' 1875s - collapse negative number representation if it equals F 1875s 1875s StringIO#printf formatting float formats 1875s - converts argument into Float 1875s - raises TypeError exception if cannot convert to Float 1875s 1875s StringIO#printf formatting float formats e 1875s - converts argument into exponential notation [-]d.dddddde[+-]dd 1875s - cuts excessive digits and keeps only 6 ones 1875s - rounds the last significant digit to the closest one 1875s - displays Float::INFINITY as Inf 1875s - displays Float::NAN as NaN 1875s 1875s StringIO#printf formatting float formats E 1875s - converts argument into exponential notation [-]d.dddddde[+-]dd 1875s - cuts excessive digits and keeps only 6 ones 1875s - rounds the last significant digit to the closest one 1875s - displays Float::INFINITY as Inf 1875s - displays Float::NAN as NaN 1875s 1875s StringIO#printf formatting float formats f 1875s - converts floating point argument as [-]ddd.dddddd 1875s - cuts excessive digits and keeps only 6 ones 1875s - rounds the last significant digit to the closest one 1875s - displays Float::INFINITY as Inf 1875s - displays Float::NAN as NaN 1875s 1875s StringIO#printf formatting float formats g 1875s - displays Float::INFINITY as Inf 1875s - displays Float::NAN as NaN 1875s 1875s StringIO#printf formatting float formats g the exponent is less than -4 1875s - converts a floating point number using exponential form 1875s 1875s StringIO#printf formatting float formats g the exponent is greater than or equal to the precision (6 by default) 1875s - converts a floating point number using exponential form 1875s 1875s StringIO#printf formatting float formats g otherwise 1875s - converts a floating point number in dd.dddd form 1875s - cuts excessive digits in fractional part and keeps only 4 ones 1875s - rounds the last significant digit to the closest one in fractional part 1875s - cuts fraction part to have only 6 digits at all 1875s 1875s StringIO#printf formatting float formats G 1875s - displays Float::INFINITY as Inf 1875s - displays Float::NAN as NaN 1875s 1875s StringIO#printf formatting float formats G the exponent is less than -4 1875s - converts a floating point number using exponential form 1875s 1875s StringIO#printf formatting float formats G the exponent is greater than or equal to the precision (6 by default) 1875s - converts a floating point number using exponential form 1875s 1875s StringIO#printf formatting float formats G otherwise 1875s - converts a floating point number in dd.dddd form 1875s - cuts excessive digits in fractional part and keeps only 4 ones 1875s - rounds the last significant digit to the closest one in fractional part 1875s - cuts fraction part to have only 6 digits at all 1875s 1875s StringIO#printf formatting float formats a 1875s - converts floating point argument as [-]0xh.hhhhp[+-]dd 1875s - displays Float::INFINITY as Inf 1875s - displays Float::NAN as NaN 1875s 1875s StringIO#printf formatting float formats A 1875s - converts floating point argument as [-]0xh.hhhhp[+-]dd and use uppercase X and P 1875s - displays Float::INFINITY as Inf 1875s - displays Float::NAN as NaN 1875s 1875s StringIO#printf formatting other formats c 1875s - displays character if argument is a numeric code of character 1875s - displays character if argument is a single character string 1875s - raises ArgumentError if argument is a string of several characters 1875s - raises ArgumentError if argument is an empty string 1875s - raises TypeError if argument is not String or Integer and cannot be converted to them 1875s - raises TypeError if argument is nil 1875s - tries to convert argument to String with to_str 1875s - tries to convert argument to Integer with to_int 1875s - raises TypeError if converting to String with to_str returns non-String 1875s - raises TypeError if converting to Integer with to_int returns non-Integer 1875s 1875s StringIO#printf formatting other formats p 1875s - displays argument.inspect value 1875s 1875s StringIO#printf formatting other formats s 1875s - substitute argument passes as a string 1875s - substitutes '' for nil 1875s - converts argument to string with to_s 1875s - does not try to convert with to_str 1875s - formats a partial substring without including omitted characters 1875s - formats string with precision 1875s - formats string with width 1875s - formats string with width and precision 1875s - formats nil with width 1875s - formats nil with precision 1875s - formats nil with width and precision 1875s - formats multibyte string with precision 1875s - preserves encoding of the format string 1875s 1875s StringIO#printf formatting other formats % 1875s - alone raises an ArgumentError 1875s - is escaped by % 1875s 1875s StringIO#printf formatting flags space applies to numeric formats bBdiouxXeEfgGaA 1875s - leaves a space at the start of non-negative numbers 1875s - does not leave a space at the start of negative numbers 1875s - prevents converting negative argument to two's complement form 1875s - treats several white spaces as one 1875s 1875s StringIO#printf formatting flags (digit)$ 1875s - specifies the absolute argument number for this field 1875s - raises exception if argument number is bigger than actual arguments list 1875s - ignores '-' sign 1875s - raises ArgumentError exception when absolute and relative argument numbers are mixed 1875s 1875s StringIO#printf formatting flags # applies to format o 1875s - increases the precision until the first digit will be `0' if it is not formatted as complements 1875s - does nothing for negative argument 1875s 1875s StringIO#printf formatting flags # applies to formats bBxX 1875s - prefixes the result with 0x, 0X, 0b and 0B respectively for non-zero argument 1875s - does nothing for zero argument 1875s 1875s StringIO#printf formatting flags # applies to formats aAeEfgG 1875s - forces a decimal point to be added, even if no digits follow 1875s - changes format from dd.dddd to exponential form for gG 1875s 1875s StringIO#printf formatting flags # applies to gG 1875s - does not remove trailing zeros 1875s 1875s StringIO#printf formatting flags + applies to numeric formats bBdiouxXaAeEfgG 1875s - adds a leading plus sign to non-negative numbers 1875s - does not use two's complement form for negative numbers for formats bBoxX 1875s 1875s StringIO#printf formatting flags - 1875s - left-justifies the result of conversion if width is specified 1875s 1875s StringIO#printf formatting flags 0 (zero) applies to numeric formats bBdiouxXaAeEfgG and width is specified 1875s - pads with zeros, not spaces 1875s - uses radix-1 when displays negative argument as a two's complement 1875s 1875s StringIO#printf formatting flags * 1875s - uses the previous argument as the field width 1875s - left-justifies the result if width is negative 1875s - uses the specified argument as the width if * is followed by a number and $ 1875s - left-justifies the result if specified with $ argument is negative 1875s - raises ArgumentError when is mixed with width 1875s 1875s StringIO#printf formatting width 1875s - specifies the minimum number of characters that will be written to the result 1875s - is ignored if argument's actual length is greater 1875s 1875s StringIO#printf formatting precision integer types 1875s - controls the number of decimal places displayed 1875s 1875s StringIO#printf formatting precision float types 1875s - controls the number of decimal places displayed in fraction part 1875s - does not affect G format 1875s 1875s StringIO#printf formatting precision string formats 1875s - determines the maximum number of characters to be copied from the string 1875s 1875s StringIO#printf formatting reference by name %s style 1875s - uses value passed in a hash argument 1875s - supports flags, width, precision and type 1875s - allows to place name in any position 1875s - cannot be mixed with unnamed style 1875s 1875s StringIO#printf formatting reference by name %{name} style 1875s - uses value passed in a hash argument 1875s - does not support type style 1875s - supports flags, width and precision 1875s - cannot be mixed with unnamed style 1875s - raises KeyError when there is no matching key 1875s - converts value to String with to_s 1875s 1875s StringIO#printf formatting faulty key 1875s - raises a KeyError 1875s - sets the Hash as the receiver of KeyError 1875s - sets the unmatched key as the key of KeyError 1875s 1875s StringIO#printf when in read-write mode 1875s - starts from the beginning 1875s - does not truncate existing string 1875s - correctly updates self's position 1875s 1875s StringIO#printf when in append mode 1875s - appends the passed argument to the end of self 1875s - correctly updates self's position 1875s 1875s StringIO#printf when self is not writable 1875s - raises an IOError 1875s 1875s StringIO#putc when passed [String] 1875s - overwrites the character at the current position 1875s - only writes the first character from the passed String 1875s - returns the passed String 1875s - correctly updates the current position 1875s - handles concurrent writes correctly 1875s 1875s StringIO#putc when passed [Object] 1875s - it writes the passed Integer % 256 to self 1875s - pads self with \000 when the current position is after the end 1875s - tries to convert the passed argument to an Integer using #to_int 1875s - raises a TypeError when the passed argument can't be coerced to Integer 1875s 1875s StringIO#putc when in append mode 1875s - appends to the end of self 1875s 1875s StringIO#putc when self is not writable 1875s - raises an IOError 1875s 1875s StringIO#puts when passed an Array 1875s - writes each element of the passed Array to self, separated by a newline 1875s - flattens nested Arrays 1875s - handles self-recursive arrays correctly 1875s - does not honor the global output record separator $\ 1875s - first tries to convert each Array element to an Array using #to_ary 1875s - then tries to convert each Array element to a String using #to_s 1875s - returns general object info if :to_s does not return a string 1875s 1875s StringIO#puts when passed 1 or more objects 1875s - does not honor the global output record separator $\ 1875s - does not put a \n after each Objects that end in a newline 1875s - first tries to convert each Object to an Array using #to_ary 1875s - then tries to convert each Object to a String using #to_s 1875s - prints a newline when passed an empty string 1875s - handles concurrent writes correctly 1875s 1875s StringIO#puts when passed no arguments 1875s - returns nil 1875s - prints a newline 1875s - does not honor the global output record separator $\ 1875s 1875s StringIO#puts when in append mode 1875s - appends the passed argument to the end of self 1875s - correctly updates self's position 1875s 1875s StringIO#puts when self is not writable 1875s - raises an IOError 1875s 1875s StringIO#puts when passed an encoded string 1875s - stores the bytes unmodified 1875s 1875s StringIO#read_nonblock when passed length, buffer 1875s - returns the passed buffer String 1875s - reads length bytes and writes them to the buffer String 1875s - tries to convert the passed buffer Object to a String using #to_str 1875s - raises a TypeError when the passed buffer Object can't be converted to a String 1875s - raises a FrozenError error when passed a frozen String as buffer 1875s - accepts :exception option 1875s 1875s StringIO#read_nonblock when passed length 1875s - reads length bytes from the current position and returns them 1875s - reads at most the whole content 1875s - correctly updates the position 1875s - tries to convert the passed length to an Integer using #to_int 1875s - raises a TypeError when the passed length can't be converted to an Integer 1875s - raises a TypeError when the passed length is negative 1875s - returns a binary String 1875s - accepts :exception option 1875s 1875s StringIO#read_nonblock when passed nil 1875s - returns the remaining content from the current position 1875s - updates the current position 1875s 1875s StringIO#read_nonblock when passed length 1875s - returns an empty String when passed 0 and no data remains 1875s - raises an EOFError when passed length > 0 and no data remains 1875s 1875s StringIO#read_nonblock 1875s - accepts an exception option 1875s 1875s StringIO#read_nonblock when exception option is set to false when the end is reached 1875s - returns nil 1875s 1875s StringIO#read when passed length, buffer 1875s - returns the passed buffer String 1875s - reads length bytes and writes them to the buffer String 1875s - tries to convert the passed buffer Object to a String using #to_str 1876s - raises a TypeError when the passed buffer Object can't be converted to a String 1876s - raises a FrozenError error when passed a frozen String as buffer 1876s 1876s StringIO#read when passed [length] 1876s - reads length bytes from the current position and returns them 1876s - reads at most the whole content 1876s - correctly updates the position 1876s - tries to convert the passed length to an Integer using #to_int 1876s - raises a TypeError when the passed length can't be converted to an Integer 1876s - raises a TypeError when the passed length is negative 1876s - returns a binary String 1876s 1876s StringIO#read when passed no arguments 1876s - reads the whole content starting from the current position 1876s - correctly updates the current position 1876s - correctly update the current position in bytes when multi-byte characters are used 1876s - returns an empty string if at EOF 1876s 1876s StringIO#read when passed nil 1876s - returns the remaining content from the current position 1876s - updates the current position 1876s - returns an empty string if at EOF 1876s 1876s StringIO#read when self is not readable 1876s - raises an IOError 1876s 1876s StringIO#read when passed [length] 1876s - returns nil when self's position is at the end 1876s - returns an empty String when length is 0 1876s 1876s StringIO#read when passed length and a buffer 1876s - reads [length] characters into the buffer 1876s 1876s StringIO#readbyte 1876s - correctly updates the current position 1876s - raises an EOFError when self is at the end 1876s - reads the next 8-bit byte from self's current position 1876s 1876s StringIO#readbyte when self is not readable 1876s - raises an IOError 1876s 1876s StringIO#readchar 1876s - correctly updates the current position 1876s - raises an EOFError when self is at the end 1876s - reads the next 8-bit byte from self's current position 1876s 1876s StringIO#readchar when self is not readable 1876s - raises an IOError 1876s 1876s StringIO#readline when passed [separator] 1876s - returns the data read till the next occurrence of the passed separator 1876s - sets $_ to the read content 1876s - updates self's lineno by one 1876s - returns the next paragraph when the passed separator is an empty String 1876s - returns the remaining content starting at the current position when passed nil 1876s - tries to convert the passed separator to a String using #to_str 1876s 1876s StringIO#readline when passed no argument 1876s - returns the data read till the next occurrence of $/ or till eof 1876s - sets $_ to the read content 1876s - updates self's position 1876s - updates self's lineno 1876s - raises an IOError if self is at the end 1876s 1876s StringIO#readline when in write-only mode 1876s - raises an IOError 1876s 1876s StringIO#readline when passed [chomp] 1876s - returns the data read without a trailing newline character 1876s 1876s StringIO#readline when passed [limit] 1876s - returns the data read until the limit is met 1876s - returns a blank string when passed a limit of 0 1876s - ignores it when the limit is negative 1876s 1876s StringIO#readlines when passed [separator] 1876s - returns an Array containing lines based on the passed separator 1876s - updates self's position based on the number of read bytes 1876s - updates self's lineno based on the number of read lines 1876s - does not change $_ 1876s - returns an Array containing all paragraphs when the passed separator is an empty String 1876s - returns the remaining content as one line starting at the current position when passed nil 1876s - tries to convert the passed separator to a String using #to_str 1876s 1876s StringIO#readlines when passed no argument 1876s - returns an Array containing lines based on $/ 1876s - updates self's position based on the number of read bytes 1876s - updates self's lineno based on the number of read lines 1876s - does not change $_ 1876s - returns an empty Array when self is at the end 1876s 1876s StringIO#readlines when in write-only mode 1876s - raises an IOError 1876s 1876s StringIO#readlines when passed [chomp] 1876s - returns the data read without a trailing newline character 1876s 1876s StringIO#readlines when passed [limit] 1876s - returns the data read until the limit is met 1876s - raises ArgumentError when limit is 0 1876s - ignores it when the limit is negative 1876s 1876s StringIO#readpartial 1876s - raises IOError on closed stream 1876s - reads at most the specified number of bytes 1876s - reads after ungetc with data in the buffer 1876s - reads after ungetc without data in the buffer 1876s - discards the existing buffer content upon successful read 1876s - raises EOFError on EOF 1876s - discards the existing buffer content upon error 1876s - raises IOError if the stream is closed 1876s - raises ArgumentError if the negative argument is provided 1876s - immediately returns an empty string if the length argument is 0 1876s 1876s StringIO#reopen when passed [Object, Integer] 1876s - reopens self with the passed Object in the passed mode 1876s - tries to convert the passed Object to a String using #to_str 1876s - raises a TypeError when the passed Object can't be converted to a String 1876s - raises an Errno::EACCES when trying to reopen self with a frozen String in write-mode 1876s - raises a FrozenError when trying to reopen self with a frozen String in truncate-mode 1876s - does not raise IOError when passed a frozen String in read-mode 1876s 1876s StringIO#reopen when passed [Object, Object] 1876s - reopens self with the passed Object in the passed mode 1876s - truncates the passed String when opened in truncate mode 1876s - tries to convert the passed Object to a String using #to_str 1876s - raises a TypeError when the passed Object can't be converted to a String using #to_str 1876s - resets self's position to 0 1876s - resets self's line number to 0 1876s - tries to convert the passed mode Object to an Integer using #to_str 1876s - raises an Errno::EACCES error when trying to reopen self with a frozen String in write-mode 1876s - does not raise IOError if a frozen string is passed in read mode 1876s 1876s StringIO#reopen when passed [String] 1876s - reopens self with the passed String in read-write mode 1876s - resets self's position to 0 1876s - resets self's line number to 0 1876s 1876s StringIO#reopen when passed [Object] 1876s - raises a TypeError when passed an Object that can't be converted to a StringIO 1876s - does not try to convert the passed Object to a String using #to_str 1876s - tries to convert the passed Object to a StringIO using #to_strio 1876s 1876s StringIO#reopen when passed no arguments 1876s - resets self's mode to read-write 1876s - resets self's position to 0 1876s - resets self's line number to 0 1876s 1876s StringIO#reopen 1876s - reopens a stream when given a String argument 1876s - reopens a stream in append mode when flagged as such 1876s - reopens and truncate when reopened in write mode 1876s - truncates the given string, not a copy 1876s - does not truncate the content even when the StringIO argument is in the truncate mode 1876s 1876s StringIO#rewind 1876s - returns 0 1876s - resets the position 1876s - resets the line number 1876s 1876s StringIO#seek 1876s - seeks from the current position when whence is IO::SEEK_CUR 1876s - seeks from the end of self when whence is IO::SEEK_END 1876s - seeks to an absolute position when whence is IO::SEEK_SET 1876s - raises an Errno::EINVAL error on negative amounts when whence is IO::SEEK_SET 1876s - raises an Errno::EINVAL error on incorrect whence argument 1876s - tries to convert the passed Object to a String using #to_int 1876s - raises a TypeError when the passed Object can't be converted to an Integer 1876s 1876s StringIO#seek when self is closed 1876s - raises an IOError 1876s 1876s StringIO#set_encoding 1876s - sets the encoding of the underlying String if the String is not frozen 1876s - does not set the encoding of the underlying String if the String is frozen 1876s - accepts a String 1876s 1876s StringIO#size 1876s - returns the length of the wrapped string 1876s 1876s StringIO#string 1876s - returns the underlying string 1876s 1876s StringIO#string= 1876s - returns the passed String 1876s - changes the underlying string 1876s - resets the position 1876s - resets the line number 1876s - tries to convert the passed Object to a String using #to_str 1876s - raises a TypeError when the passed Object can't be converted to an Integer 1876s 1876s StringIO 1876s - includes the Enumerable module 1876s 1876s StringIO#sync 1876s - returns true 1876s 1876s StringIO#sync= 1876s - does not change 'sync' status 1876s 1876s StringIO#sysread when passed length, buffer 1876s - returns the passed buffer String 1876s - reads length bytes and writes them to the buffer String 1876s - tries to convert the passed buffer Object to a String using #to_str 1876s - raises a TypeError when the passed buffer Object can't be converted to a String 1876s - raises a FrozenError error when passed a frozen String as buffer 1876s 1876s StringIO#sysread when passed [length] 1876s - reads length bytes from the current position and returns them 1876s - reads at most the whole content 1876s - correctly updates the position 1876s - tries to convert the passed length to an Integer using #to_int 1876s - raises a TypeError when the passed length can't be converted to an Integer 1876s - raises a TypeError when the passed length is negative 1876s - returns a binary String 1876s 1876s StringIO#sysread when passed no arguments 1876s - reads the whole content starting from the current position 1876s - correctly updates the current position 1876s - correctly update the current position in bytes when multi-byte characters are used 1876s - returns an empty String if at EOF 1876s 1876s StringIO#sysread when self is not readable 1876s - raises an IOError 1876s 1876s StringIO#sysread when passed nil 1876s - returns the remaining content from the current position 1876s - updates the current position 1876s - returns an empty String if at EOF 1876s 1876s StringIO#sysread when passed [length] 1876s - raises an EOFError when self's position is at the end 1876s - returns an empty String when length is 0 1876s 1876s StringIO#syswrite when passed [Object] 1876s - tries to convert the passed Object to a String using #to_s 1876s 1876s StringIO#syswrite when passed [String] 1876s - writes the passed String at the current buffer position 1876s - pads self with \000 when the current position is after the end 1876s - returns the number of bytes written 1876s - updates self's position 1876s - handles concurrent writes correctly 1876s - handles writing non-ASCII UTF-8 after seek 1876s - handles writing with position < buffer size 1876s - transcodes the given string when the external encoding is set and neither is BINARY 1876s - does not transcode the given string when the external encoding is set and the string encoding is BINARY 1876s 1876s StringIO#syswrite when self is not writable 1876s - raises an IOError 1876s 1876s StringIO#syswrite when in append mode 1876s - appends the passed argument to the end of self 1876s - correctly updates self's position 1876s 1876s StringIO#tell 1876s - returns the current byte offset 1876s 1876s StringIO#truncate when passed [length] 1876s - returns an Integer 1876s - truncated the underlying string down to the passed length 1876s - does not create a copy of the underlying string 1876s - does not change the position 1876s - can grow a string to a larger size, padding it with \000 1876s - raises an Errno::EINVAL when the passed length is negative 1876s - tries to convert the passed length to an Integer using #to_int 1876s - raises a TypeError when the passed length can't be converted to an Integer 1876s 1876s StringIO#truncate when self is not writable 1876s - raises an IOError 1876s 1876s StringIO#tty? 1876s - returns false 1876s 1876s StringIO#ungetbyte 1876s - ungets a single byte from a string starting with a single byte character 1876s - ungets a single byte from a string in the middle of a multibyte character 1876s - constrains the value of a numeric argument to a single byte 1876s - ungets the bytes of a string if given a string as an argument 1876s 1876s StringIO#ungetc when passed [char] 1876s - writes the passed char before the current position 1876s - returns nil 1876s - decreases the current position by one 1876s - pads with \000 when the current position is after the end 1876s - tries to convert the passed argument to an String using #to_str 1876s - raises a TypeError when the passed length can't be converted to an Integer or String 1876s 1876s StringIO#ungetc when self is not readable 1876s - raises an IOError 1876s 1876s StringIO#write_nonblock when passed [Object] 1876s - tries to convert the passed Object to a String using #to_s 1876s 1876s StringIO#write_nonblock when passed [String] 1876s - writes the passed String at the current buffer position 1876s - pads self with \000 when the current position is after the end 1876s - returns the number of bytes written 1876s - updates self's position 1876s - handles concurrent writes correctly 1876s - handles writing non-ASCII UTF-8 after seek 1876s - handles writing with position < buffer size 1876s - transcodes the given string when the external encoding is set and neither is BINARY 1876s - does not transcode the given string when the external encoding is set and the string encoding is BINARY 1876s - accepts :exception option 1876s 1876s StringIO#write_nonblock when self is not writable 1876s - raises an IOError 1876s 1876s StringIO#write_nonblock when in append mode 1876s - appends the passed argument to the end of self 1876s - correctly updates self's position 1876s 1876s StringIO#write when passed [Object] 1876s - tries to convert the passed Object to a String using #to_s 1876s 1876s StringIO#write when passed [String] 1876s - writes the passed String at the current buffer position 1876s - pads self with \000 when the current position is after the end 1876s - returns the number of bytes written 1876s - updates self's position 1876s - handles concurrent writes correctly 1876s - handles writing non-ASCII UTF-8 after seek 1876s - handles writing with position < buffer size 1876s - transcodes the given string when the external encoding is set and neither is BINARY 1876s - does not transcode the given string when the external encoding is set and the string encoding is BINARY 1876s 1876s StringIO#write when self is not writable 1876s - raises an IOError 1876s 1876s StringIO#write when in append mode 1876s - appends the passed argument to the end of self 1876s - correctly updates self's position 1876s 1876s StringScanner#<< 1876s - concatenates the given argument to self and returns self 1876s - raises a TypeError if the given argument can't be converted to a String 1876s 1876s StringScanner#<< when passed an Integer 1876s - raises a TypeError 1876s - doesn't call to_int on the argument 1876s 1876s StringScanner#beginning_of_line? 1876s - returns true if the scan pointer is at the beginning of the line, false otherwise 1876s - returns true if the scan pointer is at the end of the line of an empty string. 1876s 1876s StringScanner#bol? 1876s - returns true if the scan pointer is at the beginning of the line, false otherwise 1876s - returns true if the scan pointer is at the end of the line of an empty string. 1876s 1876s StringScanner#check 1876s - returns the value that scan would return, without advancing the scan pointer 1876s - treats String as the pattern itself 1876s 1876s StringScanner#check_until 1876s - returns the same value of scan_until, but don't advances the scan pointer 1876s - raises TypeError if given a String 1876s 1876s StringScanner#clear 1876s - set the scan pointer to the end of the string and clear matching data. 1876s - warns in verbose mode that the method is obsolete 1876s 1876s StringScanner#concat 1876s - concatenates the given argument to self and returns self 1876s - raises a TypeError if the given argument can't be converted to a String 1876s 1876s StringScanner#concat when passed an Integer 1876s - raises a TypeError 1876s - doesn't call to_int on the argument 1876s 1876s StringScanner#dup 1876s - copies the passed StringScanner's content to self 1876s - copies the passed StringScanner's position to self 1876s - copies previous match state 1876s - copies the passed StringScanner scan pointer to self 1876s 1876s StringScanner#[] 1876s - returns nil if there is no current match 1876s - returns the n-th subgroup in the most recent match 1876s - returns nil if index is outside of self 1876s - calls to_int on the given index 1876s - raises a TypeError if the given index is nil 1876s - raises a TypeError when a Range is as argument 1876s - raises a IndexError when there's no named capture 1876s - returns named capture 1876s 1876s StringScanner#empty? 1876s - returns true if the scan pointer is at the end of the string 1876s - returns false if the scan pointer is not at the end of the string 1876s - warns in verbose mode that the method is obsolete 1876s 1876s StringScanner#eos? 1876s - returns true if the scan pointer is at the end of the string 1876s - returns false if the scan pointer is not at the end of the string 1876s 1876s StringScanner#exist? 1876s - returns the index of the first occurrence of the given pattern 1876s - returns 0 if the pattern is empty 1876s - returns nil if the pattern isn't found in the string 1876s - raises TypeError if given a String 1876s 1876s StringScanner#get_byte 1876s - scans one byte and returns it 1876s - is not multi-byte character sensitive 1876s - returns nil at the end of the string 1876s 1876s StringScanner#getbyte 1876s - scans one byte and returns it 1876s - is not multi-byte character sensitive 1876s - returns nil at the end of the string 1876s - warns in verbose mode that the method is obsolete 1876s - returns an instance of String when passed a String subclass 1876s 1876s StringScanner#getch 1876s - scans one character and returns it 1876s - is multi-byte character sensitive 1876s - returns nil at the end of the string 1876s - returns an instance of String when passed a String subclass 1876s 1876s StringScanner#initialize 1876s - is a private method 1876s - returns an instance of StringScanner 1876s - converts the argument into a string using #to_str 1876s 1876s StringScanner#inspect 1876s - returns a String object 1876s - returns a string that represents the StringScanner object 1876s 1876s StringScanner#match? 1876s - returns the length of the match and the scan pointer is not advanced 1876s - returns nil if there's no match 1876s - effects pre_match 1876s 1876s StringScanner#matched_size 1876s - returns the size of the most recent match 1876s - returns nil if there was no recent match 1876s 1876s StringScanner#matched 1876s - returns the last matched string 1876s - returns nil if there's no match 1876s - returns an instance of String when passed a String subclass 1876s 1876s StringScanner#matched? 1876s - returns true if the last match was successful 1876s - returns false if there's no match 1876s 1876s StringScanner.must_C_version 1876s - returns self 1876s 1876s StringScanner#peek 1876s - returns at most the specified number of bytes from the current position 1876s - returns an empty string when the passed argument is zero 1876s - raises a ArgumentError when the passed argument is negative 1876s - raises a RangeError when the passed argument is a Bignum 1876s - returns an instance of String when passed a String subclass 1876s 1876s StringScanner#peep 1876s - returns at most the specified number of bytes from the current position 1876s - returns an empty string when the passed argument is zero 1876s - raises a ArgumentError when the passed argument is negative 1876s - raises a RangeError when the passed argument is a Bignum 1876s - returns an instance of String when passed a String subclass 1876s - warns in verbose mode that the method is obsolete 1876s 1876s StringScanner#pointer 1876s - returns the position of the scan pointer 1876s - returns 0 in the reset position 1876s - returns the length of the string in the terminate position 1876s 1876s StringScanner#pointer= 1876s - modify the scan pointer 1876s - positions from the end if the argument is negative 1876s - raises a RangeError if position too far backward 1876s - raises a RangeError when the passed argument is out of range 1876s 1876s StringScanner#pos 1876s - returns the position of the scan pointer 1876s - returns 0 in the reset position 1876s - returns the length of the string in the terminate position 1876s 1876s StringScanner#pos= 1876s - modify the scan pointer 1876s - positions from the end if the argument is negative 1876s - raises a RangeError if position too far backward 1876s - raises a RangeError when the passed argument is out of range 1876s 1876s StringScanner#post_match 1876s - returns the post-match (in the regular expression sense) of the last scan 1876s - returns nil if there's no match 1876s - returns an instance of String when passed a String subclass 1876s 1876s StringScanner#pre_match 1876s - returns the pre-match (in the regular expression sense) of the last scan 1876s - returns nil if there's no match 1876s - is more than just the data from the last match 1876s - is not changed when the scanner's position changes 1876s - returns an instance of String when passed a String subclass 1876s 1876s StringScanner#reset 1876s - reset the scan pointer and clear matching data 1876s 1876s StringScanner#rest_size 1876s - returns the length of the rest of the string 1876s - is equivalent to rest.size 1876s 1876s StringScanner#rest 1876s - returns the rest of the string 1876s - returns self in the reset position 1876s - returns an empty string in the terminate position 1876s - returns an instance of String when passed a String subclass 1876s 1876s StringScanner#rest? 1876s - returns true if there is more data in the string 1876s - returns false if there is no more data in the string 1876s - is the opposite of eos? 1876s 1876s StringScanner#restsize 1876s - returns the length of the rest of the string 1876s - is equivalent to rest.size 1876s - warns in verbose mode that the method is obsolete 1876s 1876s StringScanner#scan_full 1876s - returns the number of bytes advanced 1876s - returns the number of bytes advanced and advances the scan pointer if the second argument is true 1876s - returns the matched string if the third argument is true 1876s - returns the matched string if the third argument is true and advances the scan pointer if the second argument is true 1876s 1876s StringScanner#scan 1876s - returns the matched string 1876s - treats ^ as matching from the beginning of the current position 1876s - treats ^ as matching from the beginning of the current position when it's not the first character in the regexp 1876s - treats \A as matching from the beginning of the current position 1876s - treats \A as matching from the beginning of the current position when it's not the first character in the regexp 1876s - returns nil if there's no match 1876s - returns nil when there is no more to scan 1876s - returns an empty string when the pattern matches empty 1876s - treats String as the pattern itself 1876s - raises a TypeError if pattern isn't a Regexp nor String 1876s 1876s StringScanner#scan with fixed_anchor: true 1876s - returns the matched string 1876s - treats ^ as matching from the beginning of line 1876s - treats \A as matching from the beginning of string 1876s 1876s StringScanner#scan_until 1876s - returns the substring up to and including the end of the match 1876s - returns nil if there's no match 1876s - can match anchors properly 1876s - raises TypeError if given a String 1876s 1876s StringScanner#search_full 1876s - returns the number of bytes advanced 1876s - returns the number of bytes advanced and advances the scan pointer if the second argument is true 1876s - returns the matched string if the third argument is true 1876s - returns the matched string if the third argument is true and advances the scan pointer if the second argument is true 1876s - raises TypeError if given a String 1876s 1876s StringScanner#size 1876s - returns the number of captures groups of the last match 1876s - returns nil if there is no last match 1876s 1876s StringScanner#skip 1876s - returns length of the match 1876s - returns nil if there's no match 1876s 1876s StringScanner#skip_until 1876s - returns the number of bytes advanced and advances the scan pointer until pattern is matched and consumed 1876s - returns nil if no match was found 1876s - raises TypeError if given a String 1876s 1876s StringScanner#string 1876s - returns the string being scanned 1876s - returns the identical object passed in 1876s 1876s StringScanner#string= 1876s - changes the string being scanned to the argument and resets the scanner 1876s - converts the argument into a string using #to_str 1876s 1876s StringScanner#terminate 1876s - set the scan pointer to the end of the string and clear matching data. 1876s 1876s StringScanner#unscan 1876s - set the scan pointer to the previous position 1876s - remember only one previous position 1876s - raises a ScanError when the previous match had failed 1876s 1876s Syslog.alert 1876s - logs a message 1876s - accepts sprintf arguments 1876s - works as an alias for Syslog.log 1876s 1876s Syslog.close 1876s - closes the log 1876s - raises a RuntimeError if the log's already closed 1876s - it does not work inside blocks 1876s - sets the identity to nil 1876s - sets the options to nil 1876s - sets the facility to nil 1876s 1876s Syslog::Constants 1876s - includes the Syslog constants 1876s 1876s Syslog.crit 1876s - logs a message 1876s - accepts sprintf arguments 1876s - works as an alias for Syslog.log 1876s 1876s Syslog.debug 1876s - logs a message 1876s - accepts sprintf arguments 1876s - works as an alias for Syslog.log 1876s 1876s Syslog.err 1876s - logs a message 1876s - accepts sprintf arguments 1876s - works as an alias for Syslog.log 1876s 1876s Syslog.facility 1876s - returns the logging facility 1876s - returns nil if the log is closed 1876s - defaults to LOG_USER 1876s - resets after each open call 1876s 1876s Syslog.ident 1876s - returns the logging identity 1876s - returns nil if the log is closed 1876s - defaults to $0 1876s 1876s Syslog.info 1876s - logs a message 1876s - accepts sprintf arguments 1876s - works as an alias for Syslog.log 1876s 1876s Syslog.inspect 1876s - returns a string a closed log 1876s - returns a string for an opened log 1876s - includes the ident, options, facility and mask 1876s 1876s Syslog.instance 1876s - returns the module 1876s 1876s Syslog.log 1876s - receives a priority as first argument 1876s - accepts undefined priorities 1876s - fails if the log is closed 1876s - accepts printf parameters 1876s 1876s Syslog.mask 1876s - returns the log priority mask 1876s - defaults to 255 1876s - returns nil if the log is closed 1876s 1876s Syslog.mask= 1876s - sets the log priority mask 1876s 1876s Syslog.notice 1876s - logs a message 1876s - accepts sprintf arguments 1876s - works as an alias for Syslog.log 1876s 1876s Syslog.open 1876s - returns the module 1876s - receives an identity as first argument 1876s - defaults the identity to $0 1876s - receives the logging options as second argument 1876s - defaults the logging options to LOG_PID | LOG_CONS 1876s - receives a facility as third argument 1876s - defaults the facility to LOG_USER 1876s - receives a block and calls it with the module 1876s - closes the log if after it receives a block 1876s 1876s Syslog.opened? 1876s - returns true if the log is opened 1876s - returns false otherwise 1876s - works inside a block 1876s 1876s Syslog.options 1876s - returns the logging options 1876s - returns nil when the log is closed 1876s - defaults to LOG_PID | LOG_CONS 1876s - resets after each open call 1876s 1876s Syslog.reopen 1876s - reopens the log 1876s - fails with RuntimeError if the log is closed 1876s - receives the same parameters as Syslog.open 1876s - returns the module 1876s 1876s Syslog.warning 1876s - logs a message 1876s - accepts sprintf arguments 1876s - works as an alias for Syslog.log 1876s 1876s Tempfile#_close 1876s - is protected 1876s - closes self 1876s 1876s Tempfile.callback 1876s - needs to be reviewed for spec completeness 1876s 1876s Tempfile#close when passed no argument or [false] 1876s - closes self 1876s - does not unlink self 1876s 1876s Tempfile#close when passed [true] 1876s - closes self 1876s - unlinks self 1876s 1876s Tempfile#close! 1876s - closes self 1876s - unlinks self 1876s 1876s Tempfile#delete 1876s - unlinks self 1876s 1876s Tempfile#initialize 1876s - opens a new tempfile with the passed name in the passed directory 1876s - sets the permissions on the tempfile to 0600 1876s - accepts encoding options 1876s - does not try to modify the arguments 1876s 1876s Tempfile#length 1876s - returns the size of self 1876s - returns the size of self even if self is closed 1876s 1876s Tempfile#open 1876s - reopens self 1876s - reopens self in read and write mode and does not truncate 1876s 1876s Tempfile.open 1876s - returns a new, open Tempfile instance 1876s - is passed an array [base, suffix] as first argument 1876s - passes the third argument (options) to open 1876s - uses a blank string for basename when passed no arguments 1876s 1876s Tempfile.open when passed a block 1876s - yields a new, open Tempfile instance to the block 1876s - returns the value of the block 1876s - closes the yielded Tempfile after the block 1876s 1876s Tempfile#path 1876s - returns the path to the tempfile 1876s 1876s Tempfile#size 1876s - returns the size of self 1876s - returns the size of self even if self is closed 1876s 1876s Tempfile#unlink 1876s - unlinks self 1876s 1876s Thread::Queue 1876s - is the same class as ::Queue 1876s 1876s Thread::SizedQueue 1876s - is the same class as ::SizedQueue 1876s 1876s Time.httpdate 1876s - parses RFC-2616 strings 1876s 1876s Time.xmlschema 1876s - parses ISO-8601 strings 1876s 1876s Time.rfc2822 1876s - parses RFC-822 strings 1876s - parses RFC-2822 strings 1876s 1876s Time.rfc822 1876s - parses RFC-822 strings 1876s - parses RFC-2822 strings 1876s 1876s Time#to_date 1876s - yields accurate julian date for ambiguous pre-Gregorian reform value 1876s - yields accurate julian date for Julian-Gregorian gap value 1876s - yields accurate julian date for post-Gregorian reform value 1876s - yields same julian day regardless of UTC time value 1876s - yields same julian day regardless of local time or zone 1876s - yields date with default Calendar reform day 1876s 1876s Time#to_datetime 1876s - returns a DateTime representing the same instant 1876s - roundtrips 1876s - yields a DateTime with the default Calendar reform day 1876s 1876s Time#to_time 1876s - returns itself in the same timezone 1876s 1876s Time.xmlschema 1876s - parses ISO-8601 strings 1876s 1876s Timeout::Error 1876s - is a subclass of RuntimeError 1876s 1876s Timeout.timeout 1877s - raises Timeout::Error when it times out with no specified error type 1878s - raises specified error type when it times out 1879s - raises specified error type with specified message when it times out 1880s - raises specified error type with a default message when it times out if message is nil 1880s - returns back the last value in the block 1880s 1880s Dir.mktmpdir when passed no arguments 1880s - returns the path to the created tmp-dir 1880s - creates a new writable directory in the path provided by Dir.tmpdir 1880s 1880s Dir.mktmpdir when passed a block 1880s - yields the path to the passed block 1880s - creates the tmp-dir before yielding 1880s - removes the tmp-dir after executing the block 1880s - returns the blocks return value 1880s 1880s Dir.mktmpdir when passed [String] 1880s - uses the passed String as a prefix to the tmp-directory 1880s 1880s Dir.mktmpdir when passed [Array] 1880s - uses the first element of the passed Array as a prefix and the second element as a suffix to the tmp-directory 1880s 1880s Dir.mktmpdir when passed [Object] 1880s - raises an ArgumentError 1880s 1880s Dir.tmpdir 1880s - returns the path to a writable and readable directory 1880s 1880s URI.decode_www_form_component 1880s - needs to be reviewed for spec completeness 1880s 1880s URI.decode_www_form 1880s - needs to be reviewed for spec completeness 1880s 1880s URI.encode_www_form_component 1880s - needs to be reviewed for spec completeness 1880s 1880s URI.encode_www_form 1880s - needs to be reviewed for spec completeness 1880s 1880s URI#eql? 1880s - returns false if the normalized forms are different 1880s - returns false for when compared to non-uri objects 1880s 1880s URI#== 1880s - ignores capitalization of host names 1880s - ignores capitalization of scheme 1880s - treats a blank path and a path of '/' as the same 1880s - is case sensitive in all components of the URI but the host and scheme 1880s - differentiates based on port number 1880s - returns false if the normalized forms are different 1880s - returns false for when compared to non-uri objects 1880s 1880s URI::Escape#decode 1880s - needs to be reviewed for spec completeness 1880s 1880s URI::Escape#encode 1880s - needs to be reviewed for spec completeness 1880s 1880s URI::Escape#escape 1880s - needs to be reviewed for spec completeness 1880s 1880s URI::Escape#unescape 1880s - needs to be reviewed for spec completeness 1880s 1880s URI.extract 1880s - behaves according to its documentation 1880s - treats contiguous URIs as a single URI 1880s - treats pretty much anything with a colon as a URI 1880s - wraps a URI string in an array 1880s - pulls a variety of protocol URIs from a string 1880s - pulls all URIs within a string in order into an array when a block is not given 1880s - yields each URI in the given string in order to a block, if given, and returns nil 1880s - allows the user to specify a list of acceptable protocols of URIs to scan for 1880s 1880s URI::FTP.build 1880s - needs to be reviewed for spec completeness 1880s 1880s URI::FTP#merge 1880s - needs to be reviewed for spec completeness 1880s 1880s URI::FTP.new2 1880s - needs to be reviewed for spec completeness 1880s 1880s URI::FTP#path= 1880s - does not require a leading / 1880s - does not strip the leading / 1880s 1880s URI::FTP#path 1880s - unescapes the leading / 1880s 1880s URI::FTP#set_typecode 1880s - needs to be reviewed for spec completeness 1880s 1880s URI::FTP#to_s 1880s - escapes the leading / 1880s 1880s URI::FTP#typecode 1880s - needs to be reviewed for spec completeness 1880s 1880s URI::FTP#typecode= 1880s - needs to be reviewed for spec completeness 1880s 1880s URI::Generic#absolute 1880s - needs to be reviewed for spec completeness 1880s 1880s URI::Generic#absolute? 1880s - needs to be reviewed for spec completeness 1880s 1880s URI::Generic.build2 1880s - needs to be reviewed for spec completeness 1880s 1880s URI::Generic.build 1880s - needs to be reviewed for spec completeness 1880s 1880s URI::Generic#coerce 1880s - needs to be reviewed for spec completeness 1880s 1880s URI::Generic#component_ary 1880s - needs to be reviewed for spec completeness 1880s 1880s URI::Generic#component 1880s - needs to be reviewed for spec completeness 1880s 1880s URI::Generic.component 1880s - needs to be reviewed for spec completeness 1880s 1880s URI::Generic#default_port 1880s - needs to be reviewed for spec completeness 1880s 1880s URI::Generic.default_port 1880s - needs to be reviewed for spec completeness 1880s 1880s URI::Generic#eql? 1880s - needs to be reviewed for spec completeness 1880s 1880s URI::Generic#== 1880s - needs to be reviewed for spec completeness 1880s 1880s URI::Generic#fragment 1880s - needs to be reviewed for spec completeness 1880s 1880s URI::Generic#fragment= 1880s - needs to be reviewed for spec completeness 1880s 1880s URI::Generic#hash 1880s - needs to be reviewed for spec completeness 1880s 1880s URI::Generic#hierarchical? 1880s - needs to be reviewed for spec completeness 1880s 1880s URI::Generic#host 1880s - returns empty string when host is empty 1880s 1880s URI::Generic#host= 1880s - needs to be reviewed for spec completeness 1880s 1880s URI::Generic#inspect 1880s - needs to be reviewed for spec completeness 1880s 1880s URI::Generic#merge 1880s - needs to be reviewed for spec completeness 1880s 1880s URI::Generic#merge! 1880s - needs to be reviewed for spec completeness 1880s 1880s URI::Generic#- 1880s - needs to be reviewed for spec completeness 1880s 1880s URI::Generic#normalize 1880s - needs to be reviewed for spec completeness 1880s 1880s URI::Generic#normalize! 1880s - needs to be reviewed for spec completeness 1880s 1880s URI::Generic#opaque 1880s - needs to be reviewed for spec completeness 1880s 1880s URI::Generic#opaque= 1880s - needs to be reviewed for spec completeness 1880s 1880s URI::Generic#password 1880s - needs to be reviewed for spec completeness 1880s 1880s URI::Generic#password= 1880s - needs to be reviewed for spec completeness 1880s 1880s URI::Generic#path 1880s - needs to be reviewed for spec completeness 1880s 1880s URI::Generic#path= 1880s - needs to be reviewed for spec completeness 1880s 1880s URI::Generic#+ 1880s - needs to be reviewed for spec completeness 1880s 1880s URI::Generic#port 1880s - needs to be reviewed for spec completeness 1880s 1880s URI::Generic#port= 1880s - needs to be reviewed for spec completeness 1880s 1880s URI::Generic#query 1880s - needs to be reviewed for spec completeness 1880s 1880s URI::Generic#query= 1880s - needs to be reviewed for spec completeness 1880s 1880s URI::Generic#registry 1880s - needs to be reviewed for spec completeness 1880s 1880s URI::Generic#registry= 1880s - needs to be reviewed for spec completeness 1880s 1880s URI::Generic#relative? 1880s - needs to be reviewed for spec completeness 1880s 1880s URI::Generic#route_from 1880s - needs to be reviewed for spec completeness 1880s 1880s URI::Generic#route_to 1880s - needs to be reviewed for spec completeness 1880s 1880s URI::Generic#scheme 1880s - needs to be reviewed for spec completeness 1880s 1880s URI::Generic#scheme= 1880s - needs to be reviewed for spec completeness 1880s 1880s URI::Generic#select 1880s - needs to be reviewed for spec completeness 1880s 1880s URI::Generic#set_fragment 1880s - needs to be reviewed for spec completeness 1880s 1880s URI::Generic#set_host 1880s - needs to be reviewed for spec completeness 1880s 1880s URI::Generic#set_opaque 1880s - needs to be reviewed for spec completeness 1880s 1880s URI::Generic#set_password 1880s - needs to be reviewed for spec completeness 1880s 1880s URI::Generic#set_path 1880s - needs to be reviewed for spec completeness 1880s 1880s URI::Generic#set_port 1880s - needs to be reviewed for spec completeness 1880s 1880s URI::Generic#set_query 1880s - needs to be reviewed for spec completeness 1880s 1880s URI::Generic#set_registry 1880s - needs to be reviewed for spec completeness 1880s 1880s URI::Generic#set_scheme 1880s - needs to be reviewed for spec completeness 1880s 1880s URI::Generic#set_user 1880s - needs to be reviewed for spec completeness 1880s 1880s URI::Generic#set_userinfo 1880s - needs to be reviewed for spec completeness 1880s 1880s URI::Generic#to_s 1880s - preserves / characters when host is empty 1880s 1880s URI::Generic.use_registry 1880s - needs to be reviewed for spec completeness 1880s 1880s URI::Generic#user 1880s - needs to be reviewed for spec completeness 1880s 1880s URI::Generic#user= 1880s - needs to be reviewed for spec completeness 1880s 1880s URI::Generic#userinfo 1880s - needs to be reviewed for spec completeness 1880s 1880s URI::Generic#userinfo= 1880s - needs to be reviewed for spec completeness 1880s 1880s URI::HTTP.build 1880s - needs to be reviewed for spec completeness 1880s 1880s URI::HTTP.request_uri 1880s - returns a string of the path + query 1880s - returns '/' if the path of the URI is blank 1880s 1880s URI::HTTP#request_uri 1880s - needs to be reviewed for spec completeness 1880s 1880s URI.join 1880s - returns a URI object of the concatenation of a protocol and domain, and a path 1880s - accepts URI objects 1880s - accepts string-like arguments with to_str 1880s - raises an error if given no argument 1880s - doesn't create redundant '/'s 1880s - discards arguments given before an absolute uri 1880s - resolves .. in paths 1880s 1880s URI::LDAP#attributes 1880s - needs to be reviewed for spec completeness 1880s 1880s URI::LDAP#attributes= 1880s - needs to be reviewed for spec completeness 1880s 1880s URI::LDAP.build 1880s - needs to be reviewed for spec completeness 1880s 1880s URI::LDAP#dn 1880s - needs to be reviewed for spec completeness 1880s 1880s URI::LDAP#dn= 1880s - needs to be reviewed for spec completeness 1880s 1880s URI::LDAP#extensions 1880s - needs to be reviewed for spec completeness 1880s 1880s URI::LDAP#extensions= 1880s - needs to be reviewed for spec completeness 1880s 1880s URI::LDAP#filter 1880s - needs to be reviewed for spec completeness 1880s 1880s URI::LDAP#filter= 1880s - needs to be reviewed for spec completeness 1880s 1880s URI::LDAP#hierarchical? 1880s - needs to be reviewed for spec completeness 1880s 1880s URI::LDAP#scope 1880s - needs to be reviewed for spec completeness 1880s 1880s URI::LDAP#scope= 1880s - needs to be reviewed for spec completeness 1880s 1880s URI::LDAP#set_attributes 1880s - needs to be reviewed for spec completeness 1880s 1880s URI::LDAP#set_dn 1880s - needs to be reviewed for spec completeness 1880s 1880s URI::LDAP#set_extensions 1880s - needs to be reviewed for spec completeness 1880s 1880s URI::LDAP#set_filter 1880s - needs to be reviewed for spec completeness 1880s 1880s URI::LDAP#set_scope 1880s - needs to be reviewed for spec completeness 1880s 1880s URI::Mailto.build 1880s - conforms to the MatzRuby tests 1880s 1880s URI::MailTo#headers 1880s - needs to be reviewed for spec completeness 1880s 1880s URI::MailTo#headers= 1880s - needs to be reviewed for spec completeness 1880s 1880s URI::MailTo#set_headers 1880s - needs to be reviewed for spec completeness 1880s 1880s URI::MailTo#set_to 1880s - needs to be reviewed for spec completeness 1880s 1880s URI::MailTo#to_mailtext 1880s - needs to be reviewed for spec completeness 1880s 1880s URI::MailTo#to_rfc822text 1880s - needs to be reviewed for spec completeness 1880s 1880s URI::MailTo#to_s 1880s - needs to be reviewed for spec completeness 1880s 1880s URI::MailTo#to 1880s - needs to be reviewed for spec completeness 1880s 1880s URI::MailTo#to= 1880s - needs to be reviewed for spec completeness 1880s 1880s URI#merge 1880s - returns the receiver and the argument, joined as per URI.join 1880s - accepts URI objects as argument 1880s - accepts a string-like argument 1880s 1880s URI#normalize 1880s - adds a / onto the end of the URI if the path is blank 1880s - downcases the host of the URI 1880s 1880s URI.parse 1880s - returns a URI::HTTP object when parsing an HTTP URI 1880s - populates the components of a parsed URI::HTTP, setting the port to 80 by default 1880s - parses out the port number of a URI, when given 1880s - returns a URI::HTTPS object when parsing an HTTPS URI 1880s - sets the port of a parsed https URI to 443 by default 1880s - populates the components of a parsed URI::FTP object 1880s - returns a URI::LDAP object when parsing an LDAP URI 1880s - populates the components of a parsed URI::LDAP object 1880s - returns a URI::MailTo object when passed a mailto URI 1880s - populates the components of a parsed URI::MailTo object 1880s - does its best to extract components from URI::Generic objects 1880s - doesn't raise errors on URIs which has underscore in reg_name 1880s 1880s URI::Parser#escape 1880s - needs to be reviewed for spec completeness 1880s 1880s URI::Parser#extract 1880s - behaves according to its documentation 1880s - treats contiguous URIs as a single URI 1880s - treats pretty much anything with a colon as a URI 1880s - wraps a URI string in an array 1880s - pulls a variety of protocol URIs from a string 1880s - pulls all URIs within a string in order into an array when a block is not given 1880s - yields each URI in the given string in order to a block, if given, and returns nil 1880s - allows the user to specify a list of acceptable protocols of URIs to scan for 1880s 1880s URI::Parser#split 1880s - needs to be reviewed for spec completeness 1880s 1880s URI::Parser#join 1880s - returns a URI object of the concatenation of a protocol and domain, and a path 1880s - accepts URI objects 1880s - accepts string-like arguments with to_str 1880s - raises an error if given no argument 1880s - doesn't create redundant '/'s 1880s - discards arguments given before an absolute uri 1880s - resolves .. in paths 1880s 1880s URI::Parser#make_regexp 1880s - needs to be reviewed for spec completeness 1880s 1880s URI::Parser#parse 1880s - returns a URI::HTTP object when parsing an HTTP URI 1880s - populates the components of a parsed URI::HTTP, setting the port to 80 by default 1880s - parses out the port number of a URI, when given 1880s - returns a URI::HTTPS object when parsing an HTTPS URI 1880s - sets the port of a parsed https URI to 443 by default 1880s - populates the components of a parsed URI::FTP object 1880s - returns a URI::LDAP object when parsing an LDAP URI 1880s - populates the components of a parsed URI::LDAP object 1880s - returns a URI::MailTo object when passed a mailto URI 1880s - populates the components of a parsed URI::MailTo object 1880s - does its best to extract components from URI::Generic objects 1880s - raises errors on malformed URIs 1880s 1880s URI::Parser#split 1880s - needs to be reviewed for spec completeness 1880s 1880s URI::Parser#unescape 1880s - needs to be reviewed for spec completeness 1880s 1880s URI#+ 1880s - replaces the end of the path of the URI when added to a string that looks like a relative path 1880s - replaces the entire path of the URI when added to a string that begins with a / 1880s - replaces the entire url when added to a string that looks like a full url 1880s - canonicalizes the URI's path, removing ../'s 1880s - doesn't canonicalize the path when adding to the empty string 1880s - raises a URI::BadURIError when adding two relative URIs 1880s - conforms to the merge specifications from rfc 2396 1880s 1880s URI.regexp 1880s - behaves according to the MatzRuby tests 1880s 1880s URI#route_from 1880s - gives the minimal difference between the current URI and the target 1880s - accepts a string-like argument 1880s 1880s URI#route_to 1880s - gives the minimal difference between the current URI and the target 1880s - accepts a string-like argument 1880s 1880s URI#select 1880s - takes any number of component names as symbols, and returns an array of those components 1880s - returns nil for any valid component that isn't set and doesn't have a default 1880s - raises an ArgumentError if a component is requested that isn't valid under the given scheme 1880s - raises an ArgumentError if given strings rather than symbols 1880s 1880s URI#select 1880s - conforms to the MatzRuby tests 1880s 1880s URI.split 1880s - needs to be reviewed for spec completeness 1880s 1880s the URI method 1880s - parses a given URI, returning a URI object 1880s - converts its argument with to_str 1880s - returns the argument if it is a URI object 1880s - does not add a URI method to Object instances 1880s 1880s URI::Util.make_components_hash 1880s - needs to be reviewed for spec completeness 1880s 1880s WeakRef#__getobj__ 1880s - returns the object if it is reachable 1883s - raises WeakRef::RefError if the object is no longer reachable 1883s 1883s WeakRef#allocate 1883s - assigns nil as the reference 1883s 1883s WeakRef#new 1883s - creates a subclass correctly 1883s 1883s WeakRef#__send__ 1883s - delegates to public methods of the weakly-referenced object 1883s - delegates to protected methods of the weakly-referenced object 1883s - does not delegate to private methods of the weakly-referenced object 1883s 1883s WeakRef#weakref_alive? 1883s - returns true if the object is reachable 1884s - returns a falsy value if the object is no longer reachable 1884s 1884s YAML.dump 1884s - converts an object to YAML and write result to io when io provided 1884s - returns a string containing dumped YAML when no io provided 1884s - returns the same string that #to_yaml on objects 1884s - dumps strings into YAML strings 1884s - dumps hashes into YAML key-values 1884s - dumps Arrays into YAML collection 1884s - dumps an OpenStruct 1884s - dumps a File without any state 1884s 1884s YAML.dump_stream 1884s - returns a YAML stream containing the objects passed 1884s 1884s YAML.load_file 1884s - returns a hash 1884s 1884s YAML.load 1884s - returns a document from current io stream when io provided 1884s - loads strings 1884s - loads strings with chars from non-base Unicode plane 1884s - fails on invalid keys 1884s - accepts symbols 1884s - accepts numbers 1884s - accepts collections 1884s - parses start markers 1884s - works with block sequence shortcuts 1884s - loads a symbol key that contains spaces 1884s 1884s YAML.load_stream 1884s - calls the block on each successive document 1884s - works on files 1884s 1884s YAML.parse_file 1884s - returns a YAML::Syck::Map object after parsing a YAML file 1884s 1884s YAML.parse with an empty string 1884s - returns false 1884s 1884s YAML.parse 1884s - returns the value from the object 1884s 1884s Object#to_yaml 1884s - returns the YAML representation of an Array object 1884s - returns the YAML representation of a Hash object 1884s - returns the YAML representation of an object 1884s - returns the YAML representation of a Class object 1884s - returns the YAML representation of a Module object 1884s - returns the YAML representation of a Date object 1884s - returns the YAML representation of a FalseClass 1884s - returns the YAML representation of a Float object 1884s - returns the YAML representation of an Integer object 1884s - returns the YAML representation of a NilClass object 1884s - returns the YAML representation of a String object 1884s - returns the YAML representation of a Struct object 1884s - returns the YAML representation of an unnamed Struct object 1884s - returns the YAML representation of a Symbol object 1884s - returns the YAML representation of a Time object 1884s - returns the YAML representation of a TrueClass 1884s - returns the YAML representation of a Error object 1884s - returns the YAML representation for Range objects 1884s - returns the YAML representation of numeric constants 1884s - returns the YAML representation of an array of hashes 1884s 1884s YAML.unsafe_load 1884s - returns a document from current io stream when io provided 1884s - loads strings 1884s - loads strings with chars from non-base Unicode plane 1884s - fails on invalid keys 1884s - accepts symbols 1884s - accepts numbers 1884s - accepts collections 1884s - parses start markers 1884s - works with block sequence shortcuts 1884s - loads a symbol key that contains spaces 1884s - works on complex keys 1884s - loads an OpenStruct 1884s - loads a File but raise an error when used as it is uninitialized 1884s 1884s YAML.unsafe_load with iso8601 timestamp 1884s - computes the microseconds 1884s - rounds values smaller than 1 usec to 0 1884s 1884s Zlib.adler32 1884s - calculates Adler checksum for string 1884s - calculates Adler checksum for string and initial Adler value 1884s - calculates the Adler checksum for string and initial Adler value for Integers 1884s - assumes that the initial value is given to adler, if adler is omitted 1884s - it returns the CRC initial value, if string is omitted 1884s 1884s Zlib.crc32 1884s - calculates CRC checksum for string 1884s - calculates CRC checksum for string and initial CRC value 1884s - calculates the CRC checksum for string and initial CRC value for Integers 1884s - assumes that the initial value is given to crc, if crc is omitted 1884s - it returns the CRC initial value, if string is omitted 1884s 1884s Zlib.crc_table 1884s - returns the same value as zlib's get_crc_table() 1884s 1884s Zlib::Deflate.deflate 1884s - deflates some data 1884s - deflates lots of data 1884s 1884s Zlib::Deflate#deflate 1884s - deflates some data 1884s - deflates lots of data 1884s - has a binary encoding 1884s 1884s Zlib::Deflate#deflate without break 1884s - deflates chunked data without errors 1884s 1884s Zlib::Deflate#deflate with break 1884s - deflates chunked data without errors 1884s 1884s Zlib::Deflate#params 1884s - changes the deflate parameters 1884s 1884s Zlib::Deflate#set_dictionary 1884s - sets the dictionary 1884s 1884s Zlib.deflate 1884s - deflates some data 1884s 1884s Zlib.gunzip 1884s - decodes the given gzipped string 1884s 1884s Zlib.gzip 1884s - gzips the given string 1884s 1884s Zlib::GzipFile#close 1884s - finishes the stream and closes the io 1884s 1884s Zlib::GzipFile#closed? 1884s - returns the closed status 1884s 1884s Zlib::GzipFile#comment 1884s - returns the name 1884s - raises an error on a closed stream 1884s 1884s Zlib::GzipFile#orig_name 1884s - returns the name 1884s - raises an error on a closed stream 1884s 1884s Zlib::GzipReader#each_byte 1884s - calls the given block for each byte in the stream, passing the byte as an argument 1884s - returns an enumerator, which yields each byte in the stream, when no block is passed 1884s - increments position before calling the block 1884s 1884s Zlib::GzipReader#each_line 1884s - calls the given block for each line in the stream, passing the line as an argument 1884s - returns an enumerator, which yields each byte in the stream, when no block is passed 1884s - increments position before calling the block 1884s 1884s Zlib::GzipReader#each 1884s - calls the given block for each line in the stream, passing the line as an argument 1884s - returns an enumerator, which yields each byte in the stream, when no block is passed 1884s - increments position before calling the block 1884s 1884s Zlib::GzipReader#eof? 1884s - returns true when at EOF 1884s - returns true when at EOF with the exact length of uncompressed data 1884s - returns true when at EOF with a length greater than the size of uncompressed data 1884s - returns false when at EOF when there's data left in the buffer to read 1884s - does not affect the reading data 1884s 1884s Zlib::GzipReader#getc 1884s - returns the next character from the stream 1884s - increments position 1884s - returns nil at the end of the stream 1884s 1884s Zlib::GzipReader#gets with "" separator 1884s - reads paragraphs skipping newlines 1884s 1884s Zlib::GzipReader#mtime 1884s - returns the timestamp from the Gzip header 1884s 1884s Zlib::GzipReader#pos 1884s - returns the position 1884s 1884s Zlib::GzipReader#read 1884s - with no arguments reads the entire content of a gzip file 1884s - with nil length argument reads the entire content of a gzip file 1884s - reads the contents up to a certain size 1884s - does not accept a negative length to read 1884s - returns an empty string if a 0 length is given 1884s - respects :external_encoding option 1884s 1884s Zlib::GzipReader#read at the end of data 1884s - returns empty string if length parameter is not specified or 0 1884s - returns nil if length parameter is positive 1884s 1884s Zlib::GzipReader#readpartial 1884s - accepts nil buffer 1884s 1884s Zlib::GzipReader#rewind 1884s - resets the position of the stream pointer 1884s - resets the position of the stream pointer to data previously read 1884s - invokes seek method on the associated IO object 1884s 1884s Zlib::GzipReader#ungetbyte at the start of the stream with an integer 1884s - prepends the byte to the stream 1884s - decrements pos 1884s 1884s Zlib::GzipReader#ungetbyte in the middle of the stream with an integer 1884s - inserts the corresponding character into the stream 1884s - decrements pos 1884s 1884s Zlib::GzipReader#ungetbyte at the end of the stream with an integer 1884s - appends the corresponding character to the stream 1884s - decrements pos 1884s - makes eof? false 1884s 1884s Zlib::GzipReader#ungetc at the start of the stream with a single-byte character 1884s - prepends the character to the stream 1884s - decrements pos 1884s 1884s Zlib::GzipReader#ungetc at the start of the stream with a multi-byte character 1884s - prepends the character to the stream 1884s - decrements pos 1884s 1884s Zlib::GzipReader#ungetc at the start of the stream with a multi-character string 1884s - prepends the characters to the stream 1884s - decrements pos 1884s 1884s Zlib::GzipReader#ungetc at the start of the stream with an integer 1884s - prepends the corresponding character to the stream 1884s - decrements pos 1884s 1884s Zlib::GzipReader#ungetc at the start of the stream with an empty string 1884s - does not prepend anything to the stream 1884s - does not decrement pos 1884s 1884s Zlib::GzipReader#ungetc in the middle of the stream with a single-byte character 1884s - inserts the character into the stream 1884s - decrements pos 1884s 1884s Zlib::GzipReader#ungetc in the middle of the stream with a multi-byte character 1884s - inserts the character into the stream 1884s - decrements pos 1884s 1884s Zlib::GzipReader#ungetc in the middle of the stream with a multi-character string 1884s - inserts the characters into the stream 1884s - decrements pos 1884s 1884s Zlib::GzipReader#ungetc in the middle of the stream with an integer 1884s - inserts the corresponding character into the stream 1884s - decrements pos 1884s 1884s Zlib::GzipReader#ungetc in the middle of the stream with an empty string 1884s - does not insert anything into the stream 1884s - does not decrement pos 1884s 1884s Zlib::GzipReader#ungetc at the end of the stream with a single-byte character 1884s - appends the character to the stream 1884s - decrements pos 1884s - makes eof? false 1884s 1884s Zlib::GzipReader#ungetc at the end of the stream with a multi-byte character 1884s - appends the character to the stream 1884s - decrements pos 1884s - makes eof? false 1884s 1884s Zlib::GzipReader#ungetc at the end of the stream with a multi-character string 1884s - appends the characters to the stream 1884s - decrements pos 1884s - makes eof? false 1884s 1884s Zlib::GzipReader#ungetc at the end of the stream with an integer 1884s - appends the corresponding character to the stream 1884s - decrements pos 1884s - makes eof? false 1884s 1884s Zlib::GzipReader#ungetc at the end of the stream with an empty string 1884s - does not append anything to the stream 1884s - does not decrement pos 1884s - does not make eof? false 1884s 1884s Zlib::GzipWriter#<< 1884s - returns self 1884s 1884s Zlib::GzipWriter#mtime= 1884s - sets mtime using Integer 1884s - sets mtime using Time 1884s 1884s Zlib::GzipWriter#write 1884s - writes some compressed data 1884s - returns the number of bytes in the input 1885s - handles inputs of 2^23 bytes 1885s 1885s Zlib::Inflate#<< 1885s - appends data to the input stream 1885s - treats nil argument as the end of compressed data 1885s - just passes through the data after nil argument 1885s - properly handles data in chunks 1885s - properly handles incomplete data 1885s - properly handles excessive data, byte-by-byte 1885s - properly handles excessive data, in one go 1885s 1885s Zlib::Inflate#finish 1885s - each chunk should have the same prefix 1885s 1885s Zlib::Inflate#inflate 1885s - inflates some data 1885s - inflates lots of data 1885s - works in pass-through mode, once finished 1885s - has a binary encoding 1885s 1885s Zlib::Inflate.inflate 1885s - inflates some data 1885s - inflates lots of data 1885s - properly handles data in chunks 1885s - properly handles incomplete data 1885s - properly handles excessive data, byte-by-byte 1885s - properly handles excessive data, in one go 1885s 1885s Zlib::Inflate#inflate without break 1885s - properly handles chunked data 1885s 1885s Zlib::Inflate#inflate with break 1885s - inflates chunked break 1885s 1885s Zlib::Inflate#set_dictionary 1885s - sets the inflate dictionary 1885s 1885s Zlib.inflate 1885s - inflates some data 1885s 1885s Zlib.zlib_version 1885s - returns the version of the libz library 1885s 1885s Zlib::ZStream#adler 1885s - generates hash 1885s 1885s Zlib::ZStream#avail_in 1885s - returns bytes in the input buffer 1885s 1885s Zlib::ZStream#avail_out 1885s - returns bytes in the output buffer 1885s 1885s Zlib::ZStream#data_type 1885s - returns the type of the data in the stream 1885s 1885s Zlib::ZStream#flush_next_out 1885s - flushes the stream and flushes the output buffer 1885s 1885s 1885s 1) 1885s Thread#kill kills other fibers of that thread without running their ensure clauses FAILED 1885s Expected :fiber_ensure == :fiber_resumed 1885s to be truthy but was false 1885s /tmp/autopkgtest.nFBjtB/autopkgtest_tmp/spec/ruby/core/thread/shared/exit.rb:132:in `block in
' 1885s org/jruby/RubyBasicObject.java:2620:in `instance_exec' 1885s org/jruby/RubyArray.java:4912:in `all?' 1885s org/jruby/RubyArray.java:1983:in `each' 1885s /tmp/autopkgtest.nFBjtB/autopkgtest_tmp/spec/ruby/core/thread/kill_spec.rb:8:in `block in
' 1885s /tmp/autopkgtest.nFBjtB/autopkgtest_tmp/spec/ruby/core/thread/kill_spec.rb:7:in `
' 1885s org/jruby/RubyKernel.java:1211:in `load' 1885s org/jruby/RubyBasicObject.java:2620:in `instance_exec' 1885s org/jruby/RubyArray.java:1983:in `each' 1885s 1885s Finished in 663.763715 seconds 1885s 1885s 3394 files, 29743 examples, 138632 expectations, 1 failure, 0 errors, 1112 tagged 1885s rake aborted! 1885s Java::OrgApacheToolsAnt::ExitStatusException: Java returned: 1 1885s org.apache.tools.ant.taskdefs.Java.execute(org/apache/tools/ant/taskdefs/Java.java:114) 1885s org.apache.tools.ant.UnknownElement.execute(org/apache/tools/ant/UnknownElement.java:299) 1885s jdk.internal.reflect.DirectMethodHandleAccessor.invoke(jdk/internal/reflect/DirectMethodHandleAccessor.java:103) 1885s java.lang.reflect.Method.invoke(java/lang/reflect/Method.java:580) 1885s org.jruby.javasupport.JavaMethod.invokeDirectWithExceptionHandling(org/jruby/javasupport/JavaMethod.java:300) 1885s org.jruby.javasupport.JavaMethod.invokeDirect(org/jruby/javasupport/JavaMethod.java:164) 1885s RUBY.call(/usr/share/jruby/lib/ruby/stdlib/rake/ant/element.rb:53) 1885s RUBY.generate_methods(/usr/share/jruby/lib/ruby/stdlib/rake/ant/ant.rb:150) 1885s org.jruby.RubyProc.call(org/jruby/RubyProc.java:373) 1885s RUBY.jruby(/tmp/autopkgtest.nFBjtB/autopkgtest_tmp/rakelib/commands.rake:38) 1885s RUBY.mspec(/tmp/autopkgtest.nFBjtB/autopkgtest_tmp/rakelib/commands.rake:75) 1885s RUBY.
(/tmp/autopkgtest.nFBjtB/autopkgtest_tmp/rakelib/rubyspec.rake:25) 1885s org.jruby.RubyProc.call(org/jruby/RubyProc.java:333) 1885s org.jruby.RubyProc$INVOKER$i$call.call(org/jruby/RubyProc$INVOKER$i$call.gen) 1885s RUBY.execute(/usr/lib/ruby/gems/3.1.0/gems/rake-13.0.6/lib/rake/task.rb:281) 1885s org.jruby.RubyArray.each(org/jruby/RubyArray.java:1983) 1885s org.jruby.RubyArray$INVOKER$i$0$0$each.call(org/jruby/RubyArray$INVOKER$i$0$0$each.gen) 1885s RUBY.execute(/usr/lib/ruby/gems/3.1.0/gems/rake-13.0.6/lib/rake/task.rb:281) 1885s RUBY.invoke_with_call_chain(/usr/lib/ruby/gems/3.1.0/gems/rake-13.0.6/lib/rake/task.rb:219) 1885s org.jruby.ext.monitor.Monitor.synchronize(org/jruby/ext/monitor/Monitor.java:82) 1885s org.jruby.ext.monitor.Monitor$INVOKER$i$0$0$synchronize.call(org/jruby/ext/monitor/Monitor$INVOKER$i$0$0$synchronize.gen) 1885s RUBY.invoke_with_call_chain(/usr/lib/ruby/gems/3.1.0/gems/rake-13.0.6/lib/rake/task.rb:199) 1885s RUBY.invoke(/usr/lib/ruby/gems/3.1.0/gems/rake-13.0.6/lib/rake/task.rb:188) 1885s RUBY.invoke_task(/usr/lib/ruby/gems/3.1.0/gems/rake-13.0.6/lib/rake/application.rb:160) 1885s RUBY.top_level(/usr/lib/ruby/gems/3.1.0/gems/rake-13.0.6/lib/rake/application.rb:116) 1885s org.jruby.RubyArray.each(org/jruby/RubyArray.java:1983) 1885s org.jruby.RubyArray$INVOKER$i$0$0$each.call(org/jruby/RubyArray$INVOKER$i$0$0$each.gen) 1885s RUBY.top_level(/usr/lib/ruby/gems/3.1.0/gems/rake-13.0.6/lib/rake/application.rb:116) 1885s RUBY.run_with_threads(/usr/lib/ruby/gems/3.1.0/gems/rake-13.0.6/lib/rake/application.rb:125) 1885s RUBY.top_level(/usr/lib/ruby/gems/3.1.0/gems/rake-13.0.6/lib/rake/application.rb:110) 1885s RUBY.run(/usr/lib/ruby/gems/3.1.0/gems/rake-13.0.6/lib/rake/application.rb:83) 1885s RUBY.standard_exception_handling(/usr/lib/ruby/gems/3.1.0/gems/rake-13.0.6/lib/rake/application.rb:186) 1885s RUBY.run(/usr/lib/ruby/gems/3.1.0/gems/rake-13.0.6/lib/rake/application.rb:80) 1885s RUBY.
(/usr/lib/ruby/gems/3.1.0/gems/rake-13.0.6/exe/rake:27) 1885s org.jruby.Ruby.runInterpreter(org/jruby/Ruby.java:1258) 1885s org.jruby.Ruby.loadFile(org/jruby/Ruby.java:2977) 1885s org.jruby.RubyKernel.loadCommon(org/jruby/RubyKernel.java:1241) 1885s org.jruby.RubyKernel.load(org/jruby/RubyKernel.java:1211) 1885s org.jruby.RubyKernel$INVOKER$s$load.call(org/jruby/RubyKernel$INVOKER$s$load.gen) 1885s usr.bin.rake.run(usr/bin//usr/bin/rake) 1885s java.lang.invoke.MethodHandle.invokeWithArguments(java/lang/invoke/MethodHandle.java:733) 1885s org.jruby.Ruby.runScript(org/jruby/Ruby.java:1245) 1885s org.jruby.Ruby.runNormally(org/jruby/Ruby.java:1157) 1885s org.jruby.Ruby.runFromMain(org/jruby/Ruby.java:983) 1885s org.jruby.Main.doRunFromMain(org/jruby/Main.java:398) 1885s org.jruby.Main.internalRun(org/jruby/Main.java:282) 1885s org.jruby.Main.run(org/jruby/Main.java:227) 1885s org.jruby.Main.main(org/jruby/Main.java:199) 1885s Tasks: TOP => spec:ruby:fast 1885s (See full trace by running task with --trace) 1886s autopkgtest [11:26:09]: test spec-ruby: -----------------------] 1887s autopkgtest [11:26:10]: test spec-ruby: - - - - - - - - - - results - - - - - - - - - - 1887s spec-ruby FLAKY non-zero exit status 1 1887s autopkgtest [11:26:10]: test mri-core: preparing testbed 1895s Reading package lists... 1896s Building dependency tree... 1896s Reading state information... 1896s Starting pkgProblemResolver with broken count: 0 1896s Starting 2 pkgProblemResolver with broken count: 0 1896s Done 1897s The following NEW packages will be installed: 1897s autopkgtest-satdep 1897s 0 upgraded, 1 newly installed, 0 to remove and 0 not upgraded. 1897s Need to get 0 B/760 B of archives. 1897s After this operation, 0 B of additional disk space will be used. 1897s Get:1 /tmp/autopkgtest.nFBjtB/10-autopkgtest-satdep.deb autopkgtest-satdep arm64 0 [760 B] 1897s Selecting previously unselected package autopkgtest-satdep. 1897s (Reading database ... (Reading database ... 5% (Reading database ... 10% (Reading database ... 15% (Reading database ... 20% (Reading database ... 25% (Reading database ... 30% (Reading database ... 35% (Reading database ... 40% (Reading database ... 45% (Reading database ... 50% (Reading database ... 55% (Reading database ... 60% (Reading database ... 65% (Reading database ... 70% (Reading database ... 75% (Reading database ... 80% (Reading database ... 85% (Reading database ... 90% (Reading database ... 95% (Reading database ... 100% (Reading database ... 84014 files and directories currently installed.) 1897s Preparing to unpack .../10-autopkgtest-satdep.deb ... 1897s Unpacking autopkgtest-satdep (0) ... 1897s Setting up autopkgtest-satdep (0) ... 1899s (Reading database ... 84014 files and directories currently installed.) 1899s Removing autopkgtest-satdep (0) ... 1900s autopkgtest [11:26:23]: test mri-core: [----------------------- 1901s installing system gems into jruby: 1901s * diff-lcs-1.5.0 1901s * minitest-5.15.0 1901s * power_assert-2.0.1 1901s * rake-13.0.6 1901s * rexml-3.2.5 1901s * rspec-3.12.0 1901s * rspec-core-3.12.0 1901s * rspec-expectations-3.12.1 1901s * rspec-mocks-3.12.1 1901s * rspec-support-3.12.0 1901s * test-unit-3.5.3 1901s ** debugging mode enabled ** 1901s excluded test: test/mri/excludes/TestBasicInstructions.rb::test_regexp 1901s excluded test: test/mri/excludes/TestThread.rb::test_thread_join_in_trap 1901s excluded test: test/mri/excludes/TestThread.rb::test_thread_value_in_trap 1901s excluded test: test/mri/excludes/TestAutoload.rb::test_autoload_same_file_with_raise 1907s /usr/share/jruby/bin/jruby test/mri/runner.rb --color=never -v --excludes=test/mri/excludes:test/mri/excludes_wip -q -- ruby/test_alias.rb ruby/test_argf.rb ruby/test_arithmetic_sequence.rb ruby/test_arity.rb ruby/test_array.rb ruby/test_assignment.rb ruby/test_autoload.rb ruby/test_backtrace.rb ruby/test_basicinstructions.rb ruby/test_beginendblock.rb ruby/test_bignum.rb ruby/test_call.rb ruby/test_case.rb ruby/test_class.rb ruby/test_clone.rb ruby/test_comparable.rb ruby/test_complex.rb ruby/test_complex2.rb ruby/test_complexrational.rb ruby/test_condition.rb ruby/test_const.rb ruby/test_continuation.rb ruby/test_default_gems.rb ruby/test_defined.rb ruby/test_dir.rb ruby/test_dir_m17n.rb ruby/test_econv.rb ruby/test_encoding.rb ruby/test_enum.rb ruby/test_enumerator.rb ruby/test_env.rb ruby/test_eval.rb ruby/test_exception.rb ruby/test_fiber.rb ruby/test_file.rb ruby/test_file_exhaustive.rb ruby/test_fixnum.rb ruby/test_flip.rb ruby/test_float.rb ruby/test_fnmatch.rb ruby/test_frozen_error.rb ruby/test_gc.rb ruby/test_hash.rb ruby/test_ifunless.rb ruby/test_inlinecache.rb ruby/test_integer.rb ruby/test_integer_comb.rb ruby/test_io.rb ruby/test_io_buffer.rb ruby/test_io_m17n.rb ruby/test_iterator.rb ruby/test_key_error.rb ruby/test_keyword.rb ruby/test_lambda.rb ruby/test_lazy_enumerator.rb ruby/test_literal.rb ruby/test_m17n.rb ruby/test_m17n_comb.rb ruby/test_marshal.rb ruby/test_math.rb ruby/test_memory_view.rb ruby/test_metaclass.rb ruby/test_method.rb ruby/test_method_cache.rb ruby/test_mixed_unicode_escapes.rb ruby/test_module.rb ruby/test_name_error.rb ruby/test_nomethod_error.rb ruby/test_not.rb ruby/test_numeric.rb ruby/test_object.rb ruby/test_objectspace.rb ruby/test_pack.rb ruby/test_parse.rb ruby/test_path.rb ruby/test_pattern_matching.rb ruby/test_pipe.rb ruby/test_primitive.rb ruby/test_proc.rb ruby/test_rand.rb ruby/test_range.rb ruby/test_rational.rb ruby/test_rational2.rb ruby/test_readpartial.rb ruby/test_refinement.rb ruby/test_regexp.rb ruby/test_require.rb ruby/test_require_lib.rb ruby/test_rubyoptions.rb ruby/test_sleep.rb ruby/test_sprintf.rb ruby/test_sprintf_comb.rb ruby/test_stack.rb ruby/test_string.rb ruby/test_stringchar.rb ruby/test_struct.rb ruby/test_super.rb ruby/test_symbol.rb ruby/test_system.rb ruby/test_thread.rb ruby/test_thread_cv.rb ruby/test_thread_queue.rb ruby/test_threadgroup.rb ruby/test_time.rb ruby/test_time_tz.rb ruby/test_trace.rb ruby/test_transcode.rb ruby/test_undef.rb ruby/test_unicode_escape.rb ruby/test_variable.rb ruby/test_vm_dump.rb ruby/test_weakmap.rb ruby/test_whileuntil.rb 1915s /tmp/autopkgtest.nFBjtB/autopkgtest_tmp/test/mri/ruby/test_memory_view.rb: no such file to load -- -test-/memory_view 1915s /tmp/autopkgtest.nFBjtB/autopkgtest_tmp/test/mri/ruby/test_refinement.rb:2621: warning: TestRefinement::TestImport::B has ancestors, but Refinement#import_methods doesn't import their methods 1916s /tmp/autopkgtest.nFBjtB/autopkgtest_tmp/test/mri/ruby/test_time_tz.rb: no such file to load -- -test-/time 1916s Run options: 1916s --seed=39804 1916s --color=never 1916s -v 1916s --excludes=test/mri/excludes:test/mri/excludes_wip 1916s -q 1916s -- 1916s 1916s # Running tests: 1916s 1916s [ 1/5474] TestKeywordArguments#test_kwrest_overwritten = 0.03 s 1916s [ 2/5474] TestKeywordArguments#test_p1 = 0.05 s 1916s [ 3/5474] TestKeywordArguments#test_p3 = 0.01 s 1916s [ 4/5474] TestKeywordArguments#test_explicit_super_kwsplat = 0.03 s 1916s [ 5/5474] TestKeywordArguments#test_define_method_method_kwsplat = 0.03 s 1916s [ 6/5474] TestKeywordArguments#test_p5 = 0.01 s 1916s [ 7/5474] TestKeywordArguments#test_unknown_keyword_with_block = 0.05 s 1916s [ 8/5474] TestKeywordArguments#test_method_missing_kwsplat = 0.04 s 1916s [ 9/5474] TestKeywordArguments#test_zsuper_only_anonymous_kwrest = 0.00 s 1916s [ 10/5474] TestKeywordArguments#test_required_keyword_with_newline = 0.01 s 1916s [ 11/5474] TestKeywordArguments#test_non_keyword_hash_subclass = 0.00 s 1916s [ 12/5474] TestKeywordArguments#test_do_not_use_newarraykwsplat = 0.01 s 1924s [ 13/5474] TestKeywordArguments#test_gced_object_in_stack = 7.86 s 1924s [ 14/5474] TestKeywordArguments#test_splat_hash = 0.04 s 1924s [ 15/5474] TestKeywordArguments#test_unknown_keyword = 0.00 s 1924s [ 16/5474] TestKeywordArguments#test_ruby2_keywords = 0.10 s 1924s [ 17/5474] TestKeywordArguments#test_UnboundMethod_bindcall_kwsplat_call = 0.03 s 1927s [ 18/5474] TestKeywordArguments#test_top_ruby2_keywords = 2.44 s 1927s [ 19/5474] TestKeywordArguments#test_precedence_of_keyword_arguments = 0.00 s 1927s [ 20/5474] TestKeywordArguments#test_splat_hash_conversion = 0.00 s 1927s [ 21/5474] TestKeywordArguments#test_f3 = 0.00 s 1927s [ 22/5474] TestKeywordArguments#test_splat_keyword_nondestructive = 0.00 s 1927s [ 23/5474] TestKeywordArguments#test_proc_ruby2_keywords = 0.01 s 1927s [ 24/5474] TestKeywordArguments#test_f1 = 0.00 s 1927s [ 25/5474] TestKeywordArguments#test_f7 = 0.00 s 1927s [ 26/5474] TestKeywordArguments#test_f5 = 0.00 s 1927s [ 27/5474] TestKeywordArguments#test_define_method_kwsplat = 0.02 s 1927s [ 28/5474] TestKeywordArguments#test_attr_reader_kwsplat = 0.00 s 1927s [ 29/5474] TestKeywordArguments#test_keyword_no_split = 0.01 s 1927s [ 30/5474] TestKeywordArguments#test_f9 = 0.00 s 1927s [ 31/5474] TestKeywordArguments#test_splat_empty_hash_with_block_passing = 0.00 s 1927s [ 32/5474] TestKeywordArguments#test_super_with_keyword_kwrest = 0.00 s 1927s [ 33/5474] TestKeywordArguments#test_f12 = 0.00 s 1927s [ 34/5474] TestKeywordArguments#test_f10 = 0.00 s 1927s [ 35/5474] TestKeywordArguments#test_send_kwsplat = 0.02 s 1927s [ 36/5474] TestKeywordArguments#test_to_hash_call_during_setup_complex_parameters = 0.00 s 1927s [ 37/5474] TestKeywordArguments#test_attr_writer_method_kwsplat = 0.01 s 1927s [ 38/5474] TestKeywordArguments#test_block_required_keyword = 0.01 s 1927s [ 39/5474] TestKeywordArguments#test_Enumerator_Yielder_yield_kwsplat = 0.03 s 1927s [ 40/5474] TestKeywordArguments#test_Class_new_method_kwsplat_call = 0.02 s 1927s [ 41/5474] TestKeywordArguments#test_method_parameters = 0.00 s 1927s [ 42/5474] TestKeywordArguments#test_instance_exec_define_method_kwsplat = 0.03 s 1927s [ 43/5474] TestKeywordArguments#test_lambda_kwsplat_call = 0.02 s 1927s [ 44/5474] TestKeywordArguments#test_sym_proc_kwsplat = 0.04 s 1927s [ 45/5474] TestKeywordArguments#test_attr_reader_method_kwsplat = 0.00 s 1927s [ 46/5474] TestKeywordArguments#test_instance_exec_kwsplat = 0.02 s 1927s [ 47/5474] TestKeywordArguments#test_precedence_of_keyword_arguments_with_post_argument = 0.00 s 1927s [ 48/5474] TestKeywordArguments#test_enumerator_size_kwsplat = 0.03 s 1927s [ 49/5474] TestKeywordArguments#test_send_method_kwsplat = 0.02 s 1927s [ 50/5474] TestKeywordArguments#test_f4 = 0.00 s 1927s [ 51/5474] TestKeywordArguments#test_block = 0.00 s 1927s [ 52/5474] TestKeywordArguments#test_proc_parameters = 0.00 s 1927s [ 53/5474] TestKeywordArguments#test_lambda = 0.00 s 1927s [ 54/5474] TestKeywordArguments#test_lambda_method_kwsplat_call = 0.02 s 1927s [ 55/5474] TestKeywordArguments#test_regular_kwsplat = 0.02 s 1927s [ 56/5474] TestKeywordArguments#test_f6 = 0.00 s 1927s [ 57/5474] TestKeywordArguments#test_f2 = 0.00 s 1927s [ 58/5474] TestKeywordArguments#test_super_with_keyword = 0.00 s 1927s [ 59/5474] TestKeywordArguments#test_required_keyword = 0.01 s 1927s [ 60/5474] TestKeywordArguments#test_f11 = 0.00 s 1927s [ 61/5474] TestKeywordArguments#test_f13 = 0.00 s 1927s [ 62/5474] TestKeywordArguments#test_f8 = 0.00 s 1927s [ 63/5474] TestKeywordArguments#test_zsuper_only_named_kwrest = 0.00 s 1927s [ 64/5474] TestKeywordArguments#test_sym_proc_method_kwsplat = 0.02 s 1927s [ 65/5474] TestKeywordArguments#test_bare_kwrest = 0.00 s 1927s [ 66/5474] TestKeywordArguments#test_attr_writer_kwsplat = 0.01 s 1927s [ 67/5474] TestKeywordArguments#test_rest_keyrest = 0.00 s 1927s [ 68/5474] TestKeywordArguments#test_dig_kwsplat = 0.02 s 1927s [ 69/5474] TestKeywordArguments#test_super_method_missing_kwsplat = 0.02 s 1927s [ 70/5474] TestKeywordArguments#test_without_paren = 0.01 s 1931s [ 71/5474] TestKeywordArguments#test_dynamic_symbol_keyword = 3.65 s 1931s [ 72/5474] TestKeywordArguments#test_attr_set_method_cache = 0.00 s 1931s [ 73/5474] TestKeywordArguments#test_Thread_new_kwsplat = 0.10 s 1931s [ 74/5474] TestKeywordArguments#test_p6 = 0.01 s 1931s [ 75/5474] TestKeywordArguments#test_instance_exec_method_kwsplat = 0.02 s 1931s [ 76/5474] TestKeywordArguments#test_instance_exec_sym_proc_kwsplat = 0.02 s 1931s [ 77/5474] TestKeywordArguments#test_p4 = 0.01 s 1931s [ 78/5474] TestKeywordArguments#test_Class_new_kwsplat_call = 0.02 s 1931s [ 79/5474] TestKeywordArguments#test_p2 = 0.01 s 1931s [ 80/5474] TestKeywordArguments#test_public_send_kwsplat = 0.02 s 1931s [ 81/5474] TestKeywordArguments#test_super_with_anon_restkeywords = 0.00 s 1931s [ 82/5474] TestKeywordArguments#test_Method_call_kwsplat_call = 0.02 s 1931s [ 83/5474] TestKeywordArguments#test_implicit_super_kwsplat = 0.02 s 1931s [ 84/5474] TestKeywordArguments#test_no_implicit_hash_conversion = 0.00 s 1931s [ 85/5474] TestKeywordArguments#test_many_kwargs = 0.01 s 1931s [ 86/5474] TestKeywordArguments#test_keyword_splat_new = 0.06 s 1935s [ 87/5474] TestConst#test_redefinition_memory_leak = 3.40 s 1935s [ 88/5474] TestConst#test_const = 0.00 s 1935s [ 89/5474] TestConst#test_toplevel_lookup = 0.00 s 1935s [ 90/5474] TestConst#test_const_access_from_nil = 0.02 s 1935s [ 91/5474] TestCondition#test_condition = 0.00 s 1935s [ 92/5474] TestAssignment#test_assign_ary = 0.00 s 1935s [ 93/5474] TestAssignment#test_massign_in_cond = 0.00 s 1935s [ 94/5474] TestAssignment#test_multi = 0.00 s 1935s [ 95/5474] TestAssignment#test_massign_splat = 0.00 s 1935s [ 96/5474] TestAssignment#test_to_ary_splat = 0.00 s 1935s [ 97/5474] TestAssignment#test_assign_abbreviated = 0.00 s 1935s [ 98/5474] TestAssignment#test_break = 0.00 s 1935s [ 99/5474] TestAssignment#test_const_massign = 0.00 s 1935s [ 100/5474] TestAssignment#test_assign = 0.00 s 1935s [ 101/5474] TestAssignment#test_massign_simple = 0.00 s 1935s [ 102/5474] TestAssignment#test_next = 0.01 s 1935s [ 103/5474] TestAssignment#test_assign_splat = 0.00 s 1935s [ 104/5474] TestAssignment#test_lambda = 0.01 s 1935s [ 105/5474] TestAssignment#test_assign_simple = 0.00 s 1935s [ 106/5474] TestAssignment#test_assign_ary_splat = 0.00 s 1935s [ 107/5474] TestAssignment#test_nested_massign = 0.00 s 1935s [ 108/5474] TestAssignment#test_assign_rescue = 0.00 s 1935s [ 109/5474] TestAssignment#test_return = 0.01 s 1935s [ 110/5474] TestAssignment#test_massign = 0.00 s 1935s [ 111/5474] TestAutoload#test_override_autoload = 0.02 s 1937s [ 112/5474] TestAutoload#test_non_realpath_in_loadpath = 2.71 s 1938s [ 113/5474] TestAutoload#test_require_implemented_in_ruby_is_called = 0.03 s 1938s [ 114/5474] TestAutoload#test_override_while_autoloading = 0.51 s 1938s [ 115/5474] TestAutoload#test_require_explicit = 0.01 s 1938s [ 116/5474] TestAutoload#test_autoload_while_autoloading = 0.03 s 1938s [ 117/5474] TestAutoload#test_nameerror_when_autoload_did_not_define_the_constant = 0.01 s 1942s [ 118/5474] TestAutoload#test_autoload_after_failed_and_removed_from_loaded_features = 4.17 s 1943s [ 119/5474] TestAutoload#test_threaded_accessing_inner_constant = 0.51 s 1943s [ 120/5474] TestAutoload#test_autoload_with_unqualified_file_name = 0.03 s 1943s [ 121/5474] TestAutoload#test_threaded_accessing_constant = 0.52 s 1943s [ 122/5474] TestAutoload#test_autoload_p = 0.01 s 1943s [ 123/5474] TestRubyPrimitive#test_cvar_from_singleton_method2 = 0.01 s 1943s [ 124/5474] TestRubyPrimitive#test_concatarray_ruby_dev_41933 = 0.01 s 1943s [ 125/5474] TestRubyPrimitive#test_opassign = 0.00 s 1943s [ 126/5474] TestRubyPrimitive#test_cvar_from_instance_method = 0.00 s 1943s [ 127/5474] TestRubyPrimitive#test_constatant_cache4 = 0.00 s 1943s [ 128/5474] TestRubyPrimitive#test_aset = 0.00 s 1943s [ 129/5474] TestRubyPrimitive#test_cvar_from_singleton_method = 0.02 s 1943s [ 130/5474] TestRubyPrimitive#test_list_expand = 0.00 s 1943s [ 131/5474] TestRubyPrimitive#test_fact = 0.01 s 1943s [ 132/5474] TestRubyPrimitive#test_lvar = 0.00 s 1943s [ 133/5474] TestRubyPrimitive#test_attr_setter = 0.00 s 1943s [ 134/5474] TestRubyPrimitive#test_constant_cache2 = 0.00 s 1943s [ 135/5474] TestRubyPrimitive#test_constant_cache = 0.00 s 1943s [ 136/5474] TestRubyPrimitive#test_aref = 0.00 s 1943s [ 137/5474] TestRubyPrimitive#test_constant_cache3 = 0.00 s 1943s [ 138/5474] TestRubyPrimitive#test_constant_cache5 = 0.00 s 1943s [ 139/5474] TestRubyPrimitive#test_constant = 0.01 s 1943s [ 140/5474] TestRubyPrimitive#test_mod = 0.00 s 1943s [ 141/5474] TestRubyPrimitive#test_gvar = 0.00 s 1943s [ 142/5474] TestRubyPrimitive#test_opassign_and_or = 0.00 s 1943s [ 143/5474] TestRubyPrimitive#test_backref = 0.00 s 1943s [ 144/5474] TestRubyPrimitive#test_length = 0.00 s 1943s [ 145/5474] TestRubyPrimitive#test_div = 0.00 s 1943s [ 146/5474] TestRubyPrimitive#test_not = 0.00 s 1943s [ 147/5474] TestRubyPrimitive#test_mul = 0.00 s 1948s [ 148/5474] TestArgf#test_readpartial2 = 4.17 s 1951s [ 149/5474] TestArgf#test_set_pos = 3.65 s 1954s [ 150/5474] TestArgf#test_each_line_paragraph = 2.87 s 1958s [ 151/5474] TestArgf#test_wrong_type = 3.76 s 1962s [ 152/5474] TestArgf#test_file = 3.75 s 1966s [ 153/5474] TestArgf#test_close_replace = 3.86 s 1969s [ 154/5474] TestArgf#test_each_char = 3.77 s 1972s [ 155/5474] TestArgf#test_readlines_chomp = 2.53 s 1975s [ 156/5474] TestArgf#test_readbyte = 3.61 s 1983s [ 157/5474] TestArgf#test_skip_in_each_line = 7.37 s 1986s [ 158/5474] TestArgf#test_read3 = 3.63 s 1990s [ 159/5474] TestArgf#test_tell = 3.64 s 1994s [ 160/5474] TestArgf#test_read = 4.05 s 1997s [ 161/5474] TestArgf#test_readline_chomp = 2.66 s 2001s [ 162/5474] TestArgf#test_each_byte = 3.82 s 2004s [ 163/5474] TestArgf#test_each_codepoint = 3.79 s 2008s [ 164/5474] TestArgf#test_readchar = 3.60 s 2012s [ 165/5474] TestArgf#test_getbyte = 4.24 s 2016s [ 166/5474] TestArgf#test_read2_with_not_empty_buffer = 3.70 s 2016s [ 167/5474] TestArgf#test_inplace_to_path = 0.06 s 2019s [ 168/5474] TestArgf#test_gets_chomp = 2.90 s 2019s [ 169/5474] TestArgf#test_new_lineno_each_char = 0.02 s 2023s [ 170/5474] TestArgf#test_close = 3.86 s 2027s [ 171/5474] TestArgf#test_skip_in_each_byte = 4.64 s 2032s [ 172/5474] TestArgf#test_closed = 4.89 s 2036s [ 173/5474] TestArgf#test_fileno = 4.02 s 2036s [ 174/5474] TestArgf#test_unreadable = 0.06 s 2036s [ 175/5474] TestArgf#test_inplace_invalid_backup = 0.00 s 2040s [ 176/5474] TestArgf#test_binmode = 3.99 s 2044s [ 177/5474] TestArgf#test_sized_read = 3.67 s 2044s [ 178/5474] TestArgf#test_inplace_suffix_encoding = 0.03 s 2047s [ 179/5474] TestArgf#test_inplace_dup = 2.47 s 2050s [ 180/5474] TestArgf#test_read_nonblock = 3.86 s 2054s [ 181/5474] TestArgf#test_read2 = 3.83 s 2060s [ 182/5474] TestArgf#test_each_line_chomp = 5.36 s 2064s [ 183/5474] TestArgf#test_readpartial_eof_twice = 3.88 s 2068s [ 184/5474] TestArgf#test_getc = 3.96 s 2070s [ 185/5474] TestArgf#test_lineno3 = 2.77 s 2074s [ 186/5474] TestArgf#test_seek = 3.86 s 2077s [ 187/5474] TestArgf#test_inplace = 2.76 s 2081s [ 188/5474] TestArgf#test_skip = 4.05 s 2085s [ 189/5474] TestArgf#test_rewind = 4.01 s 2089s [ 190/5474] TestArgf#test_readpartial = 4.26 s 2089s [ 191/5474] TestArgf#test_new_lineno_each = 0.12 s 2093s [ 192/5474] TestArgf#test_each_line = 3.65 s 2097s [ 193/5474] TestArgf#test_readlines_twice = 4.21 s 2102s [ 194/5474] TestArgf#test_filename = 4.52 s 2106s [ 195/5474] TestArgf#test_argv = 4.20 s 2106s [ 196/5474] TestPatternMatching::TestPatternMatchingRefinements#test_refinements = 0.03 s 2106s [ 197/5474] TestRand#test_0x100000001 = 0.04 s 2110s [ 198/5474] TestRand#test_default_seed = 3.85 s 2110s [ 199/5474] TestRand#test_random_argument_error = 0.03 s 2110s [ 200/5474] TestRand#test_0x3fffffff = 0.02 s 2110s [ 201/5474] TestRand#test_marshal = 0.00 s 2110s [ 202/5474] TestRand#test_0x4000000000000001 = 0.01 s 2110s [ 203/5474] TestRand#test_mt = 0.01 s 2110s [ 204/5474] TestRand#test_0x10000000000 = 0.01 s 2110s [ 205/5474] TestRand#test_random_float = 0.03 s 2110s [ 206/5474] TestRand#test_seed = 0.01 s 2110s [ 207/5474] TestRand#test_types = 0.01 s 2110s [ 208/5474] TestRand#test_0x3fffffffffffffff = 0.01 s 2110s [ 209/5474] TestRand#test_random_ulong_limited = 0.02 s 2110s [ 210/5474] TestRand#test_rand_0x100000000 = 0.01 s 2110s [ 211/5474] TestRand#test_0x40000001 = 0.01 s 2110s [ 212/5474] TestRand#test_random_dup = 0.01 s 2110s [ 213/5474] TestRand#test_fork_shuffle = 0.00 s 2110s [ 214/5474] TestRand#test_random_seed = 0.00 s 2110s [ 215/5474] TestRand#test_random_equal = 0.00 s 2110s [ 216/5474] TestRand#test_0x1000000000000 = 0.01 s 2110s [ 217/5474] TestRand#test_urandom = 0.00 s 2110s [ 218/5474] TestRand#test_random_gc = 0.00 s 2110s [ 219/5474] TestRand#test_random_type_error = 0.00 s 2110s [ 220/5474] TestRand#test_big_seed = 0.08 s 2110s [ 221/5474] TestRand#test_0x1000000000001 = 0.01 s 2110s [ 222/5474] TestRand#test_0x40000000 = 0.01 s 2110s [ 223/5474] TestRand#test_random_range = 0.01 s 2110s [ 224/5474] TestRand#test_rand_reseed_on_fork = 0.00 s 2110s [ 225/5474] TestRand#test_random_ulong_limited_no_rand = 0.00 s 2110s [ 226/5474] TestRand#test_0xffffffff = 0.01 s 2110s [ 227/5474] TestRand#test_shuffle = 0.00 s 2110s [ 228/5474] TestRand#test_random_bytes = 0.00 s 2110s [ 229/5474] TestRand#test_srand = 0.01 s 2110s [ 230/5474] TestRand#test_0x100000000 = 0.00 s 2110s [ 231/5474] TestRand#test_marshal_load_frozen = 0.00 s 2110s [ 232/5474] TestRand#test_0x4000000000000000 = 0.00 s 2110s [ 233/5474] TestRand#test_0x10000 = 0.00 s 2110s [ 234/5474] TestRand#test_new_seed = 0.01 s 2110s [ 235/5474] TestRand#test_initialize_frozen = 0.00 s 2110s [ 236/5474] TestMarshal#test_share = 0.01 s 2110s [ 237/5474] TestMarshal#test_struct_subclass_extend = 0.02 s 2110s [ 238/5474] TestMarshal#test_too_long_string = 0.00 s 2111s [ 239/5474] TestMarshal#test_time = 0.18 s 2111s [ 240/5474] TestMarshal#test_marshal_dump_struct_ivar = 0.00 s 2111s [ 241/5474] TestMarshal#test_marshal_dump_excess_encoding = 0.00 s 2111s [ 242/5474] TestMarshal#test_symlink = 0.00 s 2111s [ 243/5474] TestMarshal#test_marshal = 0.01 s 2111s [ 244/5474] TestMarshal#test_invalid_byte_sequence_symbol = 0.00 s 2111s [ 245/5474] TestMarshal#test_change_class_name = 0.00 s 2111s [ 246/5474] TestMarshal#test_string_subclass = 0.00 s 2111s [ 247/5474] TestMarshal#test_symbol2 = 0.00 s 2111s [ 248/5474] TestMarshal#test_anonymous = 0.00 s 2111s [ 249/5474] TestMarshal#test_range_cyclic = 0.00 s 2111s [ 250/5474] TestMarshal#test_object_subclass = 0.00 s 2111s [ 251/5474] TestMarshal#test_undumpable_message = 0.00 s 2111s [ 252/5474] TestMarshal#test_hash = 0.00 s 2111s [ 253/5474] TestMarshal#test_dump_buffer = 0.00 s 2111s [ 254/5474] TestMarshal#test_fixnum = 0.00 s 2111s [ 255/5474] TestMarshal#test_object = 0.00 s 2111s [ 256/5474] TestMarshal#test_marshal_regexp_encoding = 0.00 s 2111s [ 257/5474] TestMarshal#test_symbol = 0.02 s 2111s [ 258/5474] TestMarshal#test_marshal_dump_extra_iv = 0.00 s 2111s [ 259/5474] TestMarshal#test_regexp = 0.01 s 2111s [ 260/5474] TestMarshal#test_bignum = 0.00 s 2111s [ 261/5474] TestMarshal#test_exception = 0.11 s 2111s [ 262/5474] TestMarshal#test_float = 0.00 s 2111s [ 263/5474] TestMarshal#test_false = 0.00 s 2111s [ 264/5474] TestMarshal#test_gc = 0.03 s 2111s [ 265/5474] TestMarshal#test_nil = 0.00 s 2111s [ 266/5474] TestMarshal#test_time_ivar = 0.01 s 2111s [ 267/5474] TestMarshal#test_marshal_proc_freeze = 0.00 s 2111s [ 268/5474] TestMarshal#test_class = 0.00 s 2111s [ 269/5474] TestMarshal#test_hash_extend = 0.00 s 2111s [ 270/5474] TestMarshal#test_struct = 0.00 s 2111s [ 271/5474] TestMarshal#test_exception_subclass = 0.00 s 2111s [ 272/5474] TestMarshal#test_array_subclass = 0.00 s 2111s [ 273/5474] TestMarshal#test_extend = 0.00 s 2111s [ 274/5474] TestMarshal#test_string = 0.00 s 2111s [ 275/5474] TestMarshal#test_float_inf_nan = 0.01 s 2111s [ 276/5474] TestMarshal#test_marshal_honor_post_proc_value_for_link = 0.00 s 2111s [ 277/5474] TestMarshal#test_struct_ivar = 0.00 s 2111s [ 278/5474] TestMarshal#test_string_crlf = 0.00 s 2111s [ 279/5474] TestMarshal#test_object_subclass_extend = 0.05 s 2111s [ 280/5474] TestMarshal#test_struct_subclass = 0.00 s 2111s [ 281/5474] TestMarshal#test_true = 0.00 s 2111s [ 282/5474] TestMarshal#test_array = 0.00 s 2111s [ 283/5474] TestMarshal#test_string_subclass_extend = 0.01 s 2111s [ 284/5474] TestMarshal#test_marshal_respond_to_arity = 0.00 s 2111s [ 285/5474] TestMarshal#test_packed_string = 0.00 s 2111s [ 286/5474] TestMarshal#test_struct_toplevel = 0.00 s 2111s [ 287/5474] TestMarshal#test_array_ivar = 0.01 s 2111s [ 288/5474] TestMarshal#test_marshal_symbol_ascii8bit = 0.00 s 2111s [ 289/5474] TestMarshal#test_undumpable_data = 0.00 s 2111s [ 290/5474] TestMarshal#test_marshal_cloned_class = 0.00 s 2111s [ 291/5474] TestMarshal#test_string_subclass_cycle = 0.00 s 2111s [ 292/5474] TestMarshal#test_hash_subclass = 0.00 s 2111s [ 293/5474] TestMarshal#test_method_missing_without_respond_to = 0.00 s 2111s [ 294/5474] TestMarshal#test_pipe = 0.01 s 2111s [ 295/5474] TestMarshal#test_context_switch = 0.06 s 2111s [ 296/5474] TestMarshal#test_time_in_array = 0.00 s 2111s [ 297/5474] TestMarshal#test_marshal_dump_recursion = 0.00 s 2111s [ 298/5474] TestMarshal#test_marshal_keyword_init_struct = 0.00 s 2111s [ 299/5474] TestMarshal#test_userdef_invalid = 0.00 s 2111s [ 300/5474] TestMarshal#test_limit = 0.00 s 2111s [ 301/5474] TestMarshal#test_hash_default = 0.00 s 2111s [ 302/5474] TestMarshal#test_marshal_proc_string_encoding = 0.00 s 2111s [ 303/5474] TestMarshal#test_range = 0.00 s 2111s [ 304/5474] TestMarshal#test_string_escape = 0.00 s 2111s [ 305/5474] TestMarshal#test_string_ivar = 0.00 s 2111s [ 306/5474] TestMarshal#test_marshal_exception = 0.00 s 2111s [ 307/5474] TestMarshal#test_range_subclass = 0.00 s 2111s [ 308/5474] TestMarshal#test_marshal_encoding_encoding = 0.00 s 2111s [ 309/5474] TestMarshal#test_marshal_string_encoding = 0.00 s 2111s [ 310/5474] TestMarshal#test_regexp2 = 0.00 s 2111s [ 311/5474] TestMarshal#test_hash_ivar = 0.00 s 2111s [ 312/5474] TestMarshal#test_marshal_private_class = 0.00 s 2111s [ 313/5474] TestMarshal#test_hash_default_proc = 0.00 s 2111s [ 314/5474] TestMarshal#test_regexp_subclass = 0.00 s 2111s [ 315/5474] TestMarshal#test_string_empty = 0.00 s 2111s [ 316/5474] TestMarshal#test_extend_string = 0.00 s 2111s [ 317/5474] TestMarshal#test_object_extend = 0.00 s 2111s [ 318/5474] TestMarshal#test_marshal_flonum_reference = 0.00 s 2111s [ 319/5474] TestMarshal#test_marshal_dump = 0.00 s 2111s [ 320/5474] TestArray#test_ary_new = 0.00 s 2111s [ 321/5474] TestArray#test_drop_while = 0.01 s 2111s [ 322/5474] TestArray#test_unshift_frozen = 0.00 s 2111s [ 323/5474] TestArray#test_slice! = 0.00 s 2111s [ 324/5474] TestArray#test_flatten_respond_to_missing = 0.00 s 2111s [ 325/5474] TestArray#test_PLUS = 0.00 s 2111s [ 326/5474] TestArray#test_zip_bug = 0.00 s 2111s [ 327/5474] TestArray#test_flatten! = 0.01 s 2111s [ 328/5474] TestArray#test_fill2 = 0.00 s 2111s [ 329/5474] TestArray#test_slice_out_of_range = 0.00 s 2111s [ 330/5474] TestArray#test_bsearch_index_typechecks_return_values = 0.01 s 2111s [ 331/5474] TestArray#test_zip = 0.01 s 2111s [ 332/5474] TestArray#test_unshift_error = 0.00 s 2111s [ 333/5474] TestArray#test_values_at2 = 0.00 s 2111s [ 334/5474] TestArray#test_pop = 0.00 s 2111s [ 335/5474] TestArray#test_eql? = 0.01 s 2111s [ 336/5474] TestArray#test_join_recheck_array_length = 0.01 s 2111s [ 337/5474] TestArray#test_first2 = 0.00 s 2111s [ 338/5474] TestArray#test_prepend = 0.00 s 2111s [ 339/5474] TestArray#test_sort_bang_with_freeze = 0.00 s 2111s [ 340/5474] TestArray#test_times = 0.00 s 2111s [ 341/5474] TestArray#test_at = 0.00 s 2111s [ 342/5474] TestArray#test_reverse = 0.00 s 2111s [ 343/5474] TestArray#test_VERY_EQUAL = 0.00 s 2111s [ 344/5474] TestArray#test_cycle = 0.01 s 2111s [ 345/5474] TestArray#test_shared_array_reject! = 0.02 s 2111s [ 346/5474] TestArray#test_aset_error = 0.01 s 2111s [ 347/5474] TestArray#test_rotate = 0.00 s 2111s [ 348/5474] TestArray#test_shift2 = 0.00 s 2111s [ 349/5474] TestArray#test_OR_in_order = 0.00 s 2111s [ 350/5474] TestArray#test_shift_shared_ary = 0.01 s 2111s [ 351/5474] TestArray#test_to_h_block = 0.01 s 2111s [ 352/5474] TestArray#test_delete_if = 0.01 s 2111s [ 353/5474] TestArray#test_intersection_big_array = 0.00 s 2111s [ 354/5474] TestArray#test_uniq_0 = 0.00 s 2111s [ 355/5474] TestArray#test_select! = 0.02 s 2111s [ 356/5474] TestArray#test_flattern_singleton_class! = 0.00 s 2111s [ 357/5474] TestArray#test_append = 0.00 s 2111s [ 358/5474] TestArray#test_iseq_shared_array_reject! = 0.01 s 2111s [ 359/5474] TestArray#test_hash = 0.00 s 2111s [ 360/5474] TestArray#test_each_index = 0.00 s 2111s [ 361/5474] TestArray#test_dig = 0.00 s 2115s [ 362/5474] TestArray#test_repeated_combination_stack_error = 3.89 s 2115s [ 363/5474] TestArray#test_empty? = 0.01 s 2115s [ 364/5474] TestArray#test_uniq = 0.01 s 2115s [ 365/5474] TestArray#test_repeated_permutation = 0.03 s 2115s [ 366/5474] TestArray#test_flatten_error = 0.00 s 2115s [ 367/5474] TestArray#test_take_while = 0.00 s 2115s [ 368/5474] TestArray#test_MUL = 0.00 s 2115s [ 369/5474] TestArray#test_find_all_0 = 0.01 s 2115s [ 370/5474] TestArray#test_uniq_bang_with_block = 0.00 s 2115s [ 371/5474] TestArray#test_bsearch_index_in_find_any_mode = 0.01 s 2115s [ 372/5474] TestArray#test_sort_by! = 0.00 s 2115s [ 373/5474] TestArray#test_intersect_big_array = 0.00 s 2115s [ 374/5474] TestArray#test_big_array_literal_with_kwsplat = 0.03 s 2115s [ 375/5474] TestArray#test_intersect? = 0.00 s 2115s [ 376/5474] TestArray#test_intersection = 0.00 s 2115s [ 377/5474] TestArray#test_dup = 0.00 s 2115s [ 378/5474] TestArray#test_min = 0.01 s 2115s [ 379/5474] TestArray#test_values_at = 0.00 s 2115s [ 380/5474] TestArray#test_product = 0.01 s 2121s [ 381/5474] TestArray#test_permutation_stack_error = 5.69 s 2121s [ 382/5474] TestArray#test_product2 = 0.00 s 2121s [ 383/5474] TestArray#test_minmax = 0.02 s 2121s [ 384/5474] TestArray#test_first = 0.00 s 2121s [ 385/5474] TestArray#test_join2 = 0.00 s 2121s [ 386/5474] TestArray#test_replace_shared_ary = 0.00 s 2121s [ 387/5474] TestArray#test_uniq! = 0.02 s 2121s [ 388/5474] TestArray#test_clear = 0.00 s 2121s [ 389/5474] TestArray#test_shuffle_random = 0.04 s 2121s [ 390/5474] TestArray#test_sort_0 = 0.00 s 2121s [ 391/5474] TestArray#test_drop = 0.00 s 2121s [ 392/5474] TestArray#test_ASET = 0.00 s 2121s [ 393/5474] TestArray#test_00_new = 0.00 s 2121s [ 394/5474] TestArray#test_01_square_brackets = 0.00 s 2121s [ 395/5474] TestArray#test_assoc = 0.00 s 2121s [ 396/5474] TestArray#test_sort = 0.01 s 2121s [ 397/5474] TestArray#test_bsearch_with_no_block = 0.00 s 2125s [ 398/5474] TestArray#test_repeated_permutation_stack_error = 3.93 s 2125s [ 399/5474] TestArray#test_bsearch_index_with_no_block = 0.00 s 2125s [ 400/5474] TestArray#test_flatten = 0.00 s 2125s [ 401/5474] TestArray#test_union_big_array = 0.00 s 2125s [ 402/5474] TestArray#test_equal = 0.00 s 2125s [ 403/5474] TestArray#test_to_h = 0.01 s 2125s [ 404/5474] TestArray#test_rotate! = 0.00 s 2129s [ 405/5474] TestArray#test_shared_marking = 4.09 s 2129s [ 406/5474] TestArray#test_combination2 = 0.00 s 2129s [ 407/5474] TestArray#test_reject! = 0.01 s 2129s [ 408/5474] TestArray#test_rindex = 0.00 s 2129s [ 409/5474] TestArray#test_compact_0 = 0.00 s 2129s [ 410/5474] TestArray#test_array_andor_0 = 0.00 s 2129s [ 411/5474] TestArray#test_repeated_combination = 0.02 s 2129s [ 412/5474] TestArray#test_insert = 0.00 s 2129s [ 413/5474] TestArray#test_delete = 0.01 s 2129s [ 414/5474] TestArray#test_flatten_splat! = 0.00 s 2129s [ 415/5474] TestArray#test_sort! = 0.01 s 2135s [ 416/5474] TestArray#test_count = 5.38 s 2135s [ 417/5474] TestArray#test_clear2 = 0.00 s 2135s [ 418/5474] TestArray#test_flatten_splat = 0.00 s 2135s [ 419/5474] TestArray#test_bsearch_typechecks_return_values = 0.00 s 2135s [ 420/5474] TestArray#test_reverse_each2 = 0.00 s 2135s [ 421/5474] TestArray#test_initialize = 0.01 s 2135s [ 422/5474] TestArray#test_OR = 0.00 s 2135s [ 423/5474] TestArray#test_aref = 0.00 s 2135s [ 424/5474] TestArray#test_to_ary = 0.03 s 2135s [ 425/5474] TestArray#test_flattern_singleton_class = 0.00 s 2135s [ 426/5474] TestArray#test_bsearch_in_find_any_mode = 0.01 s 2135s [ 427/5474] TestArray#test_difference = 0.00 s 2135s [ 428/5474] TestArray#test_to_a2 = 0.00 s 2135s [ 429/5474] TestArray#test_combination = 0.00 s 2135s [ 430/5474] TestArray#test_try_convert = 0.00 s 2135s [ 431/5474] TestArray#test_pack = 0.00 s 2135s [ 432/5474] TestArray#test_compact! = 0.00 s 2135s [ 433/5474] TestArray#test_to_a = 0.00 s 2135s [ 434/5474] TestArray#test_filter! = 0.00 s 2135s [ 435/5474] TestArray#test_transpose = 0.00 s 2135s [ 436/5474] TestArray#test_flatten_recursive = 0.00 s 2135s [ 437/5474] TestArray#test_zip_with_enumerator = 0.01 s 2135s [ 438/5474] TestArray#test_fill_negative_length = 0.00 s 2135s [ 439/5474] TestArray#test_initialize2 = 0.00 s 2135s [ 440/5474] TestArray#test_fill_0 = 0.01 s 2135s [ 441/5474] TestArray#test_unshift = 0.00 s 2135s [ 442/5474] TestArray#test_AND = 0.00 s 2135s [ 443/5474] TestArray#test_misc_0 = 0.00 s 2135s [ 444/5474] TestArray#test_compact = 0.00 s 2135s [ 445/5474] TestArray#test_sort_uncomparable = 0.00 s 2135s [ 446/5474] TestArray#test_percent_i = 0.00 s 2135s [ 447/5474] TestArray#test_concat = 0.01 s 2135s [ 448/5474] TestArray#test_fetch = 0.00 s 2135s [ 449/5474] TestArray#test_ary_to_ary = 0.00 s 2135s [ 450/5474] TestArray#test_slice_out_of_range! = 0.00 s 2135s [ 451/5474] TestArray#test_slice = 0.00 s 2135s [ 452/5474] TestArray#test_MINUS = 0.00 s 2135s [ 453/5474] TestArray#test_difference_big_array = 0.00 s 2135s [ 454/5474] TestArray#test_equal_resize = 0.00 s 2135s [ 455/5474] TestArray#test_to_s = 0.01 s 2135s [ 456/5474] TestArray#test_shuffle = 0.02 s 2141s [ 457/5474] TestArray#test_sort_with_replace = 5.90 s 2141s [ 458/5474] TestArray#test_delete_at = 0.00 s 2141s [ 459/5474] TestArray#test_collect! = 0.01 s 2141s [ 460/5474] TestArray#test_bsearch_in_find_minimum_mode = 0.00 s 2141s [ 461/5474] TestArray#test_replace = 0.00 s 2141s [ 462/5474] TestArray#test_keep_if = 0.00 s 2141s [ 463/5474] TestArray#test_flatten_level0! = 0.00 s 2141s [ 464/5474] TestArray#test_flatten_empty! = 0.00 s 2141s [ 465/5474] TestArray#test_map! = 0.01 s 2141s [ 466/5474] TestArray#test_AND_big_array = 0.00 s 2141s [ 467/5474] TestArray#test_union = 0.00 s 2141s [ 468/5474] TestArray#test_index2 = 0.00 s 2141s [ 469/5474] TestArray#test_permutation = 0.00 s 2141s [ 470/5474] TestArray#test_EQUAL = 0.00 s 2141s [ 471/5474] TestArray#test_splice = 0.00 s 2141s [ 472/5474] TestArray#test_filter = 0.01 s 2141s [ 473/5474] TestArray#test_max_uncomparable = 0.00 s 2141s [ 474/5474] TestArray#test_push = 0.00 s 2141s [ 475/5474] TestArray#test_each = 0.00 s 2141s [ 476/5474] TestArray#test_length = 0.00 s 2141s [ 477/5474] TestArray#test_flatten_wrong_argument = 0.00 s 2141s [ 478/5474] TestArray#test_slice_frozen_array = 0.00 s 2141s [ 479/5474] TestArray#test_beg_end_0 = 0.00 s 2141s [ 480/5474] TestArray#test_shift = 0.00 s 2141s [ 481/5474] TestArray#test_0_literal = 0.00 s 2141s [ 482/5474] TestArray#test_max = 0.04 s 2141s [ 483/5474] TestArray#test_index = 0.00 s 2141s [ 484/5474] TestArray#test_flatten_level0 = 0.00 s 2141s [ 485/5474] TestArray#test_rindex2 = 0.01 s 2141s [ 486/5474] TestArray#test_last = 0.00 s 2141s [ 487/5474] TestArray#test_split_0 = 0.00 s 2141s [ 488/5474] TestArray#test_AREF = 0.00 s 2141s [ 489/5474] TestArray#test_uniq_bang_with_freeze = 0.00 s 2142s [ 490/5474] TestArray#test_sample = 0.58 s 2142s [ 491/5474] TestArray#test_sum = 0.02 s 2142s [ 492/5474] TestArray#test_delete2 = 0.00 s 2142s [ 493/5474] TestArray#test_include? = 0.00 s 2142s [ 494/5474] TestArray#test_combination_clear = 0.10 s 2142s [ 495/5474] TestArray#test_last2 = 0.00 s 2142s [ 496/5474] TestArray#test_clone = 0.00 s 2142s [ 497/5474] TestArray#test_percent_I = 0.00 s 2142s [ 498/5474] TestArray#test_take = 0.00 s 2142s [ 499/5474] TestArray#test_select = 0.00 s 2142s [ 500/5474] TestArray#test_bsearch_index_in_find_minimum_mode = 0.00 s 2142s [ 501/5474] TestArray#test_uniq_with_block = 0.00 s 2142s [ 502/5474] TestArray#test_fill = 0.00 s 2142s [ 503/5474] TestArray#test_join = 0.02 s 2142s [ 504/5474] TestArray#test_empty_0 = 0.00 s 2142s [ 505/5474] TestArray#test_reject = 0.01 s 2142s [ 506/5474] TestArray#test_MINUS_big_array = 0.00 s 2142s [ 507/5474] TestArray#test_LSHIFT = 0.00 s 2142s [ 508/5474] TestArray#test_rassoc = 0.00 s 2142s [ 509/5474] TestArray#test_OR_big_array = 0.00 s 2142s [ 510/5474] TestArray#test_reverse! = 0.00 s 2142s [ 511/5474] TestArray#test_min_uncomparable = 0.01 s 2142s [ 512/5474] TestArray#test_CMP = 0.00 s 2142s [ 513/5474] TestArray#test_reverse_each = 0.00 s 2142s [ 514/5474] TestArray#test_OR_big_in_order = 0.00 s 2142s [ 515/5474] TestArray#test_join_recheck_elements_type = 0.00 s 2142s [ 516/5474] TestArray#test_size = 0.00 s 2142s [ 517/5474] TestProc#test_curry_lambda = 0.03 s 2142s [ 518/5474] TestProc#test_proc_single_arg_with_keywords_accepted_and_yielded = 0.00 s 2142s [ 519/5474] TestProc#test_proc_args_rest = 0.00 s 2142s [ 520/5474] TestProc#test_compose_with_noncallable = 0.00 s 2146s [ 521/5474] TestProc#test_overridden_lambda = 3.68 s 2149s [ 522/5474] TestProc#test_overridden_proc = 3.67 s 2149s [ 523/5474] TestProc#test_orphan_break = 0.00 s 2149s [ 524/5474] TestProc#test_curry_lambda_splat = 0.01 s 2149s [ 525/5474] TestProc#test_proc_args_plain = 0.00 s 2149s [ 526/5474] TestProc#test_local_variables = 0.00 s 2149s [ 527/5474] TestProc#test_proc_args_pos_opt_rest_post = 0.00 s 2149s [ 528/5474] TestProc#test_curry_ski_fib = 0.03 s 2149s [ 529/5474] TestProc#test_binding = 0.00 s 2149s [ 530/5474] TestProc#test_proc_location = 0.00 s 2149s [ 531/5474] TestProc#test_hash = 0.01 s 2149s [ 532/5474] TestProc#test_proc_args_opt_post = 0.00 s 2149s [ 533/5474] TestProc#test_lambda_warning_pass_block_symbol_proc = 0.00 s 2149s [ 534/5474] TestProc#test_compose_with_multiple_args = 0.01 s 2149s [ 535/5474] TestProc#test_method_to_proc = 0.01 s 2149s [ 536/5474] TestProc#test_compose = 0.00 s 2149s [ 537/5474] TestProc#test_proc_args_rest_kwsplat = 0.00 s 2149s [ 538/5474] TestProc#test_compose_with_block = 0.00 s 2149s [ 539/5474] TestProc#test_proc_args_opt_block = 0.00 s 2153s [ 540/5474] TestProc#test_local_variable_set_wb = 3.93 s 2154s [ 541/5474] TestProc#test_block_propagation = 0.00 s 2154s [ 542/5474] TestProc#test_local_variables_nested = 0.00 s 2154s [ 543/5474] TestProc#test_compose_with_callable = 0.00 s 2154s [ 544/5474] TestProc#test_proc_args_opt_rest_post = 0.00 s 2154s [ 545/5474] TestProc#test_to_proc = 0.00 s 2154s [ 546/5474] TestProc#test_eq = 0.00 s 2156s [ 547/5474] TestProc#test_refined_call = 2.58 s 2156s [ 548/5474] TestProc#test_local_variable_get = 0.00 s 2156s [ 549/5474] TestProc#test_proc_args_pos_opt_rest = 0.00 s 2156s [ 550/5474] TestProc#test_local_variable_set = 0.00 s 2156s [ 551/5474] TestProc#test_localjump_error = 0.00 s 2156s [ 552/5474] TestProc#test_binding_receiver = 0.00 s 2156s [ 553/5474] TestProc#test_arity2 = 0.00 s 2156s [ 554/5474] TestProc#test_local_variables_in_other_context = 0.00 s 2156s [ 555/5474] TestProc#test_proc_args_opt = 0.00 s 2160s [ 556/5474] TestProc#test_proc_mark = 3.99 s 2160s [ 557/5474] TestProc#test_curry_instance_exec = 0.00 s 2160s [ 558/5474] TestProc#test_not_orphan_next = 0.00 s 2160s [ 559/5474] TestProc#test_proc_args_opt_single = 0.01 s 2160s [ 560/5474] TestProc#test_proc_args_pos_opt_rest_post_block = 0.01 s 2160s [ 561/5474] TestProc#test_proc_args_opt_rest_post_block = 0.01 s 2160s [ 562/5474] TestProc#test_proc_args_pos_opt = 0.00 s 2160s [ 563/5474] TestProc#test_block_given_method = 0.00 s 2160s [ 564/5474] TestProc#test_proc_args_pos_opt_block = 0.01 s 2160s [ 565/5474] TestProc#test_compose_with_method = 0.00 s 2160s [ 566/5474] TestProc#test_block_source_location = 0.00 s 2160s [ 567/5474] TestProc#test_curry_proc = 0.00 s 2160s [ 568/5474] TestProc#test_proc_args_rest_post_block = 0.00 s 2160s [ 569/5474] TestProc#test_block_persist_between_calls = 0.00 s 2160s [ 570/5474] TestProc#test_proc_args_rest_block = 0.00 s 2160s [ 571/5474] TestProc#test_curry_with_trace = 0.13 s 2160s [ 572/5474] TestProc#test_curry_given_blocks = 0.01 s 2160s [ 573/5474] TestProc#test_proc_args_opt_rest_block = 0.01 s 2160s [ 574/5474] TestProc#test_curry_no_arguments = 0.00 s 2160s [ 575/5474] TestProc#test_proc_args_only_rest = 0.00 s 2160s [ 576/5474] TestProc#test_orphan_return = 0.00 s 2160s [ 577/5474] TestProc#test_proc_args_pos_unleashed = 0.00 s 2160s [ 578/5474] TestProc#test_proc_args_rest_kw = 0.00 s 2160s [ 579/5474] TestProc#test_block_given_method_to_proc = 0.00 s 2160s [ 580/5474] TestProc#test_proc_args_opt_rest = 0.00 s 2160s [ 581/5474] TestProc#test_proc_args_pos_rest_post = 0.00 s 2160s [ 582/5474] TestProc#test_lambda_warning_pass_symbol_proc = 0.00 s 2160s [ 583/5474] TestProc#test_lambda? = 0.00 s 2160s [ 584/5474] TestProc#test_block_par = 0.00 s 2163s [ 585/5474] TestProc#test_prepended_call = 2.55 s 2163s [ 586/5474] TestProc#test_curry_optional_params = 0.01 s 2163s [ 587/5474] TestProc#test_proc_args_pos_opt_rest_block = 0.00 s 2163s [ 588/5474] TestProc#test_local_variable_defined? = 0.00 s 2163s [ 589/5474] TestProc#test_proc_args_pos_block = 0.00 s 2163s [ 590/5474] TestProc#test_curry_binding = 0.00 s 2163s [ 591/5474] TestProc#test_compose_with_lambda = 0.00 s 2163s [ 592/5474] TestProc#test_lambda_warning_pass_lambda = 0.00 s 2163s [ 593/5474] TestProc#test_proc_args_pos_opt_post = 0.00 s 2163s [ 594/5474] TestProc#test_source_location = 0.00 s 2163s [ 595/5474] TestProc#test_arity = 0.01 s 2163s [ 596/5474] TestProc#test_proc_args_pos_opt_post_block = 0.01 s 2163s [ 597/5474] TestProc#test_splat_without_respond_to = 0.00 s 2163s [ 598/5474] TestProc#test_bound_parameters = 0.00 s 2163s [ 599/5474] TestProc#test_curry_proc_splat = 0.01 s 2163s [ 600/5474] TestProc#test_lambda_warning_normal = 0.00 s 2163s [ 601/5474] TestProc#test_proc_args_pos_rest_block = 0.00 s 2163s [ 602/5474] TestProc#test_proc_args_opt_post_block = 0.00 s 2163s [ 603/5474] TestProc#test_proc_args_pos_rest_post_block = 0.00 s 2163s [ 604/5474] TestProc#test_proc_args_rest_post = 0.00 s 2163s [ 605/5474] TestProc#test_proc = 0.00 s 2163s [ 606/5474] TestProc#test_proc_lambda = 0.00 s 2163s [ 607/5474] TestProc#test_curry_passed_block = 0.00 s 2163s [ 608/5474] TestParse#test_heredoc_interpolation = 0.00 s 2163s [ 609/5474] TestParse#test_parse_string = 0.01 s 2163s [ 610/5474] TestParse#test_carrige_return = 0.00 s 2163s [ 611/5474] TestParse#test_set_backref = 0.01 s 2163s [ 612/5474] TestParse#test_location_of_invalid_token = 0.00 s 2163s [ 613/5474] TestParse#test_pow_asgn = 0.01 s 2163s [ 614/5474] TestParse#test_command_def_cmdarg = 0.00 s 2163s [ 615/5474] TestParse#test_unexpected_token_error = 0.00 s 2163s [ 616/5474] TestParse#test_rescue_in_command_assignment = 0.01 s 2163s [ 617/5474] TestParse#test_symbol = 0.01 s 2163s [ 618/5474] TestParse#test_op_asgn1_with_block = 0.01 s 2163s [ 619/5474] TestParse#test_arg = 0.00 s 2163s [ 620/5474] TestParse#test_dstr_disallowed_variable = 0.01 s 2163s [ 621/5474] TestParse#test_utf8_bom = 0.00 s 2163s [ 622/5474] TestParse#test_dstr = 0.00 s 2163s [ 623/5474] TestParse#test_class_module = 0.00 s 2163s [ 624/5474] TestParse#test_cdmarg_after_command_args_and_tlbrace_arg = 0.00 s 2163s [ 625/5474] TestParse#test_unterminated_regexp_error = 0.00 s 2163s [ 626/5474] TestParse#test_disallowed_class_variable = 0.01 s 2163s [ 627/5474] TestParse#test_block_call_colon2 = 0.00 s 2163s [ 628/5474] TestParse#test_dsym = 0.00 s 2163s [ 629/5474] TestParse#test_mlhs_node = 0.00 s 2163s [ 630/5474] TestParse#test_duplicate_argument = 0.01 s 2163s [ 631/5474] TestParse#test_nonascii_constant = 0.09 s 2163s [ 632/5474] TestParse#test_arg2 = 0.01 s 2163s [ 633/5474] TestParse#test_words = 0.00 s 2163s [ 634/5474] TestParse#test_file_in_indented_heredoc = 0.00 s 2163s [ 635/5474] TestParse#test_void_value_in_rhs = 0.01 s 2163s [ 636/5474] TestParse#test_block_variable = 0.00 s 2163s [ 637/5474] TestParse#test_else_without_rescue = 0.00 s 2163s [ 638/5474] TestParse#test_invalid_instance_variable = 0.00 s 2166s [ 639/5474] TestParse#test_invalid_char = 2.48 s 2166s [ 640/5474] TestParse#test_invalid_class_variable = 0.00 s 2166s [ 641/5474] TestParse#test_bad_arg = 0.01 s 2166s [ 642/5474] TestParse#test_whitespace_warning = 0.04 s 2166s [ 643/5474] TestParse#test_no_shadowing_variable_warning = 0.00 s 2166s [ 644/5474] TestParse#test_lparenarg = 0.00 s 2166s [ 645/5474] TestParse#test_here_document = 0.01 s 2166s [ 646/5474] TestParse#test_alias_backref = 0.00 s 2166s [ 647/5474] TestParse#test_named_capture_conflict = 0.01 s 2166s [ 648/5474] TestParse#test_op_name = 0.00 s 2166s [ 649/5474] TestParse#test_call_method = 0.00 s 2166s [ 650/5474] TestParse#test_backquote = 0.00 s 2166s [ 651/5474] TestParse#test_dot_in_next_line = 0.00 s 2166s [ 652/5474] TestParse#test_eof_in_def = 0.00 s 2166s [ 653/5474] TestParse#test_dynamic_constant_assignment = 0.01 s 2166s [ 654/5474] TestParse#test_do_lambda = 0.00 s 2166s [ 655/5474] TestParse#test_literal_concat = 0.00 s 2166s [ 656/5474] TestParse#test_serial_comparison = 0.00 s 2166s [ 657/5474] TestParse#test_assign_in_conditional = 0.00 s 2166s [ 658/5474] TestParse#test_xstring = 0.00 s 2166s [ 659/5474] TestParse#test_eof = 0.00 s 2166s [ 660/5474] TestParse#test_nonascii_const_set = 0.04 s 2166s [ 661/5474] TestParse#test_disallowed_instance_variable = 0.01 s 2166s [ 662/5474] TestParse#test_arg_concat = 0.00 s 2166s [ 663/5474] TestParse#test_yyerror_at_eol = 0.00 s 2170s [ 664/5474] TestParse#test_error_def_in_argument = 3.87 s 2170s [ 665/5474] TestParse#test_disallowed_gloal_variable = 0.01 s 2170s [ 666/5474] TestParse#test_percent = 0.01 s 2170s [ 667/5474] TestParse#test_command_call = 0.01 s 2170s [ 668/5474] TestClass#test_singleton_class_of_frozen_object = 0.00 s 2172s [ 669/5474] TestClass#test_singleton_class = 2.67 s 2172s [ 670/5474] TestClass#test_append_features = 0.00 s 2172s [ 671/5474] TestClass#test_cloned_class = 0.00 s 2175s [ 672/5474] TestClass#test_subclass_gc = 2.94 s 2175s [ 673/5474] TestClass#test_assign_frozen_class_to_const = 0.17 s 2176s [ 674/5474] TestClass#test_class_cmp = 0.06 s 2176s [ 675/5474] TestClass#test_invalid_next_from_class_definition = 0.11 s 2176s [ 676/5474] TestClass#test_superclass = 0.00 s 2176s [ 677/5474] TestClass#test_superclass_of_basicobject = 0.00 s 2176s [ 678/5474] TestClass#test_s_inherited = 0.04 s 2181s [ 679/5474] TestClass#test_nested_class_removal = 4.95 s 2181s [ 680/5474] TestClass#test_nonascii_name = 0.08 s 2181s [ 681/5474] TestClass#test_invalid_break_from_class_definition = 0.01 s 2181s [ 682/5474] TestClass#test_initialize_copy = 0.02 s 2181s [ 683/5474] TestClass#test_module_function = 0.01 s 2181s [ 684/5474] TestClass#test_singleton_class_p = 0.01 s 2181s [ 685/5474] TestClass#test_invalid_yield_from_class_definition = 0.01 s 2181s [ 686/5474] TestClass#test_invalid_redo_from_class_definition = 0.00 s 2181s [ 687/5474] TestClass#test_00_new_basic = 0.05 s 2181s [ 688/5474] TestClass#test_clone_when_singleton_class_of_singleton_class_exists = 0.02 s 2181s [ 689/5474] TestClass#test_namescope_error_message = 0.00 s 2181s [ 690/5474] TestClass#test_extend_object = 0.00 s 2181s [ 691/5474] TestClass#test_prepend_features = 0.01 s 2181s [ 692/5474] TestClass#test_invalid_superclass = 0.02 s 2181s [ 693/5474] TestClass#test_cloned_singleton_method_added = 0.01 s 2181s [ 694/5474] TestClass#test_01_new_inherited = 0.00 s 2183s [ 695/5474] TestClass#test_subclass_gc_stress = 2.12 s 2183s [ 696/5474] TestClass#test_module_specific_methods = 0.00 s 2183s [ 697/5474] TestClass#test_s_new = 0.00 s 2183s [ 698/5474] TestClass#test_check_inheritable = 0.00 s 2183s [ 699/5474] TestClass#test_invalid_reset_superclass = 0.00 s 2183s [ 700/5474] TestClass#test_class_initialize = 0.00 s 2183s [ 701/5474] TestClass#test_invalid_return_from_class_definition = 0.00 s 2192s [ 702/5474] TestClass#test_should_not_expose_singleton_class_without_metaclass = 8.57 s 2194s [ 703/5474] TestClass#test_cannot_reinitialize_class_with_initialize_copy = 2.51 s 2194s [ 704/5474] TestClass#test_freeze_to_s = 0.01 s 2194s [ 705/5474] TestClass#test_clone = 0.01 s 2194s [ 706/5474] TestClass#test_instantiate_singleton_class = 0.01 s 2194s [ 707/5474] TestClass#test_clone_when_method_exists_on_singleton_class_of_singleton_class = 0.02 s 2194s [ 708/5474] TestEval#test_module_eval_block_symbol = 0.00 s 2194s [ 709/5474] TestEval#test_instance_eval_method_proc = 0.01 s 2194s [ 710/5474] TestEval#test_module_eval_string_basic = 0.01 s 2194s [ 711/5474] TestEval#test_module_eval_block_basic = 0.00 s 2194s [ 712/5474] TestEval#test_instance_eval_block_basic = 0.04 s 2198s [ 713/5474] TestEval#test_gced_binding_block = 3.93 s 2198s [ 714/5474] TestEval#test_eval_basic = 0.00 s 2198s [ 715/5474] TestEval#test_eval_orig = 0.01 s 2198s [ 716/5474] TestEval#test_define_method_block = 0.00 s 2198s [ 717/5474] TestEval#test_instance_eval_on_argf_singleton_class = 0.00 s 2198s [ 718/5474] TestEval#test_fstring_instance_eval = 0.00 s 2198s [ 719/5474] TestEval#test_instance_eval_block_self = 0.00 s 2198s [ 720/5474] TestEval#test_eval_binding_basic = 0.00 s 2198s [ 721/5474] TestEval#test_instance_exec_eval_method_definition = 0.00 s 2198s [ 722/5474] TestEval#test_fixnum_instance_eval_cvar = 0.00 s 2198s [ 723/5474] TestEval#test_instance_exec_cvar = 0.00 s 2198s [ 724/5474] TestEval#test_nil_instance_eval_cvar = 0.00 s 2198s [ 725/5474] TestEval#test_instance_exec_method_definition = 0.00 s 2198s [ 726/5474] TestEval#test_instance_eval_string_basic = 0.01 s 2198s [ 727/5474] TestEval#test_instance_eval_block_symbol = 0.00 s 2199s [ 728/5474] TestEval#test_define_method_toplevel = 0.39 s 2199s [ 729/5474] TestEval#test_eval_using_integer_as_binding = 0.00 s 2199s [ 730/5474] TestEval#test_instance_eval_cvar = 0.01 s 2199s [ 731/5474] TestEval#test_instance_exec_block_basic = 0.06 s 2204s [ 732/5474] TestEval#test_eval_with_toplevel_binding = 4.13 s 2204s [ 733/5474] TestEval#test_return_in_eval_lambda = 0.01 s 2204s [ 734/5474] TestEval#test_instance_eval_method = 0.05 s 2204s [ 735/5474] TestEval#test_eval_and_define_method = 0.00 s 2204s [ 736/5474] TestEval#test_instance_eval_const = 0.00 s 2204s [ 737/5474] TestEval#test_gced_eval_location = 0.03 s 2204s [ 738/5474] TestEval#test_eval_raise = 0.00 s 2204s [ 739/5474] TestEval#test_cvar_scope_with_instance_eval = 0.00 s 2204s [ 740/5474] TestComparable#test_between = 0.00 s 2204s [ 741/5474] TestComparable#test_le = 0.02 s 2204s [ 742/5474] TestComparable#test_ge = 0.00 s 2204s [ 743/5474] TestComparable#test_clamp = 0.00 s 2204s [ 744/5474] TestComparable#test_equal = 0.02 s 2204s [ 745/5474] TestComparable#test_no_cmp = 0.00 s 2204s [ 746/5474] TestComparable#test_inversed_compare = 0.00 s 2204s [ 747/5474] TestComparable#test_lt = 0.00 s 2204s [ 748/5474] TestComparable#test_err = 0.00 s 2204s [ 749/5474] TestComparable#test_gt = 0.00 s 2204s [ 750/5474] TestPath#test_path = 0.00 s 2204s [ 751/5474] TestString#test_slice! = 0.00 s 2204s [ 752/5474] TestString#test_PLUS = 0.00 s 2204s [ 753/5474] TestString#test_squeeze! = 0.00 s 2204s [ 754/5474] TestString#test_squeeze = 0.00 s 2204s [ 755/5474] TestString#test_dummy_inspect = 0.01 s 2204s [ 756/5474] TestString#test_eql? = 0.00 s 2204s [ 757/5474] TestString#test_split_lookbehind = 0.00 s 2204s [ 758/5474] TestString#test_match_method = 0.00 s 2204s [ 759/5474] TestString#test_prepend = 0.00 s 2204s [ 760/5474] TestString#test_downcase = 0.00 s 2204s [ 761/5474] TestString#test_times = 0.00 s 2204s [ 762/5474] TestString#test_sub = 0.01 s 2204s [ 763/5474] TestString#test_downcase2 = 0.00 s 2204s [ 764/5474] TestString#test_reverse = 0.00 s 2204s [ 765/5474] TestString#test_VERY_EQUAL = 0.00 s 2204s [ 766/5474] TestString#test_gsub! = 0.00 s 2204s [ 767/5474] TestString#test_lstrip = 0.00 s 2204s [ 768/5474] TestString#test_strip = 0.00 s 2204s [ 769/5474] TestString#test_each_char = 0.01 s 2204s [ 770/5474] TestString#test_match_p_regexp = 0.01 s 2204s [ 771/5474] TestString#test_gsub = 0.01 s 2204s [ 772/5474] TestString#test_tr_s = 0.00 s 2204s [ 773/5474] TestString#test_lstrip_bang = 0.00 s 2204s [ 774/5474] TestString#test_concat_literals = 0.00 s 2204s [ 775/5474] TestString#test_clear_nonasciicompat = 0.00 s 2207s [ 776/5474] TestString#test_eq_tilde_can_be_overridden = 3.96 s 2207s [ 777/5474] TestString#test_hash = 0.00 s 2207s [ 778/5474] TestString#test_delete! = 0.00 s 2207s [ 779/5474] TestString#test_split_invalid_sequence = 0.00 s 2207s [ 780/5474] TestString#test_capitalize = 0.00 s 2207s [ 781/5474] TestString#test_byteslice = 0.00 s 2207s [ 782/5474] TestString#test_succ = 0.00 s 2207s [ 783/5474] TestString#test_split_encoding = 0.01 s 2207s [ 784/5474] TestString#test_empty? = 0.00 s 2207s [ 785/5474] TestString#test_inspect_nul = 0.00 s 2207s [ 786/5474] TestString#test_lines = 0.00 s 2207s [ 787/5474] TestString#test_strip! = 0.00 s 2207s [ 788/5474] TestString#test_intern = 0.00 s 2207s [ 789/5474] TestString#test_split = 0.00 s 2207s [ 790/5474] TestString#test_upcase2 = 0.00 s 2207s [ 791/5474] TestString#test_MUL = 0.00 s 2207s [ 792/5474] TestString#test_tr! = 0.00 s 2207s [ 793/5474] TestString#test_str_new4 = 0.00 s 2207s [ 794/5474] TestString#test_ord = 0.01 s 2207s [ 795/5474] TestString#test_substr_negative_begin = 0.00 s 2207s [ 796/5474] TestString#test_tr_s! = 0.00 s 2207s [ 797/5474] TestString#test_chop! = 0.00 s 2207s [ 798/5474] TestString#test_dup = 0.00 s 2207s [ 799/5474] TestString#test_to_s_2 = 0.00 s 2207s [ 800/5474] TestString#test_each_byte = 0.00 s 2207s [ 801/5474] TestString#test_each_codepoint = 0.00 s 2207s [ 802/5474] TestString#test_substr_code_range = 0.00 s 2207s [ 803/5474] TestString#test_chars = 0.00 s 2207s [ 804/5474] TestString#test_clear = 0.00 s 2207s [ 805/5474] TestString#test_ljust = 0.00 s 2207s [ 806/5474] TestString#test_split_wchar = 0.01 s 2207s [ 807/5474] TestString#test_chr = 0.00 s 2207s [ 808/5474] TestString#test_rb_str_new4 = 0.00 s 2207s [ 809/5474] TestString#test_scan = 0.00 s 2207s [ 810/5474] TestString#test_sub_hash = 0.00 s 2207s [ 811/5474] TestString#test_MOD = 0.00 s 2207s [ 812/5474] TestString#test_delete_prefix = 0.00 s 2207s [ 813/5474] TestString#test_upcase = 0.00 s 2207s [ 814/5474] TestString#test_match_p_string = 0.00 s 2207s [ 815/5474] TestString#test_chomp = 0.00 s 2207s [ 816/5474] TestString#test_split_with_block = 0.01 s 2208s [ 817/5474] TestString#test_each_grapheme_cluster = 0.31 s 2208s [ 818/5474] TestString#test_rindex = 0.00 s 2208s [ 819/5474] TestString#test_to_str = 0.03 s 2208s [ 820/5474] TestString#test_to_f = 0.00 s 2208s [ 821/5474] TestString#test_oct = 0.00 s 2208s [ 822/5474] TestString#test_sub! = 0.00 s 2208s [ 823/5474] TestString#test_insert = 0.00 s 2208s [ 824/5474] TestString#test_delete = 0.00 s 2208s [ 825/5474] TestString#test_count = 0.00 s 2208s [ 826/5474] TestString#test_dump = 0.00 s 2208s [ 827/5474] TestString#test_next! = 0.00 s 2208s [ 828/5474] TestString#test_swapcase = 0.00 s 2208s [ 829/5474] TestString#test_capitalize! = 0.00 s 2208s [ 830/5474] TestString#test_unpack = 0.00 s 2208s [ 831/5474] TestString#test_initialize = 0.00 s 2208s [ 832/5474] TestString#test_upto_numeric = 0.00 s 2208s [ 833/5474] TestString#test_to_i = 0.01 s 2208s [ 834/5474] TestString#test_to_id = 0.00 s 2208s [ 835/5474] TestString#test_MATCH = 0.00 s 2208s [ 836/5474] TestString#test_upto = 0.01 s 2208s [ 837/5474] TestString#test_try_convert = 0.00 s 2208s [ 838/5474] TestString#test_sum_long = 0.06 s 2208s [ 839/5474] TestString#test_gsub_encoding = 0.00 s 2208s [ 840/5474] TestString#test_next = 0.00 s 2208s [ 841/5474] TestString#test_mod_check = 0.00 s 2208s [ 842/5474] TestString#test_codepoints = 0.00 s 2208s [ 843/5474] TestString#test_split_dupped = 0.00 s 2208s [ 844/5474] TestString#test_respond_to = 0.00 s 2208s [ 845/5474] TestString#test_splice! = 0.00 s 2208s [ 846/5474] TestString#test_concat = 0.00 s 2208s [ 847/5474] TestString#test_bytes = 0.00 s 2208s [ 848/5474] TestString#test_slice = 0.00 s 2208s [ 849/5474] TestString#test_end_with? = 0.00 s 2208s [ 850/5474] TestString#test_upto_nonalnum = 0.00 s 2208s [ 851/5474] TestString#test_delete_suffix = 0.00 s 2208s [ 852/5474] TestString#test_shared_force_encoding = 0.00 s 2208s [ 853/5474] TestString#test_s_new = 0.00 s 2208s [ 854/5474] TestString#test_to_s = 0.00 s 2208s [ 855/5474] TestString#test_gsub_hash = 0.00 s 2208s [ 856/5474] TestString#test_rstrip = 0.00 s 2208s [ 857/5474] TestString#test_times2 = 0.00 s 2208s [ 858/5474] TestString#test_rb_str_to_str = 0.00 s 2208s [ 859/5474] TestString#test_replace = 0.00 s 2208s [ 860/5474] TestString#test_nesting_shared_b = 0.00 s 2208s [ 861/5474] TestString#test_nesting_shared = 0.00 s 2208s [ 862/5474] TestString#test_split_invalid_argument = 0.00 s 2208s [ 863/5474] TestString#test_center = 0.00 s 2208s [ 864/5474] TestString#test_rb_str_shared_replace = 0.00 s 2208s [ 865/5474] TestString#test_start_with? = 0.00 s 2208s [ 866/5474] TestString#test_delete_prefix_bang = 0.00 s 2208s [ 867/5474] TestString#test_EQUAL = 0.00 s 2208s [ 868/5474] TestString#test_tr = 0.00 s 2208s [ 869/5474] TestString#test_unknown_string_option = 0.00 s 2208s [ 870/5474] TestString#test_each_line_chomp = 0.01 s 2208s [ 871/5474] TestString#test_chomp! = 0.00 s 2208s [ 872/5474] TestString#test_delete_suffix_bang = 0.00 s 2208s [ 873/5474] TestString#test_chop = 0.00 s 2208s [ 874/5474] TestString#test_each = 0.00 s 2208s [ 875/5474] TestString#test_length = 0.00 s 2208s [ 876/5474] TestString#test_initialize_shared = 0.00 s 2208s [ 877/5474] TestString#test_index = 0.00 s 2208s [ 878/5474] TestString#test_downcase! = 0.00 s 2208s [ 879/5474] TestString#test_rstrip_bang = 0.00 s 2212s [ 880/5474] TestString#test_fs = 3.86 s 2212s [ 881/5474] TestString#test_ascii_incomat_inspect = 0.00 s 2212s [ 882/5474] TestString#test_AREF = 0.00 s 2212s [ 883/5474] TestString#test_sum = 0.00 s 2212s [ 884/5474] TestString#test_sum_2 = 0.01 s 2212s [ 885/5474] TestString#test_succ! = 0.00 s 2212s [ 886/5474] TestString#test_casecmp? = 0.00 s 2212s [ 887/5474] TestString#test_include? = 0.00 s 2212s [ 888/5474] TestString#test_regexp_match_subclass = 0.00 s 2212s [ 889/5474] TestString#test_clone = 0.00 s 2212s [ 890/5474] TestString#test_frozen_check = 0.00 s 2212s [ 891/5474] TestString#test_hex = 0.00 s 2212s [ 892/5474] TestString#test_each_line = 0.01 s 2215s [ 893/5474] TestString#test_gsub_enumerator = 3.78 s 2215s [ 894/5474] TestString#test_LSHIFT = 0.01 s 2215s [ 895/5474] TestString#test_upcase! = 0.00 s 2216s [ 896/5474] TestString#test_partition = 0.01 s 2216s [ 897/5474] TestString#test_reverse! = 0.00 s 2216s [ 898/5474] TestString#test_swapcase! = 0.00 s 2216s [ 899/5474] TestString#test_rjust = 0.00 s 2216s [ 900/5474] TestString#test_CMP = 0.00 s 2216s [ 901/5474] TestString#test_rpartition = 0.01 s 2216s [ 902/5474] TestString#test_casecmp = 0.00 s 2216s [ 903/5474] TestString#test_size = 0.00 s 2216s [ 904/5474] TestString#test_initialize_nonstring = 0.00 s 2216s [ 905/5474] TestVariable#test_local_variables_with_kwarg = 0.00 s 2216s [ 906/5474] TestVariable#test_local_variables = 0.00 s 2216s [ 907/5474] TestVariable#test_external_ivars = 0.00 s 2216s [ 908/5474] TestVariable#test_local_variables2 = 0.00 s 2216s [ 909/5474] TestVariable#test_global_variable_popped = 0.00 s 2216s [ 910/5474] TestVariable#test_constant_popped = 0.00 s 2216s [ 911/5474] TestVariable#test_include_refined_module_class_variable = 0.00 s 2216s [ 912/5474] TestVariable#test_shadowing_block_local_variables = 0.00 s 2216s [ 913/5474] TestVariable#test_shadowing_local_variables = 0.00 s 2216s [ 914/5474] TestVariable#test_local_variables3 = 0.00 s 2216s [ 915/5474] TestStringchar#test_string = 0.00 s 2217s [ 916/5474] TestStringchar#test_dump = 1.41 s 2217s [ 917/5474] TestStringchar#test_bang = 0.00 s 2217s [ 918/5474] TestStringchar#test_char = 0.01 s 2217s [ 919/5474] TestIterator#test_break_from_enum = 0.00 s 2217s [ 920/5474] TestIterator#test_collect = 0.00 s 2217s [ 921/5474] TestIterator#test_itertest = 0.01 s 2217s [ 922/5474] TestIterator#test_iter_test2 = 0.01 s 2217s [ 923/5474] TestIterator#test_array_for_masgn = 0.00 s 2217s [ 924/5474] TestIterator#test_yield_vs_call = 0.00 s 2217s [ 925/5474] TestIterator#test_block_passing = 0.00 s 2217s [ 926/5474] TestIterator#test_argument = 0.00 s 2217s [ 927/5474] TestIterator#test_assoc_yield = 0.01 s 2217s [ 928/5474] TestIterator#test_enumerator = 0.01 s 2217s [ 929/5474] TestIterator#test_break__nested_loop2 = 0.00 s 2217s [ 930/5474] TestIterator#test_return_trace_func = 0.00 s 2217s [ 931/5474] TestIterator#test_break = 0.00 s 2217s [ 932/5474] TestIterator#test_marity = 0.00 s 2221s [ 933/5474] TestIterator#test_yield_at_toplevel = 3.76 s 2221s [ 934/5474] TestIterator#test_proc_return2 = 0.00 s 2221s [ 935/5474] TestIterator#test_block_given_within_iterator = 0.00 s 2221s [ 936/5474] TestIterator#test_array = 0.00 s 2221s [ 937/5474] TestIterator#test_return2 = 0.00 s 2221s [ 938/5474] TestIterator#test_proc_return1 = 0.00 s 2221s [ 939/5474] TestIterator#test_return1 = 0.00 s 2221s [ 940/5474] TestIterator#test_block = 0.00 s 2221s [ 941/5474] TestIterator#test_break__nested_loop1 = 0.00 s 2221s [ 942/5474] TestIterator#test_break__nested_loop3 = 0.00 s 2221s [ 943/5474] TestIterator#test_block_given = 0.00 s 2221s [ 944/5474] TestIterator#test_append_method_to_built_in_class = 0.01 s 2221s [ 945/5474] TestIterator#test_block_argument_without_paren = 0.00 s 2221s [ 946/5474] TestIterator#test_iter4 = 0.00 s 2221s [ 947/5474] TestIterator#test_nested_iterator = 0.00 s 2221s [ 948/5474] TestIterator#test_get_block = 0.00 s 2221s [ 949/5474] TestIterator#test_proc = 0.00 s 2221s [ 950/5474] TestNameError#test_info_method_missing = 0.00 s 2221s [ 951/5474] TestNameError#test_new_name = 0.00 s 2221s [ 952/5474] TestNameError#test_info_const_name = 0.00 s 2221s [ 953/5474] TestNameError#test_info_const = 0.00 s 2221s [ 954/5474] TestNameError#test_new_message = 0.00 s 2221s [ 955/5474] TestNameError#test_new_receiver = 0.00 s 2221s [ 956/5474] TestNameError#test_new_default = 0.00 s 2221s [ 957/5474] TestCall#test_call_block_order = 0.00 s 2221s [ 958/5474] TestCall#test_safe_call_block_call = 0.00 s 2221s [ 959/5474] TestCall#test_safe_call_evaluate_arguments_only_method_call_is_made = 0.00 s 2221s [ 960/5474] TestCall#test_call_splat_order = 0.00 s 2221s [ 961/5474] TestCall#test_safe_call_block_command = 0.00 s 2221s [ 962/5474] TestCall#test_safe_call_block_call_command = 0.00 s 2221s [ 963/5474] TestCall#test_safe_call = 0.00 s 2221s [ 964/5474] TestCall#test_callinfo = 0.01 s 2221s [ 965/5474] TestCall#test_safe_call_block_call_brace = 0.00 s 2221s [ 966/5474] TestCall#test_invalid_safe_call = 0.00 s 2221s [ 967/5474] TestCall#test_call = 0.00 s 2221s [ 968/5474] TestMethodCache#test_undef_with_subclasses_complicated = 0.00 s 2221s [ 969/5474] TestMethodCache#test_negative_cache_with_and_without_subclasses = 0.00 s 2221s [ 970/5474] TestMethodCache#test_undef = 0.08 s 2221s [ 971/5474] TestMethodCache#test_undef_with_subclasses = 0.00 s 2221s [ 972/5474] TestAlias#test_alias_inspect = 0.00 s 2221s [ 973/5474] TestAlias#test_cyclic_zsuper = 0.00 s 2221s [ 974/5474] TestAlias#test_alias = 0.00 s 2225s [ 975/5474] TestAlias#test_alias_in_module = 4.17 s 2225s [ 976/5474] TestAlias#test_special_const_alias = 0.00 s 2225s [ 977/5474] TestAlias#test_send_alias = 0.00 s 2225s [ 978/5474] TestAlias#test_alias_method_equation = 0.00 s 2225s [ 979/5474] TestAlias#test_alias_module_method_added = 0.00 s 2229s [ 980/5474] TestAlias#test_alias_wb_miss = 4.37 s 2229s [ 981/5474] TestAlias#test_alias_class_method_added = 0.00 s 2229s [ 982/5474] TestAlias#test_super_in_aliased_module_method = 0.00 s 2229s [ 983/5474] TestAlias#test_nonexistmethod = 0.00 s 2230s [ 984/5474] TestAlias#test_alias_with_zsuper_method = 0.01 s 2230s [ 985/5474] TestStruct::SubStruct#test_initialize_with_kw = 0.00 s 2230s [ 986/5474] TestStruct::SubStruct#test_to_h_block = 0.00 s 2230s [ 987/5474] TestStruct::SubStruct#test_hash = 0.00 s 2230s [ 988/5474] TestStruct::SubStruct#test_dig = 0.00 s 2230s [ 989/5474] TestStruct::SubStruct#test_redefinition_warning = 0.00 s 2230s [ 990/5474] TestStruct::SubStruct#test_public_send = 0.00 s 2230s [ 991/5474] TestStruct::SubStruct#test_ref = 0.00 s 2230s [ 992/5474] TestStruct::SubStruct#test_each_pair = 0.00 s 2230s [ 993/5474] TestStruct::SubStruct#test_aset = 0.08 s 2230s [ 994/5474] TestStruct::SubStruct#test_deconstruct_keys = 0.00 s 2230s [ 995/5474] TestStruct::SubStruct#test_struct_new_with_keyword_init = 0.01 s 2230s [ 996/5474] TestStruct::SubStruct#test_inspect = 0.00 s 2230s [ 997/5474] TestStruct::SubStruct#test_values_at = 0.00 s 2230s [ 998/5474] TestStruct::SubStruct#test_struct = 0.00 s 2230s [ 999/5474] TestStruct::SubStruct#test_inherit = 0.00 s 2230s [1000/5474] TestStruct::SubStruct#test_big_struct = 0.00 s 2230s [1001/5474] TestStruct::SubStruct#test_eql = 0.00 s 2230s [1002/5474] TestStruct::SubStruct#test_small_structs = 0.01 s 2230s [1003/5474] TestStruct::SubStruct#test_overridden_aref = 0.00 s 2230s [1004/5474] TestStruct::SubStruct#test_equal = 0.00 s 2230s [1005/5474] TestStruct::SubStruct#test_to_h = 0.00 s 2230s [1006/5474] TestStruct::SubStruct#test_comparison_when_recursive = 0.02 s 2230s [1007/5474] TestStruct::SubStruct#test_initialize = 0.01 s 2230s [1008/5474] TestStruct::SubStruct#test_new_duplicate = 0.00 s 2230s [1009/5474] TestStruct::SubStruct#test_aref = 0.03 s 2230s [1010/5474] TestStruct::SubStruct#test_struct_new = 0.01 s 2230s [1011/5474] TestStruct::SubStruct#test_bang_mark_in_member = 0.00 s 2230s [1012/5474] TestStruct::SubStruct#test_set = 0.00 s 2230s [1013/5474] TestStruct::SubStruct#test_struct_new_with_keyword_init_and_block = 0.00 s 2230s [1014/5474] TestStruct::SubStruct#test_members = 0.00 s 2230s [1015/5474] TestStruct::SubStruct#test_setter_method_returns_value = 0.00 s 2230s [1016/5474] TestStruct::SubStruct#test_question_mark_in_member = 0.00 s 2230s [1017/5474] TestStruct::SubStruct#test_morethan10members = 0.01 s 2230s [1018/5474] TestStruct::SubStruct#test_filter = 0.00 s 2230s [1019/5474] TestStruct::SubStruct#test_junk = 0.00 s 2230s [1020/5474] TestStruct::SubStruct#test_struct_new_with_empty_hash = 0.00 s 2230s [1021/5474] TestStruct::SubStruct#test_error = 0.00 s 2230s [1022/5474] TestStruct::SubStruct#test_each = 0.02 s 2230s [1023/5474] TestStruct::SubStruct#test_init_copy = 0.00 s 2230s [1024/5474] TestStruct::SubStruct#test_overridden_aset = 0.00 s 2230s [1025/5474] TestStruct::SubStruct#test_select = 0.00 s 2230s [1026/5474] TestStruct::SubStruct#test_size = 0.00 s 2230s [1027/5474] TestNoMethodError#test_new_name_args = 0.00 s 2230s [1028/5474] TestNoMethodError#test_new_name = 0.00 s 2230s [1029/5474] TestNoMethodError#test_message_encoding = 0.01 s 2230s [1030/5474] TestNoMethodError#test_new_name_args_priv = 0.00 s 2230s [1031/5474] TestNoMethodError#test_to_s = 0.03 s 2230s [1032/5474] TestNoMethodError#test_new_message = 0.00 s 2230s [1033/5474] TestNoMethodError#test_new_receiver = 0.02 s 2230s [1034/5474] TestNoMethodError#test_new_default = 0.00 s 2230s [1035/5474] TestDefaultGems#test_validate_gemspec = 0.01 s 2230s [1036/5474] TestPack#test_pack_unpack_cC = 0.00 s 2230s [1037/5474] TestPack#test_pack_unpack_vV = 0.00 s 2230s [1038/5474] TestPack#test_pack_unpack_X = 0.00 s 2230s [1039/5474] TestPack#test_pack_unpack_Z = 0.00 s 2230s [1040/5474] TestPack#test_pack_unpack_percent = 0.00 s 2230s [1041/5474] TestPack#test_unpack_N = 0.00 s 2230s [1042/5474] TestPack#test_pack_n = 0.00 s 2230s [1043/5474] TestPack#test_pack_unpack_nN = 0.00 s 2230s [1044/5474] TestPack#test_unpack1 = 0.00 s 2230s [1045/5474] TestPack#test_pack_p2 = 0.00 s 2230s [1046/5474] TestPack#test_pack_unpack_m0 = 0.00 s 2230s [1047/5474] TestPack#test_pack_unpack_aA = 0.00 s 2230s [1048/5474] TestPack#test_pack_unpack_lL = 0.00 s 2230s [1049/5474] TestPack#test_pack_unpack_x = 0.00 s 2230s [1050/5474] TestPack#test_pack_N = 0.00 s 2230s [1051/5474] TestPack#test_unpack_n = 0.00 s 2230s [1052/5474] TestPack#test_unpack_offset = 0.00 s 2230s [1053/5474] TestPack#test_unpack1_offset = 0.00 s 2230s [1054/5474] TestPack#test_pack_unpack_sS = 0.00 s 2230s [1055/5474] TestPack#test_pack = 0.00 s 2230s [1056/5474] TestPack#test_pack_unpack_w = 0.00 s 2230s [1057/5474] TestPack#test_comment = 0.00 s 2234s [1058/5474] TestPack#test_pack_unpack_m = 3.94 s 2234s [1059/5474] TestPack#test_pack_U = 0.00 s 2234s [1060/5474] TestPack#test_unpack_with_block = 0.01 s 2234s [1061/5474] TestPack#test_illegal_bang = 0.00 s 2234s [1062/5474] TestPack#test_short_string = 0.00 s 2234s [1063/5474] TestPack#test_pack_unpack_U = 0.00 s 2234s [1064/5474] TestPack#test_pack_unpack_fdeEgG = 0.01 s 2234s [1065/5474] TestPack#test_pack_with_buffer = 0.00 s 2234s [1066/5474] TestPack#test_pack_unpack_iI = 0.00 s 2234s [1067/5474] TestRegexp#test_match_init_copy = 0.00 s 2234s [1068/5474] TestRegexp#test_cclass_R = 0.00 s 2234s [1069/5474] TestRegexp#test_match_control_meta_escape = 0.00 s 2234s [1070/5474] TestRegexp#test_quote = 0.00 s 2234s [1071/5474] TestRegexp#test_yoshidam_net_20041111_2 = 0.00 s 2239s [1072/5474] TestRegexp#test_assign_named_capture_trace = 3.80 s 2239s [1073/5474] TestRegexp#test_error_message_on_failed_conversion = 0.00 s 2239s [1074/5474] TestRegexp#test_cclass_X = 0.00 s 2239s [1075/5474] TestRegexp#test_uninitialized = 0.00 s 2239s [1076/5474] TestRegexp#test_char_class = 0.04 s 2239s [1077/5474] TestRegexp#test_match_p = 0.00 s 2239s [1078/5474] TestRegexp#test_match_regexp = 0.00 s 2242s [1079/5474] TestRegexp#test_eq_tilde_can_be_overridden = 3.75 s 2242s [1080/5474] TestRegexp#test_char_type = 0.00 s 2242s [1081/5474] TestRegexp#test_match = 0.02 s 2242s [1082/5474] TestRegexp#test_options = 0.00 s 2242s [1083/5474] TestRegexp#test_union2 = 0.00 s 2242s [1084/5474] TestRegexp#test_ruby_dev_24643 = 0.00 s 2242s [1085/5474] TestRegexp#test_match_offset_begin_end = 0.01 s 2242s [1086/5474] TestRegexp#test_conditional_expression = 0.01 s 2242s [1087/5474] TestRegexp#test_regsub = 0.03 s 2242s [1088/5474] TestRegexp#test_source_escaped = 0.00 s 2242s [1089/5474] TestRegexp#test_raw_hyphen_and_tk_char_type_after_range = 0.00 s 2242s [1090/5474] TestRegexp#test_ignorecase = 0.00 s 2242s [1091/5474] TestRegexp#test_parse = 0.01 s 2242s [1092/5474] TestRegexp#test_once_escape = 0.00 s 2242s [1093/5474] TestRegexp#test_inspect = 0.00 s 2242s [1094/5474] TestRegexp#test_dup = 0.00 s 2242s [1095/5474] TestRegexp#test_exec = 0.03 s 2242s [1096/5474] TestRegexp#test_match_string = 0.00 s 2242s [1097/5474] TestRegexp#test_casefold_p = 0.00 s 2242s [1098/5474] TestRegexp#test_match_matchsubstring = 0.00 s 2242s [1099/5474] TestRegexp#test_parse_comment = 0.00 s 2242s [1100/5474] TestRegexp#test_last_match = 0.00 s 2242s [1101/5474] TestRegexp#test_ruby_dev_999 = 0.00 s 2242s [1102/5474] TestRegexp#test_match_setter = 0.00 s 2242s [1103/5474] TestRegexp#test_match_data_named_captures = 0.00 s 2242s [1104/5474] TestRegexp#test_equal = 0.00 s 2243s [1105/5474] TestRegexp#test_match_lambda_multithread = 0.98 s 2243s [1106/5474] TestRegexp#test_once = 0.00 s 2243s [1107/5474] TestRegexp#test_to_s2 = 0.00 s 2247s [1108/5474] TestRegexp#test_invalid_free_at_parse_depth_limit_over = 3.87 s 2247s [1109/5474] TestRegexp#test_regsub_K = 0.02 s 2247s [1110/5474] TestRegexp#test_initialize = 0.00 s 2249s [1111/5474] TestRegexp#test_property_warn = 2.52 s 2249s [1112/5474] TestRegexp#test_match_match_length = 0.00 s 2249s [1113/5474] TestRegexp#test_options_in_look_behind = 0.01 s 2249s [1114/5474] TestRegexp#test_match_to_s = 0.00 s 2249s [1115/5474] TestRegexp#test_backward = 0.00 s 2249s [1116/5474] TestRegexp#test_source_escaped_paren = 0.00 s 2249s [1117/5474] TestRegexp#test_unicode_age = 0.00 s 2249s [1118/5474] TestRegexp#test_try_convert = 0.00 s 2249s [1119/5474] TestRegexp#test_eqq = 0.00 s 2249s [1120/5474] TestRegexp#test_source_unescaped = 0.01 s 2249s [1121/5474] TestRegexp#test_parse_curly_brace = 0.01 s 2249s [1122/5474] TestRegexp#test_ruby_dev_31309 = 0.00 s 2249s [1123/5474] TestRegexp#test_rindex_regexp = 0.00 s 2249s [1124/5474] TestRegexp#test_ruby_talk_116455 = 0.00 s 2249s [1125/5474] TestRegexp#test_once_recursive = 0.01 s 2249s [1126/5474] TestRegexp#test_assign_named_capture = 0.01 s 2249s [1127/5474] TestRegexp#test_match_values_at = 0.01 s 2249s [1128/5474] TestRegexp#test_char_to_option_kcode = 0.00 s 2249s [1129/5474] TestRegexp#test_assert_normal_exit = 0.00 s 2249s [1130/5474] TestRegexp#test_named_capture = 0.00 s 2249s [1131/5474] TestRegexp#test_match_pre_post = 0.00 s 2249s [1132/5474] TestRegexp#test_unicode = 0.01 s 2249s [1133/5474] TestRegexp#test_quantifier_reduction = 0.01 s 2249s [1134/5474] TestRegexp#test_match_inspect = 0.00 s 2249s [1135/5474] TestRegexp#test_match_aref = 0.00 s 2249s [1136/5474] TestRegexp#test_source = 0.00 s 2249s [1137/5474] TestRegexp#test_getter = 0.00 s 2249s [1138/5474] TestRegexp#test_parse_look_behind = 0.00 s 2249s [1139/5474] TestRegexp#test_to_s_extended_subexp = 0.00 s 2249s [1140/5474] TestRegexp#test_match_array = 0.00 s 2249s [1141/5474] TestRegexp#test_ruby_dev_24887 = 0.00 s 2249s [1142/5474] TestRegexp#test_match_size = 0.00 s 2249s [1143/5474] TestRegexp#test_ruby_core_27247 = 0.00 s 2249s [1144/5474] TestRegexp#test_regexp_popped = 0.00 s 2249s [1145/5474] TestRegexp#test_word_boundary = 0.01 s 2249s [1146/5474] TestRegexp#test_has_NOENCODING = 0.00 s 2249s [1147/5474] TestRegexp#test_premature_end_char_property = 0.00 s 2249s [1148/5474] TestRegexp#test_named_capture_with_nul = 0.00 s 2249s [1149/5474] TestRegexp#test_yoshidam_net_20041111_1 = 0.00 s 2249s [1150/5474] TestRegexp#test_matchdata = 0.00 s 2249s [1151/5474] TestRegexp#test_match_captures = 0.00 s 2249s [1152/5474] TestRegexp#test_parse_kg = 0.02 s 2249s [1153/5474] TestRegexp#test_char_to_option = 0.00 s 2249s [1154/5474] TestRegexp#test_assign_named_capture_to_const = 0.00 s 2257s [1155/5474] TestSymbol#test_hash_nondeterministic = 7.74 s 2261s [1156/5474] TestSymbol#test_block_method_to_proc = 4.33 s 2262s [1157/5474] TestSymbol#test_match_method = 0.11 s 2262s [1158/5474] TestSymbol#test_match_p_regexp = 0.01 s 2262s [1159/5474] TestSymbol#test_inspect_invalid = 0.02 s 2262s [1160/5474] TestSymbol#test_frozen_symbol = 0.01 s 2265s [1161/5474] TestSymbol#test_hash_redefinition = 3.67 s 2265s [1162/5474] TestSymbol#test_cmp = 0.00 s 2265s [1163/5474] TestSymbol#test_block_given_to_proc = 0.00 s 2265s [1164/5474] TestSymbol#test_succ = 0.00 s 2265s [1165/5474] TestSymbol#test_instance_eval = 0.01 s 2265s [1166/5474] TestSymbol#test_case = 0.00 s 2265s [1167/5474] TestSymbol#test_intern = 0.00 s 2265s [1168/5474] TestSymbol#test_to_proc = 0.01 s 2268s [1169/5474] TestSymbol#test_eq_can_be_redefined = 2.87 s 2268s [1170/5474] TestSymbol#test_singleton_method = 0.01 s 2268s [1171/5474] TestSymbol#test_to_proc_lambda_with_refinements = 0.00 s 2268s [1172/5474] TestSymbol#test_match_p_string = 0.01 s 2268s [1173/5474] TestSymbol#test_all_symbols = 0.04 s 2268s [1174/5474] TestSymbol#test_to_proc_call_with_symbol_proc = 0.00 s 2268s [1175/5474] TestSymbol#test_block_persist_between_calls = 0.02 s 2268s [1176/5474] TestSymbol#test_inspect_number = 0.01 s 2268s [1177/5474] TestSymbol#test_instance_exec = 0.01 s 2268s [1178/5474] TestSymbol#test_MATCH = 0.01 s 2268s [1179/5474] TestSymbol#test_name = 0.00 s 2268s [1180/5474] TestSymbol#test_dynamic_attrset_id = 0.01 s 2268s [1181/5474] TestSymbol#test_return_from_symbol_proc = 0.00 s 2268s [1182/5474] TestSymbol#test_end_with? = 0.00 s 2272s [1183/5474] TestSymbol#test_block_curry_proc = 4.13 s 2272s [1184/5474] TestSymbol#test_empty = 0.00 s 2272s [1185/5474] TestSymbol#test_start_with? = 0.00 s 2276s [1186/5474] TestSymbol#test_to_proc_for_hash_each = 3.48 s 2276s [1187/5474] TestSymbol#test_to_proc_lambda? = 0.00 s 2276s [1188/5474] TestSymbol#test_to_proc_instance_exec = 0.00 s 2276s [1189/5474] TestSymbol#test_length = 0.00 s 2276s [1190/5474] TestSymbol#test_inspect_dollar = 0.00 s 2276s [1191/5474] TestSymbol#test_inspect_suboptimal = 0.14 s 2276s [1192/5474] TestSymbol#test_ascii_incomat_inspect = 0.03 s 2280s [1193/5474] TestSymbol#test_block_curry_lambda = 3.87 s 2280s [1194/5474] TestSymbol#test_casecmp? = 0.00 s 2280s [1195/5474] TestSymbol#test_symbol_popped = 0.00 s 2280s [1196/5474] TestSymbol#test_to_proc_arg_with_refinements_undefined = 0.00 s 2280s [1197/5474] TestSymbol#test_call = 0.01 s 2280s [1198/5474] TestSymbol#test_casecmp = 0.00 s 2290s [1199/5474] TestSymbol#test_symbol_gc_1 = 9.75 s 2290s [1200/5474] Rational_Test#test_freeze = 0.00 s 2290s [1201/5474] Rational_Test#test_marshal_compatibility = 0.01 s 2290s [1202/5474] Rational_Test#test_quo = 0.00 s 2290s [1203/5474] Rational_Test#test_math = 0.00 s 2290s [1204/5474] Rational_Test#test_sub = 0.00 s 2290s [1205/5474] Rational_Test#test_marshal = 0.00 s 2290s [1206/5474] Rational_Test#test_idiv = 0.01 s 2290s [1207/5474] Rational_Test#test_fixed_bug = 0.01 s 2290s [1208/5474] Rational_Test#test_power_of_0 = 0.00 s 2290s [1209/5474] Rational_Test#test_hash = 0.00 s 2290s [1210/5474] Rational_Test#test_parse_zero_denominator = 0.00 s 2290s [1211/5474] Rational_Test#test_cmp = 0.00 s 2290s [1212/5474] Rational_Test#test_ratsub = 0.00 s 2290s [1213/5474] Rational_Test#test_attr = 0.00 s 2290s [1214/5474] Rational_Test#test_fdiv = 0.00 s 2290s [1215/5474] Rational_Test#test_power_overflow = 0.00 s 2290s [1216/5474] Rational_Test#test_parse = 0.03 s 2290s [1217/5474] Rational_Test#test_finite_p = 0.00 s 2290s [1218/5474] Rational_Test#test_inspect = 0.00 s 2290s [1219/5474] Rational_Test#test_coerce = 0.00 s 2290s [1220/5474] Rational_Test#test_trunc = 0.01 s 2290s [1221/5474] Rational_Test#test_remainder = 0.00 s 2290s [1222/5474] Rational_Test#test_expt = 0.00 s 2290s [1223/5474] Rational_Test#test_to_r = 0.00 s 2290s [1224/5474] Rational_Test#test_positive_p = 0.00 s 2290s [1225/5474] Rational_Test#test_coerce2 = 0.00 s 2290s [1226/5474] Rational_Test#test_rationalize = 0.01 s 2290s [1227/5474] Rational_Test#test_attr2 = 0.00 s 2290s [1228/5474] Rational_Test#test_Rational_with_invalid_exception = 0.00 s 2290s [1229/5474] Rational_Test#test_to_f = 0.00 s 2290s [1230/5474] Rational_Test#test_conv = 0.02 s 2290s [1231/5474] Rational_Test#test_to_i = 0.00 s 2290s [1232/5474] Rational_Test#test_uplus = 0.00 s 2290s [1233/5474] Rational_Test#test_modulo = 0.00 s 2290s [1234/5474] Rational_Test#test_ruby19 = 0.00 s 2290s [1235/5474] Rational_Test#test_add = 0.00 s 2290s [1236/5474] Rational_Test#test_to_c = 0.00 s 2290s [1237/5474] Rational_Test#test_power_of_1_and_minus_1 = 0.00 s 2290s [1238/5474] Rational_Test#test_to_s = 0.00 s 2290s [1239/5474] Rational_Test#test_divmod = 0.00 s 2290s [1240/5474] Rational_Test#test_eql_p = 0.00 s 2290s [1241/5474] Rational_Test#test_gcdlcm = 0.00 s 2290s [1242/5474] Rational_Test#test_Rational_without_exception = 0.01 s 2290s [1243/5474] Rational_Test#test_supp = 0.00 s 2290s [1244/5474] Rational_Test#test_negative_p = 0.00 s 2290s [1245/5474] Rational_Test#test_infinite_p = 0.00 s 2290s [1246/5474] Rational_Test#test_div = 0.00 s 2290s [1247/5474] Rational_Test#test_mul = 0.00 s 2290s [1248/5474] Rational_Test#test_known_bug = 0.00 s 2290s [1249/5474] Rational_Test#test_eqeq = 0.00 s 2290s [1250/5474] Rational_Test#test_negate = 0.00 s 2290s [1251/5474] TestSuper#test_define_method = 0.00 s 2290s [1252/5474] TestSuper#test_double_include = 0.00 s 2290s [1253/5474] TestSuper#test_missing_super = 0.00 s 2290s [1254/5474] TestSuper#test_optional4 = 0.00 s 2290s [1255/5474] TestSuper#test_optional2 = 0.00 s 2290s [1256/5474] TestSuper#test_public_zsuper_with_prepend = 0.00 s 2294s [1257/5474] TestSuper#test_super_in_at_exit = 3.65 s 2294s [1258/5474] TestSuper#test_single2 = 0.00 s 2294s [1259/5474] TestSuper#test_super_with_modified_rest_parameter = 0.00 s 2294s [1260/5474] TestSuper#test_keyword2 = 0.01 s 2294s [1261/5474] TestSuper#test_double2 = 0.00 s 2294s [1262/5474] TestSuper#test_double_include2 = 0.00 s 2294s [1263/5474] TestSuper#test_super_in_orphan_block = 0.00 s 2294s [1264/5474] TestSuper#test_super_in_thread = 0.00 s 2294s [1265/5474] TestSuper#test_super_missing_prepended_module = 0.01 s 2294s [1266/5474] TestSuper#test_from_eval = 0.00 s 2294s [1267/5474] TestSuper#test_super_in_module_unbound_method = 0.00 s 2294s [1268/5474] TestSuper#test_module_super_in_method_module = 0.00 s 2294s [1269/5474] TestSuper#test_missing_super_in_module_unbound_method = 0.00 s 2294s [1270/5474] TestSuper#test_missing_super_in_method_module = 0.00 s 2294s [1271/5474] TestSuper#test_array3 = 0.00 s 2294s [1272/5474] TestSuper#test_array1 = 0.00 s 2294s [1273/5474] TestSuper#test_super_with_block = 0.00 s 2294s [1274/5474] TestSuper#test_super_splat = 0.00 s 2294s [1275/5474] TestSuper#test_yielding_super = 0.00 s 2294s [1276/5474] TestSuper#test_array2 = 0.00 s 2294s [1277/5474] TestSuper#test_super_attr_reader = 0.00 s 2294s [1278/5474] TestSuper#test_array4 = 0.00 s 2297s [1279/5474] TestSuper#test_super_in_BEGIN = 3.65 s 2297s [1280/5474] TestSuper#test_overlaid = 0.01 s 2297s [1281/5474] TestSuper#test_keyword1 = 0.00 s 2297s [1282/5474] TestSuper#test_double3 = 0.00 s 2298s [1283/5474] TestSuper#test_double1 = 0.00 s 2298s [1284/5474] TestSuper#test_single1 = 0.00 s 2298s [1285/5474] TestSuper#test_super_with_define_method = 0.00 s 2301s [1286/5474] TestSuper#test_super_in_END = 3.60 s 2301s [1287/5474] TestSuper#test_optional3 = 0.01 s 2301s [1288/5474] TestSuper#test_super_attr_writer = 0.00 s 2301s [1289/5474] TestSuper#test_optional1 = 0.00 s 2301s [1290/5474] TestSuper#test_optional5 = 0.00 s 2301s [1291/5474] TestReadPartial#test_closed_pipe = 0.01 s 2301s [1292/5474] TestReadPartial#test_length_zero = 0.01 s 2301s [1293/5474] TestReadPartial#test_with_stdio = 0.22 s 2301s [1294/5474] TestReadPartial#test_open_pipe = 0.21 s 2305s [1295/5474] TestContinuation#test_ary_flatten = 3.71 s 2309s [1296/5474] TestContinuation#test_marshal_dump = 3.78 s 2309s [1297/5474] TestIfUnless#test_if_unless = 0.00 s 2319s [1298/5474] TestIO_M17N#test_each_codepoint_need_more = 10.22 s 2319s [1299/5474] TestIO_M17N#test_open_w_enc_enc_in_opt2 = 0.00 s 2319s [1300/5474] TestIO_M17N#test_nonascii_terminator = 0.01 s 2319s [1301/5474] TestIO_M17N#test_s_pipe_invalid = 0.00 s 2323s [1302/5474] TestIO_M17N#test_popen_r_enc_in_opt2 = 3.56 s 2323s [1303/5474] TestIO_M17N#test_set_encoding_identical = 0.01 s 2323s [1304/5474] TestIO_M17N#test_set_encoding_invalid = 0.01 s 2330s [1305/5474] TestIO_M17N#test_bom_too_long_utfname = 7.67 s 2330s [1306/5474] TestIO_M17N#test_s_foreach_open_args_enc_enc_in_opt = 0.01 s 2330s [1307/5474] TestIO_M17N#test_write_conversion = 0.00 s 2331s [1308/5474] TestIO_M17N#test_read_stateful = 0.00 s 2331s [1309/5474] TestIO_M17N#test_textmode_decode_universal_newline_getc = 0.00 s 2331s [1310/5474] TestIO_M17N#test_marshal = 0.00 s 2331s [1311/5474] TestIO_M17N#test_bom_non_utf = 0.01 s 2331s [1312/5474] TestIO_M17N#test_s_pipe_undef = 0.00 s 2331s [1313/5474] TestIO_M17N#test_textmode_paragraph_binaryread = 0.01 s 2331s [1314/5474] TestIO_M17N#test_open_ascii = 0.01 s 2331s [1315/5474] TestIO_M17N#test_s_foreach_open_args_enc_enc_in_opt2 = 0.00 s 2331s [1316/5474] TestIO_M17N#test_read_newline_conversion_with_encoding_conversion = 0.00 s 2331s [1317/5474] TestIO_M17N#test_s_foreach_enc = 0.00 s 2331s [1318/5474] TestIO_M17N#test_w_xml_attr = 0.02 s 2331s [1319/5474] TestIO_M17N#test_cbuf_select = 0.01 s 2331s [1320/5474] TestIO_M17N#test_strip_bom:UTF-8 = 0.01 s 2331s [1321/5474] TestIO_M17N#test_gets_nil = 0.00 s 2331s [1322/5474] TestIO_M17N#test_stderr = 0.00 s 2334s [1323/5474] TestIO_M17N#test_popen_r_enc_enc_in_opt2 = 3.75 s 2335s [1324/5474] TestIO_M17N#test_strip_bom:UTF-32BE = 0.13 s 2335s [1325/5474] TestIO_M17N#test_textmode_paragraph_nonasciicompat = 0.06 s 2335s [1326/5474] TestIO_M17N#test_text_mode = 0.00 s 2335s [1327/5474] TestIO_M17N#test_binmode_paragraph_nonasciicompat = 0.01 s 2335s [1328/5474] TestIO_M17N#test_ignored_encoding_option = 0.02 s 2335s [1329/5474] TestIO_M17N#test_set_encoding_undef_replace = 0.00 s 2335s [1330/5474] TestIO_M17N#test_textmode_decode_universal_newline_gets = 0.00 s 2335s [1331/5474] TestIO_M17N#test_open_w = 0.00 s 2335s [1332/5474] TestIO_M17N#test_open_w_enc_in_opt = 0.00 s 2335s [1333/5474] TestIO_M17N#test_write_conversion_fixenc = 0.01 s 2335s [1334/5474] TestIO_M17N#test_s_foreach_enc_in_opt = 0.00 s 2335s [1335/5474] TestIO_M17N#test_s_foreach_enc_enc_in_opt = 0.00 s 2335s [1336/5474] TestIO_M17N#test_open_r_enc_enc = 0.00 s 2335s [1337/5474] TestIO_M17N#test_s_foreach_open_args_enc = 0.00 s 2335s [1338/5474] TestIO_M17N#test_read_all_invalid = 0.00 s 2335s [1339/5474] TestIO_M17N#test_read_newline_conversion_without_encoding_conversion = 0.00 s 2335s [1340/5474] TestIO_M17N#test_write_ascii_incompat = 0.01 s 2338s [1341/5474] TestIO_M17N#test_open_pipe_r_enc = 3.82 s 2339s [1342/5474] TestIO_M17N#test_terminator_conversion2 = 0.08 s 2339s [1343/5474] TestIO_M17N#test_set_encoding_undef = 0.02 s 2339s [1344/5474] TestIO_M17N#test_strip_bom:UTF-16BE = 0.02 s 2343s [1345/5474] TestIO_M17N#test_popen_r_enc_enc = 4.13 s 2343s [1346/5474] TestIO_M17N#test_write_mode_fail = 0.27 s 2343s [1347/5474] TestIO_M17N#test_open_r_ext_enc_in_opt = 0.06 s 2343s [1348/5474] TestIO_M17N#test_binmode3 = 0.00 s 2343s [1349/5474] TestIO_M17N#test_getc_invalid2 = 0.00 s 2343s [1350/5474] TestIO_M17N#test_textmode_encode_newline_enc = 0.00 s 2343s [1351/5474] TestIO_M17N#test_write_noenc = 0.01 s 2343s [1352/5474] TestIO_M17N#test_invalid_w = 0.01 s 2343s [1353/5474] TestIO_M17N#test_read_mode = 0.02 s 2343s [1354/5474] TestIO_M17N#test_strip_bom_no_bom = 0.00 s 2343s [1355/5474] TestIO_M17N#test_gets_invalid = 0.00 s 2343s [1356/5474] TestIO_M17N#test_ungetc_stateful_conversion2 = 0.05 s 2343s [1357/5474] TestIO_M17N#test_open_nonascii = 0.01 s 2343s [1358/5474] TestIO_M17N#test_set_encoding_nil = 0.01 s 2343s [1359/5474] TestIO_M17N#test_pipe_conversion = 0.00 s 2343s [1360/5474] TestIO_M17N#test_text_mode_ungetc_eof = 0.00 s 2343s [1361/5474] TestIO_M17N#test_getc_invalid = 0.00 s 2343s [1362/5474] TestIO_M17N#test_open_w_enc = 0.00 s 2343s [1363/5474] TestIO_M17N#test_write_conversion_anyenc_stateful = 0.00 s 2343s [1364/5474] TestIO_M17N#test_set_encoding2 = 0.00 s 2348s [1365/5474] TestIO_M17N#test_lf_decorator_on_stdout = 4.38 s 2348s [1366/5474] TestIO_M17N#test_read_with_buf_broken_ascii_only = 0.03 s 2348s [1367/5474] TestIO_M17N#test_bom_non_reading = 0.02 s 2348s [1368/5474] TestIO_M17N#test_strip_bom:UTF-32LE = 0.01 s 2348s [1369/5474] TestIO_M17N#test_textmode_decode_universal_newline_utf16 = 0.01 s 2348s [1370/5474] TestIO_M17N#test_s_foreach_enc_enc = 0.00 s 2348s [1371/5474] TestIO_M17N#test_getc_conversion = 0.00 s 2348s [1372/5474] TestIO_M17N#test_binmode_write_ascii_incompat_internal = 0.00 s 2348s [1373/5474] TestIO_M17N#test_textmode_decode_universal_newline_read = 0.01 s 2348s [1374/5474] TestIO_M17N#test_getc_ascii_only = 0.00 s 2348s [1375/5474] TestIO_M17N#test_textmode_paragraphmode = 0.01 s 2352s [1376/5474] TestIO_M17N#test_popen_r_enc_enc_in_opt = 3.69 s 2352s [1377/5474] TestIO_M17N#test_open_w_enc_enc_perm = 0.03 s 2352s [1378/5474] TestIO_M17N#test_open_r_encname_encname = 0.00 s 2352s [1379/5474] TestIO_M17N#test_getc_stateful_conversion = 0.00 s 2352s [1380/5474] TestIO_M17N#test_io_new_enc = 0.00 s 2352s [1381/5474] TestIO_M17N#test_open_r_encname_in_opt = 0.00 s 2355s [1382/5474] TestIO_M17N#test_popen_r_enc_in_opt = 3.82 s 2356s [1383/5474] TestIO_M17N#test_strip_bom_no_conv = 0.03 s 2356s [1384/5474] TestIO_M17N#test_file_foreach = 0.01 s 2356s [1385/5474] TestIO_M17N#test_strip_bom_invalid = 0.00 s 2356s [1386/5474] TestIO_M17N#test_getc_newlineconv = 0.00 s 2356s [1387/5474] TestIO_M17N#test_open_wb = 0.00 s 2359s [1388/5474] TestIO_M17N#test_cr_decorator_on_stdout = 3.93 s 2360s [1389/5474] TestIO_M17N#test_gets_limit = 0.02 s 2360s [1390/5474] TestIO_M17N#test_terminator_stateful_conversion = 0.01 s 2360s [1391/5474] TestIO_M17N#test_pipe_terminator_conversion = 0.00 s 2360s [1392/5474] TestIO_M17N#test_binmode = 0.00 s 2360s [1393/5474] TestIO_M17N#test_open_r_enc_enc_in_opt = 0.00 s 2364s [1394/5474] TestIO_M17N#test_popenv_r_enc_enc_in_opt2 = 4.00 s 2364s [1395/5474] TestIO_M17N#test_textmode_twice = 0.00 s 2364s [1396/5474] TestIO_M17N#test_ungetc_stateful_conversion = 0.00 s 2364s [1397/5474] TestIO_M17N#test_getc_invalid3 = 0.00 s 2364s [1398/5474] TestIO_M17N#test_default_mode_on_unix = 0.00 s 2364s [1399/5474] TestIO_M17N#test_binmode2 = 0.02 s 2364s [1400/5474] TestIO_M17N#test_invalid_r = 0.00 s 2364s [1401/5474] TestIO_M17N#test_s_foreach_open_args_enc_enc = 0.00 s 2364s [1402/5474] TestIO_M17N#test_open_r_enc_in_opt = 0.00 s 2364s [1403/5474] TestIO_M17N#test_open_r_encname_encname_in_opt = 0.00 s 2364s [1404/5474] TestIO_M17N#test_read_all = 0.00 s 2364s [1405/5474] TestIO_M17N#test_stdin = 0.00 s 2364s [1406/5474] TestIO_M17N#test_default_mode_decode_universal_newline_gets = 0.00 s 2364s [1407/5474] TestIO_M17N#test_pipe_convert_partial_read = 0.10 s 2364s [1408/5474] TestIO_M17N#test_set_encoding = 0.00 s 2364s [1409/5474] TestIO_M17N#test_s_foreach_enc_enc_in_opt2 = 0.00 s 2364s [1410/5474] TestIO_M17N#test_binary = 0.00 s 2364s [1411/5474] TestIO_M17N#test_set_encoding_enc = 0.00 s 2364s [1412/5474] TestIO_M17N#test_read_newline_conversion_error = 0.00 s 2367s [1413/5474] TestIO_M17N#test_popen_r_enc = 3.77 s 2367s [1414/5474] TestIO_M17N#test_binary_mode = 0.00 s 2367s [1415/5474] TestIO_M17N#test_open_r = 0.00 s 2367s [1416/5474] TestIO_M17N#test_write_conversion_anyenc_stateful_nosync = 0.00 s 2367s [1417/5474] TestIO_M17N#test_open_rb = 0.00 s 2367s [1418/5474] TestIO_M17N#test_s_foreach_open_args_enc_in_opt = 0.00 s 2367s [1419/5474] TestIO_M17N#test_open_w_enc_enc = 0.00 s 2367s [1420/5474] TestIO_M17N#test_s_foreach_open_args_enc_in_opt2 = 0.00 s 2368s [1421/5474] TestIO_M17N#test_write_mode = 0.14 s 2371s [1422/5474] TestIO_M17N#test_crlf_decorator_on_stdout = 3.52 s 2371s [1423/5474] TestIO_M17N#test_stdout = 0.00 s 2371s [1424/5474] TestIO_M17N#test_open_r_ascii8bit = 0.01 s 2371s [1425/5474] TestIO_M17N#test_open_r_ext_encname_in_opt = 0.00 s 2371s [1426/5474] TestIO_M17N#test_ungetc_str = 0.01 s 2371s [1427/5474] TestIO_M17N#test_open_w_enc_in_opt2 = 0.00 s 2371s [1428/5474] TestIO_M17N#test_s_foreach_enc_in_opt2 = 0.00 s 2371s [1429/5474] TestIO_M17N#test_textmode_encode_newline = 0.00 s 2371s [1430/5474] TestIO_M17N#test_binmode_decode_universal_newline = 0.00 s 2371s [1431/5474] TestIO_M17N#test_open_w_enc_enc_in_opt = 0.00 s 2371s [1432/5474] TestIO_M17N#test_open_r_externalencname_internalencname_in_opt = 0.00 s 2371s [1433/5474] TestIO_M17N#test_open_r_enc = 0.00 s 2371s [1434/5474] TestIO_M17N#test_s_pipe_undef_replace_string = 0.00 s 2371s [1435/5474] TestIO_M17N#test_write_conversion_anyenc_stateless = 0.00 s 2371s [1436/5474] TestIO_M17N#test_read_encoding = 0.04 s 2371s [1437/5474] TestIO_M17N#test_terminator_conversion = 0.00 s 2371s [1438/5474] TestFloat#test_minus = 0.00 s 2371s [1439/5474] TestFloat#test_precision = 0.00 s 2371s [1440/5474] TestFloat#test_zero_p = 0.00 s 2371s [1441/5474] TestFloat#test_cmp = 0.01 s 2371s [1442/5474] TestFloat#test_Float_with_exception_keyword = 0.00 s 2371s [1443/5474] TestFloat#test_step2 = 0.00 s 2371s [1444/5474] TestFloat#test_modulo2 = 0.00 s 2371s [1445/5474] TestFloat#test_round_half_up = 0.00 s 2371s [1446/5474] TestFloat#test_round_half_down = 0.00 s 2371s [1447/5474] TestFloat#test_float = 0.00 s 2371s [1448/5474] TestFloat#test_modulo4 = 0.00 s 2371s [1449/5474] TestFloat#test_num2dbl = 0.00 s 2371s [1450/5474] TestFloat#test_finite_p = 0.00 s 2371s [1451/5474] TestFloat#test_coerce = 0.00 s 2371s [1452/5474] TestFloat#test_ceil_with_precision = 0.00 s 2371s [1453/5474] TestFloat#test_next_prev_float_zero = 0.00 s 2371s [1454/5474] TestFloat#test_prev_float = 0.00 s 2371s [1455/5474] TestFloat#test_remainder = 0.00 s 2371s [1456/5474] TestFloat#test_singleton_method = 0.00 s 2371s [1457/5474] TestFloat#test_positive_p = 0.00 s 2371s [1458/5474] TestFloat#test_eql = 0.00 s 2371s [1459/5474] TestFloat#test_plus = 0.00 s 2371s [1460/5474] TestFloat#test_div2 = 0.00 s 2371s [1461/5474] TestFloat#test_floor = 0.01 s 2371s [1462/5474] TestFloat#test_truncate = 0.01 s 2371s [1463/5474] TestFloat#test_round_half_invalid = 0.00 s 2371s [1464/5474] TestFloat#test_symmetry_bignum = 0.00 s 2372s [1465/5474] TestFloat#test_sleep_with_Float = 1.00 s 2372s [1466/5474] TestFloat#test_nan = 0.00 s 2372s [1467/5474] TestFloat#test_next_float = 0.00 s 2372s [1468/5474] TestFloat#test_ceil = 0.01 s 2372s [1469/5474] TestFloat#test_modulo = 0.00 s 2372s [1470/5474] TestFloat#test_round_half_even = 0.00 s 2376s [1471/5474] TestFloat#test_long_string = 3.64 s 2376s [1472/5474] TestFloat#test_step = 0.06 s 2376s [1473/5474] TestFloat#test_round = 0.01 s 2376s [1474/5474] TestFloat#test_truncate_with_precision = 0.00 s 2376s [1475/5474] TestFloat#test_divmod = 0.00 s 2376s [1476/5474] TestFloat#test_floor_with_precision = 0.01 s 2381s [1477/5474] TestFloat#test_aliased_quo_recursion = 3.59 s 2381s [1478/5474] TestFloat#test_step_excl = 0.11 s 2381s [1479/5474] TestFloat#test_hash_0 = 0.00 s 2381s [1480/5474] TestFloat#test_Float_with_invalid_exception = 0.00 s 2381s [1481/5474] TestFloat#test_floor_ceil_round_truncate = 0.00 s 2381s [1482/5474] TestFloat#test_negative_p = 0.00 s 2381s [1483/5474] TestFloat#test_infinite_p = 0.00 s 2381s [1484/5474] TestFloat#test_modulo3 = 0.00 s 2381s [1485/5474] TestFloat#test_div = 0.00 s 2381s [1486/5474] TestFloat#test_round_half_nil = 0.00 s 2381s [1487/5474] TestFloat#test_mul = 0.00 s 2381s [1488/5474] TestFloat#test_pow = 0.00 s 2381s [1489/5474] TestFloat#test_invalid_str = 0.00 s 2381s [1490/5474] TestFloat#test_divmod2 = 0.00 s 2381s [1491/5474] TestFloat#test_round_with_precision = 0.00 s 2381s [1492/5474] TestException#test_raise_with_cause_in_rescue = 0.00 s 2381s [1493/5474] TestException#test_systemexit_new = 0.00 s 2385s [1494/5474] TestException#test_exception_in_message = 2.53 s 2385s [1495/5474] TestException#test_exception_rescued = 0.00 s 2385s [1496/5474] TestException#test_rescue_splat_argument = 0.00 s 2386s [1497/5474] TestException#test_blocking_backtrace = 3.52 s 2386s [1498/5474] TestException#test_catch_throw_in_require = 0.00 s 2386s [1499/5474] TestException#test_rescue_single_argument = 0.00 s 2386s [1500/5474] TestException#test_exception_ensure = 0.00 s 2386s [1501/5474] TestException#test_cause_reraised = 0.00 s 2389s [1502/5474] TestException#test_backtrace_in_eval = 2.76 s 2389s [1503/5474] TestException#test_cause = 0.00 s 2389s [1504/5474] TestException#test_else_nested_rescued = 0.00 s 2389s [1505/5474] TestException#test_exception_in_rescue = 0.00 s 2389s [1506/5474] TestException#test_inspect = 0.00 s 2389s [1507/5474] TestException#test_else_nested_no_exception = 0.00 s 2389s [1508/5474] TestException#test_circular_cause = 0.00 s 2389s [1509/5474] TestException#test_else_nested_rescued_reraise = 0.00 s 2389s [1510/5474] TestException#test_else_no_exception = 0.00 s 2389s [1511/5474] TestException#test_cause_thread_with_cause = 0.00 s 2389s [1512/5474] TestException#test_exception_retry = 0.00 s 2389s [1513/5474] TestException#test_warn_deprecated_backwards_compatibility_category = 0.01 s 2393s [1514/5474] TestException#test_undefined_backtrace = 3.75 s 2393s [1515/5474] TestException#test_uncaught_throw = 0.00 s 2393s [1516/5474] TestException#test_cause_at_raised = 0.00 s 2393s [1517/5474] TestException#test_equal = 0.00 s 2393s [1518/5474] TestException#test_method_missing_reason_clear = 0.00 s 2393s [1519/5474] TestException#test_catch_throw_noarg = 0.00 s 2393s [1520/5474] TestException#test_exception_in_ensure = 0.00 s 2393s [1521/5474] TestException#test_raise_with_wrong_number_of_arguments = 0.00 s 2393s [1522/5474] TestException#test_cause_with_no_arguments = 0.00 s 2393s [1523/5474] TestException#test_errinfo_in_debug = 0.01 s 2393s [1524/5474] TestException#test_set_backtrace = 0.00 s 2393s [1525/5474] TestException#test_break_ensure = 0.00 s 2393s [1526/5474] TestException#test_exception_in_ensure_with_return = 0.00 s 2395s [1527/5474] TestException#test_cause_at_end = 2.61 s 2395s [1528/5474] TestException#test_warn_deprecated_to_remove_backwards_compatibility_category = 0.01 s 2395s [1529/5474] TestException#test_exception_ensure_2 = 0.00 s 2395s [1530/5474] TestException#test_errinfo = 0.00 s 2408s [1531/5474] TestException#test_errat = 12.75 s 2408s [1532/5474] TestException#test_else_nested_unrescued = 0.01 s 2408s [1533/5474] TestException#test_warning_category = 0.00 s 2408s [1534/5474] TestException#test_cause_thread_no_cause = 0.01 s 2408s [1535/5474] TestException#test_exit_success_p = 0.00 s 2408s [1536/5474] TestException#test_ensure_after_nomemoryerror = 0.00 s 2408s [1537/5474] TestException#test_throw_false = 0.00 s 2408s [1538/5474] TestException#test_message_of_name_error = 0.00 s 2408s [1539/5474] TestException#test_to_s = 0.00 s 2408s [1540/5474] TestException#test_warning_warn_invalid_argument = 0.00 s 2408s [1541/5474] TestException#test_thread_signal_location = 0.02 s 2408s [1542/5474] TestException#test_backtrace_by_exception = 0.01 s 2411s [1543/5474] TestException#test_anonymous_message = 2.84 s 2411s [1544/5474] TestException#test_unknown_option = 0.13 s 2411s [1545/5474] TestException#test_raise_with_cause = 0.00 s 2411s [1546/5474] TestException#test_type_error_message_encoding = 0.08 s 2411s [1547/5474] TestException#test_exception_in_ensure_with_redo = 0.00 s 2411s [1548/5474] TestException#test_errno = 0.01 s 2411s [1549/5474] TestException#test_catch_no_throw = 0.00 s 2411s [1550/5474] TestException#test_cause_raised_in_rescue = 0.00 s 2411s [1551/5474] TestException#test_encoding_in_message = 0.00 s 2415s [1552/5474] TestException#test_exception_in_name_error_to_str = 4.27 s 2420s [1553/5474] TestException#test_exception_in_exception_equal = 4.47 s 2423s [1554/5474] TestException#test_super_in_method_missing = 3.73 s 2426s [1555/5474] TestException#test_warning_warn_super = 2.97 s 2426s [1556/5474] TestException#test_else_raised = 0.01 s 2426s [1557/5474] TestException#test_cause_with_frozen_exception = 0.01 s 2426s [1558/5474] TestException#test_catch_throw = 0.00 s 2427s [1559/5474] TestFileExhaustive#test_stat_readable_real_p = 0.08 s 2427s [1560/5474] TestFileExhaustive#test_lchown = 0.02 s 2427s [1561/5474] TestFileExhaustive#test_chown = 0.00 s 2427s [1562/5474] TestFileExhaustive#test_birthtime = 0.01 s 2427s [1563/5474] TestFileExhaustive#test_stat_sgid = 0.01 s 2427s [1564/5474] TestFileExhaustive#test_lstat = 0.01 s 2427s [1565/5474] TestFileExhaustive#test_chardev_p = 0.01 s 2427s [1566/5474] TestFileExhaustive#test_zero_p = 0.00 s 2427s [1567/5474] TestFileExhaustive#test_symlink = 0.01 s 2427s [1568/5474] TestFileExhaustive#test_expand_path_accepts_objects_that_have_a_to_path_method = 0.00 s 2427s [1569/5474] TestFileExhaustive#test_socket_p = 0.03 s 2427s [1570/5474] TestFileExhaustive#test_expand_path_converts_a_dot_with_unc_dir = 0.00 s 2427s [1571/5474] TestFileExhaustive#test_stat_executable_real_p = 0.00 s 2427s [1572/5474] TestFileExhaustive#test_s_size = 0.01 s 2427s [1573/5474] TestFileExhaustive#test_hardlink = 0.01 s 2427s [1574/5474] TestFileExhaustive#test_io_identical_p = 0.10 s 2427s [1575/5474] TestFileExhaustive#test_stat_writable_p = 0.00 s 2427s [1576/5474] TestFileExhaustive#test_expand_path_resolve_file_name_relative_current_directory = 0.00 s 2428s [1577/5474] TestFileExhaustive#test_stat = 1.11 s 2428s [1578/5474] TestFileExhaustive#test_expand_path_removes_trailing_slashes_from_absolute_path = 0.00 s 2428s [1579/5474] TestFileExhaustive#test_exist_p = 0.00 s 2428s [1580/5474] TestFileExhaustive#test_split = 0.01 s 2429s [1581/5474] TestFileExhaustive#test_test = 1.14 s 2429s [1582/5474] TestFileExhaustive#test_expand_path_does_not_modify_a_home_string_argument = 0.01 s 2429s [1583/5474] TestFileExhaustive#test_stat_size = 0.00 s 2429s [1584/5474] TestFileExhaustive#test_umask = 0.00 s 2430s [1585/5474] TestFileExhaustive#test_stat_init = 1.11 s 2430s [1586/5474] TestFileExhaustive#test_stat_socket_p = 0.01 s 2430s [1587/5474] TestFileExhaustive#test_readable_p = 0.00 s 2430s [1588/5474] TestFileExhaustive#test_utime_symlinkfile = 0.00 s 2430s [1589/5474] TestFileExhaustive#test_expand_path_converts_a_pathname_to_an_absolute_pathname_using_a_complete_path = 0.00 s 2430s [1590/5474] TestFileExhaustive#test_stat_owned_p = 0.00 s 2430s [1591/5474] TestFileExhaustive#test_stat_zero_p = 0.00 s 2430s [1592/5474] TestFileExhaustive#test_absolute_path = 0.00 s 2430s [1593/5474] TestFileExhaustive#test_world_writable_p = 0.00 s 2430s [1594/5474] TestFileExhaustive#test_expand_path = 0.00 s 2430s [1595/5474] TestFileExhaustive#test_truncate = 0.01 s 2430s [1596/5474] TestFileExhaustive#test_expand_path_absolute = 0.00 s 2430s [1597/5474] TestFileExhaustive#test_stat_world_writable_p = 0.00 s 2430s [1598/5474] TestFileExhaustive#test_expand_path_converts_a_pathname_to_an_absolute_pathname_using_home_as_base = 0.00 s 2430s [1599/5474] TestFileExhaustive#test_path_identical_p = 0.06 s 2430s [1600/5474] TestFileExhaustive#test_expand_path_cleanup_dots_file_name = 0.01 s 2430s [1601/5474] TestFileExhaustive#test_empty_p = 0.00 s 2430s [1602/5474] TestFileExhaustive#test_stat_writable_real_p = 0.00 s 2430s [1603/5474] TestFileExhaustive#test_stat_executable_p = 0.00 s 2430s [1604/5474] TestFileExhaustive#test_ctime = 0.01 s 2430s [1605/5474] TestFileExhaustive#test_blockdev_p = 0.01 s 2430s [1606/5474] TestFileExhaustive#test_expand_path_error_for_non_absolute_home = 0.00 s 2430s [1607/5474] TestFileExhaustive#test_symlink_p = 0.00 s 2430s [1608/5474] TestFileExhaustive#test_expand_path_converts_a_pathname_which_starts_with_a_slash_using_a_current_drive = 0.00 s 2430s [1609/5474] TestFileExhaustive#test_basename_strip = 0.01 s 2430s [1610/5474] TestFileExhaustive#test_expand_path_preserves_unc_path_root = 0.00 s 2430s [1611/5474] TestFileExhaustive#test_stat_pipe_p = 0.01 s 2430s [1612/5474] TestFileExhaustive#test_stat_world_readable_p = 0.00 s 2430s [1613/5474] TestFileExhaustive#test_unlink = 0.00 s 2430s [1614/5474] TestFileExhaustive#test_ftype = 0.02 s 2430s [1615/5474] TestFileExhaustive#test_file_p = 0.01 s 2430s [1616/5474] TestFileExhaustive#test_expand_path_resolve_empty_string_current_directory = 0.00 s 2430s [1617/5474] TestFileExhaustive#test_stat_new_utf8 = 0.00 s 2430s [1618/5474] TestFileExhaustive#test_expand_path_expands_dot_dir = 0.00 s 2430s [1619/5474] TestFileExhaustive#test_rename = 0.01 s 2430s [1620/5474] TestFileExhaustive#test_world_readable_p = 0.00 s 2431s [1621/5474] TestFileExhaustive#test_directory_p = 0.00 s 2431s [1622/5474] TestFileExhaustive#test_expand_path_for_existent_username = 0.00 s 2431s [1623/5474] TestFileExhaustive#test_expand_path_error_for_nonexistent_username = 0.00 s 2431s [1624/5474] TestFileExhaustive#test_writable_p = 0.00 s 2431s [1625/5474] TestFileExhaustive#test_expand_path_returns_a_string_when_passed_a_string_subclass = 0.00 s 2431s [1626/5474] TestFileExhaustive#test_readlink = 0.01 s 2431s [1627/5474] TestFileExhaustive#test_stat_size_p = 0.00 s 2431s [1628/5474] TestFileExhaustive#test_mtime = 0.01 s 2431s [1629/5474] TestFileExhaustive#test_readable_real_p = 0.00 s 2431s [1630/5474] TestFileExhaustive#test_stat_ftype = 0.00 s 2431s [1631/5474] TestFileExhaustive#test_stat_symlink_p = 0.00 s 2431s [1632/5474] TestFileExhaustive#test_expand_path_resolve_file_name_and_dir_string_relative = 0.00 s 2431s [1633/5474] TestFileExhaustive#test_stat_chardev_p = 0.00 s 2431s [1634/5474] TestFileExhaustive#test_writable_real_p = 0.00 s 2431s [1635/5474] TestFileExhaustive#test_stat_readable_p = 0.00 s 2431s [1636/5474] TestFileExhaustive#test_expand_path_raises_a_type_error_if_not_passed_a_string_type = 0.00 s 2431s [1637/5474] TestFileExhaustive#test_join_alt_separator = 0.00 s 2431s [1638/5474] TestFileExhaustive#test_pipe_p = 0.00 s 2431s [1639/5474] TestFileExhaustive#test_stat_file_p = 0.00 s 2431s [1640/5474] TestFileExhaustive#test_stat_blockdev_p = 0.00 s 2431s [1641/5474] TestFileExhaustive#test_path = 0.01 s 2431s [1642/5474] TestFileExhaustive#test_expand_path_does_not_modify_the_string_argument = 0.01 s 2431s [1643/5474] TestFileExhaustive#test_stat_suid = 0.01 s 2431s [1644/5474] TestFileExhaustive#test_expand_path_resolve_dot_current_directory = 0.00 s 2431s [1645/5474] TestFileExhaustive#test_chmod = 0.01 s 2431s [1646/5474] TestFileExhaustive#test_executable_p = 0.00 s 2431s [1647/5474] TestFileExhaustive#test_basename = 0.00 s 2431s [1648/5474] TestFileExhaustive#test_stat_sticky = 0.01 s 2431s [1649/5474] TestFileExhaustive#test_executable_real_p = 0.00 s 2431s [1650/5474] TestFileExhaustive#test_expand_path_encoding_filesystem = 0.00 s 2431s [1651/5474] TestFileExhaustive#test_lutime = 0.01 s 2431s [1652/5474] TestFileExhaustive#test_utime = 0.01 s 2431s [1653/5474] TestFileExhaustive#test_join = 0.00 s 2431s [1654/5474] TestFileExhaustive#test_owned_p = 0.00 s 2431s [1655/5474] TestFileExhaustive#test_stat_directory_p = 0.00 s 2431s [1656/5474] TestFileExhaustive#test_ignore_nil_dir_string = 0.00 s 2431s [1657/5474] TestFileExhaustive#test_expand_path_home = 0.01 s 2431s [1658/5474] TestFileExhaustive#test_size_p = 0.00 s 2431s [1659/5474] TestFileExhaustive#test_size = 0.01 s 2431s [1660/5474] TestFileExhaustive#test_path_check = 0.00 s 2431s [1661/5474] TestThreadQueue#test_sized_queue_pop_non_block = 0.00 s 2431s [1662/5474] TestThreadQueue#test_deny_pushers = 0.03 s 2431s [1663/5474] TestThreadQueue#test_queue_close_wakeup = 0.03 s 2431s [1664/5474] TestThreadQueue#test_size_queue_close_wakeup = 0.02 s 2431s [1665/5474] TestThreadQueue#test_sized_queue_push_interrupt = 0.00 s 2431s [1666/5474] TestThreadQueue#test_empty_non_blocking = 0.03 s 2431s [1667/5474] TestThreadQueue#test_sized_queue_initialized = 0.00 s 2431s [1668/5474] TestThreadQueue#test_queue = 0.07 s 2431s [1669/5474] TestThreadQueue#test_sized_queue_one_closed_interrupt = 0.00 s 2434s [1670/5474] TestThreadQueue#test_queue_with_trap = 3.03 s 2434s [1671/5474] TestThreadQueue#test_dup = 0.00 s 2434s [1672/5474] TestThreadQueue#test_sized_queue_push_return_value = 0.00 s 2434s [1673/5474] TestThreadQueue#test_queue_push_return_value = 0.00 s 2438s [1674/5474] TestThreadQueue#test_thr_kill = 4.33 s 2438s [1675/5474] TestThreadQueue#test_queue_clear_return_value = 0.00 s 2438s [1676/5474] TestThreadQueue#test_sized_queue = 0.10 s 2438s [1677/5474] TestThreadQueue#test_one_element_sized_queue = 0.01 s 2438s [1678/5474] TestThreadQueue#test_queue_pop_non_block = 0.00 s 2438s [1679/5474] TestThreadQueue#test_dump = 0.00 s 2438s [1680/5474] TestThreadQueue#test_sized_queue_clear_return_value = 0.00 s 2438s [1681/5474] TestThreadQueue#test_queue_pop_interrupt = 0.00 s 2438s [1682/5474] TestThreadQueue#test_close = 0.01 s 2438s [1683/5474] TestThreadQueue#test_sized_queue_assign_max = 0.00 s 2438s [1684/5474] TestThreadQueue#test_blocked_pushers_empty = 0.01 s 2438s [1685/5474] TestThreadQueue#test_queue_initialize = 0.00 s 2438s [1686/5474] TestThreadQueue#test_queue_initialized = 0.00 s 2438s [1687/5474] TestThreadQueue#test_sized_queue_closed_push_non_blocking = 0.00 s 2439s [1688/5474] TestThreadQueue#test_queue_close_multi_multi = 0.34 s 2439s [1689/5474] TestThreadQueue#test_close_twice = 0.00 s 2439s [1690/5474] TestThreadQueue#test_sized_queue_push_non_block = 0.00 s 2439s [1691/5474] TestThreadQueue#test_queue_thread_raise = 0.21 s 2439s [1692/5474] TestThreadQueue#test_sized_queue_initialize = 0.00 s 2439s [1693/5474] TestThreadQueue#test_sized_queue_throttle = 0.02 s 2439s [1694/5474] TestThreadQueue#test_blocked_pushers = 0.02 s 2439s [1695/5474] TestThreadQueue#test_sized_queue_pop_interrupt = 0.00 s 2439s [1696/5474] TestThreadQueue#test_sized_queue_clear = 0.00 s 2439s [1697/5474] Rational_Test2#test_kumi = 0.01 s 2439s [1698/5474] TestMarshal::TestMarshalFreezeProc#test_share = 0.00 s 2439s [1699/5474] TestMarshal::TestMarshalFreezeProc#test_struct_subclass_extend = 0.01 s 2439s [1700/5474] TestMarshal::TestMarshalFreezeProc#test_time = 0.01 s 2439s [1701/5474] TestMarshal::TestMarshalFreezeProc#test_string_subclass = 0.00 s 2439s [1702/5474] TestMarshal::TestMarshalFreezeProc#test_anonymous = 0.00 s 2439s [1703/5474] TestMarshal::TestMarshalFreezeProc#test_range_cyclic = 0.00 s 2439s [1704/5474] TestMarshal::TestMarshalFreezeProc#test_object_subclass = 0.00 s 2439s [1705/5474] TestMarshal::TestMarshalFreezeProc#test_hash = 0.00 s 2439s [1706/5474] TestMarshal::TestMarshalFreezeProc#test_fixnum = 0.00 s 2439s [1707/5474] TestMarshal::TestMarshalFreezeProc#test_object = 0.01 s 2439s [1708/5474] TestMarshal::TestMarshalFreezeProc#test_symbol = 0.02 s 2439s [1709/5474] TestMarshal::TestMarshalFreezeProc#test_regexp = 0.01 s 2439s [1710/5474] TestMarshal::TestMarshalFreezeProc#test_bignum = 0.00 s 2439s [1711/5474] TestMarshal::TestMarshalFreezeProc#test_exception = 0.01 s 2439s [1712/5474] TestMarshal::TestMarshalFreezeProc#test_float = 0.00 s 2439s [1713/5474] TestMarshal::TestMarshalFreezeProc#test_false = 0.00 s 2439s [1714/5474] TestMarshal::TestMarshalFreezeProc#test_nil = 0.00 s 2439s [1715/5474] TestMarshal::TestMarshalFreezeProc#test_time_ivar = 0.00 s 2439s [1716/5474] TestMarshal::TestMarshalFreezeProc#test_time_subclass = 0.00 s 2439s [1717/5474] TestMarshal::TestMarshalFreezeProc#test_hash_extend = 0.00 s 2439s [1718/5474] TestMarshal::TestMarshalFreezeProc#test_struct = 0.00 s 2439s [1719/5474] TestMarshal::TestMarshalFreezeProc#test_exception_subclass = 0.00 s 2439s [1720/5474] TestMarshal::TestMarshalFreezeProc#test_array_subclass = 0.00 s 2439s [1721/5474] TestMarshal::TestMarshalFreezeProc#test_extend = 0.00 s 2439s [1722/5474] TestMarshal::TestMarshalFreezeProc#test_string = 0.00 s 2439s [1723/5474] TestMarshal::TestMarshalFreezeProc#test_float_inf_nan = 0.00 s 2439s [1724/5474] TestMarshal::TestMarshalFreezeProc#test_struct_ivar = 0.00 s 2439s [1725/5474] TestMarshal::TestMarshalFreezeProc#test_string_crlf = 0.00 s 2439s [1726/5474] TestMarshal::TestMarshalFreezeProc#test_object_subclass_extend = 0.00 s 2439s [1727/5474] TestMarshal::TestMarshalFreezeProc#test_struct_subclass = 0.00 s 2439s [1728/5474] TestMarshal::TestMarshalFreezeProc#test_true = 0.00 s 2439s [1729/5474] TestMarshal::TestMarshalFreezeProc#test_array = 0.00 s 2439s [1730/5474] TestMarshal::TestMarshalFreezeProc#test_string_subclass_extend = 0.00 s 2439s [1731/5474] TestMarshal::TestMarshalFreezeProc#test_struct_toplevel = 0.00 s 2439s [1732/5474] TestMarshal::TestMarshalFreezeProc#test_array_ivar = 0.00 s 2439s [1733/5474] TestMarshal::TestMarshalFreezeProc#test_hash_subclass = 0.00 s 2439s [1734/5474] TestMarshal::TestMarshalFreezeProc#test_time_in_array = 0.00 s 2439s [1735/5474] TestMarshal::TestMarshalFreezeProc#test_hash_default = 0.00 s 2439s [1736/5474] TestMarshal::TestMarshalFreezeProc#test_range = 0.00 s 2439s [1737/5474] TestMarshal::TestMarshalFreezeProc#test_string_escape = 0.00 s 2439s [1738/5474] TestMarshal::TestMarshalFreezeProc#test_string_ivar = 0.00 s 2439s [1739/5474] TestMarshal::TestMarshalFreezeProc#test_range_subclass = 0.01 s 2439s [1740/5474] TestMarshal::TestMarshalFreezeProc#test_hash_ivar = 0.00 s 2439s [1741/5474] TestMarshal::TestMarshalFreezeProc#test_hash_default_proc = 0.00 s 2439s [1742/5474] TestMarshal::TestMarshalFreezeProc#test_regexp_subclass = 0.00 s 2439s [1743/5474] TestMarshal::TestMarshalFreezeProc#test_string_empty = 0.00 s 2439s [1744/5474] TestMarshal::TestMarshalFreezeProc#test_extend_string = 0.00 s 2439s [1745/5474] TestMarshal::TestMarshalFreezeProc#test_object_extend = 0.00 s 2439s [1746/5474] TestFrozenError#test_receiver = 0.00 s 2439s [1747/5474] TestFrozenError#test_new_receiver = 0.00 s 2439s [1748/5474] TestRefinement#test_using_same_class_refinements = 0.00 s 2439s [1749/5474] TestRefinement#test_instance_methods_not_include_superclass_method = 0.00 s 2439s [1750/5474] TestRefinement#test_refine_alias_in_subclass = 0.00 s 2445s [1751/5474] TestRefinement#test_undef_refined_method = 5.51 s 2445s [1752/5474] TestRefinement#test_instance_methods = 0.00 s 2447s [1753/5474] TestRefinement#test_eval_scoping = 2.46 s 2447s [1754/5474] TestRefinement#test_include_refinement = 0.00 s 2447s [1755/5474] TestRefinement#test_check_funcall_undefined = 0.00 s 2451s [1756/5474] TestRefinement#test_two_refinements_for_prepended_class = 3.63 s 2455s [1757/5474] TestRefinement#test_alias_refined_method = 3.69 s 2455s [1758/5474] TestRefinement#test_override_builtin_method_with_method_added = 0.00 s 2455s [1759/5474] TestRefinement#test_refine_in_class = 0.00 s 2455s [1760/5474] TestRefinement#test_super = 0.00 s 2457s [1761/5474] TestRefinement#test_call_method_in_unused_refinement = 2.57 s 2457s [1762/5474] TestRefinement#test_instance_method_should_use_refinements = 0.00 s 2457s [1763/5474] TestRefinement#test_return_value_of_refine = 0.00 s 2457s [1764/5474] TestRefinement#test_instance_eval_without_refinement = 0.00 s 2457s [1765/5474] TestRefinement#test_symbol_proc = 0.00 s 2460s [1766/5474] TestRefinement#test_refining_module_repeatedly = 2.57 s 2460s [1767/5474] TestRefinement#test_refine_with_proc = 0.00 s 2463s [1768/5474] TestRefinement#test_change_refined_new_method_visibility = 3.57 s 2463s [1769/5474] TestRefinement#test_new_method_on_subclass = 0.00 s 2463s [1770/5474] TestRefinement#test_inspect = 0.00 s 2463s [1771/5474] TestRefinement#test_refine_array_min_max = 0.00 s 2466s [1772/5474] TestRefinement#test_refine_undefed_method_and_send = 2.48 s 2466s [1773/5474] TestRefinement#test_redefine_refined_method = 0.00 s 2466s [1774/5474] TestRefinement#test_override_builtin_method = 0.00 s 2466s [1775/5474] TestRefinement#test_refine_module = 0.00 s 2470s [1776/5474] TestRefinement#test_symbol_proc_with_block = 3.73 s 2473s [1777/5474] TestRefinement#test_prepend_after_refine_wb_miss = 3.58 s 2473s [1778/5474] TestRefinement#test_module_using_in_method = 0.00 s 2473s [1779/5474] TestRefinement#test_module_inclusion = 0.00 s 2473s [1780/5474] TestRefinement#test_refine_in_using = 0.00 s 2473s [1781/5474] TestRefinement#test_refine_neither_class_nor_module = 0.00 s 2473s [1782/5474] TestRefinement#test_privatizing_refined_method = 0.00 s 2473s [1783/5474] TestRefinement#test_super_in_subclass = 0.00 s 2473s [1784/5474] TestRefinement#test_refine_inherited_method_with_visibility_changes = 0.02 s 2473s [1785/5474] TestRefinement#test_using_in_method = 0.00 s 2477s [1786/5474] TestRefinement#test_prepended_with_method_cache_17417 = 3.68 s 2477s [1787/5474] TestRefinement#test_prepended_with_method_cache = 0.00 s 2477s [1788/5474] TestRefinement#test_module_using_class = 0.00 s 2477s [1789/5474] TestRefinement#test_module_using_invalid_self = 0.01 s 2479s [1790/5474] TestRefinement#test_case_dispatch_is_aware_of_refinements = 2.48 s 2479s [1791/5474] TestRefinement#test_subclass_is_prior = 0.01 s 2479s [1792/5474] TestRefinement#test_defining_after_cached = 0.00 s 2483s [1793/5474] TestRefinement#test_refine_with_prepend = 3.68 s 2483s [1794/5474] TestRefinement#test_refine_prepended_module = 0.00 s 2483s [1795/5474] TestRefinement#test_refine_same_class_twice = 0.00 s 2483s [1796/5474] TestRefinement#test_redefining_refined_for_prepended_class = 0.00 s 2483s [1797/5474] TestRefinement#test_builtin_method_no_local_rebinding = 0.00 s 2486s [1798/5474] TestRefinement#test_main_using = 2.67 s 2486s [1799/5474] TestRefinement#test_no_local_rebinding = 0.00 s 2486s [1800/5474] TestRefinement#test_method_defined = 0.00 s 2486s [1801/5474] TestRefinement#test_super_not_chained = 0.00 s 2486s [1802/5474] TestRefinement#test_method_should_use_refinements = 0.01 s 2486s [1803/5474] TestRefinement#test_super_in_block = 0.01 s 2486s [1804/5474] TestRefinement#test_module_using = 0.00 s 2488s [1805/5474] TestRefinement#test_adding_private_method = 2.43 s 2491s [1806/5474] TestRefinement#test_call_refined_method_in_duplicate_module = 2.76 s 2494s [1807/5474] TestRefinement#test_alias_refined_method2 = 2.88 s 2494s [1808/5474] TestRefinement#test_mixed_using = 0.09 s 2496s [1809/5474] TestRefinement#test_using_method_cache = 2.59 s 2499s [1810/5474] TestRefinement#test_refine_undefed_method_and_call = 2.91 s 2502s [1811/5474] TestRefinement#test_warn_setconst_in_refinmenet = 2.56 s 2502s [1812/5474] TestRefinement#test_inherit_singleton_methods_of_module = 0.00 s 2502s [1813/5474] TestRefinement#test_no_kernel_using = 0.01 s 2505s [1814/5474] TestRefinement#test_making_private_method_public = 3.00 s 2508s [1815/5474] TestRefinement#test_eval_with_binding_scoping = 2.54 s 2508s [1816/5474] TestRefinement#test_dsym_literal = 0.01 s 2512s [1817/5474] TestRefinement#test_undefined_refined_method_defined = 4.05 s 2512s [1818/5474] TestRefinement#test_used_modules = 0.00 s 2512s [1819/5474] TestRefinement#test_override = 0.03 s 2514s [1820/5474] TestRefinement#test_unused_refinement_for_module = 2.75 s 2518s [1821/5474] TestRefinement#test_public_in_refine = 3.87 s 2518s [1822/5474] TestRefinement#test_include_into_refinement = 0.00 s 2518s [1823/5474] TestRefinement#test_super_from_refined_module = 0.05 s 2518s [1824/5474] TestRefinement#test_module_eval = 0.00 s 2522s [1825/5474] TestRefinement#test_remove_refined_method = 4.05 s 2530s [1826/5474] TestRefinement#test_using_wrong_argument = 7.84 s 2530s [1827/5474] TestRefinement#test_method_missing = 0.00 s 2530s [1828/5474] TestRefinement#test_refine_without_block = 0.00 s 2530s [1829/5474] TestRefinement#test_send_should_use_refinements = 0.00 s 2530s [1830/5474] TestRefinement#test_prepend_after_refine = 0.01 s 2534s [1831/5474] TestRefinement#test_singleton_method_should_not_use_refinements = 3.83 s 2534s [1832/5474] TestRefinement#test_using_in_module = 0.00 s 2534s [1833/5474] TestRefinement#test_main_using_is_private = 0.01 s 2538s [1834/5474] TestRefinement#test_reopen_refinement_module = 3.81 s 2538s [1835/5474] TestRefinement#test_module_inclusion2 = 0.00 s 2546s [1836/5474] TestRefinement#test_refine_basic_object = 7.97 s 2546s [1837/5474] TestRefinement#test_refine_mutual_recursion = 0.03 s 2546s [1838/5474] TestRefinement#test_new_method = 0.00 s 2550s [1839/5474] TestRefinement#test_refined_method_defined = 3.76 s 2550s [1840/5474] TestRefinement#test_funcall_inherited = 0.00 s 2553s [1841/5474] TestRefinement#test_remove_undefined_refined_method = 3.53 s 2557s [1842/5474] TestRefinement#test_refine_after_using = 3.72 s 2557s [1843/5474] TestBasicInstructions#test_local_variable = 0.01 s 2557s [1844/5474] TestBasicInstructions#test_opassign1_1 = 0.00 s 2557s [1845/5474] TestBasicInstructions#test_const_inherit = 0.02 s 2557s [1846/5474] TestBasicInstructions#test_hash = 0.00 s 2557s [1847/5474] TestBasicInstructions#test_opassign2_3 = 0.00 s 2557s [1848/5474] TestBasicInstructions#test_self = 0.00 s 2557s [1849/5474] TestBasicInstructions#test_opassign2_1 = 0.00 s 2557s [1850/5474] TestBasicInstructions#test_dsym = 0.00 s 2557s [1851/5474] TestBasicInstructions#test_immediates = 0.00 s 2557s [1852/5474] TestBasicInstructions#test_string = 0.00 s 2557s [1853/5474] TestBasicInstructions#test_xstr = 0.00 s 2557s [1854/5474] TestBasicInstructions#test_array = 0.00 s 2557s [1855/5474] TestBasicInstructions#test_const_path = 0.03 s 2557s [1856/5474] TestBasicInstructions#test_const_cref = 0.02 s 2557s [1857/5474] TestBasicInstructions#test_global_variable = 0.00 s 2557s [1858/5474] TestBasicInstructions#test_range = 0.01 s 2557s [1859/5474] TestBasicInstructions#test_opassign2_2 = 0.00 s 2557s [1860/5474] TestBasicInstructions#test_array_splat = 0.00 s 2557s [1861/5474] TestBasicInstructions#test_send_opassign = 0.00 s 2557s [1862/5474] TestBasicInstructions#test_class_variable = 0.01 s 2557s [1863/5474] TestBasicInstructions#test_opassign1_2 = 0.01 s 2557s [1864/5474] TestBasicInstructions#test_backref = 0.00 s 2557s [1865/5474] TestBasicInstructions#test_not = 0.00 s 2557s [1866/5474] TestBasicInstructions#test_dstring = 0.00 s 2561s [1867/5474] TestBasicInstructions#test_special_const_instance_variables = 3.85 s 2561s [1868/5474] TestDir_M17N#test_glob_compose = 0.06 s 2561s [1869/5474] TestDir_M17N#test_pwd = 0.02 s 2561s [1870/5474] TestDir_M17N#test_entries_compose = 0.01 s 2561s [1871/5474] TestDir_M17N#test_glob_escape_multibyte = 0.00 s 2561s [1872/5474] TestObject#test_true_or = 0.00 s 2561s [1873/5474] TestObject#test_singleton_class = 0.00 s 2561s [1874/5474] TestObject#test_implicit_respond_to = 0.00 s 2561s [1875/5474] TestObject#test_methods_prepend = 0.01 s 2561s [1876/5474] TestObject#test_implicit_respond_to_arity_3 = 0.00 s 2561s [1877/5474] TestObject#test_implicit_respond_to_arity_1 = 0.00 s 2561s [1878/5474] TestObject#test_itself = 0.00 s 2561s [1879/5474] TestObject#test_instance_variable_set = 0.00 s 2561s [1880/5474] TestObject#test_instance_variable_get = 0.00 s 2561s [1881/5474] TestObject#test_true_and = 0.01 s 2561s [1882/5474] TestObject#test_false_and = 0.00 s 2561s [1883/5474] TestObject#test_kind_of = 0.00 s 2561s [1884/5474] TestObject#test_bad_initialize_copy = 0.04 s 2561s [1885/5474] TestObject#test_convert_hash = 0.00 s 2561s [1886/5474] TestObject#test_public_send = 0.01 s 2561s [1887/5474] TestObject#test_methods2 = 0.00 s 2561s [1888/5474] TestObject#test_inspect = 0.00 s 2561s [1889/5474] TestObject#test_dup = 0.00 s 2573s [1890/5474] TestObject#test_redef_method_missing = 11.73 s 2573s [1891/5474] TestObject#test_check_to_integer = 0.08 s 2573s [1892/5474] TestObject#test_frozen_error_message = 0.01 s 2573s [1893/5474] TestObject#test_convert_array = 0.00 s 2573s [1894/5474] TestObject#test_nil_to_s = 0.00 s 2573s [1895/5474] TestObject#test_extend = 0.00 s 2573s [1896/5474] TestObject#test_false_xor = 0.00 s 2573s [1897/5474] TestObject#test_true_xor = 0.00 s 2573s [1898/5474] TestObject#test_respond_to_missing = 0.01 s 2573s [1899/5474] TestObject#test_instance_exec = 0.00 s 2573s [1900/5474] TestObject#test_send_with_block = 0.00 s 2573s [1901/5474] TestObject#test_false_or = 0.00 s 2573s [1902/5474] TestObject#test_method_missing_passed_block = 0.00 s 2573s [1903/5474] TestObject#test_nil_to_f = 0.00 s 2573s [1904/5474] TestObject#test_instance_of = 0.00 s 2573s [1905/5474] TestObject#test_no_superclass_method = 0.02 s 2573s [1906/5474] TestObject#test_instance_variable_defined = 0.00 s 2573s [1907/5474] TestObject#test_respond_to_missing_string = 0.01 s 2573s [1908/5474] TestObject#test_remove_instance_variable = 0.02 s 2573s [1909/5474] TestObject#test_to_s = 0.01 s 2573s [1910/5474] TestObject#test_freeze_immediate = 0.00 s 2573s [1911/5474] TestObject#test_false_to_s = 0.00 s 2573s [1912/5474] TestObject#test_yield_self = 0.00 s 2573s [1913/5474] TestObject#test_to_integer = 0.00 s 2577s [1914/5474] TestObject#test_clone_object_should_not_be_old = 4.05 s 2577s [1915/5474] TestObject#test_send_with_no_arguments = 0.03 s 2577s [1916/5474] TestObject#test_method_missing = 0.01 s 2577s [1917/5474] TestObject#test_methods = 0.01 s 2577s [1918/5474] TestObject#test_specific_eval_with_wrong_arguments = 0.00 s 2577s [1919/5474] TestObject#test_not = 0.00 s 2577s [1920/5474] TestObject#test_clone = 0.03 s 2580s [1921/5474] TestObject#test_superclass_method = 2.66 s 2580s [1922/5474] TestObject#test_init_dupclone = 0.05 s 2580s [1923/5474] TestObject#test_convert_string = 0.00 s 2580s [1924/5474] TestObject#test_true_to_s = 0.00 s 2580s [1925/5474] TestFixnum#test_minus = 0.00 s 2580s [1926/5474] TestFixnum#test_and_with_nonintegral_numeric = 0.00 s 2580s [1927/5474] TestFixnum#test_zero_p = 0.00 s 2580s [1928/5474] TestFixnum#test_sub = 0.00 s 2580s [1929/5474] TestFixnum#test_xor_with_float = 0.00 s 2580s [1930/5474] TestFixnum#test_power_of_0 = 0.00 s 2580s [1931/5474] TestFixnum#test_and_with_float = 0.00 s 2580s [1932/5474] TestFixnum#test_cmp = 0.00 s 2580s [1933/5474] TestFixnum#test_or_with_rational = 0.00 s 2580s [1934/5474] TestFixnum#test_and_with_rational = 0.00 s 2580s [1935/5474] TestFixnum#test_plus2 = 0.00 s 2580s [1936/5474] TestFixnum#test_succ = 0.00 s 2580s [1937/5474] TestFixnum#test_xor_with_nonintegral_numeric = 0.00 s 2580s [1938/5474] TestFixnum#test_mult = 0.00 s 2580s [1939/5474] TestFixnum#test_pow2 = 0.00 s 2580s [1940/5474] TestFixnum#test_finite_p = 0.00 s 2580s [1941/5474] TestFixnum#test_remainder = 0.00 s 2580s [1942/5474] TestFixnum#test_xor_with_rational = 0.00 s 2580s [1943/5474] TestFixnum#test_singleton_method = 0.00 s 2580s [1944/5474] TestFixnum#test_positive_p = 0.00 s 2580s [1945/5474] TestFixnum#test_plus = 0.00 s 2580s [1946/5474] TestFixnum#test_divide = 0.01 s 2580s [1947/5474] TestFixnum#test_rshift = 0.00 s 2580s [1948/5474] TestFixnum#test_frozen = 0.00 s 2580s [1949/5474] TestFixnum#test_or_with_nonintegral_numeric = 0.00 s 2580s [1950/5474] TestFixnum#test_or_with_float = 0.00 s 2580s [1951/5474] TestFixnum#test_to_s = 0.00 s 2580s [1952/5474] TestFixnum#test_mod = 0.00 s 2580s [1953/5474] TestFixnum#test_divmod = 0.01 s 2580s [1954/5474] TestFixnum#test_abs = 0.00 s 2580s [1955/5474] TestFixnum#test_lshift = 0.00 s 2580s [1956/5474] TestFixnum#test_negative_p = 0.00 s 2580s [1957/5474] TestFixnum#test_infinite_p = 0.00 s 2580s [1958/5474] TestFixnum#test_div = 0.00 s 2580s [1959/5474] TestFixnum#test_not = 0.00 s 2580s [1960/5474] TestFixnum#test_mul = 0.00 s 2580s [1961/5474] TestFixnum#test_pow = 0.00 s 2580s [1962/5474] TestFixnum#test_pred = 0.00 s 2580s [1963/5474] TestKeywordArgumentsSymProcRefinements#test_protected_kwarg = 0.00 s 2580s [1964/5474] TestKeywordArgumentsSymProcRefinements#test_value_omission = 0.01 s 2580s [1965/5474] TestKeywordArgumentsSymProcRefinements#test_sym_proc_refine_kwsplat = 0.01 s 2580s [1966/5474] TestKeywordArgumentsSymProcRefinements#test_sym_proc_refine_method_missing_kwsplat = 0.01 s 2580s [1967/5474] TestKeywordArgumentsSymProcRefinements#test_sym_proc_refine_super_method_missing_kwsplat = 0.02 s 2582s [1968/5474] TestM17NComb#test_str_slice = 1.93 s 2582s [1969/5474] TestM17NComb#test_str_sum = 0.00 s 2582s [1970/5474] TestM17NComb#test_str_bytes = 0.00 s 2583s [1971/5474] TestM17NComb#test_str_assign_len = 0.58 s 2583s [1972/5474] TestM17NComb#test_str_reverse = 0.00 s 2583s [1973/5474] TestM17NComb#test_str_assign_substr = 0.61 s 2583s [1974/5474] TestM17NComb#test_str_new = 0.00 s 2583s [1975/5474] TestM17NComb#test_str_aref_range2 = 0.04 s 2583s [1976/5474] TestM17NComb#test_str_hex = 0.00 s 2583s [1977/5474] TestM17NComb#test_marshal = 0.00 s 2584s [1978/5474] TestM17NComb#test_str_squeeze = 0.52 s 2584s [1979/5474] TestM17NComb#test_str_to_s = 0.00 s 2585s [1980/5474] TestM17NComb#test_tr_s = 0.71 s 2585s [1981/5474] TestM17NComb#test_str_to_i = 0.02 s 2585s [1982/5474] TestM17NComb#test_str_aref = 0.00 s 2585s [1983/5474] TestM17NComb#test_str_eq_transitive = 0.03 s 2585s [1984/5474] TestM17NComb#test_str_length = 0.00 s 2585s [1985/5474] TestM17NComb#test_str_rpartition = 0.40 s 2585s [1986/5474] TestM17NComb#test_str_bytesize = 0.00 s 2585s [1987/5474] TestM17NComb#test_str_clone = 0.00 s 2586s [1988/5474] TestM17NComb#test_str_assign_range3 = 0.77 s 2586s [1989/5474] TestM17NComb#test_str_center = 0.46 s 2586s [1990/5474] TestM17NComb#test_str_casecmp? = 0.04 s 2587s [1991/5474] TestM17NComb#test_str_include? = 0.70 s 2587s [1992/5474] TestM17NComb#test_str_rjust = 0.38 s 2588s [1993/5474] TestM17NComb#test_str_start_with? = 0.37 s 2588s [1994/5474] TestM17NComb#test_str_concat = 0.24 s 2588s [1995/5474] TestM17NComb#test_str_chop = 0.00 s 2588s [1996/5474] TestM17NComb#test_str_each_byte = 0.00 s 2588s [1997/5474] TestM17NComb#test_str_index = 0.27 s 2590s [1998/5474] TestM17NComb#test_str_assign = 1.84 s 2590s [1999/5474] TestM17NComb#test_tr_sjis = 0.00 s 2590s [2000/5474] TestM17NComb#test_str_succ2 = 0.00 s 2590s [2001/5474] TestM17NComb#test_str_succ = 0.22 s 2591s [2002/5474] TestM17NComb#test_str_rindex = 0.64 s 2591s [2003/5474] TestM17NComb#test_str_eq_symmetric = 0.12 s 2591s [2004/5474] TestM17NComb#test_str_end_with? = 0.30 s 2592s [2005/5474] TestM17NComb#test_str_hash = 0.02 s 2592s [2006/5474] TestM17NComb#test_str_insert = 0.68 s 2593s [2007/5474] TestM17NComb#test_str_delete = 0.36 s 2593s [2008/5474] TestM17NComb#test_str_oct = 0.00 s 2593s [2009/5474] TestM17NComb#test_str_split = 0.49 s 2593s [2010/5474] TestM17NComb#test_str_upcase = 0.01 s 2593s [2011/5474] TestM17NComb#test_str_replace = 0.03 s 2594s [2012/5474] TestM17NComb#test_str_assign_range2 = 0.46 s 2594s [2013/5474] TestM17NComb#test_str_dup = 0.00 s 2594s [2014/5474] TestM17NComb#test_str_eq = 0.08 s 2594s [2015/5474] TestM17NComb#test_str_strip = 0.01 s 2594s [2016/5474] TestM17NComb#test_str_aref_substr = 0.30 s 2594s [2017/5474] TestM17NComb#test_str_times = 0.01 s 2594s [2018/5474] TestM17NComb#test_str_downcase = 0.01 s 2594s [2019/5474] TestM17NComb#test_str_chr = 0.00 s 2594s [2020/5474] TestM17NComb#test_str_aref_len = 0.01 s 2595s [2021/5474] TestM17NComb#test_tr = 0.84 s 2595s [2022/5474] TestM17NComb#test_str_plus = 0.29 s 2596s [2023/5474] TestM17NComb#test_str_scan = 0.40 s 2596s [2024/5474] TestM17NComb#test_str_cmp = 0.04 s 2596s [2025/5474] TestM17NComb#test_str_swapcase = 0.01 s 2596s [2026/5474] TestM17NComb#test_str_partition = 0.29 s 2596s [2027/5474] TestM17NComb#test_str_dump = 0.00 s 2596s [2028/5474] TestM17NComb#test_str_each_line = 0.29 s 2596s [2029/5474] TestM17NComb#test_sprintf_s = 0.00 s 2596s [2030/5474] TestM17NComb#test_str_empty? = 0.00 s 2596s [2031/5474] TestM17NComb#test_str_chomp = 0.14 s 2596s [2032/5474] TestM17NComb#test_str_crypt = 0.18 s 2596s [2033/5474] TestM17NComb#test_str_to_f = 0.00 s 2596s [2034/5474] TestM17NComb#test_str_ord = 0.01 s 2596s [2035/5474] TestM17NComb#test_str_eq_reflexive = 0.00 s 2598s [2036/5474] TestM17NComb#test_str_sub! = 1.42 s 2598s [2037/5474] TestM17NComb#test_str_chars = 0.00 s 2598s [2038/5474] TestM17NComb#test_str_casecmp = 0.03 s 2598s [2039/5474] TestM17NComb#test_str_capitalize = 0.01 s 2599s [2040/5474] TestM17NComb#test_str_sub = 1.34 s 2601s [2041/5474] TestM17NComb#test_str_slice! = 1.76 s 2601s [2042/5474] TestM17NComb#test_str_clear = 0.01 s 2601s [2043/5474] TestM17NComb#test_str_ljust = 0.40 s 2602s [2044/5474] TestM17NComb#test_str_aref_range3 = 0.03 s 2602s [2045/5474] TestBacktrace#test_caller_with_limit = 0.00 s 2602s [2046/5474] TestBacktrace#test_thread_backtrace = 0.51 s 2602s [2047/5474] TestBacktrace#test_exception = 0.01 s 2605s [2048/5474] TestBacktrace#test_caller_locations_lineno = 2.53 s 2607s [2049/5474] TestBacktrace#test_caller_locations_path = 2.74 s 2607s [2050/5474] TestBacktrace#test_core_backtrace_hash_merge = 0.00 s 2607s [2051/5474] TestBacktrace#test_caller_locations_base_label = 0.00 s 2607s [2052/5474] TestBacktrace#test_caller_locations_with_range = 0.00 s 2607s [2053/5474] TestBacktrace#test_core_backtrace_undef = 0.00 s 2607s [2054/5474] TestBacktrace#test_core_backtrace_alias = 0.00 s 2607s [2055/5474] TestBacktrace#test_caller_locations = 0.00 s 2607s [2056/5474] TestBacktrace#test_caller_location_path_cfunc_iseq_no_pc = 0.00 s 2607s [2057/5474] TestBacktrace#test_argument_error_backtrace_locations = 0.01 s 2607s [2058/5474] TestBacktrace#test_caller_locations_first_label = 0.00 s 2607s [2059/5474] TestBacktrace#test_caller_lev = 0.03 s 2607s [2060/5474] TestBacktrace#test_caller_locations_to_s_inspect = 0.00 s 2607s [2061/5474] TestBacktrace#test_exception_backtrace_locations = 0.00 s 2608s [2062/5474] TestBacktrace#test_thread_backtrace_locations_with_range = 0.50 s 2608s [2063/5474] TestBacktrace#test_caller_with_nil_length = 0.00 s 2608s [2064/5474] TestMarshal::TestMarshalFreeze#test_share = 0.00 s 2608s [2065/5474] TestMarshal::TestMarshalFreeze#test_struct_subclass_extend = 0.00 s 2608s [2066/5474] TestMarshal::TestMarshalFreeze#test_time = 0.01 s 2608s [2067/5474] TestMarshal::TestMarshalFreeze#test_proc_returned_object_are_not_frozen = 0.00 s 2608s [2068/5474] TestMarshal::TestMarshalFreeze#test_string_subclass = 0.00 s 2608s [2069/5474] TestMarshal::TestMarshalFreeze#test_anonymous = 0.00 s 2608s [2070/5474] TestMarshal::TestMarshalFreeze#test_range_cyclic = 0.00 s 2608s [2071/5474] TestMarshal::TestMarshalFreeze#test_object_subclass = 0.00 s 2608s [2072/5474] TestMarshal::TestMarshalFreeze#test_hash = 0.00 s 2608s [2073/5474] TestMarshal::TestMarshalFreeze#test_fixnum = 0.00 s 2608s [2074/5474] TestMarshal::TestMarshalFreeze#test_object = 0.00 s 2608s [2075/5474] TestMarshal::TestMarshalFreeze#test_symbol = 0.02 s 2608s [2076/5474] TestMarshal::TestMarshalFreeze#test_regexp = 0.00 s 2608s [2077/5474] TestMarshal::TestMarshalFreeze#test_bignum = 0.01 s 2608s [2078/5474] TestMarshal::TestMarshalFreeze#test_exception = 0.02 s 2608s [2079/5474] TestMarshal::TestMarshalFreeze#test_modules_and_classes_are_not_frozen = 0.00 s 2608s [2080/5474] TestMarshal::TestMarshalFreeze#test_float = 0.00 s 2608s [2081/5474] TestMarshal::TestMarshalFreeze#test_false = 0.00 s 2608s [2082/5474] TestMarshal::TestMarshalFreeze#test_nil = 0.00 s 2608s [2083/5474] TestMarshal::TestMarshalFreeze#test_time_ivar = 0.00 s 2608s [2084/5474] TestMarshal::TestMarshalFreeze#test_time_subclass = 0.00 s 2608s [2085/5474] TestMarshal::TestMarshalFreeze#test_hash_extend = 0.00 s 2608s [2086/5474] TestMarshal::TestMarshalFreeze#test_struct = 0.00 s 2608s [2087/5474] TestMarshal::TestMarshalFreeze#test_exception_subclass = 0.00 s 2608s [2088/5474] TestMarshal::TestMarshalFreeze#test_array_subclass = 0.00 s 2608s [2089/5474] TestMarshal::TestMarshalFreeze#test_extend = 0.00 s 2608s [2090/5474] TestMarshal::TestMarshalFreeze#test_string = 0.00 s 2608s [2091/5474] TestMarshal::TestMarshalFreeze#test_float_inf_nan = 0.00 s 2608s [2092/5474] TestMarshal::TestMarshalFreeze#test_return_objects_are_frozen = 0.00 s 2608s [2093/5474] TestMarshal::TestMarshalFreeze#test_struct_ivar = 0.00 s 2608s [2094/5474] TestMarshal::TestMarshalFreeze#test_string_crlf = 0.00 s 2608s [2095/5474] TestMarshal::TestMarshalFreeze#test_object_subclass_extend = 0.00 s 2608s [2096/5474] TestMarshal::TestMarshalFreeze#test_struct_subclass = 0.00 s 2608s [2097/5474] TestMarshal::TestMarshalFreeze#test_true = 0.00 s 2608s [2098/5474] TestMarshal::TestMarshalFreeze#test_array = 0.00 s 2608s [2099/5474] TestMarshal::TestMarshalFreeze#test_string_subclass_extend = 0.00 s 2608s [2100/5474] TestMarshal::TestMarshalFreeze#test_struct_toplevel = 0.00 s 2608s [2101/5474] TestMarshal::TestMarshalFreeze#test_array_ivar = 0.00 s 2608s [2102/5474] TestMarshal::TestMarshalFreeze#test_string_subclass_cycle = 0.00 s 2608s [2103/5474] TestMarshal::TestMarshalFreeze#test_hash_subclass = 0.00 s 2608s [2104/5474] TestMarshal::TestMarshalFreeze#test_time_in_array = 0.00 s 2608s [2105/5474] TestMarshal::TestMarshalFreeze#test_hash_default = 0.00 s 2608s [2106/5474] TestMarshal::TestMarshalFreeze#test_range = 0.00 s 2608s [2107/5474] TestMarshal::TestMarshalFreeze#test_string_escape = 0.00 s 2608s [2108/5474] TestMarshal::TestMarshalFreeze#test_range_subclass = 0.00 s 2608s [2109/5474] TestMarshal::TestMarshalFreeze#test_hash_ivar = 0.00 s 2608s [2110/5474] TestMarshal::TestMarshalFreeze#test_hash_default_proc = 0.00 s 2608s [2111/5474] TestMarshal::TestMarshalFreeze#test_regexp_subclass = 0.00 s 2608s [2112/5474] TestMarshal::TestMarshalFreeze#test_string_empty = 0.00 s 2608s [2113/5474] TestMarshal::TestMarshalFreeze#test_extend_string = 0.00 s 2608s [2114/5474] TestMarshal::TestMarshalFreeze#test_object_extend = 0.00 s 2608s [2115/5474] TestArraySubclass#test_ary_new = 0.00 s 2608s [2116/5474] TestArraySubclass#test_drop_while = 0.00 s 2608s [2117/5474] TestArraySubclass#test_unshift_frozen = 0.00 s 2608s [2118/5474] TestArraySubclass#test_slice! = 0.01 s 2608s [2119/5474] TestArraySubclass#test_flatten_respond_to_missing = 0.00 s 2608s [2120/5474] TestArraySubclass#test_PLUS = 0.00 s 2608s [2121/5474] TestArraySubclass#test_zip_bug = 0.00 s 2608s [2122/5474] TestArraySubclass#test_flatten! = 0.00 s 2608s [2123/5474] TestArraySubclass#test_fill2 = 0.00 s 2608s [2124/5474] TestArraySubclass#test_slice_out_of_range = 0.01 s 2608s [2125/5474] TestArraySubclass#test_bsearch_index_typechecks_return_values = 0.00 s 2608s [2126/5474] TestArraySubclass#test_zip = 0.01 s 2608s [2127/5474] TestArraySubclass#test_unshift_error = 0.00 s 2608s [2128/5474] TestArraySubclass#test_values_at2 = 0.00 s 2608s [2129/5474] TestArraySubclass#test_pop = 0.00 s 2608s [2130/5474] TestArraySubclass#test_eql? = 0.00 s 2608s [2131/5474] TestArraySubclass#test_join_recheck_array_length = 0.00 s 2608s [2132/5474] TestArraySubclass#test_first2 = 0.00 s 2608s [2133/5474] TestArraySubclass#test_prepend = 0.00 s 2608s [2134/5474] TestArraySubclass#test_sort_bang_with_freeze = 0.00 s 2608s [2135/5474] TestArraySubclass#test_times = 0.00 s 2608s [2136/5474] TestArraySubclass#test_at = 0.00 s 2608s [2137/5474] TestArraySubclass#test_reverse = 0.00 s 2608s [2138/5474] TestArraySubclass#test_VERY_EQUAL = 0.00 s 2608s [2139/5474] TestArraySubclass#test_cycle = 0.00 s 2608s [2140/5474] TestArraySubclass#test_shared_array_reject! = 0.00 s 2608s [2141/5474] TestArraySubclass#test_aset_error = 0.01 s 2608s [2142/5474] TestArraySubclass#test_rotate = 0.01 s 2608s [2143/5474] TestArraySubclass#test_shift2 = 0.00 s 2608s [2144/5474] TestArraySubclass#test_OR_in_order = 0.00 s 2608s [2145/5474] TestArraySubclass#test_shift_shared_ary = 0.00 s 2608s [2146/5474] TestArraySubclass#test_to_h_block = 0.01 s 2608s [2147/5474] TestArraySubclass#test_delete_if = 0.01 s 2608s [2148/5474] TestArraySubclass#test_intersection_big_array = 0.00 s 2608s [2149/5474] TestArraySubclass#test_uniq_0 = 0.00 s 2608s [2150/5474] TestArraySubclass#test_select! = 0.01 s 2608s [2151/5474] TestArraySubclass#test_flattern_singleton_class! = 0.00 s 2608s [2152/5474] TestArraySubclass#test_append = 0.00 s 2608s [2153/5474] TestArraySubclass#test_iseq_shared_array_reject! = 0.00 s 2608s [2154/5474] TestArraySubclass#test_hash = 0.01 s 2608s [2155/5474] TestArraySubclass#test_each_index = 0.00 s 2608s [2156/5474] TestArraySubclass#test_dig = 0.00 s 2612s [2157/5474] TestArraySubclass#test_repeated_combination_stack_error = 3.78 s 2612s [2158/5474] TestArraySubclass#test_empty? = 0.00 s 2612s [2159/5474] TestArraySubclass#test_uniq = 0.01 s 2612s [2160/5474] TestArraySubclass#test_repeated_permutation = 0.02 s 2612s [2161/5474] TestArraySubclass#test_flatten_error = 0.01 s 2612s [2162/5474] TestArraySubclass#test_take_while = 0.00 s 2612s [2163/5474] TestArraySubclass#test_MUL = 0.01 s 2612s [2164/5474] TestArraySubclass#test_find_all_0 = 0.00 s 2612s [2165/5474] TestArraySubclass#test_uniq_bang_with_block = 0.01 s 2612s [2166/5474] TestArraySubclass#test_bsearch_index_in_find_any_mode = 0.01 s 2612s [2167/5474] TestArraySubclass#test_sort_by! = 0.00 s 2612s [2168/5474] TestArraySubclass#test_intersect_big_array = 0.00 s 2612s [2169/5474] TestArraySubclass#test_big_array_literal_with_kwsplat = 0.02 s 2612s [2170/5474] TestArraySubclass#test_intersect? = 0.00 s 2612s [2171/5474] TestArraySubclass#test_intersection = 0.00 s 2612s [2172/5474] TestArraySubclass#test_dup = 0.00 s 2612s [2173/5474] TestArraySubclass#test_min = 0.01 s 2612s [2174/5474] TestArraySubclass#test_values_at = 0.00 s 2612s [2175/5474] TestArraySubclass#test_product = 0.01 s 2618s [2176/5474] TestArraySubclass#test_permutation_stack_error = 5.91 s 2618s [2177/5474] TestArraySubclass#test_product2 = 0.00 s 2618s [2178/5474] TestArraySubclass#test_minmax = 0.01 s 2618s [2179/5474] TestArraySubclass#test_first = 0.00 s 2618s [2180/5474] TestArraySubclass#test_join2 = 0.00 s 2618s [2181/5474] TestArraySubclass#test_replace_shared_ary = 0.00 s 2618s [2182/5474] TestArraySubclass#test_uniq! = 0.02 s 2618s [2183/5474] TestArraySubclass#test_clear = 0.00 s 2618s [2184/5474] TestArraySubclass#test_array_subclass = 0.00 s 2618s [2185/5474] TestArraySubclass#test_shuffle_random = 0.05 s 2618s [2186/5474] TestArraySubclass#test_sort_0 = 0.00 s 2618s [2187/5474] TestArraySubclass#test_drop = 0.00 s 2618s [2188/5474] TestArraySubclass#test_ASET = 0.02 s 2618s [2189/5474] TestArraySubclass#test_00_new = 0.00 s 2618s [2190/5474] TestArraySubclass#test_01_square_brackets = 0.00 s 2618s [2191/5474] TestArraySubclass#test_assoc = 0.00 s 2618s [2192/5474] TestArraySubclass#test_sort = 0.01 s 2618s [2193/5474] TestArraySubclass#test_bsearch_with_no_block = 0.00 s 2622s [2194/5474] TestArraySubclass#test_repeated_permutation_stack_error = 4.02 s 2622s [2195/5474] TestArraySubclass#test_bsearch_index_with_no_block = 0.02 s 2622s [2196/5474] TestArraySubclass#test_flatten = 0.00 s 2622s [2197/5474] TestArraySubclass#test_union_big_array = 0.00 s 2622s [2198/5474] TestArraySubclass#test_equal = 0.00 s 2622s [2199/5474] TestArraySubclass#test_to_h = 0.02 s 2622s [2200/5474] TestArraySubclass#test_rotate! = 0.01 s 2629s [2201/5474] TestArraySubclass#test_shared_marking = 6.37 s 2629s [2202/5474] TestArraySubclass#test_combination2 = 0.11 s 2629s [2203/5474] TestArraySubclass#test_reject! = 0.03 s 2629s [2204/5474] TestArraySubclass#test_rindex = 0.01 s 2629s [2205/5474] TestArraySubclass#test_compact_0 = 0.01 s 2629s [2206/5474] TestArraySubclass#test_array_andor_0 = 0.00 s 2629s [2207/5474] TestArraySubclass#test_repeated_combination = 0.02 s 2629s [2208/5474] TestArraySubclass#test_insert = 0.03 s 2629s [2209/5474] TestArraySubclass#test_delete = 0.01 s 2629s [2210/5474] TestArraySubclass#test_flatten_splat! = 0.00 s 2629s [2211/5474] TestArraySubclass#test_sort! = 0.01 s 2635s [2212/5474] TestArraySubclass#test_count = 5.44 s 2635s [2213/5474] TestArraySubclass#test_clear2 = 0.00 s 2635s [2214/5474] TestArraySubclass#test_flatten_splat = 0.00 s 2635s [2215/5474] TestArraySubclass#test_bsearch_typechecks_return_values = 0.02 s 2635s [2216/5474] TestArraySubclass#test_reverse_each2 = 0.00 s 2635s [2217/5474] TestArraySubclass#test_initialize = 0.05 s 2635s [2218/5474] TestArraySubclass#test_OR = 0.01 s 2635s [2219/5474] TestArraySubclass#test_aref = 0.01 s 2635s [2220/5474] TestArraySubclass#test_to_ary = 0.03 s 2635s [2221/5474] TestArraySubclass#test_flattern_singleton_class = 0.00 s 2635s [2222/5474] TestArraySubclass#test_bsearch_in_find_any_mode = 0.01 s 2635s [2223/5474] TestArraySubclass#test_difference = 0.00 s 2635s [2224/5474] TestArraySubclass#test_to_a2 = 0.00 s 2635s [2225/5474] TestArraySubclass#test_combination = 0.00 s 2635s [2226/5474] TestArraySubclass#test_try_convert = 0.00 s 2635s [2227/5474] TestArraySubclass#test_pack = 0.02 s 2635s [2228/5474] TestArraySubclass#test_compact! = 0.00 s 2635s [2229/5474] TestArraySubclass#test_to_a = 0.00 s 2635s [2230/5474] TestArraySubclass#test_filter! = 0.00 s 2635s [2231/5474] TestArraySubclass#test_transpose = 0.00 s 2635s [2232/5474] TestArraySubclass#test_flatten_recursive = 0.00 s 2635s [2233/5474] TestArraySubclass#test_zip_with_enumerator = 0.01 s 2635s [2234/5474] TestArraySubclass#test_fill_negative_length = 0.00 s 2635s [2235/5474] TestArraySubclass#test_initialize2 = 0.00 s 2635s [2236/5474] TestArraySubclass#test_fill_0 = 0.01 s 2635s [2237/5474] TestArraySubclass#test_unshift = 0.00 s 2635s [2238/5474] TestArraySubclass#test_AND = 0.00 s 2635s [2239/5474] TestArraySubclass#test_misc_0 = 0.01 s 2635s [2240/5474] TestArraySubclass#test_compact = 0.00 s 2635s [2241/5474] TestArraySubclass#test_sort_uncomparable = 0.01 s 2635s [2242/5474] TestArraySubclass#test_percent_i = 0.00 s 2635s [2243/5474] TestArraySubclass#test_concat = 0.01 s 2635s [2244/5474] TestArraySubclass#test_fetch = 0.01 s 2635s [2245/5474] TestArraySubclass#test_ary_to_ary = 0.00 s 2635s [2246/5474] TestArraySubclass#test_slice_out_of_range! = 0.00 s 2635s [2247/5474] TestArraySubclass#test_slice = 0.01 s 2635s [2248/5474] TestArraySubclass#test_MINUS = 0.00 s 2635s [2249/5474] TestArraySubclass#test_difference_big_array = 0.01 s 2635s [2250/5474] TestArraySubclass#test_equal_resize = 0.00 s 2635s [2251/5474] TestArraySubclass#test_to_s = 0.01 s 2635s [2252/5474] TestArraySubclass#test_shuffle = 0.01 s 2641s [2253/5474] TestArraySubclass#test_sort_with_replace = 5.96 s 2641s [2254/5474] TestArraySubclass#test_delete_at = 0.01 s 2641s [2255/5474] TestArraySubclass#test_collect! = 0.00 s 2641s [2256/5474] TestArraySubclass#test_bsearch_in_find_minimum_mode = 0.00 s 2641s [2257/5474] TestArraySubclass#test_replace = 0.01 s 2641s [2258/5474] TestArraySubclass#test_keep_if = 0.00 s 2641s [2259/5474] TestArraySubclass#test_flatten_level0! = 0.00 s 2641s [2260/5474] TestArraySubclass#test_flatten_empty! = 0.00 s 2641s [2261/5474] TestArraySubclass#test_map! = 0.00 s 2641s [2262/5474] TestArraySubclass#test_AND_big_array = 0.00 s 2641s [2263/5474] TestArraySubclass#test_union = 0.01 s 2641s [2264/5474] TestArraySubclass#test_index2 = 0.00 s 2641s [2265/5474] TestArraySubclass#test_permutation = 0.01 s 2641s [2266/5474] TestArraySubclass#test_EQUAL = 0.00 s 2641s [2267/5474] TestArraySubclass#test_splice = 0.00 s 2641s [2268/5474] TestArraySubclass#test_filter = 0.00 s 2641s [2269/5474] TestArraySubclass#test_max_uncomparable = 0.01 s 2641s [2270/5474] TestArraySubclass#test_push = 0.01 s 2641s [2271/5474] TestArraySubclass#test_each = 0.00 s 2641s [2272/5474] TestArraySubclass#test_length = 0.03 s 2641s [2273/5474] TestArraySubclass#test_flatten_wrong_argument = 0.00 s 2641s [2274/5474] TestArraySubclass#test_slice_frozen_array = 0.00 s 2641s [2275/5474] TestArraySubclass#test_beg_end_0 = 0.01 s 2641s [2276/5474] TestArraySubclass#test_shift = 0.00 s 2641s [2277/5474] TestArraySubclass#test_0_literal = 0.01 s 2641s [2278/5474] TestArraySubclass#test_max = 0.01 s 2641s [2279/5474] TestArraySubclass#test_index = 0.00 s 2641s [2280/5474] TestArraySubclass#test_flatten_level0 = 0.00 s 2641s [2281/5474] TestArraySubclass#test_rindex2 = 0.01 s 2641s [2282/5474] TestArraySubclass#test_last = 0.00 s 2641s [2283/5474] TestArraySubclass#test_split_0 = 0.00 s 2641s [2284/5474] TestArraySubclass#test_AREF = 0.01 s 2641s [2285/5474] TestArraySubclass#test_uniq_bang_with_freeze = 0.00 s 2641s [2286/5474] TestArraySubclass#test_sample = 0.36 s 2641s [2287/5474] TestArraySubclass#test_sum = 0.03 s 2641s [2288/5474] TestArraySubclass#test_delete2 = 0.00 s 2641s [2289/5474] TestArraySubclass#test_include? = 0.00 s 2641s [2290/5474] TestArraySubclass#test_combination_clear = 0.08 s 2641s [2291/5474] TestArraySubclass#test_last2 = 0.00 s 2641s [2292/5474] TestArraySubclass#test_clone = 0.00 s 2641s [2293/5474] TestArraySubclass#test_percent_I = 0.00 s 2641s [2294/5474] TestArraySubclass#test_take = 0.00 s 2641s [2295/5474] TestArraySubclass#test_select = 0.00 s 2641s [2296/5474] TestArraySubclass#test_bsearch_index_in_find_minimum_mode = 0.00 s 2641s [2297/5474] TestArraySubclass#test_uniq_with_block = 0.00 s 2641s [2298/5474] TestArraySubclass#test_fill = 0.00 s 2642s [2299/5474] TestArraySubclass#test_join = 0.12 s 2642s [2300/5474] TestArraySubclass#test_empty_0 = 0.00 s 2642s [2301/5474] TestArraySubclass#test_reject = 0.00 s 2642s [2302/5474] TestArraySubclass#test_MINUS_big_array = 0.00 s 2642s [2303/5474] TestArraySubclass#test_LSHIFT = 0.00 s 2642s [2304/5474] TestArraySubclass#test_rassoc = 0.00 s 2642s [2305/5474] TestArraySubclass#test_OR_big_array = 0.00 s 2642s [2306/5474] TestArraySubclass#test_reverse! = 0.00 s 2642s [2307/5474] TestArraySubclass#test_min_uncomparable = 0.01 s 2642s [2308/5474] TestArraySubclass#test_CMP = 0.01 s 2642s [2309/5474] TestArraySubclass#test_reverse_each = 0.00 s 2642s [2310/5474] TestArraySubclass#test_OR_big_in_order = 0.01 s 2642s [2311/5474] TestArraySubclass#test_join_recheck_elements_type = 0.00 s 2642s [2312/5474] TestArraySubclass#test_size = 0.00 s 2642s [2313/5474] TestMethod#test_define_method = 0.00 s 2642s [2314/5474] TestMethod#test_define_singleton_method_no_proc = 0.00 s 2642s [2315/5474] TestMethod#test_compose_with_noncallable = 0.00 s 2642s [2316/5474] TestMethod#test_default_accessibility = 0.00 s 2642s [2317/5474] TestMethod#test_super_in_proc_from_define_method = 0.00 s 2642s [2318/5474] TestMethod#test_method_visibility_predicates = 0.00 s 2642s [2319/5474] TestMethod#test_unbound_method_visibility_predicates = 0.00 s 2642s [2320/5474] TestMethod#test_define_method_transplating = 0.00 s 2642s [2321/5474] TestMethod#test_method_in_method_visibility_should_be_public = 0.00 s 2642s [2322/5474] TestMethod#test_define_method_no_proc = 0.00 s 2642s [2323/5474] TestMethod#test_module_methods_redefiniton = 0.00 s 2642s [2324/5474] TestMethod#test_define_singleton_method_with_extended_method = 0.00 s 2642s [2325/5474] TestMethod#test_compose_with_callable = 0.01 s 2642s [2326/5474] TestMethod#test_eq = 0.00 s 2642s [2327/5474] TestMethod#test_curry_from_proc_var_args = 0.00 s 2646s [2328/5474] TestMethod#test_zsuper = 4.36 s 2646s [2329/5474] TestMethod#test_orphan_callee = 0.03 s 2646s [2330/5474] TestMethod#test_super_method_module = 0.00 s 2646s [2331/5474] TestMethod#test_inspect = 0.03 s 2646s [2332/5474] TestMethod#test_hidden_parameters = 0.05 s 2646s [2333/5474] TestMethod#test_instance_method = 0.00 s 2646s [2334/5474] TestMethod#test_singleton_method = 0.00 s 2646s [2335/5474] TestMethod#test_alias = 0.00 s 2646s [2336/5474] TestMethod#test_respond_to_missing_argument = 0.01 s 2646s [2337/5474] TestMethod#test_super_method_after_bind = 0.00 s 2653s [2338/5474] TestMethod#test_override_optimized_method_on_class_using_prepend = 6.49 s 2653s [2339/5474] TestMethod#test_unbound_method_proc_coerce = 0.00 s 2653s [2340/5474] TestMethod#test_super_method_with_prepended_module = 0.03 s 2653s [2341/5474] TestMethod#test_singleton_method_prepend = 0.02 s 2657s [2342/5474] TestMethod#test_invalidating_CC_ASAN = 3.99 s 2657s [2343/5474] TestMethod#test_compose_with_method = 0.02 s 2657s [2344/5474] TestMethod#test_define_singleton_method = 0.00 s 2657s [2345/5474] TestMethod#test_bind_module_instance_method = 0.00 s 2657s [2346/5474] TestMethod#test_eqq = 0.00 s 2657s [2347/5474] TestMethod#test_method_in_block_in_define_method_block = 0.00 s 2657s [2348/5474] TestMethod#test_super_method_unbound = 0.00 s 2657s [2349/5474] TestMethod#test_unbind = 0.00 s 2657s [2350/5474] TestMethod#test_super_method_module_alias = 0.00 s 2657s [2351/5474] TestMethod#test_included = 0.00 s 2660s [2352/5474] TestMethod#test_define_method_with_symbol = 3.76 s 2660s [2353/5474] TestMethod#test_method_in_define_method_block = 0.00 s 2660s [2354/5474] TestMethod#test_attrset_ivar = 0.01 s 2661s [2355/5474] TestMethod#test_curry_var_args = 0.01 s 2661s [2356/5474] TestMethod#test_super_method_removed = 0.00 s 2661s [2357/5474] TestMethod#test_caller_negative_level = 0.00 s 2661s [2358/5474] TestMethod#test_curry_method = 0.00 s 2661s [2359/5474] TestMethod#test_public_methods_with_extended = 0.00 s 2661s [2360/5474] TestMethod#test_singleton_define_method_in_private_scope = 0.00 s 2661s [2361/5474] TestMethod#test_super_method_bind_unbind_clone = 0.00 s 2661s [2362/5474] TestMethod#test_compose_with_proc = 0.00 s 2661s [2363/5474] TestMethod#test_curry_from_proc = 0.00 s 2661s [2364/5474] TestMethod#test_owner_missing = 0.00 s 2661s [2365/5474] TestMethod#test_receiver_name_owner = 0.00 s 2665s [2366/5474] TestMethod#test_bound_method_entry = 3.91 s 2665s [2367/5474] TestMethod#test_arity = 0.00 s 2665s [2368/5474] TestMethod#test_define_method_invalid_arg = 0.02 s 2665s [2369/5474] TestMethod#test_clone = 0.01 s 2665s [2370/5474] TestMethod#test_owner = 0.00 s 2665s [2371/5474] TestMethod#test_arity_special = 0.00 s 2665s [2372/5474] TestMethod#test_prepended = 0.01 s 2665s [2373/5474] TestMethod#test_new = 0.01 s 2665s [2374/5474] TestMethod#test_umethod_bind_call = 0.03 s 2665s [2375/5474] TestMethod#test_super_method_alias = 0.00 s 2665s [2376/5474] TestMethod#test_public_method_with_zsuper_method = 0.00 s 2668s [2377/5474] TestMethod#test_caller_top_level = 2.91 s 2670s [2378/5474] TestMethod#test_callee_top_level = 2.59 s 2670s [2379/5474] TestMethod#test_define_method_in_private_scope = 0.01 s 2670s [2380/5474] TestMethod#test_super_method = 0.00 s 2670s [2381/5474] TestFiber#test_term = 0.02 s 2670s [2382/5474] TestFiber#test_argument = 0.00 s 2670s [2383/5474] TestFiber#test_exit_in_fiber = 0.05 s 2676s [2384/5474] TestFiber#test_new_symbol_proc = 5.29 s 2676s [2385/5474] TestFiber#test_prohibit_resume_to_transferring_fiber = 0.04 s 2680s [2386/5474] TestFiber#test_mark_fiber = 4.36 s 2680s [2387/5474] TestFiber#test_create_fiber_in_new_thread = 0.00 s 2680s [2388/5474] TestFiber#test_throw = 0.00 s 2680s [2389/5474] TestFiber#test_tls = 0.02 s 2689s [2390/5474] TestFiber#test_machine_stack_gc = 8.89 s 2689s [2391/5474] TestFiber#test_fork_from_fiber = 0.02 s 2689s [2392/5474] TestFiber#test_separate_lastline = 0.01 s 2689s [2393/5474] TestFiber#test_normal = 0.00 s 2689s [2394/5474] TestFiber#test_raise_transferring_fiber = 0.00 s 2689s [2395/5474] TestFiber#test_transfer = 0.00 s 2689s [2396/5474] TestFiber#test_raise = 0.01 s 2689s [2397/5474] TestFiber#test_resume_self = 0.00 s 2689s [2398/5474] TestFiber#test_return = 0.00 s 2689s [2399/5474] TestFiber#test_alive = 0.00 s 2689s [2400/5474] TestPipe#test_eof_3 = 0.00 s 2689s [2401/5474] TestPipe#test_eof_2 = 0.00 s 2693s [2402/5474] TestPipe#test_stdout_epipe = 4.04 s 2693s [2403/5474] TestPipe#test_eof_0_rw = 0.01 s 2693s [2404/5474] TestEnv#test_each_key_in_ractor = 0.05 s 2693s [2405/5474] TestEnv#test_values_in_ractor = 0.02 s 2693s [2406/5474] TestEnv#test_frozen_env = 0.00 s 2693s [2407/5474] TestEnv#test_filter_bang_in_ractor = 0.00 s 2693s [2408/5474] TestEnv#test_each_value_in_ractor = 0.01 s 2693s [2409/5474] TestEnv#test_rehash_in_ractor = 0.00 s 2693s [2410/5474] TestEnv#test_reject_bang_in_ractor = 0.00 s 2693s [2411/5474] TestEnv#test_ivar_in_env_should_not_be_access_from_non_main_ractors = 0.00 s 2693s [2412/5474] TestEnv#test_delete_if = 0.01 s 2693s [2413/5474] TestEnv#test_select_bang_in_ractor = 0.00 s 2693s [2414/5474] TestEnv#test_reject_bang = 0.01 s 2693s [2415/5474] TestEnv#test_huge_value = 0.01 s 2693s [2416/5474] TestEnv#test_to_h_in_ractor = 0.00 s 2693s [2417/5474] TestEnv#test_shared_substring = 0.00 s 2693s [2418/5474] TestEnv#test_dup_in_ractor = 0.00 s 2693s [2419/5474] TestEnv#test_each_pair = 0.00 s 2693s [2420/5474] TestEnv#test_slice_in_ractor = 0.00 s 2693s [2421/5474] TestEnv#test_shift_in_ractor = 0.00 s 2693s [2422/5474] TestEnv#test_update = 0.00 s 2693s [2423/5474] TestEnv#test_select_bang = 0.01 s 2693s [2424/5474] TestEnv#test_each_value = 0.00 s 2693s [2425/5474] TestEnv#test_inspect = 0.00 s 2693s [2426/5474] TestEnv#test_dup = 0.00 s 2693s [2427/5474] TestEnv#test_values_at = 0.01 s 2693s [2428/5474] TestEnv#test_shared_substring_in_ractor = 0.00 s 2693s [2429/5474] TestEnv#test_clear_in_ractor = 0.00 s 2693s [2430/5474] TestEnv#test_getenv_in_ractor = 0.00 s 2693s [2431/5474] TestEnv#test_except = 0.00 s 2693s [2432/5474] TestEnv#test_frozen_env_in_ractor = 0.00 s 2693s [2433/5474] TestEnv#test_clear = 0.00 s 2693s [2434/5474] TestEnv#test_inspect_in_ractor = 0.00 s 2693s [2435/5474] TestEnv#test_key_in_ractor = 0.00 s 2693s [2436/5474] TestEnv#test_invert = 0.00 s 2693s [2437/5474] TestEnv#test_key = 0.00 s 2693s [2438/5474] TestEnv#test_assoc_in_ractor = 0.00 s 2693s [2439/5474] TestEnv#test_to_h = 0.01 s 2693s [2440/5474] TestEnv#test_empty_p = 0.00 s 2693s [2441/5474] TestEnv#test_huge_value_in_ractor = 0.00 s 2693s [2442/5474] TestEnv#test_keys_in_ractor = 0.00 s 2693s [2443/5474] TestEnv#test_values_at_in_ractor = 0.00 s 2693s [2444/5474] TestEnv#test_has_value = 0.00 s 2693s [2445/5474] TestEnv#test_size_in_ractor = 0.00 s 2693s [2446/5474] TestEnv#test_frozen = 0.01 s 2693s [2447/5474] TestEnv#test_frozen_in_ractor = 0.00 s 2693s [2448/5474] TestEnv#test_each_pair_in_ractor = 0.00 s 2693s [2449/5474] TestEnv#test_to_hash = 0.01 s 2693s [2450/5474] TestEnv#test_filter_bang = 0.01 s 2693s [2451/5474] TestEnv#test_update_in_ractor = 0.00 s 2693s [2452/5474] TestEnv#test_select_in_ractor = 0.00 s 2693s [2453/5474] TestEnv#test_each_key = 0.00 s 2693s [2454/5474] TestEnv#test_bracket_in_ractor = 0.00 s 2693s [2455/5474] TestEnv#test_to_a = 0.00 s 2693s [2456/5474] TestEnv#test_bracket = 0.00 s 2693s [2457/5474] TestEnv#test_clone_in_ractor = 0.00 s 2693s [2458/5474] TestEnv#test_has_value2_in_ractor = 0.00 s 2693s [2459/5474] TestEnv#test_to_hash_in_ractor = 0.00 s 2693s [2460/5474] TestEnv#test_keys = 0.01 s 2693s [2461/5474] TestEnv#test_slice = 0.00 s 2693s [2462/5474] TestEnv#test_has_key_in_ractor = 0.00 s 2693s [2463/5474] TestEnv#test_empty_p_in_ractor = 0.00 s 2693s [2464/5474] TestEnv#test_to_s = 0.00 s 2693s [2465/5474] TestEnv#test_has_value2 = 0.00 s 2693s [2466/5474] TestEnv#test_has_value_in_ractor = 0.00 s 2693s [2467/5474] TestEnv#test_delete_if_in_ractor = 0.00 s 2693s [2468/5474] TestEnv#test_except_in_ractor = 0.00 s 2693s [2469/5474] TestEnv#test_replace = 0.00 s 2693s [2470/5474] TestEnv#test_delete_in_ractor = 0.00 s 2693s [2471/5474] TestEnv#test_keep_if = 0.01 s 2693s [2472/5474] TestEnv#test_replace_in_ractor = 0.00 s 2693s [2473/5474] TestEnv#test_reject_in_ractor = 0.00 s 2693s [2474/5474] TestEnv#test_values = 0.00 s 2693s [2475/5474] TestEnv#test_filter = 0.00 s 2693s [2476/5474] TestEnv#test_keep_if_in_ractor = 0.00 s 2693s [2477/5474] TestEnv#test_shift = 0.00 s 2693s [2478/5474] TestEnv#test_to_a_in_ractor = 0.00 s 2693s [2479/5474] TestEnv#test_aset_in_ractor = 0.00 s 2693s [2480/5474] TestEnv#test_fetch_in_ractor = 0.00 s 2693s [2481/5474] TestEnv#test_rassoc_in_ractor = 0.00 s 2693s [2482/5474] TestEnv#test_invert_in_ractor = 0.00 s 2693s [2483/5474] TestEnv#test_clone = 0.01 s 2693s [2484/5474] TestEnv#test_select = 0.00 s 2693s [2485/5474] TestEnv#test_reject = 0.00 s 2693s [2486/5474] TestEnv#test_rassoc = 0.00 s 2693s [2487/5474] TestEnv#test_to_s_in_ractor = 0.00 s 2693s [2488/5474] TestEnv#test_filter_in_ractor = 0.00 s 2693s [2489/5474] TestEnv#test_size = 0.00 s 2693s [2490/5474] TestNumeric#test_quo = 0.00 s 2693s [2491/5474] TestNumeric#test_zero_p = 0.00 s 2693s [2492/5474] TestNumeric#test_floor_ceil_ndigits = 0.01 s 2699s [2493/5474] TestNumeric#test_coerced_remainder = 4.77 s 2699s [2494/5474] TestNumeric#test_cmp = 0.00 s 2699s [2495/5474] TestNumeric#test_dummynumeric = 0.07 s 2699s [2496/5474] TestNumeric#test_dup = 0.00 s 2699s [2497/5474] TestNumeric#test_coerce = 0.01 s 2699s [2498/5474] TestNumeric#test_nonzero_p = 0.00 s 2699s [2499/5474] TestNumeric#test_singleton_method = 0.01 s 2699s [2500/5474] TestNumeric#test_positive_p = 0.00 s 2699s [2501/5474] TestNumeric#test_eql = 0.00 s 2699s [2502/5474] TestNumeric#test_quo_ruby_core_41575 = 0.00 s 2699s [2503/5474] TestNumeric#test_integer_p = 0.00 s 2699s [2504/5474] TestNumeric#test_comparison_comparable = 0.01 s 2699s [2505/5474] TestNumeric#test_step_bug15537 = 0.02 s 2699s [2506/5474] TestNumeric#test_real_p = 0.00 s 2699s [2507/5474] TestNumeric#test_float_round_ndigits = 0.01 s 2699s [2508/5474] TestNumeric#test_num2long = 0.00 s 2699s [2509/5474] TestNumeric#test_divmod = 0.00 s 2699s [2510/5474] TestNumeric#test_abs = 0.00 s 2699s [2511/5474] TestNumeric#test_to_int = 0.00 s 2699s [2512/5474] TestNumeric#test_floor_ceil_round_truncate = 0.00 s 2699s [2513/5474] TestNumeric#test_negative_p = 0.00 s 2699s [2514/5474] TestNumeric#test_clone = 0.00 s 2699s [2515/5474] TestNumeric#test_pow = 0.01 s 2699s [2516/5474] TestNumeric#test_remainder_infinity = 0.00 s 2699s [2517/5474] TestEnumerator#test_chain_undef_methods = 0.00 s 2699s [2518/5474] TestEnumerator#test_lazy_chain = 0.04 s 2699s [2519/5474] TestEnumerator#test_rewind_clear_feed = 0.00 s 2699s [2520/5474] TestEnumerator#test_size_for_downup_to = 0.00 s 2703s [2521/5474] TestEnumerator#test_with_index_dangling_memo = 4.72 s 2703s [2522/5474] TestEnumerator#test_size_for_enum_created_from_env = 0.02 s 2703s [2523/5474] TestEnumerator#test_with_index_string_offset = 0.00 s 2703s [2524/5474] TestEnumerator#test_size_for_loops = 0.00 s 2703s [2525/5474] TestEnumerator#test_size_for_enum_created_from_hash = 0.00 s 2703s [2526/5474] TestEnumerator#test_uniq = 0.00 s 2703s [2527/5474] TestEnumerator#test_peek_values = 0.03 s 2703s [2528/5474] TestEnumerator#test_size_for_enum_created_from_enumerable = 0.00 s 2703s [2529/5474] TestEnumerator#test_peek_values_modify = 0.00 s 2703s [2530/5474] TestEnumerator#test_gc = 0.00 s 2703s [2531/5474] TestEnumerator#test_nested_iteration = 0.00 s 2703s [2532/5474] TestEnumerator#test_with_object = 0.00 s 2703s [2533/5474] TestEnumerator#test_generator_args = 0.00 s 2703s [2534/5474] TestEnumerator#test_size_for_array_combinatorics = 0.01 s 2703s [2535/5474] TestEnumerator#test_peek_for_enumerator_objects = 0.00 s 2703s [2536/5474] TestEnumerator#test_chained_enums = 0.01 s 2703s [2537/5474] TestEnumerator#test_peek = 0.00 s 2703s [2538/5474] TestEnumerator#test_size_for_each_slice = 0.00 s 2703s [2539/5474] TestEnumerator#test_with_index = 0.00 s 2703s [2540/5474] TestEnumerator#test_stop_result = 0.00 s 2703s [2541/5474] TestEnumerator#test_produce = 0.01 s 2703s [2542/5474] TestEnumerator#test_feed = 0.01 s 2703s [2543/5474] TestEnumerator#test_size_for_enum_created_by_enumerators = 0.00 s 2703s [2544/5474] TestEnumerator#test_iterators = 0.16 s 2703s [2545/5474] TestEnumerator#test_cons = 0.03 s 2703s [2546/5474] TestEnumerator#test_size_for_enum_created_from_struct = 0.04 s 2703s [2547/5474] TestEnumerator#test_next = 0.01 s 2703s [2548/5474] TestEnumerator#test_next_after_stopiteration = 0.00 s 2703s [2549/5474] TestEnumerator#test_loop = 0.00 s 2703s [2550/5474] TestEnumerator#test_size_for_string = 0.00 s 2703s [2551/5474] TestEnumerator#test_compact = 0.01 s 2703s [2552/5474] TestEnumerator#test_slice = 0.00 s 2703s [2553/5474] TestEnumerator#test_with_index_nonnum_offset = 0.00 s 2703s [2554/5474] TestEnumerator#test_size_for_each_cons = 0.00 s 2703s [2555/5474] TestEnumerator#test_next_values = 0.00 s 2703s [2556/5474] TestEnumerator#test_size_for_step = 0.00 s 2704s [2557/5474] TestEnumerator#test_feed_twice = 0.00 s 2704s [2558/5474] TestEnumerator#test_feed_yielder = 0.00 s 2704s [2559/5474] TestEnumerator#test_each_slice_size = 0.00 s 2704s [2560/5474] TestEnumerator#test_feed_mixed = 0.00 s 2704s [2561/5474] TestEnumerator#test_size_for_cycle = 0.00 s 2704s [2562/5474] TestEnumerator#test_inspect_verbose = 0.00 s 2704s [2563/5474] TestEnumerator#test_enum_chain_and_plus = 0.01 s 2704s [2564/5474] TestEnumerator#test_chain_each_lambda = 0.00 s 2704s [2565/5474] TestEnumerator#test_loop_return_value = 0.00 s 2704s [2566/5474] TestEnumerator#test_size_for_enum_created_from_array = 0.00 s 2704s [2567/5474] TestEnumerator#test_next_rewind = 0.01 s 2704s [2568/5474] TestEnumerator#test_chain_with_index = 0.00 s 2704s [2569/5474] TestEnumerator#test_yielder = 0.00 s 2704s [2570/5474] TestEnumerator#test_feed_before_first_next = 0.00 s 2704s [2571/5474] TestEnumerator#test_size = 0.00 s 2704s [2572/5474] TestRequire#test_require_syntax_error = 0.03 s 2708s [2573/5474] TestRequire#test_relative_symlink_realpath = 3.98 s 2708s [2574/5474] TestRequire#test_load_error_path = 0.01 s 2712s [2575/5474] TestRequire#test_load_wrap_nil = 4.02 s 2715s [2576/5474] TestRequire#test_require_in_wrapped_load = 3.65 s 2718s [2577/5474] TestRequire#test_load_scope = 2.47 s 2720s [2578/5474] TestRequire#test_require_to_str_redefined_in_load_path = 2.61 s 2720s [2579/5474] TestRequire#test_relative = 0.01 s 2720s [2580/5474] TestRequire#test_load_syntax_error = 0.01 s 2720s [2581/5474] TestRequire#test_loaded_features_encoding = 0.00 s 2723s [2582/5474] TestRequire#test_require_to_path_redefined_in_load_path = 2.61 s 2726s [2583/5474] TestRequire#test_require_local_var_on_toplevel = 2.34 s 2729s [2584/5474] TestRequire#test_define_module_under = 3.60 s 2732s [2585/5474] TestRequire#test_symlink_load_path = 3.52 s 2736s [2586/5474] TestRequire#test_define_module = 3.89 s 2740s [2587/5474] TestRequire#test_require_invalid_shared_object = 3.84 s 2740s [2588/5474] TestRequire#test_require_nonascii_path_utf8 = 0.00 s 2743s [2589/5474] TestRequire#test_require_twice = 2.69 s 2747s [2590/5474] TestRequire#test_relative_symlink = 3.74 s 2751s [2591/5474] TestRequire#test_throw_while_loading = 4.09 s 2751s [2592/5474] TestRequire#test_load_into_module = 0.06 s 2754s [2593/5474] TestRequire#test_require_with_array_shift = 2.87 s 2757s [2594/5474] TestRequire#test_require_changed_current_dir = 2.96 s 2760s [2595/5474] TestRequire#test_load = 3.16 s 2763s [2596/5474] TestRequire#test_require_not_modified_load_path = 2.82 s 2763s [2597/5474] TestRequire#test_resolve_feature_path_with_missing_feature = 0.01 s 2776s [2598/5474] TestRequire#test_define_class_under = 13.36 s 2779s [2599/5474] TestRequire#test_require_with_array_pop = 2.68 s 2783s [2600/5474] TestRequire#test_default_loaded_features_encoding = 4.09 s 2783s [2601/5474] TestRequire#test_require_syntax_error_rescued = 0.01 s 2785s [2602/5474] TestGc#test_gc_stress_at_startup = 2.59 s 2785s [2603/5474] TestGc#test_profiler_clear = 0.00 s 2789s [2604/5474] TestGc#test_gc_stress_on_realloc = 3.77 s 2790s [2605/5474] TestGc#test_ast_node_buffer = 0.51 s 2790s [2606/5474] TestGc#test_profiler_enabled = 0.06 s 2790s [2607/5474] TestGc#test_gc = 0.14 s 2797s [2608/5474] TestGc#test_sweep_in_finalizer = 7.46 s 2797s [2609/5474] TestGc#test_stat_single = 0.04 s 2800s [2610/5474] TestGc#test_singleton_method = 2.61 s 2800s [2611/5474] TestGc#test_stat_argument = 0.00 s 2800s [2612/5474] TestGc#test_object_ids_never_repeat = 0.02 s 2804s [2613/5474] TestGc#test_exception_in_finalizer = 4.05 s 2807s [2614/5474] TestGc#test_finalizing_main_thread = 2.66 s 2807s [2615/5474] TestGc#test_enable_disable = 0.00 s 2810s [2616/5474] TestGc#test_stress_compile_send = 2.64 s 2813s [2617/5474] TestGc#test_vm_object = 3.67 s 2816s [2618/5474] TestGc#test_singleton_method_added = 2.63 s 2816s [2619/5474] TestGc#test_profiler_total_time = 0.01 s 2818s [2620/5474] TestGc#test_finalizer_passed_object_id = 2.48 s 2821s [2621/5474] TestBeginEndBlock#test_exitcode_in_at_exit = 2.88 s 2824s [2622/5474] TestBeginEndBlock#test_nested_at_exit = 2.65 s 2827s [2623/5474] TestBeginEndBlock#test_endblock_raise = 3.12 s 2829s [2624/5474] TestBeginEndBlock#test_errinfo_at_exit = 2.58 s 2832s [2625/5474] TestBeginEndBlock#test_endblockwarn = 3.00 s 2837s [2626/5474] TestBeginEndBlock#test_propagate_exit_code = 4.88 s 2846s [2627/5474] TestBeginEndBlock#test_rescue_at_exit = 9.26 s 2849s [2628/5474] TestBeginEndBlock#test_endblockwarn_in_eval = 2.70 s 2849s [2629/5474] TestIO#test_read_zero_size = 0.00 s 2849s [2630/5474] TestIO#test_read_with_not_empty_buffer = 0.01 s 2849s [2631/5474] TestIO#test_read_unlocktmp_ensure = 0.20 s 2849s [2632/5474] TestIO#test_copy_stream_strio_to_fname = 0.01 s 2849s [2633/5474] TestIO#test_ungetbyte = 0.00 s 2849s [2634/5474] TestIO#test_copy_stream_read_in_binmode = 0.01 s 2849s [2635/5474] TestIO#test_sysseek = 0.01 s 2849s [2636/5474] TestIO#test_copy_stream_small = 0.00 s 2850s [2637/5474] TestIO#test_copy_stream_append_to_nonempty = 0.01 s 2850s [2638/5474] TestIO#test_copy_stream_megacontent_pipe_to_file = 0.13 s 2850s [2639/5474] TestIO#test_copy_stream_fname_to_strio = 0.00 s 2850s [2640/5474] TestIO#test_gets_rs = 0.01 s 2850s [2641/5474] TestIO#test_seek_symwhence = 0.00 s 2850s [2642/5474] TestIO#test_autoclose = 0.01 s 2850s [2643/5474] TestIO#test_copy_stream_io_to_rot13 = 0.00 s 2850s [2644/5474] TestIO#test_copy_stream_strio_rbuf = 0.00 s 2850s [2645/5474] TestIO#test_copy_stream_socket5 = 0.02 s 2853s [2646/5474] TestIO#test_putc = 3.00 s 2853s [2647/5474] TestIO#test_gets_rs_nil = 0.01 s 2853s [2648/5474] TestIO#test_close_read_non_readable = 0.00 s 2853s [2649/5474] TestIO#test_each_char = 0.01 s 2853s [2650/5474] TestIO#test_copy_stream_socket3 = 0.02 s 2853s [2651/5474] TestIO#test_readbyte = 0.00 s 2853s [2652/5474] TestIO#test_frozen_autoclose = 0.00 s 2857s [2653/5474] TestIO#test_open_fifo_does_not_block_other_threads = 4.04 s 2861s [2654/5474] TestIO#test_copy_stream_to_duplex_io = 4.10 s 2861s [2655/5474] TestIO#test_write_nonblock_simple_no_exceptions = 0.00 s 2861s [2656/5474] TestIO#test_uninitialized = 0.00 s 2865s [2657/5474] TestIO#test_race_closed_stream = 4.04 s 2865s [2658/5474] TestIO#test_race_between_read = 0.01 s 2868s [2659/5474] TestIO#test_recycled_fd_close = 3.18 s 2868s [2660/5474] TestIO#test_sysread_with_not_empty_buffer = 0.00 s 2868s [2661/5474] TestIO#test_copy_stream_socket1 = 0.00 s 2868s [2662/5474] TestIO#test_autoclose_false_closed_by_finalizer = 0.01 s 2868s [2663/5474] TestIO#test_ungetc = 0.00 s 2868s [2664/5474] TestIO#test_puts_old_write = 0.01 s 2868s [2665/5474] TestIO#test_pipe_block = 0.00 s 2872s [2666/5474] TestIO#test_close_write = 4.03 s 2872s [2667/5474] TestIO#test_copy_stream_strio_flush = 0.00 s 2872s [2668/5474] TestIO#test_single_exception_on_close = 0.02 s 2872s [2669/5474] TestIO#test_write_nonblock = 0.00 s 2872s [2670/5474] TestIO#test_read_nonblock_with_buffer_no_exceptions = 0.00 s 2872s [2671/5474] TestIO#test_s_binread_does_not_leak_with_invalid_offset = 0.00 s 2872s [2672/5474] TestIO#test_pread = 0.00 s 2872s [2673/5474] TestIO#test_each_byte2 = 0.01 s 2872s [2674/5474] TestIO#test_binmode_after_closed = 0.00 s 2872s [2675/5474] TestIO#test_s_binwrite = 0.01 s 2872s [2676/5474] TestIO#test_printf = 0.00 s 2872s [2677/5474] TestIO#test_read_command = 0.01 s 2872s [2678/5474] TestIO#test_copy_stream_dst_rbuf = 0.00 s 2872s [2679/5474] TestIO#test_open_flag = 0.00 s 2872s [2680/5474] TestIO#test_close_write_non_readable = 0.00 s 2875s [2681/5474] TestIO#test_readlines = 2.53 s 2875s [2682/5474] TestIO#test_copy_stream_rbuf = 0.00 s 2875s [2683/5474] TestIO#test_readpartial_buffer_error = 0.00 s 2875s [2684/5474] TestIO#test_open_redirect = 0.00 s 2879s [2685/5474] TestIO#test_close_on_exec = 3.70 s 2879s [2686/5474] TestIO#test_copy_stream_strio_to_io = 0.00 s 2879s [2687/5474] TestIO#test_puts_parallel = 0.00 s 2879s [2688/5474] TestIO#test_copy_stream_rot13_to_rot13 = 0.01 s 2879s [2689/5474] TestIO#test_flag = 0.00 s 2879s [2690/5474] TestIO#test_inspect = 0.00 s 2879s [2691/5474] TestIO#test_write_nonblock_no_exceptions = 0.00 s 2879s [2692/5474] TestIO#test_write_with_many_arguments = 0.02 s 2879s [2693/5474] TestIO#test_read = 0.00 s 2883s [2694/5474] TestIO#test_dup = 4.57 s 2886s [2695/5474] TestIO#test_readline2 = 3.23 s 2886s [2696/5474] TestIO#test_each_byte = 0.00 s 2886s [2697/5474] TestIO#test_each_codepoint = 0.01 s 2886s [2698/5474] TestIO#test_readchar = 0.01 s 2886s [2699/5474] TestIO#test_copy_stream_bigcontent_mid = 0.00 s 2886s [2700/5474] TestIO#test_rubydev33072 = 0.00 s 2886s [2701/5474] TestIO#test_copy_stream_rot13_to_io = 0.01 s 2886s [2702/5474] TestIO#test_readpartial_pos = 0.00 s 2886s [2703/5474] TestIO#test_copy_stream_write_pipe = 0.00 s 2886s [2704/5474] TestIO#test_close_uninitialized = 0.00 s 2886s [2705/5474] TestIO#test_copy_stream_io_to_strio = 0.00 s 2887s [2706/5474] TestIO#test_sysread_unlocktmp_ensure = 0.12 s 2887s [2707/5474] TestIO#test_sysopen = 0.01 s 2887s [2708/5474] TestIO#test_copy_stream_bigcontent = 0.03 s 2887s [2709/5474] TestIO#test_invalid_advise = 0.06 s 2887s [2710/5474] TestIO#test_write_non_writable = 0.00 s 2887s [2711/5474] TestIO#test_copy_stream_append = 0.00 s 2887s [2712/5474] TestIO#test_each_byte_closed = 0.01 s 2887s [2713/5474] TestIO#test_write_with_multiple_arguments = 0.00 s 2887s [2714/5474] TestIO#test_copy_stream_strio_len = 0.00 s 2887s [2715/5474] TestIO#test_readpartial_unlocktmp_ensure = 0.11 s 2887s [2716/5474] TestIO#test_copy_stream_src_wbuf = 0.01 s 2887s [2717/5474] TestIO#test_copy_stream_pipe_to_file = 0.02 s 2887s [2718/5474] TestIO#test_reopen_mode = 0.01 s 2887s [2719/5474] TestIO#test_advise = 0.21 s 2887s [2720/5474] TestIO#test_warn = 0.00 s 2890s [2721/5474] TestIO#test_new_with_block = 2.92 s 2898s [2722/5474] TestIO#test_foreach = 7.90 s 2898s [2723/5474] TestIO#test_setpos = 0.00 s 2898s [2724/5474] TestIO#test_pwrite = 0.00 s 2898s [2725/5474] TestIO#test_initialize = 0.01 s 2898s [2726/5474] TestIO#test_pid_after_close_read = 0.00 s 2898s [2727/5474] TestIO#test_print_separators = 0.00 s 2898s [2728/5474] TestIO#test_gets_paragraph = 0.00 s 2898s [2729/5474] TestIO#test_try_convert = 0.00 s 2898s [2730/5474] TestIO#test_copy_stream_file_to_pipe = 0.00 s 2898s [2731/5474] TestIO#test_readpartial_with_not_empty_buffer = 0.00 s 2898s [2732/5474] TestIO#test_pipe_block_close = 0.00 s 2898s [2733/5474] TestIO#test_copy_stream_closed_pipe = 0.00 s 2898s [2734/5474] TestIO#test_gets_chomp_paragraph = 0.00 s 2898s [2735/5474] TestIO#test_exclusive_mode = 0.00 s 2898s [2736/5474] TestIO#test_reopen_opt_encoding = 0.00 s 2898s [2737/5474] TestIO#test_cross_thread_close_fd = 0.10 s 2902s [2738/5474] TestIO#test_reopen_ivar = 4.08 s 2906s [2739/5474] TestIO#test_write_buffered_with_multiple_arguments = 4.00 s 2907s [2740/5474] TestIO#test_each_byte_with_seek = 0.50 s 2907s [2741/5474] TestIO#test_syswrite = 0.04 s 2907s [2742/5474] TestIO#test_sysread = 0.02 s 2907s [2743/5474] TestIO#test_set_lineno_readline = 0.02 s 2907s [2744/5474] TestIO#test_write_nonblock_error = 0.02 s 2911s [2745/5474] TestIO#test_reopen_stdio = 3.76 s 2911s [2746/5474] TestIO#test_gets_limit_extra_arg = 0.01 s 2914s [2747/5474] TestIO#test_print = 3.23 s 2914s [2748/5474] TestIO#test_reopen_nonascii(Shift_JIS) = 0.05 s 2914s [2749/5474] TestIO#test_gets_chomp_rs_nil = 0.00 s 2914s [2750/5474] TestIO#test_write_no_args = 0.00 s 2914s [2751/5474] TestIO#test_s_read = 0.00 s 2914s [2752/5474] TestIO#test_reopen = 0.00 s 2914s [2753/5474] TestIO#test_pipe = 0.01 s 2914s [2754/5474] TestIO#test_close_read_pipe = 0.00 s 2914s [2755/5474] TestIO#test_set_lineno_gets = 0.00 s 2918s [2756/5474] TestIO#test_close_readorg/jruby/RubyIO.java:1590:in `write': Broken pipe - (Errno::EPIPE) 2918s from org/jruby/RubyIO.java:1479:in `write' 2918s from -e:1:in `
' 2918s = 4.21 s 2918s [2757/5474] TestIO#test_copy_stream_write_in_binmode = 0.01 s 2918s [2758/5474] TestIO#test_readpartial_buffer_not_raise_shared_string_error = 0.05 s 2918s [2759/5474] TestIO#test_copy_stream_pipe = 0.01 s 2918s [2760/5474] TestIO#test_read_buffer_not_raise_shared_string_error = 0.01 s 2918s [2761/5474] TestIO#test_frozen_fileno = 0.00 s 2918s [2762/5474] TestIO#test_s_readlines = 0.00 s 2918s [2763/5474] TestIO#test_gets_default_rs = 0.00 s 2918s [2764/5474] TestIO#test_marshal_closed_io = 0.01 s 2918s [2765/5474] TestIO#test_reopen_encoding = 0.01 s 2918s [2766/5474] TestIO#test_close_twice = 0.00 s 2918s [2767/5474] TestIO#test_read_nonblock_no_exceptions = 0.00 s 2918s [2768/5474] TestIO#test_external_encoding_index = 0.00 s 2918s [2769/5474] TestIO#test_each_char2 = 0.02 s 2922s [2770/5474] TestIO#test_pid = 3.72 s 2922s [2771/5474] TestIO#test_exception_at_close = 0.00 s 2926s [2772/5474] TestIO#test_open_pipe = 4.05 s 2926s [2773/5474] TestIO#test_copy_stream_noent = 0.02 s 2926s [2774/5474] TestIO#test_open_mode = 0.00 s 2926s [2775/5474] TestIO#test_gets_chomp_rs = 0.00 s 2926s [2776/5474] TestIO#test_ungetc2 = 0.00 s 2926s [2777/5474] TestIO#test_reopen_nonascii(EUC-JP) = 0.01 s 2926s [2778/5474] TestIO#test_write_with_multiple_arguments_and_buffer = 0.00 s 2926s [2779/5474] TestIO#test_seek = 0.00 s 2926s [2780/5474] TestIO#test_copy_stream_strio = 0.00 s 2926s [2781/5474] TestIO#test_gets_rs_377 = 0.00 s 2926s [2782/5474] TestIO#test_read_nonblock_error = 0.00 s 2926s [2783/5474] TestIO#test_pos = 0.00 s 2926s [2784/5474] TestIO#test_copy_stream_pathname_to_pathname = 0.00 s 2929s [2785/5474] TestIO#test_display = 3.02 s 2929s [2786/5474] TestIO#test_readpartial_bad_args = 0.01 s 2932s [2787/5474] TestIO#test_write_with_multiple_nonstring_arguments = 2.66 s 2932s [2788/5474] TestIO#test_pos_with_getc = 0.02 s 2932s [2789/5474] TestIO#test_readpartial = 0.00 s 2936s [2790/5474] TestIO#test_DATA_binmode = 4.74 s 2937s [2791/5474] TestIO#test_copy_stream_megacontent_file_to_pipe = 0.11 s 2940s [2792/5474] TestIO#test_write_epipe_nosync = 3.84 s 2940s [2793/5474] TestIO#test_each_line = 0.01 s 2940s [2794/5474] TestIO#test_reopen_nonascii(UTF-8) = 0.01 s 2940s [2795/5474] TestIO#test_gets = 0.00 s 2940s [2796/5474] TestIO#test_copy_stream_socket2 = 0.01 s 2940s [2797/5474] TestIO#test_read_buffer_error = 0.00 s 2940s [2798/5474] TestIO#test_read_nonblock_with_not_empty_buffer = 0.00 s 2940s [2799/5474] TestIO#test_copy_stream_strio_to_tempfile = 0.00 s 2940s [2800/5474] TestIO#test_puts_recursive_array = 0.00 s 2941s [2801/5474] TestIntegerComb#test_minus = 0.49 s 2941s [2802/5474] TestIntegerComb#test_xor = 0.12 s 2941s [2803/5474] TestIntegerComb#test_marshal = 0.00 s 2941s [2804/5474] TestIntegerComb#test_printf_o_sign = 0.01 s 2941s [2805/5474] TestIntegerComb#test_cmp = 0.19 s 2941s [2806/5474] TestIntegerComb#test_succ = 0.00 s 2942s [2807/5474] TestIntegerComb#test_mult = 0.84 s 2942s [2808/5474] TestIntegerComb#test_anybits_p = 0.04 s 2942s [2809/5474] TestIntegerComb#test_eq = 0.06 s 2942s [2810/5474] TestIntegerComb#test_or = 0.13 s 2943s [2811/5474] TestIntegerComb#test_remainder = 0.23 s 2943s [2812/5474] TestIntegerComb#test_nobits_p = 0.04 s 2943s [2813/5474] TestIntegerComb#test_even_odd = 0.00 s 2943s [2814/5474] TestIntegerComb#test_plus = 0.28 s 2943s [2815/5474] TestIntegerComb#test_floor = 0.00 s 2943s [2816/5474] TestIntegerComb#test_truncate = 0.00 s 2943s [2817/5474] TestIntegerComb#test_and = 0.14 s 2943s [2818/5474] TestIntegerComb#test_allbits_p = 0.04 s 2943s [2819/5474] TestIntegerComb#test_pack_ber = 0.02 s 2943s [2820/5474] TestIntegerComb#test_pack_utf8 = 0.02 s 2943s [2821/5474] TestIntegerComb#test_ceil = 0.00 s 2943s [2822/5474] TestIntegerComb#test_unary_minus = 0.00 s 2943s [2823/5474] TestIntegerComb#test_round = 0.00 s 2943s [2824/5474] TestIntegerComb#test_to_s = 0.03 s 2943s [2825/5474] TestIntegerComb#test_zero_nonzero = 0.00 s 2943s [2826/5474] TestIntegerComb#test_divmod = 0.31 s 2943s [2827/5474] TestIntegerComb#test_abs = 0.00 s 2943s [2828/5474] TestIntegerComb#test_printf_x_sign = 0.00 s 2943s [2829/5474] TestIntegerComb#test_printf_x = 0.00 s 2944s [2830/5474] TestIntegerComb#test_printf_b = 0.00 s 2944s [2831/5474] TestIntegerComb#test_not = 0.00 s 2944s [2832/5474] TestIntegerComb#test_pow = 0.17 s 2944s [2833/5474] TestIntegerComb#test_printf_b_sign = 0.00 s 2944s [2834/5474] TestIntegerComb#test_unary_plus = 0.00 s 2944s [2835/5474] TestIntegerComb#test_pred = 0.00 s 2944s [2836/5474] TestUnicodeEscape#test_regexp = 0.00 s 2944s [2837/5474] TestUnicodeEscape#test_syntax_variants = 0.00 s 2944s [2838/5474] TestUnicodeEscape#test_chars = 0.00 s 2944s [2839/5474] TestUnicodeEscape#test_fulton = 0.00 s 2944s [2840/5474] TestUnicodeEscape#test_edge_cases = 0.00 s 2944s [2841/5474] TestUnicodeEscape#test_dynamic_regexp = 0.00 s 2944s [2842/5474] TestTranscode#test_iso_2022_jp = 0.01 s 2944s [2843/5474] TestTranscode#test_macCyrillic = 0.00 s 2944s [2844/5474] TestTranscode#test_noargument = 0.00 s 2944s [2845/5474] TestTranscode#test_arguments = 0.00 s 2944s [2846/5474] TestTranscode#test_encode_with_invalid_chars = 0.00 s 2944s [2847/5474] TestTranscode#test_undef_replace_string = 0.00 s 2944s [2848/5474] TestTranscode#test_CP855 = 0.00 s 2944s [2849/5474] TestTranscode#test_ill_formed_utf_8_replace = 0.00 s 2944s [2850/5474] TestTranscode#test_nothing_changed = 0.00 s 2944s [2851/5474] TestTranscode#test_twostep = 0.00 s 2944s [2852/5474] TestTranscode#test_all_bytes = 0.00 s 2948s [2853/5474] TestTranscode#test_valid_dummy_encoding = 3.81 s 2948s [2854/5474] TestTranscode#test_utf_32 = 0.01 s 2948s [2855/5474] TestTranscode#test_koi8_r = 0.00 s 2948s [2856/5474] TestTranscode#test_tilde_overline = 0.01 s 2948s [2857/5474] TestTranscode#test_IBM852 = 0.00 s 2948s [2858/5474] TestTranscode#test_invalid_ignore = 0.01 s 2948s [2859/5474] TestTranscode#test_from_cp50221 = 0.01 s 2948s [2860/5474] TestTranscode#test_IBM437 = 0.00 s 2948s [2861/5474] TestTranscode#test_gb18030 = 0.16 s 2948s [2862/5474] TestTranscode#test_euc_jp = 0.02 s 2948s [2863/5474] TestTranscode#test_eucjp_sjis_undef = 0.01 s 2948s [2864/5474] TestTranscode#test_IBM869 = 0.00 s 2948s [2865/5474] TestTranscode#test_Big5_UAO = 0.05 s 2948s [2866/5474] TestTranscode#test_unicode_public_review_issue_121 = 0.00 s 2948s [2867/5474] TestTranscode#test_utf_16 = 0.01 s 2948s [2868/5474] TestTranscode#test_windows_1256 = 0.00 s 2948s [2869/5474] TestTranscode#test_macTurkish = 0.00 s 2948s [2870/5474] TestTranscode#test_IBM863 = 0.00 s 2948s [2871/5474] TestTranscode#test_windows_1254 = 0.01 s 2948s [2872/5474] TestTranscode#test_EBCDIC = 0.00 s 2948s [2873/5474] TestTranscode#test_IBM861 = 0.00 s 2952s [2874/5474] TestTranscode#test_loading_race = 4.31 s 2952s [2875/5474] TestTranscode#test_windows_1252 = 0.01 s 2952s [2876/5474] TestTranscode#test_fallback_hash_default = 0.00 s 2952s [2877/5474] TestTranscode#test_windows_1250 = 0.00 s 2952s [2878/5474] TestTranscode#test_IBM865 = 0.00 s 2952s [2879/5474] TestTranscode#test_euc_jis_2004 = 0.00 s 2952s [2880/5474] TestTranscode#test_invalid_replace = 0.00 s 2952s [2881/5474] TestTranscode#test_gbk = 0.01 s 2952s [2882/5474] TestTranscode#test_eucjp_sjis_unassigned = 0.00 s 2952s [2883/5474] TestTranscode#test_undef_replace = 0.00 s 2952s [2884/5474] TestTranscode#test_utf_32_bom = 0.00 s 2952s [2885/5474] TestTranscode#test_encodings = 0.01 s 2952s [2886/5474] TestTranscode#test_eucjp_ms = 0.00 s 2952s [2887/5474] TestTranscode#test_fallback_method = 0.00 s 2952s [2888/5474] TestTranscode#test_IBM720 = 0.00 s 2952s [2889/5474] TestTranscode#test_utf8_mac = 0.01 s 2952s [2890/5474] TestTranscode#test_newline_options = 0.00 s 2952s [2891/5474] TestTranscode#test_iso_2022_jp_1 = 0.00 s 2952s [2892/5474] TestTranscode#test_macRoman = 0.00 s 2952s [2893/5474] TestTranscode#test_windows_874 = 0.00 s 2952s [2894/5474] TestTranscode#test_TIS_620 = 0.00 s 2952s [2895/5474] TestTranscode#test_scrub_encode_with_coderange = 0.00 s 2952s [2896/5474] TestTranscode#test_fallback_aref = 0.00 s 2952s [2897/5474] TestTranscode#test_errors = 0.00 s 2952s [2898/5474] TestTranscode#test_windows_1251 = 0.00 s 2952s [2899/5474] TestTranscode#test_windows_31j = 0.00 s 2952s [2900/5474] TestTranscode#test_yen_sign = 0.00 s 2952s [2901/5474] TestTranscode#test_IBM866 = 0.00 s 2952s [2902/5474] TestTranscode#test_windows_1253 = 0.00 s 2956s [2903/5474] TestTranscode#test_pseudo_encoding_inspect(UTF-32) = 3.68 s 2956s [2904/5474] TestTranscode#test_IBM860 = 0.00 s 2956s [2905/5474] TestTranscode#test_windows_1255 = 0.01 s 2956s [2906/5474] TestTranscode#test_IBM862 = 0.00 s 2956s [2907/5474] TestTranscode#test_windows_1257 = 0.01 s 2956s [2908/5474] TestTranscode#test_to_cp50221 = 0.00 s 2956s [2909/5474] TestTranscode#test_utf_16_bom = 0.00 s 2956s [2910/5474] TestTranscode#test_koi8_u = 0.00 s 2956s [2911/5474] TestTranscode#test_IBM857 = 0.00 s 2956s [2912/5474] TestTranscode#test_Big5_Hkscs = 0.00 s 2956s [2913/5474] TestTranscode#test_IBM855 = 0.00 s 2956s [2914/5474] TestTranscode#test_macGreek = 0.00 s 2956s [2915/5474] TestTranscode#test_length = 0.06 s 2956s [2916/5474] TestTranscode#test_gb2312 = 0.01 s 2956s [2917/5474] TestTranscode#test_invalid_replace_string = 0.00 s 2956s [2918/5474] TestTranscode#test_macIceland = 0.00 s 2956s [2919/5474] TestTranscode#test_macCroatian = 0.00 s 2956s [2920/5474] TestTranscode#test_shift_jis = 0.01 s 2960s [2921/5474] TestTranscode#test_pseudo_encoding_inspect(UTF-16) = 4.05 s 2960s [2922/5474] TestTranscode#test_eucjp_sjis = 0.00 s 2960s [2923/5474] TestTranscode#test_macRomania = 0.00 s 2960s [2924/5474] TestTranscode#test_IBM775 = 0.00 s 2960s [2925/5474] TestTranscode#test_ascii_range = 0.00 s 2960s [2926/5474] TestTranscode#test_fallback = 0.00 s 2960s [2927/5474] TestTranscode#test_CP852 = 0.00 s 2960s [2928/5474] TestTranscode#test_fallback_proc = 0.00 s 2960s [2929/5474] TestTranscode#test_CP850 = 0.00 s 2960s [2930/5474] TestTranscode#test_encoding_of_ascii_originating_from_binary = 0.00 s 2960s [2931/5474] TestTranscode#test_Big5 = 0.00 s 2960s [2932/5474] TestTranscode#test_macUkraine = 0.00 s 2960s [2933/5474] TestKeyError#test_receiver = 0.00 s 2960s [2934/5474] TestKeyError#test_all = 0.00 s 2960s [2935/5474] TestKeyError#test_key = 0.00 s 2960s [2936/5474] TestKeyError#test_default = 0.00 s 2960s [2937/5474] TestKeyError#test_message = 0.00 s 2960s [2938/5474] TestKeyError#test_receiver_and_key = 0.00 s 2960s [2939/5474] TestString2#test_slice! = 0.02 s 2960s [2940/5474] TestString2#test_PLUS = 0.00 s 2960s [2941/5474] TestString2#test_squeeze! = 0.00 s 2960s [2942/5474] TestString2#test_squeeze = 0.00 s 2960s [2943/5474] TestString2#test_dummy_inspect = 0.00 s 2960s [2944/5474] TestString2#test_eql? = 0.00 s 2960s [2945/5474] TestString2#test_split_lookbehind = 0.00 s 2960s [2946/5474] TestString2#test_match_method = 0.00 s 2960s [2947/5474] TestString2#test_prepend = 0.00 s 2960s [2948/5474] TestString2#test_downcase = 0.00 s 2960s [2949/5474] TestString2#test_times = 0.00 s 2960s [2950/5474] TestString2#test_sub = 0.02 s 2960s [2951/5474] TestString2#test_downcase2 = 0.00 s 2960s [2952/5474] TestString2#test_reverse = 0.00 s 2960s [2953/5474] TestString2#test_VERY_EQUAL = 0.00 s 2960s [2954/5474] TestString2#test_gsub! = 0.00 s 2960s [2955/5474] TestString2#test_lstrip = 0.00 s 2960s [2956/5474] TestString2#test_strip = 0.00 s 2960s [2957/5474] TestString2#test_each_char = 0.01 s 2960s [2958/5474] TestString2#test_match_p_regexp = 0.01 s 2960s [2959/5474] TestString2#test_gsub = 0.01 s 2960s [2960/5474] TestString2#test_tr_s = 0.00 s 2960s [2961/5474] TestString2#test_lstrip_bang = 0.00 s 2960s [2962/5474] TestString2#test_concat_literals = 0.00 s 2960s [2963/5474] TestString2#test_clear_nonasciicompat = 0.00 s 2964s [2964/5474] TestString2#test_eq_tilde_can_be_overridden = 4.03 s 2964s [2965/5474] TestString2#test_hash = 0.00 s 2964s [2966/5474] TestString2#test_delete! = 0.00 s 2964s [2967/5474] TestString2#test_split_invalid_sequence = 0.00 s 2964s [2968/5474] TestString2#test_capitalize = 0.00 s 2964s [2969/5474] TestString2#test_byteslice = 0.01 s 2964s [2970/5474] TestString2#test_succ = 0.00 s 2964s [2971/5474] TestString2#test_split_encoding = 0.00 s 2964s [2972/5474] TestString2#test_empty? = 0.00 s 2964s [2973/5474] TestString2#test_inspect_nul = 0.00 s 2964s [2974/5474] TestString2#test_lines = 0.00 s 2964s [2975/5474] TestString2#test_strip! = 0.00 s 2964s [2976/5474] TestString2#test_intern = 0.00 s 2964s [2977/5474] TestString2#test_split = 0.01 s 2964s [2978/5474] TestString2#test_upcase2 = 0.00 s 2964s [2979/5474] TestString2#test_MUL = 0.00 s 2964s [2980/5474] TestString2#test_tr! = 0.00 s 2964s [2981/5474] TestString2#test_str_new4 = 0.00 s 2964s [2982/5474] TestString2#test_ord = 0.01 s 2964s [2983/5474] TestString2#test_substr_negative_begin = 0.00 s 2964s [2984/5474] TestString2#test_tr_s! = 0.00 s 2964s [2985/5474] TestString2#test_chop! = 0.00 s 2964s [2986/5474] TestString2#test_dup = 0.00 s 2964s [2987/5474] TestString2#test_to_s_2 = 0.00 s 2964s [2988/5474] TestString2#test_each_byte = 0.00 s 2964s [2989/5474] TestString2#test_each_codepoint = 0.00 s 2964s [2990/5474] TestString2#test_substr_code_range = 0.00 s 2964s [2991/5474] TestString2#test_chars = 0.00 s 2964s [2992/5474] TestString2#test_clear = 0.00 s 2964s [2993/5474] TestString2#test_ljust = 0.00 s 2964s [2994/5474] TestString2#test_split_wchar = 0.00 s 2964s [2995/5474] TestString2#test_chr = 0.00 s 2964s [2996/5474] TestString2#test_rb_str_new4 = 0.00 s 2964s [2997/5474] TestString2#test_scan = 0.01 s 2964s [2998/5474] TestString2#test_sub_hash = 0.01 s 2964s [2999/5474] TestString2#test_MOD = 0.00 s 2964s [3000/5474] TestString2#test_delete_prefix = 0.01 s 2964s [3001/5474] TestString2#test_upcase = 0.00 s 2964s [3002/5474] TestString2#test_match_p_string = 0.01 s 2964s [3003/5474] TestString2#test_chomp = 0.01 s 2964s [3004/5474] TestString2#test_split_with_block = 0.01 s 2965s [3005/5474] TestString2#test_each_grapheme_cluster = 0.36 s 2965s [3006/5474] TestString2#test_rindex = 0.01 s 2965s [3007/5474] TestString2#test_to_str = 0.01 s 2965s [3008/5474] TestString2#test_to_f = 0.00 s 2965s [3009/5474] TestString2#test_oct = 0.00 s 2965s [3010/5474] TestString2#test_sub! = 0.01 s 2965s [3011/5474] TestString2#test_insert = 0.00 s 2965s [3012/5474] TestString2#test_delete = 0.00 s 2965s [3013/5474] TestString2#test_count = 0.00 s 2965s [3014/5474] TestString2#test_dump = 0.00 s 2965s [3015/5474] TestString2#test_next! = 0.00 s 2965s [3016/5474] TestString2#test_swapcase = 0.00 s 2965s [3017/5474] TestString2#test_capitalize! = 0.00 s 2965s [3018/5474] TestString2#test_unpack = 0.01 s 2965s [3019/5474] TestString2#test_initialize = 0.01 s 2965s [3020/5474] TestString2#test_upto_numeric = 0.00 s 2965s [3021/5474] TestString2#test_to_i = 0.01 s 2965s [3022/5474] TestString2#test_to_id = 0.01 s 2965s [3023/5474] TestString2#test_MATCH = 0.00 s 2965s [3024/5474] TestString2#test_upto = 0.01 s 2965s [3025/5474] TestString2#test_try_convert = 0.00 s 2965s [3026/5474] TestString2#test_sum_long = 0.07 s 2965s [3027/5474] TestString2#test_gsub_encoding = 0.00 s 2965s [3028/5474] TestString2#test_next = 0.00 s 2965s [3029/5474] TestString2#test_mod_check = 0.00 s 2965s [3030/5474] TestString2#test_codepoints = 0.00 s 2965s [3031/5474] TestString2#test_split_dupped = 0.00 s 2965s [3032/5474] TestString2#test_respond_to = 0.00 s 2965s [3033/5474] TestString2#test_splice! = 0.00 s 2965s [3034/5474] TestString2#test_concat = 0.00 s 2965s [3035/5474] TestString2#test_bytes = 0.00 s 2965s [3036/5474] TestString2#test_slice = 0.01 s 2965s [3037/5474] TestString2#test_end_with? = 0.00 s 2965s [3038/5474] TestString2#test_upto_nonalnum = 0.00 s 2965s [3039/5474] TestString2#test_delete_suffix = 0.01 s 2965s [3040/5474] TestString2#test_shared_force_encoding = 0.00 s 2965s [3041/5474] TestString2#test_s_new = 0.02 s 2965s [3042/5474] TestString2#test_to_s = 0.00 s 2965s [3043/5474] TestString2#test_gsub_hash = 0.00 s 2965s [3044/5474] TestString2#test_rstrip = 0.00 s 2965s [3045/5474] TestString2#test_times2 = 0.00 s 2965s [3046/5474] TestString2#test_rb_str_to_str = 0.00 s 2965s [3047/5474] TestString2#test_replace = 0.01 s 2965s [3048/5474] TestString2#test_nesting_shared_b = 0.00 s 2965s [3049/5474] TestString2#test_nesting_shared = 0.00 s 2965s [3050/5474] TestString2#test_split_invalid_argument = 0.00 s 2965s [3051/5474] TestString2#test_center = 0.00 s 2965s [3052/5474] TestString2#test_rb_str_shared_replace = 0.00 s 2965s [3053/5474] TestString2#test_start_with? = 0.00 s 2965s [3054/5474] TestString2#test_delete_prefix_bang = 0.01 s 2965s [3055/5474] TestString2#test_EQUAL = 0.00 s 2965s [3056/5474] TestString2#test_tr = 0.00 s 2965s [3057/5474] TestString2#test_unknown_string_option = 0.01 s 2965s [3058/5474] TestString2#test_each_line_chomp = 0.01 s 2965s [3059/5474] TestString2#test_chomp! = 0.01 s 2965s [3060/5474] TestString2#test_delete_suffix_bang = 0.01 s 2965s [3061/5474] TestString2#test_chop = 0.00 s 2965s [3062/5474] TestString2#test_each = 0.00 s 2965s [3063/5474] TestString2#test_length = 0.00 s 2965s [3064/5474] TestString2#test_initialize_shared = 0.00 s 2965s [3065/5474] TestString2#test_index = 0.01 s 2965s [3066/5474] TestString2#test_downcase! = 0.00 s 2965s [3067/5474] TestString2#test_rstrip_bang = 0.00 s 2969s [3068/5474] TestString2#test_fs = 3.58 s 2969s [3069/5474] TestString2#test_ascii_incomat_inspect = 0.00 s 2969s [3070/5474] TestString2#test_AREF = 0.01 s 2969s [3071/5474] TestString2#test_sum = 0.00 s 2969s [3072/5474] TestString2#test_sum_2 = 0.00 s 2969s [3073/5474] TestString2#test_succ! = 0.01 s 2969s [3074/5474] TestString2#test_casecmp? = 0.00 s 2969s [3075/5474] TestString2#test_include? = 0.00 s 2969s [3076/5474] TestString2#test_regexp_match_subclass = 0.00 s 2969s [3077/5474] TestString2#test_clone = 0.00 s 2969s [3078/5474] TestString2#test_frozen_check = 0.00 s 2969s [3079/5474] TestString2#test_hex = 0.00 s 2969s [3080/5474] TestString2#test_each_line = 0.01 s 2973s [3081/5474] TestString2#test_gsub_enumerator = 3.92 s 2973s [3082/5474] TestString2#test_LSHIFT = 0.01 s 2973s [3083/5474] TestString2#test_upcase! = 0.00 s 2973s [3084/5474] TestString2#test_partition = 0.01 s 2973s [3085/5474] TestString2#test_reverse! = 0.00 s 2973s [3086/5474] TestString2#test_swapcase! = 0.00 s 2973s [3087/5474] TestString2#test_rjust = 0.00 s 2973s [3088/5474] TestString2#test_CMP = 0.01 s 2973s [3089/5474] TestString2#test_rpartition = 0.01 s 2973s [3090/5474] TestString2#test_casecmp = 0.00 s 2973s [3091/5474] TestString2#test_size = 0.00 s 2973s [3092/5474] TestString2#test_initialize_nonstring = 0.00 s 2973s [3093/5474] TestSprintfComb#test_format_integer(% #+-00x) = 0.03 s 2973s [3094/5474] TestSprintfComb#test_format_integer(% +020o) = 0.01 s 2973s [3095/5474] TestSprintfComb#test_format_float(%e) = 0.07 s 2973s [3096/5474] TestSprintfComb#test_format_float(% #+-00.e) = 0.02 s 2973s [3097/5474] TestSprintfComb#test_format_integer(%#-0b) = 0.06 s 2973s [3098/5474] TestSprintfComb#test_format_float(% +0.0E) = 0.01 s 2973s [3099/5474] TestSprintfComb#test_format_float(%#05.8E) = 0.01 s 2973s [3100/5474] TestSprintfComb#test_format_float(% #+5e) = 0.01 s 2973s [3101/5474] TestSprintfComb#test_format_integer(%5X) = 0.01 s 2973s [3102/5474] TestSprintfComb#test_format_integer(% #+-0B) = 0.00 s 2973s [3103/5474] TestSprintfComb#test_format_integer(% +00.20o) = 0.01 s 2973s [3104/5474] TestSprintfComb#test_format_float(%5.0e) = 0.01 s 2973s [3105/5474] TestSprintfComb#test_format_float(%#0.8E) = 0.01 s 2973s [3106/5474] TestSprintfComb#test_format_float(%+05.E) = 0.00 s 2973s [3107/5474] TestSprintfComb#test_format_integer(% #+-0.8X) = 0.00 s 2973s [3108/5474] TestSprintfComb#test_format_integer(%#-0x) = 0.00 s 2973s [3109/5474] TestSprintfComb#test_format_float(%#+-.0e) = 0.00 s 2973s [3110/5474] TestSprintfComb#test_format_integer(% #+-0X) = 0.00 s 2973s [3111/5474] TestSprintfComb#test_format_float(%#-.E) = 0.00 s 2973s [3112/5474] TestSprintfComb#test_format_integer(% +00x) = 0.00 s 2973s [3113/5474] TestSprintfComb#test_format_integer(% +020.20b) = 0.00 s 2973s [3114/5474] TestSprintfComb#test_format_integer(%B) = 0.01 s 2973s [3115/5474] TestSprintfComb#test_format_float(%#-0E) = 0.00 s 2973s [3116/5474] TestSprintfComb#test_format_integer(%0.20X) = 0.01 s 2973s [3117/5474] TestSprintfComb#test_format_float(% 0.8e) = 0.00 s 2973s [3118/5474] TestSprintfComb#test_format_integer(%#-0.8x) = 0.00 s 2973s [3119/5474] TestSprintfComb#test_format_integer(%#-05.8b) = 0.02 s 2973s [3120/5474] TestSprintfComb#test_format_integer(% +00.20x) = 0.00 s 2973s [3121/5474] TestSprintfComb#test_format_integer(%5.20d) = 0.00 s 2973s [3122/5474] TestSprintfComb#test_format_integer(%.20B) = 0.01 s 2973s [3123/5474] TestSprintfComb#test_format_integer(% +00b) = 0.00 s 2973s [3124/5474] TestSprintfComb#test_format_integer(% #+-20d) = 0.00 s 2973s [3125/5474] TestSprintfComb#test_format_float(% +05E) = 0.00 s 2973s [3126/5474] TestSprintfComb#test_format_integer(%0B) = 0.01 s 2973s [3127/5474] TestSprintfComb#test_format_integer(%.20X) = 0.00 s 2973s [3128/5474] TestSprintfComb#test_format_integer(% #+-0x) = 0.01 s 2973s [3129/5474] TestSprintfComb#test_format_integer(% #+-20.8B) = 0.00 s 2973s [3130/5474] TestSprintfComb#test_format_integer(%d) = 0.00 s 2973s [3131/5474] TestThread#test_backtrace = 0.00 s 2973s [3132/5474] TestThread#test_select_wait = 0.01 s 2973s [3133/5474] TestThread#test_mutex_owned2 = 0.00 s 2973s [3134/5474] TestThread#test_thread_local_fetch = 0.00 s 2986s [3135/5474] TestThread#test_local_barrier = 12.65 s 2986s [3136/5474] TestThread#test_uninitialized = 0.02 s 2986s [3137/5474] TestThread#test_kill_wrong_argument = 0.00 s 2986s [3138/5474] TestThread#test_handle_interrupted? = 0.01 s 2986s [3139/5474] TestThread#test_mutex_illegal_unlock = 0.00 s 2991s [3140/5474] TestThread#test_new_symbol_proc = 4.81 s 2991s [3141/5474] TestThread#test_thread_join_current = 0.03 s 2994s [3142/5474] TestThread#test_thread_status_in_trap = 3.17 s 2994s [3143/5474] TestThread#test_join_argument_conversion = 0.05 s 2994s [3144/5474] TestThread#test_join2 = 0.03 s 2994s [3145/5474] TestThread#test_join_limit_UINT64_MAX = 0.00 s 2994s [3146/5474] TestThread#test_thread_variable? = 0.00 s 2994s [3147/5474] TestThread#test_join_limit_FIXNUM_MAX = 0.02 s 2994s [3148/5474] TestThread#test_join_limit_INFINITY = 0.01 s 2994s [3149/5474] TestThread#test_mutex_synchronize_yields_no_block_params = 0.00 s 2994s [3150/5474] TestThread#test_thread_name = 0.00 s 2994s [3151/5474] TestThread#test_fork_while_mutex_locked_by_forker = 0.00 s 2994s [3152/5474] TestThread#test_join_limit_negative_minus_1 = 0.00 s 2994s [3153/5474] TestThread#test_thread_invalid_object = 0.00 s 2998s [3154/5474] TestThread#test_thread_timer_and_ensure = 4.07 s 3001s [3155/5474] TestThread#test_stop = 3.21 s 3001s [3156/5474] TestThread#test_mutex_trylock = 0.00 s 3001s [3157/5474] TestThread#test_kill_thread_subclass = 0.00 s 3005s [3158/5474] TestThread#test_main = 3.23 s 3005s [3159/5474] TestThread#test_recursive_outer = 0.00 s 3005s [3160/5474] TestThread#test_exit = 0.00 s 3005s [3161/5474] TestThread#test_mutex_synchronize = 0.07 s 3005s [3162/5474] TestThread#test_mutex_deadlock = 0.00 s 3005s [3163/5474] TestThread#test_handle_interrupt_with_break = 0.00 s 3005s [3164/5474] TestThread#test_thread_native_thread_id = 0.03 s 3005s [3165/5474] TestThread#test_handle_interrupt_with_return = 0.00 s 3005s [3166/5474] TestThread#test_status_and_stop_p = 0.00 s 3005s [3167/5474] TestThread#test_thread_variable_strings_and_symbols_are_the_same_key = 0.00 s 3008s [3168/5474] TestThread#test_kill_main_thread = 2.97 s 3008s [3169/5474] TestThread#test_thread_local_security = 0.00 s 3008s [3170/5474] TestThread#test_mutex_owned = 0.00 s 3011s [3171/5474] TestThread#test_handle_interrupt_and_p = 3.75 s 3011s [3172/5474] TestThread#test_thread_variables = 0.00 s 3011s [3173/5474] TestThread#test_handle_interrupt = 0.01 s 3011s [3174/5474] TestThread#test_thread_local_dynamic_symbol = 0.00 s 3012s [3175/5474] TestThread#test_thread_variable_frozen = 0.00 s 3012s [3176/5474] TestThread#test_thread_status_raise_after_kill = 0.00 s 3014s [3177/5474] TestThread#test_handle_interrupt_and_io = 2.93 s 3014s [3178/5474] TestThread#test_thread_invalid_name = 0.01 s 3015s [3179/5474] TestThread#test_switch_while_busy_loop = 0.10 s 3015s [3180/5474] TestThread#test_join_limit_negative_minus_INFINITY = 0.00 s 3015s [3181/5474] TestThread#test_new = 0.00 s 3015s [3182/5474] TestThread#test_join = 0.10 s 3015s [3183/5474] TestThread#test_subclass_no_initialize = 0.01 s 3015s [3184/5474] TestThread#test_thread_local = 0.00 s 3015s [3185/5474] TestThread#test_join_limit_negative_FIXNUM_MIN = 0.00 s 3015s [3186/5474] TestThread#test_mutex_fifo_like_lock = 0.00 s 3015s [3187/5474] TestThread#test_handle_interrupt_invalid_argument = 0.00 s 3015s [3188/5474] TestThread#test_fork_while_parent_locked = 0.00 s 3015s [3189/5474] TestThread#test_handle_interrupt_blocking = 0.01 s 3015s [3190/5474] TestThread#test_join_limit_negative_minus_0_1 = 0.01 s 3017s [3191/5474] TestThread#test_thread_instance_variable = 2.67 s 3017s [3192/5474] TestPipe::WithConversion#test_eof_3 = 0.00 s 3017s [3193/5474] TestPipe::WithConversion#test_eof_2 = 0.00 s 3022s [3194/5474] TestPipe::WithConversion#test_stdout_epipe = 4.30 s 3022s [3195/5474] TestPipe::WithConversion#test_eof_0_rw = 0.00 s 3022s [3196/5474] TestInteger#test_digits_for_non_numeric_base_argument = 0.00 s 3026s [3197/5474] TestInteger#test_times_bignum_redefine_plus_lt = 4.07 s 3026s [3198/5474] TestInteger#test_int_p = 0.00 s 3026s [3199/5474] TestInteger#test_times = 0.00 s 3026s [3200/5474] TestInteger#test_digits_for_negative_numbers = 0.00 s 3026s [3201/5474] TestInteger#test_obj_fdiv = 0.00 s 3026s [3202/5474] TestInteger#test_digits_for_non_integral_base_numbers = 0.00 s 3026s [3203/5474] TestInteger#test_succ = 0.00 s 3026s [3204/5474] TestInteger#test_fdiv = 0.00 s 3026s [3205/5474] TestInteger#test_bitwise_or_with_integer_mimic_object = 0.01 s 3026s [3206/5474] TestInteger#test_Integer_with_invalid_exception = 0.00 s 3026s [3207/5474] TestInteger#test_bitwise_xor_with_integer_coercion = 0.00 s 3026s [3208/5474] TestInteger#test_digits_for_invalid_base_numbers = 0.00 s 3026s [3209/5474] TestInteger#test_bitwise_and_with_integer_mimic_object = 0.00 s 3026s [3210/5474] TestInteger#test_chr = 0.00 s 3026s [3211/5474] TestInteger#test_floor = 0.00 s 3026s [3212/5474] TestInteger#test_truncate = 0.00 s 3026s [3213/5474] TestInteger#test_bitwise_xor_with_integer_mimic_object = 0.00 s 3026s [3214/5474] TestInteger#test_rshift = 0.00 s 3027s [3215/5474] TestInteger#test_aref = 1.42 s 3027s [3216/5474] TestInteger#test_ceil = 0.00 s 3027s [3217/5474] TestInteger#test_upto = 0.00 s 3027s [3218/5474] TestInteger#test_try_convert = 0.00 s 3027s [3219/5474] TestInteger#test_bitwise_or_with_integer_coercion = 0.00 s 3027s [3220/5474] TestInteger#test_digits = 0.00 s 3027s [3221/5474] TestInteger#test_downto = 0.00 s 3027s [3222/5474] TestInteger#test_bitwise_and_with_integer_coercion = 0.00 s 3027s [3223/5474] TestInteger#test_round = 0.00 s 3031s [3224/5474] TestInteger#test_Integer_with_exception_keyword = 4.18 s 3031s [3225/5474] TestInteger#test_lshift = 0.00 s 3031s [3226/5474] TestInteger#test_square_root = 0.10 s 3034s [3227/5474] TestRubyOptions#test_DATA = 2.75 s 3037s [3228/5474] TestRubyOptions#test_syntax_check = 2.79 s 3037s [3229/5474] TestRubyOptions#test_jit_debug = 0.35 s 3041s [3230/5474] TestRubyOptions#test_rubylib_invalid_encoding = 3.70 s 3044s [3231/5474] TestRubyOptions#test_pflag_sub = 2.72 s 3044s [3232/5474] TestRubyOptions#test_setproctitle = 0.00 s 3048s [3233/5474] TestRubyOptions#test___dir__encoding = 4.05 s 3062s [3234/5474] TestRubyOptions#test_enable = 14.47 s 3065s [3235/5474] TestRubyOptions#test_null_script = 3.04 s 3068s [3236/5474] TestRubyOptions#test_autosplit = 2.65 s 3074s [3237/5474] TestRubyOptions#test_option_variables = 5.84 s 3077s [3238/5474] TestRubyOptions#test_source_file = 3.03 s 3077s [3239/5474] TestRubyOptions#test_set_program_name = 0.04 s 3080s [3240/5474] TestRubyOptions#test_pflag_gsub = 2.64 s 3085s [3241/5474] TestRubyOptions#test_include = 5.30 s 3097s [3242/5474] TestClone#test_user_flags = 12.40 s 3097s [3243/5474] TestClone#test_clone = 0.01 s 3097s [3244/5474] TestSprintf#test_width_underflow = 0.00 s 3099s [3245/5474] TestSprintf#test_rational = 1.65 s 3099s [3246/5474] TestSprintf#test_hash = 0.01 s 3099s [3247/5474] TestSprintf#test_star = 0.00 s 3099s [3248/5474] TestSprintf#test_bignum = 0.00 s 3099s [3249/5474] TestSprintf#test_float_prec = 0.00 s 3099s [3250/5474] TestSprintf#test_inspect = 0.00 s 3099s [3251/5474] TestSprintf#test_positional = 0.00 s 3099s [3252/5474] TestSprintf#test_string = 0.00 s 3099s [3253/5474] TestSprintf#test_inf = 0.00 s 3099s [3254/5474] TestSprintf#test_integer = 0.00 s 3099s [3255/5474] TestSprintf#test_nan = 0.00 s 3099s [3256/5474] TestSprintf#test_rational_precision = 0.00 s 3099s [3257/5474] TestSprintf#test_percent_sign_at_end = 0.00 s 3099s [3258/5474] TestSprintf#test_named_with_nil = 0.00 s 3099s [3259/5474] TestSprintf#test_char = 0.00 s 3099s [3260/5474] TestSprintf#test_float2 = 0.00 s 3099s [3261/5474] TestSprintf#test_negative_width_overflow = 0.00 s 3099s [3262/5474] TestSprintf#test_negative_hex = 0.01 s 3099s [3263/5474] TestSprintf#test_rb_sprintf = 0.00 s 3099s [3264/5474] TestSprintf#test_escape = 0.00 s 3099s [3265/5474] TestSprintf#test_named_default = 0.00 s 3099s [3266/5474] TestSprintf#test_skip = 0.00 s 3099s [3267/5474] TestSprintf#test_named_untyped = 0.00 s 3099s [3268/5474] Complex_Test2#test_kumi2 = 0.00 s 3099s [3269/5474] Complex_Test2#test_kumi = 0.01 s 3099s [3270/5474] TestIOBuffer#test_slice_bounds_error = 0.00 s 3099s [3271/5474] TestIOBuffer#test_resize_mapped = 0.00 s 3099s [3272/5474] TestIOBuffer#test_new_internal = 0.00 s 3099s [3273/5474] TestIOBuffer#test_file_mapped_invalid = 0.00 s 3099s [3274/5474] TestIOBuffer#test_invalidation = 0.01 s 3099s [3275/5474] TestIOBuffer#test_pread = 0.03 s 3099s [3276/5474] TestIOBuffer#test_locked = 0.00 s 3099s [3277/5474] TestIOBuffer#test_read_with_with_length = 0.00 s 3099s [3278/5474] TestIOBuffer#test_get_string = 0.00 s 3099s [3279/5474] TestIOBuffer#test_resize_preserve = 0.00 s 3099s [3280/5474] TestIOBuffer#test_string_mapped_frozen = 0.00 s 3099s [3281/5474] TestIOBuffer#test_compare_different_size = 0.00 s 3099s [3282/5474] TestIOBuffer#test_read_with_with_offset = 0.01 s 3099s [3283/5474] TestIOBuffer#test_read = 0.00 s 3099s [3284/5474] TestIOBuffer#test_each_byte = 0.00 s 3099s [3285/5474] TestIOBuffer#test_pread_offset = 0.00 s 3099s [3286/5474] TestIOBuffer#test_string_mapped = 0.00 s 3099s [3287/5474] TestIOBuffer#test_clear = 0.00 s 3099s [3288/5474] TestIOBuffer#test_string = 0.00 s 3099s [3289/5474] TestIOBuffer#test_get_set_value = 0.01 s 3099s [3290/5474] TestIOBuffer#test_pwrite_offset = 0.00 s 3099s [3291/5474] TestIOBuffer#test_write = 0.00 s 3099s [3292/5474] TestIOBuffer#test_pwrite = 0.00 s 3099s [3293/5474] TestIOBuffer#test_string_negative = 0.00 s 3099s [3294/5474] TestIOBuffer#test_resize_zero_internal = 0.00 s 3099s [3295/5474] TestIOBuffer#test_slice = 0.00 s 3099s [3296/5474] TestIOBuffer#test_shared = 0.00 s 3099s [3297/5474] TestIOBuffer#test_compare_same_size = 0.00 s 3099s [3298/5474] TestIOBuffer#test_string_mapped_mutable = 0.00 s 3099s [3299/5474] TestIOBuffer#test_slice_arguments = 0.00 s 3099s [3300/5474] TestIOBuffer#test_inplace_operators = 0.00 s 3099s [3301/5474] TestIOBuffer#test_values = 0.00 s 3099s [3302/5474] TestIOBuffer#test_new_mapped = 0.00 s 3099s [3303/5474] TestIOBuffer#test_each = 0.01 s 3099s [3304/5474] TestIOBuffer#test_flags = 0.00 s 3099s [3305/5474] TestIOBuffer#test_get_set_values = 0.00 s 3099s [3306/5474] TestIOBuffer#test_default_size = 0.00 s 3099s [3307/5474] TestIOBuffer#test_non_string = 0.00 s 3099s [3308/5474] TestIOBuffer#test_operators = 0.00 s 3099s [3309/5474] TestIOBuffer#test_endian = 0.00 s 3099s [3310/5474] TestIOBuffer#test_new_readonly = 0.00 s 3099s [3311/5474] TestStruct::TopStruct#test_initialize_with_kw = 0.01 s 3099s [3312/5474] TestStruct::TopStruct#test_to_h_block = 0.00 s 3099s [3313/5474] TestStruct::TopStruct#test_hash = 0.00 s 3099s [3314/5474] TestStruct::TopStruct#test_dig = 0.00 s 3099s [3315/5474] TestStruct::TopStruct#test_redefinition_warning = 0.00 s 3099s [3316/5474] TestStruct::TopStruct#test_public_send = 0.00 s 3099s [3317/5474] TestStruct::TopStruct#test_ref = 0.00 s 3099s [3318/5474] TestStruct::TopStruct#test_each_pair = 0.00 s 3099s [3319/5474] TestStruct::TopStruct#test_aset = 0.02 s 3099s [3320/5474] TestStruct::TopStruct#test_deconstruct_keys = 0.01 s 3099s [3321/5474] TestStruct::TopStruct#test_struct_new_with_keyword_init = 0.02 s 3099s [3322/5474] TestStruct::TopStruct#test_inspect = 0.01 s 3099s [3323/5474] TestStruct::TopStruct#test_values_at = 0.00 s 3099s [3324/5474] TestStruct::TopStruct#test_struct = 0.01 s 3099s [3325/5474] TestStruct::TopStruct#test_inherit = 0.00 s 3099s [3326/5474] TestStruct::TopStruct#test_big_struct = 0.00 s 3099s [3327/5474] TestStruct::TopStruct#test_eql = 0.00 s 3099s [3328/5474] TestStruct::TopStruct#test_small_structs = 0.00 s 3099s [3329/5474] TestStruct::TopStruct#test_overridden_aref = 0.01 s 3099s [3330/5474] TestStruct::TopStruct#test_equal = 0.00 s 3099s [3331/5474] TestStruct::TopStruct#test_to_h = 0.00 s 3099s [3332/5474] TestStruct::TopStruct#test_comparison_when_recursive = 0.01 s 3099s [3333/5474] TestStruct::TopStruct#test_initialize = 0.01 s 3099s [3334/5474] TestStruct::TopStruct#test_new_duplicate = 0.00 s 3099s [3335/5474] TestStruct::TopStruct#test_aref = 0.02 s 3099s [3336/5474] TestStruct::TopStruct#test_struct_new = 0.01 s 3099s [3337/5474] TestStruct::TopStruct#test_bang_mark_in_member = 0.00 s 3099s [3338/5474] TestStruct::TopStruct#test_set = 0.00 s 3099s [3339/5474] TestStruct::TopStruct#test_struct_new_with_keyword_init_and_block = 0.00 s 3099s [3340/5474] TestStruct::TopStruct#test_members = 0.00 s 3099s [3341/5474] TestStruct::TopStruct#test_setter_method_returns_value = 0.00 s 3099s [3342/5474] TestStruct::TopStruct#test_question_mark_in_member = 0.00 s 3099s [3343/5474] TestStruct::TopStruct#test_morethan10members = 0.00 s 3099s [3344/5474] TestStruct::TopStruct#test_filter = 0.00 s 3099s [3345/5474] TestStruct::TopStruct#test_junk = 0.00 s 3099s [3346/5474] TestStruct::TopStruct#test_struct_new_with_empty_hash = 0.00 s 3099s [3347/5474] TestStruct::TopStruct#test_error = 0.00 s 3099s [3348/5474] TestStruct::TopStruct#test_each = 0.00 s 3099s [3349/5474] TestStruct::TopStruct#test_init_copy = 0.00 s 3099s [3350/5474] TestStruct::TopStruct#test_overridden_aset = 0.00 s 3099s [3351/5474] TestStruct::TopStruct#test_select = 0.00 s 3099s [3352/5474] TestStruct::TopStruct#test_size = 0.00 s 3100s [3353/5474] TestThreadGroup#test_thread_init = 1.00 s 3100s [3354/5474] TestProcKeywords#test_compose_keywords = 0.01 s 3101s [3355/5474] TestProcKeywords#test_compose_keywords_non_proc = 0.02 s 3101s [3356/5474] TestProcKeywords#test_compose_keywords_method = 0.01 s 3101s [3357/5474] TestWhileuntil#test_until = 0.00 s 3101s [3358/5474] TestWhileuntil#test_while = 0.01 s 3101s [3359/5474] TestFnmatch#test_recursive = 0.03 s 3101s [3360/5474] TestFnmatch#test_text = 0.01 s 3101s [3361/5474] TestFnmatch#test_char_class = 0.01 s 3101s [3362/5474] TestFnmatch#test_unmatched_encoding = 0.01 s 3101s [3363/5474] TestFnmatch#test_fnm_dotmatch = 0.01 s 3101s [3364/5474] TestFnmatch#test_fnm_casefold = 0.01 s 3101s [3365/5474] TestFnmatch#test_fnm_pathname = 0.00 s 3101s [3366/5474] TestFnmatch#test_extglob = 0.01 s 3101s [3367/5474] TestFnmatch#test_any_one = 0.01 s 3101s [3368/5474] TestFnmatch#test_fnmatch = 0.02 s 3101s [3369/5474] TestFnmatch#test_any_chars = 0.01 s 3101s [3370/5474] TestFnmatch#test_unicode = 0.00 s 3101s [3371/5474] TestFnmatch#test_escape = 0.02 s 3101s [3372/5474] TestFnmatch#test_nullchar = 0.00 s 3101s [3373/5474] TestFnmatch#test_fnm_escape = 0.02 s 3101s [3374/5474] TestAssignmentGen#test_massign_aref_lhs_splat = 0.00 s 3101s [3375/5474] TestAssignmentGen#test_optimized_aset = 0.00 s 3101s [3376/5474] Complex_Test#test_freeze = 0.00 s 3101s [3377/5474] Complex_Test#test_marshal_compatibility = 0.00 s 3101s [3378/5474] Complex_Test#test_quo = 0.00 s 3101s [3379/5474] Complex_Test#test_Complex_with_invalid_exception = 0.00 s 3101s [3380/5474] Complex_Test#test_math = 0.00 s 3101s [3381/5474] Complex_Test#test_sub = 0.00 s 3101s [3382/5474] Complex_Test#test_marshal = 0.00 s 3101s [3383/5474] Complex_Test#test_fixed_bug = 0.01 s 3101s [3384/5474] Complex_Test#test_respond = 0.00 s 3101s [3385/5474] Complex_Test#test_hash = 0.00 s 3101s [3386/5474] Complex_Test#test_Complex_without_exception = 0.00 s 3101s [3387/5474] Complex_Test#test_cmp = 0.00 s 3101s [3388/5474] Complex_Test#test_compsub = 0.00 s 3101s [3389/5474] Complex_Test#test_attr = 0.00 s 3101s [3390/5474] Complex_Test#test_fdiv = 0.00 s 3101s [3391/5474] Complex_Test#test_rect = 0.00 s 3101s [3392/5474] Complex_Test#test_parse = 0.03 s 3101s [3393/5474] Complex_Test#test_finite_p = 0.00 s 3101s [3394/5474] Complex_Test#test_inspect = 0.00 s 3101s [3395/5474] Complex_Test#test_coerce = 0.00 s 3101s [3396/5474] Complex_Test#test_expt = 0.01 s 3101s [3397/5474] Complex_Test#test_to_r = 0.00 s 3101s [3398/5474] Complex_Test#test_coerce2 = 0.00 s 3101s [3399/5474] Complex_Test#test_rationalize = 0.00 s 3101s [3400/5474] Complex_Test#test_attr2 = 0.00 s 3104s [3401/5474] Complex_Test#test_polar = 2.98 s 3104s [3402/5474] Complex_Test#test_to_f = 0.00 s 3106s [3403/5474] Complex_Test#test_sub_with_redefining_int_minus = 2.74 s 3106s [3404/5474] Complex_Test#test_conv = 0.00 s 3109s [3405/5474] Complex_Test#test_sub_with_redefining_rational_minus = 2.55 s 3109s [3406/5474] Complex_Test#test_canonicalize_polar = 0.00 s 3109s [3407/5474] Complex_Test#test_to_i = 0.00 s 3109s [3408/5474] Complex_Test#test_uplus = 0.00 s 3112s [3409/5474] Complex_Test#test_add_with_redefining_rational_plus = 2.60 s 3112s [3410/5474] Complex_Test#test_ruby19 = 0.00 s 3112s [3411/5474] Complex_Test#test_add = 0.00 s 3114s [3412/5474] Complex_Test#test_add_with_redefining_int_plus = 2.70 s 3114s [3413/5474] Complex_Test#test_to_c = 0.00 s 3117s [3414/5474] Complex_Test#test_add_with_redefining_float_plus = 2.60 s 3117s [3415/5474] Complex_Test#test_to_s = 0.00 s 3117s [3416/5474] Complex_Test#test_canonicalize_internal = 0.00 s 3117s [3417/5474] Complex_Test#test_eql_p = 0.00 s 3120s [3418/5474] Complex_Test#test_mul_with_redefining_int_mult = 2.58 s 3122s [3419/5474] Complex_Test#test_mul_with_redefining_float_mult = 2.63 s 3122s [3420/5474] Complex_Test#test_supp = 0.00 s 3122s [3421/5474] Complex_Test#test_infinite_p = 0.00 s 3122s [3422/5474] Complex_Test#test_div = 0.00 s 3122s [3423/5474] Complex_Test#test_mul = 0.00 s 3122s [3424/5474] Complex_Test#test_known_bug = 0.00 s 3122s [3425/5474] Complex_Test#test_eqeq = 0.00 s 3125s [3426/5474] Complex_Test#test_mul_with_redefining_rational_mult = 2.56 s 3125s [3427/5474] Complex_Test#test_negate = 0.00 s 3127s [3428/5474] Complex_Test#test_sub_with_redefining_float_minus = 2.48 s 3127s [3429/5474] TestEncodingConverter#test_xml_escape_with_charref = 0.01 s 3127s [3430/5474] TestEncodingConverter#test_no_universal_newline1 = 0.00 s 3127s [3431/5474] TestEncodingConverter#test_last_error2 = 0.00 s 3127s [3432/5474] TestEncodingConverter#test_invalid_utf32le = 0.01 s 3127s [3433/5474] TestEncodingConverter#test_asciicompat_encoding_iso2022jp = 0.00 s 3127s [3434/5474] TestEncodingConverter#test_errinfo_invalid_euc_jp2 = 0.00 s 3127s [3435/5474] TestEncodingConverter#test_convert = 0.00 s 3127s [3436/5474] TestEncodingConverter#test_s_new_convpath = 0.00 s 3127s [3437/5474] TestEncodingConverter#test_s_new_fail = 0.00 s 3127s [3438/5474] TestEncodingConverter#test_xml_hasharg = 0.00 s 3127s [3439/5474] TestEncodingConverter#test_invalid_ignore = 0.00 s 3127s [3440/5474] TestEncodingConverter#test_accumulate_dst1 = 0.00 s 3127s [3441/5474] TestEncodingConverter#test_exc_incomplete = 0.00 s 3127s [3442/5474] TestEncodingConverter#test_crlf_newline = 0.00 s 3127s [3443/5474] TestEncodingConverter#test_errinfo_invalid_euc_jp = 0.01 s 3127s [3444/5474] TestEncodingConverter#test_invalid_utf16be = 0.00 s 3127s [3445/5474] TestEncodingConverter#test_econv_new_hash = 0.00 s 3127s [3446/5474] TestEncodingConverter#test_s_asciicompat_encoding = 0.00 s 3127s [3447/5474] TestEncodingConverter#test_errinfo_valid_partial_character = 0.00 s 3127s [3448/5474] TestEncodingConverter#test_xml_escape_attr_quote = 0.00 s 3127s [3449/5474] TestEncodingConverter#test_iso2022jp_encode = 0.00 s 3127s [3450/5474] TestEncodingConverter#test_invalid3 = 0.00 s 3127s [3451/5474] TestEncodingConverter#test_invalid_replace2 = 0.00 s 3127s [3452/5474] TestEncodingConverter#test_undef_ignore = 0.00 s 3127s [3453/5474] TestEncodingConverter#test_nil_destination_bytesize = 0.00 s 3127s [3454/5474] TestEncodingConverter#test_invalid_utf32be = 0.00 s 3127s [3455/5474] TestEncodingConverter#test_after_output = 0.00 s 3127s [3456/5474] TestEncodingConverter#test_invalid_replace = 0.00 s 3127s [3457/5474] TestEncodingConverter#test_newline_converter_with_ascii_incompatible = 0.00 s 3127s [3458/5474] TestEncodingConverter#test_xml_escape_text = 0.00 s 3127s [3459/5474] TestEncodingConverter#test_invalid_utf16le = 0.00 s 3127s [3460/5474] TestEncodingConverter#test_undef_replace = 0.00 s 3127s [3461/5474] TestEncodingConverter#test_iso2022jp = 0.00 s 3127s [3462/5474] TestEncodingConverter#test_iso2022jp_invalid_replace = 0.00 s 3127s [3463/5474] TestEncodingConverter#test_universal_newline = 0.00 s 3127s [3464/5474] TestEncodingConverter#test_eucjp_to_utf8 = 0.00 s 3127s [3465/5474] TestEncodingConverter#test_universal_newline3 = 0.00 s 3127s [3466/5474] TestEncodingConverter#test_88591 = 0.00 s 3127s [3467/5474] TestEncodingConverter#test_convpath = 0.00 s 3127s [3468/5474] TestEncodingConverter#test_noconv = 0.00 s 3127s [3469/5474] TestEncodingConverter#test_putback = 0.00 s 3127s [3470/5474] TestEncodingConverter#test_partial_input = 0.00 s 3127s [3471/5474] TestEncodingConverter#test_cr_newline = 0.00 s 3127s [3472/5474] TestEncodingConverter#test_search_convpath = 0.00 s 3127s [3473/5474] TestEncodingConverter#test_universal_newline2 = 0.00 s 3127s [3474/5474] TestEncodingConverter#test_finish_incomplete_error = 0.00 s 3127s [3475/5474] TestEncodingConverter#test_result_encoding = 0.00 s 3127s [3476/5474] TestEncodingConverter#test_get_encoding = 0.00 s 3127s [3477/5474] TestEncodingConverter#test_putback2 = 0.00 s 3127s [3478/5474] TestEncodingConverter#test_errors = 0.00 s 3127s [3479/5474] TestEncodingConverter#test_iso2022jp_decode = 0.00 s 3127s [3480/5474] TestEncodingConverter#test_exc_invalid = 0.00 s 3127s [3481/5474] TestEncodingConverter#test_cr_newline2 = 0.00 s 3127s [3482/5474] TestEncodingConverter#test_noconv_partial = 0.00 s 3127s [3483/5474] TestEncodingConverter#test_errors2 = 0.00 s 3127s [3484/5474] TestEncodingConverter#test_s_new = 0.00 s 3127s [3485/5474] TestEncodingConverter#test_invalid4 = 0.00 s 3127s [3486/5474] TestEncodingConverter#test_nil_source_buffer = 0.00 s 3127s [3487/5474] TestEncodingConverter#test_errinfo_invalid_utf16be = 0.00 s 3127s [3488/5474] TestEncodingConverter#test_crlf_newline2 = 0.00 s 3127s [3489/5474] TestEncodingConverter#test_finish_iso2022jp = 0.00 s 3127s [3490/5474] TestEncodingConverter#test_invalid2 = 0.00 s 3127s [3491/5474] TestEncodingConverter#test_noconv_insert_output = 0.00 s 3127s [3492/5474] TestEncodingConverter#test_nil_destination_bytesize_with_nonnil_byteoffset = 0.00 s 3127s [3493/5474] TestEncodingConverter#test_accumulate_dst2 = 0.00 s 3127s [3494/5474] TestEncodingConverter#test_set_replacement = 0.00 s 3127s [3495/5474] TestEncodingConverter#test_xml_escape_attr_content = 0.00 s 3127s [3496/5474] TestEncodingConverter#test_nil_destination_bytesize2 = 0.00 s 3127s [3497/5474] TestEncodingConverter#test_get_replacement = 0.00 s 3127s [3498/5474] TestEncodingConverter#test_output_iso2022jp = 0.00 s 3127s [3499/5474] TestEncodingConverter#test_us_ascii = 0.00 s 3127s [3500/5474] TestEncodingConverter#test_hex_charref = 0.00 s 3127s [3501/5474] TestEncodingConverter#test_errinfo_invalid_partial_character = 0.00 s 3127s [3502/5474] TestEncodingConverter#test_last_error1 = 0.00 s 3127s [3503/5474] TestEncodingConverter#test_no_universal_newline2 = 0.00 s 3127s [3504/5474] TestEncodingConverter#test_noconv_after_output = 0.00 s 3127s [3505/5474] TestEncodingConverter#test_errinfo_invalid_utf16le = 0.00 s 3127s [3506/5474] TestEncodingConverter#test_invalid = 0.00 s 3127s [3507/5474] TestEncodingConverter#test_exc_undef = 0.00 s 3127s [3508/5474] TestEncodingConverter#test_output_region = 0.00 s 3127s [3509/5474] TestEncodingConverter#test_errinfo_undefined_hiragana = 0.00 s 3127s [3510/5474] ComplexRational_Test#test_rat_srat = 0.03 s 3127s [3511/5474] ComplexRational_Test#test_comp_srat = 0.01 s 3127s [3512/5474] TestArithmeticSequence#test_num_step_size = 0.00 s 3127s [3513/5474] TestArithmeticSequence#test_range_step_inspect = 0.00 s 3127s [3514/5474] TestArithmeticSequence#test_last_bug17218 = 0.00 s 3127s [3515/5474] TestArithmeticSequence#test_num_step_inspect = 0.00 s 3127s [3516/5474] TestArithmeticSequence#test_begin = 0.01 s 3127s [3517/5474] TestArithmeticSequence#test_hash = 0.00 s 3127s [3518/5474] TestArithmeticSequence#test_first_bug15518 = 0.00 s 3127s [3519/5474] TestArithmeticSequence#test_peek_values = 0.00 s 3127s [3520/5474] TestArithmeticSequence#test_to_a_bug17218 = 0.00 s 3127s [3521/5474] TestArithmeticSequence#test_eq = 0.00 s 3127s [3522/5474] TestArithmeticSequence#test_with_object = 0.00 s 3127s [3523/5474] TestArithmeticSequence#test_first = 0.00 s 3127s [3524/5474] TestArithmeticSequence#test_exclude_end_p = 0.00 s 3127s [3525/5474] TestArithmeticSequence#test_peek = 0.00 s 3127s [3526/5474] TestArithmeticSequence#test_with_index = 0.00 s 3127s [3527/5474] TestArithmeticSequence#test_end = 0.00 s 3127s [3528/5474] TestArithmeticSequence#test_eqq = 0.00 s 3127s [3529/5474] TestArithmeticSequence#test_to_a = 0.00 s 3127s [3530/5474] TestArithmeticSequence#test_last_with_float = 0.00 s 3127s [3531/5474] TestArithmeticSequence#test_cons = 0.00 s 3127s [3532/5474] TestArithmeticSequence#test_step = 0.00 s 3127s [3533/5474] TestArithmeticSequence#test_next = 0.00 s 3127s [3534/5474] TestArithmeticSequence#test_next_after_stopiteration = 0.00 s 3127s [3535/5474] TestArithmeticSequence#test_slice = 0.00 s 3127s [3536/5474] TestArithmeticSequence#test_last_with_rational = 0.00 s 3127s [3537/5474] TestArithmeticSequence#test_range_step_size = 0.00 s 3127s [3538/5474] TestArithmeticSequence#test_eql_p = 0.00 s 3127s [3539/5474] TestArithmeticSequence#test_next_values = 0.00 s 3127s [3540/5474] TestArithmeticSequence#test_complex = 0.01 s 3127s [3541/5474] TestArithmeticSequence#test_last = 0.00 s 3127s [3542/5474] TestArithmeticSequence#test_to_a_bug15444 = 0.00 s 3127s [3543/5474] TestArithmeticSequence#test_allocate = 0.00 s 3127s [3544/5474] TestArithmeticSequence#test_sum = 0.00 s 3127s [3545/5474] TestArithmeticSequence#test_next_rewind = 0.00 s 3127s [3546/5474] TestArithmeticSequence#test_new = 0.00 s 3127s [3547/5474] TestArithmeticSequence#test_next_bug15444 = 0.00 s 3127s [3548/5474] TestObjectSpace#test_id2ref_34 = 0.00 s 3127s [3549/5474] TestObjectSpace#test_id2ref_36 = 0.00 s 3127s [3550/5474] TestObjectSpace#test_id2ref_23 = 0.00 s 3127s [3551/5474] TestObjectSpace#test_id2ref_21 = 0.00 s 3131s [3552/5474] TestObjectSpace#test_each_object_singleton_class = 3.81 s 3131s [3553/5474] TestObjectSpace#test_id2ref_27 = 0.00 s 3131s [3554/5474] TestObjectSpace#test_id2ref_25 = 0.00 s 3131s [3555/5474] TestObjectSpace#test_finalizer_thread_raiseAfter GC 3131s = 0.10 s 3134s [3556/5474] TestObjectSpace#test_finalizer_with_super = 2.63 s 3138s [3557/5474] TestObjectSpace#test_each_object_recursive_key = 3.98 s 3145s [3558/5474] TestObjectSpace#test_id2ref_liveness = 6.93 s 3145s [3559/5474] TestObjectSpace#test_id2ref_19 = 0.00 s 3149s [3560/5474] TestObjectSpace#test_each_object_with_allocation = 4.45 s 3149s [3561/5474] TestObjectSpace#test_id2ref_24 = 0.00 s 3149s [3562/5474] TestObjectSpace#test_id2ref_26 = 0.00 s 3149s [3563/5474] TestObjectSpace#test_id2ref_20 = 0.00 s 3149s [3564/5474] TestObjectSpace#test_id2ref_22 = 0.00 s 3149s [3565/5474] TestObjectSpace#test_id2ref_35 = 0.01 s 3149s [3566/5474] TestThreadConditionVariable#test_condvar_nolock_2 = 0.00 s 3150s [3567/5474] TestThreadConditionVariable#test_condvar_wait_and_broadcast = 0.16 s 3150s [3568/5474] TestThreadConditionVariable#test_initialized = 0.01 s 3150s [3569/5474] TestThreadConditionVariable#test_dup = 0.00 s 3150s [3570/5474] TestThreadConditionVariable#test_condvar_signal_and_wait = 0.00 s 3150s [3571/5474] TestThreadConditionVariable#test_condvar_empty_signal = 0.00 s 3150s [3572/5474] TestThreadConditionVariable#test_condvar_empty_broadcast = 0.00 s 3150s [3573/5474] TestThreadConditionVariable#test_condvar_wait_deadlock_2 = 0.12 s 3150s [3574/5474] TestThreadConditionVariable#test_condvar_nolock = 0.00 s 3150s [3575/5474] TestThreadConditionVariable#test_condvar_nolock_3 = 0.00 s 3150s [3576/5474] TestThreadConditionVariable#test_condvar_wait_exception_handling = 0.10 s 3150s [3577/5474] TestNot#test_not_with_empty_grouped_expression = 0.00 s 3150s [3578/5474] TestNot#test_not_with_grouped_expression = 0.00 s 3150s [3579/5474] TestUndef#test_undef = 0.00 s 3150s [3580/5474] TestUndef#test_singleton_undef = 0.01 s 3150s [3581/5474] TestDir#test_set_pos = 0.07 s 3150s [3582/5474] TestDir#test_glob_order = 0.04 s 3150s [3583/5474] TestDir#test_symlink = 0.04 s 3150s [3584/5474] TestDir#test_glob_recursive_directory = 0.04 s 3150s [3585/5474] TestDir#test_glob_array_with_destructive_element = 0.03 s 3150s [3586/5474] TestDir#test_empty? = 0.03 s 3150s [3587/5474] TestDir#test_glob_metachar = 0.02 s 3150s [3588/5474] TestDir#test_children = 0.02 s 3150s [3589/5474] TestDir#test_inspect = 0.02 s 3150s [3590/5474] TestDir#test_symlinks_not_resolved = 0.03 s 3150s [3591/5474] TestDir#test_glob_recursive = 0.03 s 3150s [3592/5474] TestDir#test_chroot_nodir = 0.02 s 3150s [3593/5474] TestDir#test_foreach = 0.03 s 3150s [3594/5474] TestDir#test_nodir = 0.02 s 3150s [3595/5474] TestDir#test_each_child = 0.02 s 3150s [3596/5474] TestDir#test_glob_base_dir = 0.03 s 3150s [3597/5474] TestDir#test_close = 0.02 s 3150s [3598/5474] TestDir#test_unknown_keywords = 0.02 s 3150s [3599/5474] TestDir#test_fileno = 0.02 s 3151s [3600/5474] TestDir#test_glob_starts_with_brace = 0.02 s 3151s [3601/5474] TestDir#test_glob_cases = 0.02 s 3151s [3602/5474] TestDir#test_glob_base = 0.04 s 3151s [3603/5474] TestDir#test_glob_super_root = 0.02 s 3151s [3604/5474] TestDir#test_dir_enc = 0.02 s 3151s [3605/5474] TestDir#test_seek = 0.02 s 3151s [3606/5474] TestDir#test_path = 0.02 s 3151s [3607/5474] TestDir#test_rewind = 0.02 s 3151s [3608/5474] TestDir#test_entries = 0.02 s 3151s [3609/5474] TestTime#test_minus = 0.00 s 3151s [3610/5474] TestTime#test_utc_subsecond = 0.00 s 3151s [3611/5474] TestTime#test_marshal_zone = 0.01 s 3151s [3612/5474] TestTime#test_sec_str = 0.00 s 3151s [3613/5474] TestTime#test_marshal_broken_month = 0.00 s 3151s [3614/5474] TestTime#test_plus_minus = 0.00 s 3151s [3615/5474] TestTime#test_at_with_unit = 0.00 s 3151s [3616/5474] TestTime#test_hash = 0.00 s 3151s [3617/5474] TestTime#test_cmp = 0.00 s 3151s [3618/5474] TestTime#test_time_interval = 0.00 s 3151s [3619/5474] TestTime#test_strftime_sec = 0.00 s 3151s [3620/5474] TestTime#test_marshal_to_s = 0.00 s 3151s [3621/5474] TestTime#test_strftime_zone = 0.00 s 3151s [3622/5474] TestTime#test_memsize = 0.00 s 3151s [3623/5474] TestTime#test_strftime_subsec = 0.00 s 3151s [3624/5474] TestTime#test_time_subt = 0.01 s 3151s [3625/5474] TestTime#test_readers = 0.01 s 3151s [3626/5474] TestTime#test_marshal_nsec = 0.00 s 3151s [3627/5474] TestTime#test_to_r = 0.00 s 3151s [3628/5474] TestTime#test_1970 = 0.01 s 3151s [3629/5474] TestTime#test_eql = 0.00 s 3151s [3630/5474] TestTime#test_marshal_broken_zone = 0.00 s 3151s [3631/5474] TestTime#test_strftime_far_future = 0.00 s 3151s [3632/5474] TestTime#test_at3 = 0.00 s 3151s [3633/5474] TestTime#test_strftime_weekflags = 0.00 s 3151s [3634/5474] TestTime#test_at_splat = 0.00 s 3151s [3635/5474] TestTime#test_floor = 0.00 s 3151s [3636/5474] TestTime#test_strftime_too_wide = 0.00 s 3151s [3637/5474] TestTime#test_to_f = 0.00 s 3151s [3638/5474] TestTime#test_marshal_timezone = 0.00 s 3151s [3639/5474] TestTime#test_getlocal_utc_offset = 0.00 s 3151s [3640/5474] TestTime#test_time_time = 0.00 s 3151s [3641/5474] TestTime#test_ceil = 0.00 s 3151s [3642/5474] TestTime#test_at_rational = 0.00 s 3151s [3643/5474] TestTime#test_at2 = 0.00 s 3151s [3644/5474] TestTime#test_eq_nsec = 0.00 s 3151s [3645/5474] TestTime#test_strftime_padding = 0.00 s 3151s [3646/5474] TestTime#test_strftime_invalid_modifier = 0.00 s 3151s [3647/5474] TestTime#test_1901 = 0.00 s 3151s [3648/5474] TestTime#test_strftime_yearday_on_last_day_of_year = 0.00 s 3151s [3649/5474] TestTime#test_round = 0.01 s 3156s [3650/5474] TestTime#test_marshal_zone_gc = 4.78 s 3156s [3651/5474] TestTime#test_getlocal_nil = 0.01 s 3156s [3652/5474] TestTime#test_getlocal_dont_share_eigenclass = 0.01 s 3156s [3653/5474] TestTime#test_to_s = 0.01 s 3156s [3654/5474] TestTime#test_strftime_weeknum = 0.00 s 3156s [3655/5474] TestTime#test_asctime = 0.01 s 3156s [3656/5474] TestTime#test_utc_p = 0.00 s 3156s [3657/5474] TestTime#test_strtime = 0.00 s 3156s [3658/5474] TestTime#test_marshal_ivar = 0.01 s 3156s [3659/5474] TestTime#test_time_add = 0.00 s 3156s [3660/5474] TestTime#test_huge_difference = 0.00 s 3156s [3661/5474] TestTime#test_strftime_ctrlchar = 0.00 s 3156s [3662/5474] TestTime#test_localtime_gmtime = 0.00 s 3156s [3663/5474] TestTime#test_init_copy = 0.00 s 3156s [3664/5474] TestTime#test_delegate = 0.01 s 3156s [3665/5474] TestTime#test_marshal_rational = 0.00 s 3156s [3666/5474] TestTime#test_timegm = 0.00 s 3156s [3667/5474] TestTime#test_marshal_broken_offset = 0.00 s 3156s [3668/5474] TestTime#test_big_minus = 0.00 s 3156s [3669/5474] TestTime#test_to_f_accuracy = 0.00 s 3156s [3670/5474] TestEnumerable#test_drop_while = 0.01 s 3167s [3671/5474] TestEnumerable#test_any_with_unused_block = 11.43 s 3167s [3672/5474] TestEnumerable#test_grep = 0.02 s 3167s [3673/5474] TestEnumerable#test_zip = 0.02 s 3167s [3674/5474] TestEnumerable#test_member = 0.00 s 3167s [3675/5474] TestEnumerable#test_grep_v = 0.00 s 3167s [3676/5474] TestEnumerable#test_each_cons = 0.00 s 3167s [3677/5474] TestEnumerable#test_each_with_object = 0.01 s 3172s [3678/5474] TestEnumerable#test_inject_op_private = 4.52 s 3172s [3679/5474] TestEnumerable#test_cycle = 0.00 s 3172s [3680/5474] TestEnumerable#test_to_h_block = 0.00 s 3172s [3681/5474] TestEnumerable#test_inject = 0.00 s 3172s [3682/5474] TestEnumerable#test_find_index = 0.00 s 3172s [3683/5474] TestEnumerable#test_find_all = 0.00 s 3172s [3684/5474] TestEnumerable#test_uniq = 0.00 s 3172s [3685/5474] TestEnumerable#test_all = 0.00 s 3172s [3686/5474] TestEnumerable#test_take_while = 0.00 s 3182s [3687/5474] TestEnumerable#test_none_with_unused_block = 10.48 s 3182s [3688/5474] TestEnumerable#test_min = 0.01 s 3186s [3689/5474] TestEnumerable#test_inject_array_op_private = 4.10 s 3186s [3690/5474] TestEnumerable#test_minmax = 0.00 s 3186s [3691/5474] TestEnumerable#test_hash_sum = 0.00 s 3186s [3692/5474] TestEnumerable#test_chunk_while_contiguously_increasing_integers = 0.00 s 3186s [3693/5474] TestEnumerable#test_drop = 0.00 s 3186s [3694/5474] TestEnumerable#test_each_slice = 0.00 s 3186s [3695/5474] TestEnumerable#test_sort = 0.00 s 3186s [3696/5474] TestEnumerable#test_grep_optimization = 0.00 s 3186s [3697/5474] TestEnumerable#test_slice_after0 = 0.00 s 3186s [3698/5474] TestEnumerable#test_each_entry = 0.00 s 3186s [3699/5474] TestEnumerable#test_slice_before = 0.01 s 3186s [3700/5474] TestEnumerable#test_to_h = 0.00 s 3186s [3701/5474] TestEnumerable#test_slice_when_1 = 0.00 s 3186s [3702/5474] TestEnumerable#test_transient_heap_sort_by = 0.00 s 3186s [3703/5474] TestEnumerable#test_slice_when_3 = 0.00 s 3186s [3704/5474] TestEnumerable#test_one = 0.01 s 3186s [3705/5474] TestEnumerable#test_slice_before_empty_line = 0.00 s 3186s [3706/5474] TestEnumerable#test_sort_by = 0.00 s 3186s [3707/5474] TestEnumerable#test_count = 0.00 s 3186s [3708/5474] TestEnumerable#test_filter_map = 0.01 s 3186s [3709/5474] TestEnumerable#test_to_a_size_symbol = 0.00 s 3186s [3710/5474] TestEnumerable#test_slice_after1 = 0.00 s 3186s [3711/5474] TestEnumerable#test_to_a = 0.00 s 3186s [3712/5474] TestEnumerable#test_flat_map = 0.01 s 3186s [3713/5474] TestEnumerable#test_slice_when_2 = 0.00 s 3186s [3714/5474] TestEnumerable#test_slice_when_0 = 0.00 s 3186s [3715/5474] TestEnumerable#test_any = 0.01 s 3186s [3716/5474] TestEnumerable#test_to_a_keywords = 0.00 s 3186s [3717/5474] TestEnumerable#test_inject_array_plus = 0.00 s 3186s [3718/5474] TestEnumerable#test_compact = 0.00 s 3186s [3719/5474] TestEnumerable#test_find = 0.00 s 3197s [3720/5474] TestEnumerable#test_one_with_unused_block = 10.60 s 3197s [3721/5474] TestEnumerable#test_group_by = 0.01 s 3201s [3722/5474] TestEnumerable#test_reverse_each_memory_corruption = 3.56 s 3201s [3723/5474] TestEnumerable#test_to_a_size_infinity = 0.00 s 3201s [3724/5474] TestEnumerable#test_slice_when_contiguously_increasing_integers = 0.00 s 3201s [3725/5474] TestEnumerable#test_tally = 0.01 s 3201s [3726/5474] TestEnumerable#test_min_by = 0.01 s 3201s [3727/5474] TestEnumerable#test_map = 0.01 s 3201s [3728/5474] TestEnumerable#test_chunk = 0.01 s 3201s [3729/5474] TestEnumerable#test_slice_after_continuation_lines = 0.00 s 3201s [3730/5474] TestEnumerable#test_detect = 0.01 s 3201s [3731/5474] TestEnumerable#test_max = 0.00 s 3201s [3732/5474] TestEnumerable#test_range_sum = 0.00 s 3211s [3733/5474] TestEnumerable#test_all_with_unused_block = 10.31 s 3215s [3734/5474] TestEnumerable#test_inject_op_redefined = 4.43 s 3215s [3735/5474] TestEnumerable#test_sum = 0.07 s 3216s [3736/5474] TestEnumerable#test_minmax_by = 0.01 s 3216s [3737/5474] TestEnumerable#test_max_by = 0.00 s 3216s [3738/5474] TestEnumerable#test_take = 0.00 s 3216s [3739/5474] TestEnumerable#test_select = 0.01 s 3216s [3740/5474] TestEnumerable#test_reject = 0.00 s 3216s [3741/5474] TestEnumerable#test_slice_after_both_pattern_and_block = 0.00 s 3216s [3742/5474] TestEnumerable#test_partition = 0.00 s 3216s [3743/5474] TestEnumerable#test_slice_when_noblock = 0.00 s 3220s [3744/5474] TestEnumerable#test_inject_array_op_redefined = 4.14 s 3220s [3745/5474] TestEnumerable#test_each_with_index = 0.05 s 3220s [3746/5474] TestEnumerable#test_reverse_each = 0.00 s 3220s [3747/5474] TestEnumerable#test_inject_array_mul = 0.00 s 3224s [3748/5474] TestEnumerable#test_refine_Enumerable_then_include = 3.91 s 3224s [3749/5474] TestEnumerable#test_none = 0.01 s 3224s [3750/5474] TestLambdaParameters#test_proc_inside_lambda_inside_method_return_outside_lambda_outside_method = 0.01 s 3224s [3751/5474] TestLambdaParameters#test_instance_exec_return = 0.00 s 3224s [3752/5474] TestLambdaParameters#test_lambda_as_iterator = 0.00 s 3224s [3753/5474] TestLambdaParameters#test_not_orphan_return = 0.00 s 3224s [3754/5474] TestLambdaParameters#test_proc_inside_lambda_inside_method_return_inside_lambda_outside_method = 0.00 s 3224s [3755/5474] TestLambdaParameters#test_in_basic_object = 0.00 s 3224s [3756/5474] TestLambdaParameters#test_proc_inside_lambda_inside_method_return_outside_lambda_inside_method = 0.00 s 3224s [3757/5474] TestLambdaParameters#test_call_rest_args = 0.00 s 3224s [3758/5474] TestLambdaParameters#test_instance_eval_return = 0.00 s 3224s [3759/5474] TestLambdaParameters#test_call_opt_args = 0.01 s 3224s [3760/5474] TestLambdaParameters#test_proc_inside_lambda2_inside_method_return_outside_lambda1_inside_method = 0.00 s 3224s [3761/5474] TestLambdaParameters#test_call_simple = 0.00 s 3224s [3762/5474] TestLambdaParameters#test_break = 0.00 s 3224s [3763/5474] TestLambdaParameters#test_not_orphan_next = 0.00 s 3224s [3764/5474] TestLambdaParameters#test_instance_exec = 0.00 s 3224s [3765/5474] TestLambdaParameters#test_call_rest_and_opt = 0.00 s 3224s [3766/5474] TestLambdaParameters#test_arity_error = 0.00 s 3224s [3767/5474] TestLambdaParameters#test_proc_inside_lambda_inside_method_return_inside_lambda_inside_method = 0.00 s 3224s [3768/5474] TestLambdaParameters#test_not_orphan_break = 0.00 s 3228s [3769/5474] TestLambdaParameters#test_proc_inside_lambda_toplevel = 3.97 s 3228s [3770/5474] TestLambdaParameters#test_call_block_from_lambda = 0.00 s 3228s [3771/5474] TestLambdaParameters#test_return = 0.02 s 3228s [3772/5474] TestLambdaParameters#test_exact_parameter = 0.00 s 3228s [3773/5474] TestLambdaParameters#test_call_with_block = 0.00 s 3228s [3774/5474] TestWeakMap#test_key? = 0.02 s 3228s [3775/5474] TestWeakMap#test_member? = 0.01 s 3228s [3776/5474] TestWeakMap#test_frozen_object = 0.00 s 3228s [3777/5474] TestWeakMap#test_each_value = 0.00 s 3228s [3778/5474] TestWeakMap#test_inspect = 0.01 s 3228s [3779/5474] TestWeakMap#test_each_key = 0.00 s 3228s [3780/5474] TestWeakMap#test_aset_const = 0.00 s 3228s [3781/5474] TestWeakMap#test_map = 0.00 s 3228s [3782/5474] TestWeakMap#test_each = 0.00 s 3228s [3783/5474] TestWeakMap#test_length = 0.00 s 3228s [3784/5474] TestWeakMap#test_include? = 0.00 s 3228s [3785/5474] TestWeakMap#test_inspect_garbage = 0.27 s 3228s [3786/5474] TestWeakMap#test_size = 0.00 s 3228s [3787/5474] TestEncoding#test_marshal = 0.00 s 3228s [3788/5474] TestEncoding#test_enc_names = 0.01 s 3228s [3789/5474] TestEncoding#test_ascii_compatible_p = 0.00 s 3232s [3790/5474] TestEncoding#test_nonascii_library_path = 4.23 s 3232s [3791/5474] TestEncoding#test_encoding = 0.00 s 3232s [3792/5474] TestEncoding#test_compatible_p = 0.00 s 3232s [3793/5474] TestEncoding#test_name_list = 0.00 s 3232s [3794/5474] TestEncoding#test_singleton = 0.06 s 3237s [3795/5474] TestEncoding#test_find = 4.23 s 3237s [3796/5474] TestEncoding#test_aliases = 0.03 s 3237s [3797/5474] TestEncoding#test_dummy_p = 0.00 s 3241s [3798/5474] TestEncoding#test_errinfo_after_autoload = 4.10 s 3241s [3799/5474] TestRange#test_bsearch_for_float = 0.10 s 3241s [3800/5474] TestRange#test_first_last = 0.00 s 3241s [3801/5474] TestRange#test_marshal = 0.00 s 3243s [3802/5474] TestRange#test_range_bsearch_for_floats = 1.78 s 3243s [3803/5474] TestRange#test_cover = 0.01 s 3243s [3804/5474] TestRange#test_hash = 0.00 s 3243s [3805/5474] TestRange#test_each_no_blockarg = 0.00 s 3243s [3806/5474] TestRange#test_range_string = 0.00 s 3243s [3807/5474] TestRange#test_eq = 0.00 s 3243s [3808/5474] TestRange#test_inspect = 0.00 s 3243s [3809/5474] TestRange#test_min = 0.00 s 3243s [3810/5474] TestRange#test_minmax = 0.00 s 3243s [3811/5474] TestRange#test_range_symbol = 0.00 s 3243s [3812/5474] TestRange#test_duckrange = 0.00 s 3243s [3813/5474] TestRange#test_eql = 0.00 s 3243s [3814/5474] TestRange#test_bsearch_with_no_block = 0.00 s 3243s [3815/5474] TestRange#test_eqq_non_iteratable = 0.00 s 3243s [3816/5474] TestRange#test_begin_end = 0.00 s 3243s [3817/5474] TestRange#test_beg_len = 0.01 s 3243s [3818/5474] TestRange#test_cyclic_range_inspect = 0.00 s 3243s [3819/5474] TestRange#test_eqq_time = 0.00 s 3243s [3820/5474] TestRange#test_count = 0.00 s 3243s [3821/5474] TestRange#test_bsearch_typechecks_return_values = 0.01 s 3243s [3822/5474] TestRange#test_range_numeric_string = 0.00 s 3243s [3823/5474] TestRange#test_eqq_non_linear = 0.00 s 3243s [3824/5474] TestRange#test_percent_step = 0.00 s 3243s [3825/5474] TestRange#test_initialize_twice = 0.00 s 3243s [3826/5474] TestRange#test_bad_value = 0.00 s 3243s [3827/5474] TestRange#test_eqq = 0.00 s 3243s [3828/5474] TestRange#test_to_a = 0.00 s 3243s [3829/5474] TestRange#test_eqq_string = 0.00 s 3243s [3830/5474] TestRange#test_step = 0.03 s 3243s [3831/5474] TestRange#test_step_ruby_core_35753 = 0.00 s 3243s [3832/5474] TestRange#test_step_bug15537 = 0.00 s 3245s [3833/5474] TestRange#test_last_with_redefine_each = 2.66 s 3245s [3834/5474] TestRange#test_to_s = 0.00 s 3245s [3835/5474] TestRange#test_exclude_end = 0.00 s 3245s [3836/5474] TestRange#test_evaluation_order = 0.00 s 3245s [3837/5474] TestRange#test_each = 0.01 s 3245s [3838/5474] TestRange#test_max = 0.00 s 3245s [3839/5474] TestRange#test_include = 0.00 s 3245s [3840/5474] TestRange#test_bsearch_for_bignum = 0.02 s 3245s [3841/5474] TestRange#test_new = 0.00 s 3245s [3842/5474] TestRange#test_frozen_initialize = 0.00 s 3245s [3843/5474] TestRange#test_beginless_range_iteration = 0.00 s 3245s [3844/5474] TestRange#test_bsearch_for_fixnum = 0.05 s 3245s [3845/5474] TestRange#test_size = 0.00 s 3245s [3846/5474] TestRubyLiteral#test_dstring_encoding = 0.00 s 3245s [3847/5474] TestRubyLiteral#test_hash = 0.00 s 3245s [3848/5474] TestRubyLiteral#test_hash_frozen_key_id = 0.00 s 3245s [3849/5474] TestRubyLiteral#test_regexp = 0.00 s 3245s [3850/5474] TestRubyLiteral#test_special_const = 0.00 s 3252s [3851/5474] TestRubyLiteral#test_float = 6.77 s 3256s [3852/5474] TestRubyLiteral#test_dsymbol_redefined_intern = 3.60 s 3256s [3853/5474] TestRubyLiteral#test_frozen_string = 0.00 s 3256s [3854/5474] TestRubyLiteral#test_self = 0.00 s 3256s [3855/5474] TestRubyLiteral#test_hash_value_omission = 0.00 s 3256s [3856/5474] TestRubyLiteral#test_array = 0.00 s 3260s [3857/5474] TestRubyLiteral#test_big_hash_literal = 3.75 s 3260s [3858/5474] TestRubyLiteral#test_dsymbol = 0.00 s 3260s [3859/5474] TestRubyLiteral#test_dregexp = 0.00 s 3260s [3860/5474] TestRubyLiteral#test_frozen_string_in_array_literal = 0.00 s 3260s [3861/5474] TestRubyLiteral#test_xstring = 0.00 s 3260s [3862/5474] TestRubyLiteral#test_range = 0.00 s 3260s [3863/5474] TestRubyLiteral#test_hash_key_tampering = 0.00 s 3260s [3864/5474] TestRubyLiteral#test__FILE__ = 0.00 s 3260s [3865/5474] TestRubyLiteral#test__LINE__ = 0.00 s 3270s [3866/5474] TestRubyLiteral#test_big_array_and_hash_literal = 10.23 s 3270s [3867/5474] TestRubyLiteral#test_dstring = 0.00 s 3270s [3868/5474] TestPatternMatching#test_deconstruct_cache = 0.02 s 3270s [3869/5474] TestPatternMatching#test_experimental_warning = 0.00 s 3270s [3870/5474] TestPatternMatching#test_pin_operator_expr_pattern = 0.00 s 3270s [3871/5474] TestPatternMatching#test_constant_value_pattern = 0.00 s 3270s [3872/5474] TestPatternMatching#test_basic = 0.01 s 3270s [3873/5474] TestPatternMatching#test_deconstruct = 0.00 s 3270s [3874/5474] TestPatternMatching#test_alternative_pattern = 0.00 s 3270s [3875/5474] TestPatternMatching#test_nomatchingpatternerror = 0.00 s 3270s [3876/5474] TestPatternMatching#test_invalid_syntax = 0.00 s 3270s [3877/5474] TestPatternMatching#test_deconstruct_keys = 0.01 s 3270s [3878/5474] TestPatternMatching#test_struct = 0.01 s 3270s [3879/5474] TestPatternMatching#test_literal_value_pattern = 0.01 s 3270s [3880/5474] TestPatternMatching#test_pin_operator_value_pattern = 0.00 s 3270s [3881/5474] TestPatternMatching#test_one_line = 0.00 s 3270s [3882/5474] TestPatternMatching#test_as_pattern = 0.00 s 3270s [3883/5474] TestPatternMatching#test_array_pattern = 0.04 s 3270s [3884/5474] TestPatternMatching#test_modifier = 0.00 s 3270s [3885/5474] TestPatternMatching#test_paren = 0.00 s 3270s [3886/5474] TestMath#test_asin = 0.00 s 3270s [3887/5474] TestMath#test_bignum_to_f = 0.00 s 3270s [3888/5474] TestMath#test_sinh = 0.00 s 3270s [3889/5474] TestMath#test_exp = 0.00 s 3270s [3890/5474] TestMath#test_cosh = 0.00 s 3270s [3891/5474] TestMath#test_acos = 0.00 s 3270s [3892/5474] TestMath#test_erfc = 0.00 s 3270s [3893/5474] TestMath#test_cbrt = 0.00 s 3270s [3894/5474] TestMath#test_frexp = 0.00 s 3270s [3895/5474] TestMath#test_atan2 = 0.00 s 3270s [3896/5474] TestMath#test_override_bignum_to_f = 0.00 s 3270s [3897/5474] TestMath#test_tan = 0.00 s 3270s [3898/5474] TestMath#test_tanh = 0.00 s 3270s [3899/5474] TestMath#test_override_integer_to_f = 0.00 s 3270s [3900/5474] TestMath#test_hypot = 0.00 s 3270s [3901/5474] TestMath#test_override_rational_to_f = 0.00 s 3270s [3902/5474] TestMath#test_asinh = 0.00 s 3270s [3903/5474] TestMath#test_sqrt = 0.00 s 3270s [3904/5474] TestMath#test_fixnum_to_f = 0.00 s 3270s [3905/5474] TestMath#test_ldexp = 0.00 s 3270s [3906/5474] TestMath#test_cos = 0.00 s 3270s [3907/5474] TestMath#test_sin = 0.00 s 3270s [3908/5474] TestMath#test_log10 = 0.00 s 3270s [3909/5474] TestMath#test_acosh = 0.00 s 3270s [3910/5474] TestMath#test_log2 = 0.00 s 3270s [3911/5474] TestMath#test_log = 0.00 s 3270s [3912/5474] TestMath#test_lgamma = 0.00 s 3270s [3913/5474] TestMath#test_gamma = 0.01 s 3270s [3914/5474] TestMath#test_atan = 0.00 s 3270s [3915/5474] TestMath#test_erf = 0.01 s 3270s [3916/5474] TestMath#test_rational_to_f = 0.00 s 3270s [3917/5474] TestMath#test_atanh = 0.01 s 3270s [3918/5474] TestFile#test_realpath = 0.01 s 3270s [3919/5474] TestFile#test_chown = 0.00 s 3273s [3920/5474] TestFile#test_utime_with_minus_time_segv = 3.06 s 3273s [3921/5474] TestFile#test_realpath_special_symlink = 0.00 s 3273s [3922/5474] TestFile#test_uninitialized = 0.00 s 3273s [3923/5474] TestFile#test_truncate_beyond_eof = 0.00 s 3273s [3924/5474] TestFile#test_truncate_size = 0.02 s 3273s [3925/5474] TestFile#test_eof_0_seek = 0.00 s 3273s [3926/5474] TestFile#test_absolute_path? = 0.00 s 3273s [3927/5474] TestFile#test_getc_extended_file = 0.01 s 3273s [3928/5474] TestFile#test_gets_extended_file = 0.01 s 3273s [3929/5474] TestFile#test_eof_1 = 0.01 s 3273s [3930/5474] TestFile#test_s_chown = 0.00 s 3273s [3931/5474] TestFile#test_eof_3 = 0.00 s 3273s [3932/5474] TestFile#test_getbyte_extended_file = 0.01 s 3273s [3933/5474] TestFile#test_bom_8 = 0.00 s 3273s [3934/5474] TestFile#test_eof_2 = 0.00 s 3273s [3935/5474] TestFile#test_eof_0 = 0.00 s 3273s [3936/5474] TestFile#test_read_all_extended_file = 0.00 s 3273s [3937/5474] TestFile#test_bom_32be = 0.01 s 3273s [3938/5474] TestFile#test_eof_1_seek = 0.00 s 3273s [3939/5474] TestFile#test_each_byte_extended_file = 0.01 s 3273s [3940/5474] TestFile#test_stat_inode = 0.00 s 3273s [3941/5474] TestFile#test_file_share_delete = 0.00 s 3273s [3942/5474] TestFile#test_chmod_m17n = 0.00 s 3273s [3943/5474] TestFile#test_open_tempfile_path = 0.00 s 3273s [3944/5474] TestFile#test_unlink_before_close = 0.00 s 3273s [3945/5474] TestFile#test_gets_para_extended_file = 0.01 s 3273s [3946/5474] TestFile#test_conflicting_encodings = 0.00 s 3273s [3947/5474] TestFile#test_file_open_double_mode = 0.00 s 3273s [3948/5474] TestFile#test_bom_16le = 0.00 s 3273s [3949/5474] TestFile#test_file_open_permissions = 0.00 s 3273s [3950/5474] TestFile#test_realpath_encoding = 0.00 s 3273s [3951/5474] TestFile#test_open_nul = 0.00 s 3273s [3952/5474] TestFile#test_bom_32le = 0.00 s 3273s [3953/5474] TestFile#test_realdirpath = 0.00 s 3273s [3954/5474] TestFile#test_empty_file_bom = 0.00 s 3273s [3955/5474] TestFile#test_truncate_wbuf = 0.00 s 3273s [3956/5474] TestFile#test_utime = 0.00 s 3273s [3957/5474] TestFile#test_bom_16be = 0.00 s 3273s [3958/5474] TestFile#test_each_char_extended_file = 0.01 s 3273s [3959/5474] TestFile#test_truncate_rbuf = 0.00 s 3273s [3960/5474] TestFile#test_eof_0_rw = 0.00 s 3278s [3961/5474] TestSleep#test_sleep_5sec = 5.00 s 3278s [3962/5474] TestSystem#test_empty_evstr = 0.00 s 3278s [3963/5474] TestSystem#test_system_at = 0.00 s 3278s [3964/5474] TestSystem#test_system_redirect_win = 0.00 s 3278s [3965/5474] TestTrace#test_trace = 0.00 s 3278s [3966/5474] TestTrace#test_trace_proc_that_raises_exception = 0.00 s 3278s [3967/5474] TestVMDump#test_darwin_invalid_access = 0.00 s 3278s [3968/5474] TestVMDump#test_darwin_segv_in_syscall = 0.00 s 3278s [3969/5474] TestVMDump#test_darwin_invalid_call = 0.00 s 3278s [3970/5474] TestHash#test_rehash = 0.00 s 3278s [3971/5474] TestHash#test_dup_equality = 0.00 s 3278s [3972/5474] TestHash#test_except_on_identhash = 0.00 s 3278s [3973/5474] TestHash#test_clear_initialize_copy = 0.00 s 3278s [3974/5474] TestHash#test_reject_on_identhash = 0.00 s 3278s [3975/5474] TestHash#test_initialize_wrong_arguments = 0.00 s 3278s [3976/5474] TestHash#test_s_AREF_frozen_key_id = 0.00 s 3278s [3977/5474] TestHash#test_dig_with_respond_to = 0.00 s 3278s [3978/5474] TestHash#test_recursive_hash_value_array = 0.00 s 3278s [3979/5474] TestHash#test_shift2 = 0.00 s 3278s [3980/5474] TestHash#test_key? = 0.00 s 3278s [3981/5474] TestHash#test_transform_values_bang = 0.00 s 3278s [3982/5474] TestHash#test_to_h_block = 0.00 s 3278s [3983/5474] TestHash#test_delete_if = 0.01 s 3278s [3984/5474] TestHash#test_ruby2_keywords_hash? = 0.00 s 3278s [3985/5474] TestHash#test_select! = 0.00 s 3278s [3986/5474] TestHash#test_update4 = 0.00 s 3278s [3987/5474] TestHash#test_hash = 0.00 s 3278s [3988/5474] TestHash#test_cmp = 0.00 s 3278s [3989/5474] TestHash#test_update2 = 0.00 s 3278s [3990/5474] TestHash#test_slice_on_identhash = 0.00 s 3278s [3991/5474] TestHash#test_bad_initialize_copy = 0.00 s 3278s [3992/5474] TestHash#test_flatten_arity = 0.00 s 3278s [3993/5474] TestHash#test_dig = 0.00 s 3278s [3994/5474] TestHash#test_fetch2 = 0.01 s 3278s [3995/5474] TestHash#test_empty? = 0.00 s 3278s [3996/5474] TestHash#test_select_on_identhash = 0.00 s 3278s [3997/5474] TestHash#test_threaded_iter_level = 0.00 s 3278s [3998/5474] TestHash#test_each_pair = 0.00 s 3278s [3999/5474] TestHash#test_rehash2 = 0.00 s 3278s [4000/5474] TestHash#test_inverse_hash = 0.01 s 3278s [4001/5474] TestHash#test_to_h_default_proc = 0.00 s 3278s [4002/5474] TestHash#test_member? = 0.00 s 3278s [4003/5474] TestHash#test_update = 0.00 s 3278s [4004/5474] TestHash#test_to_proc = 0.00 s 3278s [4005/5474] TestHash#test_value? = 0.00 s 3278s [4006/5474] TestHash#test_transform_keys = 0.00 s 3278s [4007/5474] TestHash#test_huge_iter_level = 0.01 s 3278s [4008/5474] TestHash#test_default= = 0.00 s 3278s [4009/5474] TestHash#test_each_value = 0.00 s 3278s [4010/5474] TestHash#test_dup = 0.01 s 3278s [4011/5474] TestHash#test_values_at = 0.00 s 3278s [4012/5474] TestHash#test_ar2st = 0.01 s 3278s [4013/5474] TestHash#test_hash_aset_fstring_identity = 0.00 s 3278s [4014/5474] TestHash#test_merge = 0.00 s 3278s [4015/5474] TestHash#test_hash_popped = 0.00 s 3278s [4016/5474] TestHash#test_except = 0.00 s 3278s [4017/5474] TestHash#test_clear = 0.00 s 3278s [4018/5474] TestHash#test_merge! = 0.00 s 3278s [4019/5474] TestHash#test_ASET = 0.00 s 3278s [4020/5474] TestHash#test_hash2 = 0.00 s 3278s [4021/5474] TestHash#test_assoc = 0.00 s 3278s [4022/5474] TestHash#test_sort = 0.00 s 3278s [4023/5474] TestHash#test_s_AREF_from_list = 0.00 s 3278s [4024/5474] TestHash#test_key2? = 0.00 s 3278s [4025/5474] TestHash#test_invert = 0.00 s 3278s [4026/5474] TestHash#test_create = 0.00 s 3278s [4027/5474] TestHash#test_same_key = 0.00 s 3278s [4028/5474] TestHash#test_flatten = 0.00 s 3278s [4029/5474] TestHash#test_key = 0.00 s 3278s [4030/5474] TestHash#test_hash_bignum_hash = 0.00 s 3278s [4031/5474] TestHash#test_label_syntax = 0.00 s 3278s [4032/5474] TestHash#test_to_h = 0.00 s 3278s [4033/5474] TestHash#test_select_reject_will_not_rehash = 0.00 s 3278s [4034/5474] TestHash#test_reject! = 0.00 s 3278s [4035/5474] TestHash#test_cmp_samekeys = 0.00 s 3278s [4036/5474] TestHash#test_transform_keys_on_identhash = 0.00 s 3278s [4037/5474] TestHash#test_wrapper = 0.00 s 3278s [4038/5474] TestHash#test_delete = 0.00 s 3278s [4039/5474] TestHash#test_clear2 = 0.00 s 3278s [4040/5474] TestHash#test_reject_bang2 = 0.00 s 3278s [4041/5474] TestHash#test_size2 = 0.00 s 3278s [4042/5474] TestHash#test_ruby2_keywords_hash = 0.00 s 3278s [4043/5474] TestHash#test_default = 0.00 s 3278s [4044/5474] TestHash#test_self_initialize_copy = 0.00 s 3278s [4045/5474] TestHash#test_nil_to_h = 0.00 s 3278s [4046/5474] TestHash#test_value2? = 0.00 s 3278s [4047/5474] TestHash#test_to_hash = 0.00 s 3278s [4048/5474] TestHash#test_try_convert = 0.00 s 3278s [4049/5474] TestHash#test_s_AREF_key_tampering = 0.00 s 3278s [4050/5474] TestHash#test_replace_bug15358 = 0.00 s 3278s [4051/5474] TestHash#test_transform_keys_bang = 0.00 s 3278s [4052/5474] TestHash#test_each_key = 0.00 s 3278s [4053/5474] TestHash#test_ASET_fstring_key = 0.00 s 3278s [4054/5474] TestHash#test_to_a = 0.00 s 3278s [4055/5474] TestHash#test_merge_on_identhash = 0.00 s 3278s [4056/5474] TestHash#test_filter! = 0.00 s 3278s [4057/5474] TestHash#test_s_AREF_from_hash = 0.00 s 3278s [4058/5474] TestHash#test_dup_will_not_rehash = 0.00 s 3278s [4059/5474] TestHash#test_compare_by_identity = 0.00 s 3278s [4060/5474] TestHash#test_keys = 0.00 s 3278s [4061/5474] TestHash#test_compact = 0.00 s 3278s [4062/5474] TestHash#test_fetch = 0.00 s 3278s [4063/5474] TestHash#test_recursive_key = 0.00 s 3278s [4064/5474] TestHash#test_slice = 0.00 s 3278s [4065/5474] TestHash#test_hash_aref_fstring_identity = 0.00 s 3278s [4066/5474] TestHash#test_s_new = 0.00 s 3278s [4067/5474] TestHash#test_recursive_hash_value_array_hash = 0.00 s 3278s [4068/5474] TestHash#test_to_s = 0.00 s 3278s [4069/5474] TestHash#test_hash_hash = 0.00 s 3278s [4070/5474] TestHash#test_ASET_fstring_non_literal_key = 0.00 s 3278s [4071/5474] TestHash#test_assoc_compare_by_identity = 0.00 s 3279s [4072/5474] TestHash#test_broken_hash_value = 1.03 s 3279s [4073/5474] TestHash#test_replace = 0.00 s 3279s [4074/5474] TestHash#test_replace2 = 0.00 s 3279s [4075/5474] TestHash#test_keep_if = 0.00 s 3279s [4076/5474] TestHash#test_to_h_default_value = 0.00 s 3279s [4077/5474] TestHash#test_equal2 = 0.00 s 3279s [4078/5474] TestHash#test_s_AREF_from_pairs = 0.00 s 3279s [4079/5474] TestHash#test_transform_values_on_identhash = 0.00 s 3279s [4080/5474] TestHash#test_replace_bug9230 = 0.00 s 3279s [4081/5474] TestHash#test_store = 0.00 s 3279s [4082/5474] TestHash#test_values = 0.00 s 3279s [4083/5474] TestHash#test_EQUAL = 0.00 s 3279s [4084/5474] TestHash#test_fetch_values = 0.00 s 3279s [4085/5474] TestHash#test_filter = 0.01 s 3279s [4086/5474] TestHash#test_update3 = 0.00 s 3279s [4087/5474] TestHash#test_shift_none = 0.00 s 3279s [4088/5474] TestHash#test_default_proc = 0.00 s 3279s [4089/5474] TestHash#test_update5 = 0.00 s 3279s [4090/5474] TestHash#test_reserved_hash_val = 0.00 s 3279s [4091/5474] TestHash#test_each = 0.00 s 3279s [4092/5474] TestHash#test_length = 0.00 s 3279s [4093/5474] TestHash#test_shift = 0.00 s 3279s [4094/5474] TestHash#test_recursive_hash_value_struct = 0.00 s 3279s [4095/5474] TestHash#test_AREF = 0.00 s 3279s [4096/5474] TestHash#test_include? = 0.00 s 3280s [4097/5474] TestHash#test_clone = 0.00 s 3280s [4098/5474] TestHash#test_select = 0.01 s 3280s [4099/5474] TestHash#test_bug_12706 = 0.00 s 3280s [4100/5474] TestHash#test_reject = 0.01 s 3280s [4101/5474] TestHash#test_recursive_hash_value_hash_array = 0.00 s 3280s [4102/5474] TestHash#test_rassoc = 0.00 s 3280s [4103/5474] TestHash#test_to_h_instance_variable = 0.00 s 3280s [4104/5474] TestHash#test_s_AREF_duplicated_key = 0.00 s 3280s [4105/5474] TestHash#test_transform_values = 0.00 s 3280s [4106/5474] TestHash#test_size = 0.00 s 3280s [4107/5474] TestModule#test_visibility_after_multiple_refine_and_visibility_change_with_superclass = 0.00 s 3282s [4108/5474] TestModule#test_toplevel_private_constant = 2.57 s 3282s [4109/5474] TestModule#test_freeze = 0.00 s 3284s [4110/5474] TestModule#test_constant_lookup_in_method_defined_by_class_eval = 2.42 s 3285s [4111/5474] TestModule#test_private_constant_const_missing = 0.01 s 3285s [4112/5474] TestModule#test_prepend_class_ancestors = 0.00 s 3285s [4113/5474] TestModule#test_send = 0.00 s 3289s [4114/5474] TestModule#test_inspect_segfault = 4.00 s 3289s [4115/5474] TestModule#test_prepend = 0.07 s 3289s [4116/5474] TestModule#test_leading_colons = 0.00 s 3293s [4117/5474] TestModule#test_include_toplevel = 4.34 s 3293s [4118/5474] TestModule#test_alias_method = 0.02 s 3293s [4119/5474] TestModule#test_append_features = 0.01 s 3293s [4120/5474] TestModule#test_instance_methods = 0.01 s 3293s [4121/5474] TestModule#test_LT = 0.00 s 3293s [4122/5474] TestModule#test_prepend_included_modules = 0.01 s 3293s [4123/5474] TestModule#test_const_get = 0.00 s 3293s [4124/5474] TestModule#test_extend_module_with_protected_bmethod = 0.00 s 3293s [4125/5474] TestModule#test_VERY_EQUAL = 0.00 s 3293s [4126/5474] TestModule#test_frozen_visibility = 0.01 s 3293s [4127/5474] TestModule#test_uninitialized_attr = 0.01 s 3293s [4128/5474] TestModule#test_prepend_CMP = 0.00 s 3293s [4129/5474] TestModule#test_GT_0 = 0.00 s 3293s [4130/5474] TestModule#test_private_constant_in_module = 0.01 s 3293s [4131/5474] TestModule#test_const_set = 0.00 s 3293s [4132/5474] TestModule#test_prepend_singleton_methods = 0.00 s 3293s [4133/5474] TestModule#test_method_added = 0.02 s 3293s [4134/5474] TestModule#test_prepend_private_super = 0.00 s 3293s [4135/5474] TestModule#test_nested_get_symbol = 0.00 s 3296s [4136/5474] TestModule#test_constant_lookup_in_toplevel_class_eval = 2.55 s 3296s [4137/5474] TestModule#test_nested_get_bad_class = 0.00 s 3296s [4138/5474] TestModule#test_private_class_method = 0.00 s 3296s [4139/5474] TestModule#test_class_eval = 0.01 s 3296s [4140/5474] TestModule#test_accidental_singleton_naming_with_class = 0.00 s 3296s [4141/5474] TestModule#test_clone_freeze = 0.00 s 3296s [4142/5474] TestModule#test_prepend_remove_method = 0.00 s 3296s [4143/5474] TestModule#test_prepend_each_classes = 0.00 s 3296s [4144/5474] TestModule#test_public_methods = 0.00 s 3296s [4145/5474] TestModule#test_append_features_type_error = 0.00 s 3296s [4146/5474] TestModule#test_visibility_after_multiple_refine_and_visibility_change_with_origin_class = 0.00 s 3296s [4147/5474] TestModule#test_public_include = 0.00 s 3296s [4148/5474] TestModule#test_GT = 0.00 s 3296s [4149/5474] TestModule#test_return_value_of_define_singleton_method = 0.00 s 3296s [4150/5474] TestModule#test_public_instance_methods = 0.00 s 3296s [4151/5474] TestModule#test_included_modules = 0.00 s 3296s [4152/5474] TestModule#test_cyclic_include = 0.00 s 3296s [4153/5474] TestModule#test_singleton_constants = 0.00 s 3296s [4154/5474] TestModule#test_prepend_instance_methods = 0.00 s 3296s [4155/5474] TestModule#test_uninitialized_toplevel_constant = 0.01 s 3296s [4156/5474] TestModule#test_bad_constants_defined = 0.01 s 3296s [4157/5474] TestModule#test_dup = 0.00 s 3296s [4158/5474] TestModule#test_nonascii_name = 0.00 s 3296s [4159/5474] TestModule#test_s_nesting = 0.00 s 3296s [4160/5474] TestModule#test_private_constant_in_class = 0.00 s 3296s [4161/5474] TestModule#test_s_protected = 0.00 s 3296s [4162/5474] TestModule#test_method_defined? = 0.01 s 3296s [4163/5474] TestModule#test_attr_inherited_visibility = 0.00 s 3300s [4164/5474] TestModule#test_refine_module_then_include = 4.17 s 3300s [4165/5474] TestModule#test_prepend_after_include = 0.11 s 3300s [4166/5474] TestModule#test_public_class_method = 0.02 s 3303s [4167/5474] TestModule#test_constant_lookup_in_module_in_class_eval = 3.07 s 3306s [4168/5474] TestModule#test_alias = 2.73 s 3306s [4169/5474] TestModule#test_s_public = 0.00 s 3306s [4170/5474] TestModule#test_remove_const = 0.04 s 3306s [4171/5474] TestModule#test_nested_defined_symbol = 0.02 s 3306s [4172/5474] TestModule#test_const_defined? = 0.00 s 3306s [4173/5474] TestModule#test_class_variable_defined = 0.02 s 3306s [4174/5474] TestModule#test_append_features_raise = 0.01 s 3306s [4175/5474] TestModule#test_prepend_in_superclass = 0.00 s 3306s [4176/5474] TestModule#test_remove_class_variable = 0.00 s 3306s [4177/5474] TestModule#test_nested_get_const_missing = 0.02 s 3309s [4178/5474] TestModule#test_s_constants = 2.99 s 3309s [4179/5474] TestModule#test_prepend_inheritance = 0.02 s 3309s [4180/5474] TestModule#test_module_exec = 0.02 s 3325s [4181/5474] TestModule#test_private_top_methods = 16.34 s 3325s [4182/5474] TestModule#test_include_into_module_already_included = 0.03 s 3328s [4183/5474] TestModule#test_private_constants_clear_inlinecache = 2.58 s 3328s [4184/5474] TestModule#test_visibility_by_public_class_method = 0.00 s 3331s [4185/5474] TestModule#test_const_get_no_inherited = 2.60 s 3331s [4186/5474] TestModule#test_singleton_class_ancestors = 0.00 s 3331s [4187/5474] TestModule#test_method_undefined = 0.00 s 3331s [4188/5474] TestModule#test_constants_with_private_constant = 0.00 s 3331s [4189/5474] TestModule#test_extend_module_with_protected_method = 0.00 s 3331s [4190/5474] TestModule#test_prepend_visibility = 0.00 s 3331s [4191/5474] TestModule#test_frozen_module = 0.00 s 3331s [4192/5474] TestModule#test_nested_defined_inheritance = 0.00 s 3331s [4193/5474] TestModule#test_define_method_with_unbound_method = 0.00 s 3331s [4194/5474] TestModule#test_name = 0.00 s 3331s [4195/5474] TestModule#test_method_defined = 0.01 s 3331s [4196/5474] TestModule#test_const_get_evaled = 0.00 s 3331s [4197/5474] TestModule#test_const_source_location = 0.01 s 3331s [4198/5474] TestModule#test_CMP_0 = 0.00 s 3331s [4199/5474] TestModule#test_visibility_after_refine_and_visibility_change_with_superclass = 0.00 s 3331s [4200/5474] TestModule#test_prepend_self = 0.00 s 3331s [4201/5474] TestModule#test_class_variables = 0.00 s 3331s [4202/5474] TestModule#test_dup_anonymous = 0.00 s 3331s [4203/5474] TestModule#test_included = 0.00 s 3331s [4204/5474] TestModule#test_private_constant2 = 0.00 s 3331s [4205/5474] TestModule#test_prepend_no_duplication = 0.00 s 3331s [4206/5474] TestModule#test_uninitialized_attr_class = 0.00 s 3334s [4207/5474] TestModule#test_prepend_call_super = 3.87 s 3334s [4208/5474] TestModule#test_include_super_in_alias = 0.00 s 3334s [4209/5474] TestModule#test_ancestors = 0.00 s 3334s [4210/5474] TestModule#test_export_method = 0.00 s 3342s [4211/5474] TestModule#test_undef = 7.82 s 3342s [4212/5474] TestModule#test_s_new = 0.00 s 3342s [4213/5474] TestModule#test_frozen_class = 0.00 s 3346s [4214/5474] TestModule#test_prepend_optmethod = 3.76 s 3346s [4215/5474] TestModule#test_prepend_super_in_alias = 0.01 s 3346s [4216/5474] TestModule#test_protected_instance_methods = 0.00 s 3346s [4217/5474] TestModule#test_public_constant = 0.00 s 3351s [4218/5474] TestModule#test_gc_prepend_chain = 4.47 s 3354s [4219/5474] TestModule#test_prepend_visibility_inherited = 3.82 s 3354s [4220/5474] TestModule#test_nested_defined_bad_class = 0.01 s 3354s [4221/5474] TestModule#test_visibility_after_multiple_refine_and_visibility_change_without_origin_class = 0.00 s 3354s [4222/5474] TestModule#test_prepend_module_with_no_args = 0.00 s 3358s [4223/5474] TestModule#test_private_extended_module = 3.94 s 3358s [4224/5474] TestModule#test_visibility_after_refine_and_visibility_change_without_origin_class = 0.05 s 3358s [4225/5474] TestModule#test_method_defined_without_include_super = 0.01 s 3358s [4226/5474] TestModule#test_method_removed = 0.01 s 3358s [4227/5474] TestModule#test_module_subclass_initialize = 0.02 s 3358s [4228/5474] TestModule#test_include_p = 0.00 s 3358s [4229/5474] TestModule#test_attr_public_at_toplevel = 0.02 s 3358s [4230/5474] TestModule#test_const_defined_invalid_name = 0.00 s 3358s [4231/5474] TestModule#test_mod_constants = 0.00 s 3361s [4232/5474] TestModule#test_const_get_inherited = 2.57 s 3365s [4233/5474] TestModule#test_redefine_optmethod_after_prepend = 4.16 s 3365s [4234/5474] TestModule#test_s_private = 0.03 s 3365s [4235/5474] TestModule#test_module_name_in_singleton_method = 0.00 s 3365s [4236/5474] TestModule#test_include_with_no_args = 0.00 s 3365s [4237/5474] TestModule#test_uninitialized_attr_non_object = 0.01 s 3365s [4238/5474] TestModule#test_cyclic_prepend = 0.00 s 3365s [4239/5474] TestModule#test_private_instance_methods = 0.00 s 3365s [4240/5474] TestModule#test_visibility_after_refine_and_visibility_change_with_origin_class = 0.02 s 3365s [4241/5474] TestModule#test_module_eval = 0.00 s 3365s [4242/5474] TestModule#test_uninitialized_instance_variable = 0.01 s 3365s [4243/5474] TestModule#test_public_prepend = 0.00 s 3365s [4244/5474] TestModule#test_LE = 0.00 s 3365s [4245/5474] TestModule#test_class_variable_get = 0.00 s 3370s [4246/5474] TestModule#test_prepend_gc = 4.26 s 3370s [4247/5474] TestModule#test_accidental_singleton_naming_with_module = 0.04 s 3370s [4248/5474] TestModule#test_visibility_method_return_value = 0.02 s 3373s [4249/5474] TestModule#test_override_optmethod_after_prepend = 3.81 s 3376s [4250/5474] TestModule#test_top_public_private = 3.01 s 3376s [4251/5474] TestModule#test_included_modules_with_prepend = 0.01 s 3376s [4252/5474] TestModule#test_class_variable_set = 0.03 s 3377s [4253/5474] TestModule#test_attr_obsoleted_flag = 0.03 s 3377s [4254/5474] TestModule#test_prepend_module_ancestors = 0.05 s 3382s [4255/5474] TestModule#test_const_in_module = 5.41 s 3382s [4256/5474] TestModule#test_bad_constants_get = 0.04 s 3382s [4257/5474] TestModule#test_CMP = 0.00 s 3382s [4258/5474] TestModule#test_frozen_singleton_class = 0.00 s 3382s [4259/5474] TestModule#test_constants = 0.00 s 3382s [4260/5474] TestModule#test_extend_module_with_no_args = 0.00 s 3382s [4261/5474] TestModule#test_prepend_instance_methods_false = 0.00 s 3382s [4262/5474] TestModule#test_attr_writer_with_no_arguments = 0.00 s 3382s [4263/5474] TestModule#test_return_value_of_define_method = 0.00 s 3382s [4264/5474] TestModule#test_GE = 0.00 s 3382s [4265/5474] TestModule#test_LT_0 = 0.00 s 3382s [4266/5474] TestM17N#test_squeeze = 0.00 s 3382s [4267/5474] TestM17N#test_empty_string = 0.00 s 3382s [4268/5474] TestM17N#test_count_sjis_trailing_byte = 0.00 s 3386s [4269/5474] TestM17N#test_utf_16_32_inspect(UTF-32BE) = 4.25 s 3386s [4270/5474] TestM17N#test_quote = 0.02 s 3386s [4271/5474] TestM17N#test_dynamic_ascii_regexp = 0.03 s 3386s [4272/5474] TestM17N#test_sub = 0.01 s 3386s [4273/5474] TestM17N#test_marshal = 0.01 s 3386s [4274/5474] TestM17N#test_reverse = 0.00 s 3386s [4275/5474] TestM17N#test_dynamic_eucjp_regexp = 0.01 s 3386s [4276/5474] TestM17N#test_regexp_ascii = 0.01 s 3386s [4277/5474] TestM17N#test_utf_16_32_inspect(UTF-32LE-BOM) = 0.00 s 3386s [4278/5474] TestM17N#test_each_char = 0.00 s 3386s [4279/5474] TestM17N#test_dup_aref = 0.00 s 3386s [4280/5474] TestM17N#test_valid_encoding = 0.00 s 3386s [4281/5474] TestM17N#test_utf_16_32_ord(UTF-16LE) = 0.00 s 3386s [4282/5474] TestM17N#test_nil_inspect = 0.00 s 3386s [4283/5474] TestM17N#test_gsub = 0.00 s 3386s [4284/5474] TestM17N#test_tr_s = 0.00 s 3386s [4285/5474] TestM17N#test_str_String = 0.00 s 3386s [4286/5474] TestM17N#test_escaped_metachar = 0.01 s 3386s [4287/5474] TestM17N#test_object_inspect_external = 0.01 s 3386s [4288/5474] TestM17N#test_hash_to_s = 0.00 s 3386s [4289/5474] TestM17N#test_str_aref = 0.00 s 3386s [4290/5474] TestM17N#test_regexp_embed = 0.00 s 3391s [4291/5474] TestM17N#test_utf_16_32_inspect(UTF-16BE) = 4.15 s 3391s [4292/5474] TestM17N#test_str_lt = 0.01 s 3391s [4293/5474] TestM17N#test_sprintf_p = 0.04 s 3391s [4294/5474] TestM17N#test_symbol_op = 0.01 s 3391s [4295/5474] TestM17N#test_split = 0.02 s 3391s [4296/5474] TestM17N#test_validate_redundant_utf8 = 0.02 s 3391s [4297/5474] TestM17N#test_aset = 0.00 s 3391s [4298/5474] TestM17N#test_magic_comment_at_various_positions = 0.01 s 3391s [4299/5474] TestM17N#test_regexp_source = 0.00 s 3391s [4300/5474] TestM17N#test_utf_16_32_inspect(UTF-32BE-BOM) = 0.00 s 3391s [4301/5474] TestM17N#test_scrub_replace_argument = 0.01 s 3391s [4302/5474] TestM17N#test_utf_16_32_ord(UTF-32LE) = 0.00 s 3391s [4303/5474] TestM17N#test_string_eucjp_literal = 0.00 s 3391s [4304/5474] TestM17N#test_fixnum_to_s = 0.00 s 3391s [4305/5474] TestM17N#test_regexp_embed_preprocess = 0.00 s 3391s [4306/5474] TestM17N#test_str_allocate = 0.00 s 3391s [4307/5474] TestM17N#test_str_center = 0.00 s 3391s [4308/5474] TestM17N#test_scrub_bang = 0.00 s 3391s [4309/5474] TestM17N#test_str_multiply = 0.00 s 3391s [4310/5474] TestM17N#test_utf_16_32_inspect(UTF-16BE-BOM) = 0.00 s 3391s [4311/5474] TestM17N#test_magic_comment_vim = 0.00 s 3391s [4312/5474] TestM17N#test_getbyte = 0.00 s 3391s [4313/5474] TestM17N#test_env = 0.00 s 3391s [4314/5474] TestM17N#test_sub3 = 0.00 s 3391s [4315/5474] TestM17N#test_regexp_unicode = 0.01 s 3391s [4316/5474] TestM17N#test_union_1_nonascii_string = 0.00 s 3391s [4317/5474] TestM17N#test_nil_to_s = 0.00 s 3391s [4318/5474] TestM17N#test_scrub_widechar = 0.00 s 3391s [4319/5474] TestM17N#test_combchar_codepoint = 0.00 s 3391s [4320/5474] TestM17N#test_euc_tw = 0.00 s 3391s [4321/5474] TestM17N#test_chr = 0.01 s 3391s [4322/5474] TestM17N#test_str_concat = 0.00 s 3391s [4323/5474] TestM17N#test_utf_16_32_codepoints(UTF-16LE) = 0.00 s 3391s [4324/5474] TestM17N#test_setbyte_range = 0.00 s 3391s [4325/5474] TestM17N#test_plus = 0.00 s 3391s [4326/5474] TestM17N#test_scan = 0.00 s 3391s [4327/5474] TestM17N#test_regexp_too_short_multibyte_character = 0.01 s 3391s [4328/5474] TestM17N#test_dynamic_sjis_regexp = 0.01 s 3391s [4329/5474] TestM17N#test_regexp_ascii_none = 0.00 s 3391s [4330/5474] TestM17N#test_gbk = 0.00 s 3391s [4331/5474] TestM17N#test_utf_16_32_inspect(UTF-16LE-BOM) = 0.00 s 3391s [4332/5474] TestM17N#test_regexp_property = 0.01 s 3391s [4333/5474] TestM17N#test_chomp = 0.00 s 3391s [4334/5474] TestM17N#test_string_inspect_invalid = 0.00 s 3391s [4335/5474] TestM17N#test_dynamic_utf8_regexp = 0.01 s 3391s [4336/5474] TestM17N#test_insert = 0.00 s 3391s [4337/5474] TestM17N#test_delete = 0.00 s 3391s [4338/5474] TestM17N#test_count = 0.00 s 3391s [4339/5474] TestM17N#test_regexp_generic = 0.00 s 3391s [4340/5474] TestM17N#test_array_to_s = 0.00 s 3391s [4341/5474] TestM17N#test_setbyte = 0.00 s 3391s [4342/5474] TestM17N#test_utf_16_32_codepoints(UTF-32LE) = 0.00 s 3391s [4343/5474] TestM17N#test_string_inspect_encoding = 0.01 s 3391s [4344/5474] TestM17N#test_utf8str_aref = 0.00 s 3391s [4345/5474] TestM17N#test_upto = 0.00 s 3391s [4346/5474] TestM17N#test_greek_capital_gap = 0.00 s 3391s [4347/5474] TestM17N#test_regexp_match = 0.00 s 3391s [4348/5474] TestM17N#test_str_aref_force_encoding = 0.00 s 3391s [4349/5474] TestM17N#test_utf_16_32_codepoints(UTF-32BE) = 0.00 s 3391s [4350/5474] TestM17N#test_scrub_replace_block = 0.00 s 3391s [4351/5474] TestM17N#test_next = 0.02 s 3391s [4352/5474] TestM17N#test_string_ascii_literal = 0.00 s 3391s [4353/5474] TestM17N#test_encoding_to_s = 0.00 s 3391s [4354/5474] TestM17N#test_begin_end_offset = 0.00 s 3391s [4355/5474] TestM17N#test_magic_comment = 0.00 s 3391s [4356/5474] TestM17N#test_union_1_asciionly_string = 0.01 s 3391s [4357/5474] TestM17N#test_compatible = 0.00 s 3391s [4358/5474] TestM17N#test_str_aref_substr = 0.00 s 3391s [4359/5474] TestM17N#test_encoding_find = 0.00 s 3391s [4360/5474] TestM17N#test_utf_16_32_codepoints(UTF-16BE) = 0.00 s 3391s [4361/5474] TestM17N#test_union_1_regexp = 0.01 s 3391s [4362/5474] TestM17N#test_scrub_dummy_encoding = 0.00 s 3391s [4363/5474] TestM17N#test_sub2 = 0.00 s 3391s [4364/5474] TestM17N#test_reverse_bang = 0.00 s 3391s [4365/5474] TestM17N#test_regexp_usascii = 0.02 s 3391s [4366/5474] TestM17N#test_regexp_windows_31j = 0.00 s 3391s [4367/5474] TestM17N#test_str_aref_len = 0.00 s 3391s [4368/5474] TestM17N#test_utf_without_bom_valid = 0.00 s 3391s [4369/5474] TestM17N#test_false_to_s = 0.00 s 3391s [4370/5474] TestM17N#test_tr = 0.00 s 3395s [4371/5474] TestM17N#test_utf_16_32_inspect(UTF-16LE) = 3.84 s 3395s [4372/5474] TestM17N#test_force_encoding = 0.00 s 3395s [4373/5474] TestM17N#test_bignum_to_s = 0.00 s 3395s [4374/5474] TestM17N#test_regexp_mixed_unicode = 0.02 s 3395s [4375/5474] TestM17N#test_utf_16_32_ord(UTF-32BE) = 0.00 s 3395s [4376/5474] TestM17N#test_utf8_literal = 0.00 s 3395s [4377/5474] TestM17N#test_sprintf_s = 0.00 s 3395s [4378/5474] TestM17N#test_validate_surrogate = 0.00 s 3395s [4379/5474] TestM17N#test_index = 0.00 s 3395s [4380/5474] TestM17N#test_inspect_with_default_internal = 0.00 s 3395s [4381/5474] TestM17N#test_scrub_replace_default = 0.00 s 3395s [4382/5474] TestM17N#test_union_2 = 0.05 s 3395s [4383/5474] TestM17N#test_object_utf16_32_inspect = 0.00 s 3395s [4384/5474] TestM17N#test_utf_without_bom_asciionly = 0.00 s 3395s [4385/5474] TestM17N#test_union_0 = 0.00 s 3395s [4386/5474] TestM17N#test_include? = 0.01 s 3398s [4387/5474] TestM17N#test_utf_16_32_inspect(UTF-32LE) = 3.68 s 3398s [4388/5474] TestM17N#test_scrub_valid_string = 0.00 s 3398s [4389/5474] TestM17N#test_regexp_euc = 0.01 s 3399s [4390/5474] TestM17N#test_begin_end_offset_sjis = 0.00 s 3399s [4391/5474] TestM17N#test_each_line = 0.00 s 3399s [4392/5474] TestM17N#test_regexp_sjis = 0.00 s 3399s [4393/5474] TestM17N#test_utf_16_32_ord(UTF-16BE) = 0.00 s 3399s [4394/5474] TestM17N#test_end_with = 0.05 s 3399s [4395/5474] TestM17N#test_float_to_s = 0.00 s 3399s [4396/5474] TestM17N#test_str_b = 0.00 s 3399s [4397/5474] TestM17N#test_regexp_named_class = 0.00 s 3399s [4398/5474] TestM17N#test_casecmp = 0.00 s 3399s [4399/5474] TestM17N#test_dup_scan = 0.00 s 3399s [4400/5474] TestM17N#test_true_to_s = 0.00 s 3399s [4401/5474] TestM17N#test_string_mixed_unicode = 0.00 s 3399s [4402/5474] TestM17N#test_sprintf_c = 0.00 s 3399s [4403/5474] TestDefined#test_define_method = 0.01 s 3399s [4404/5474] TestDefined#test_method_by_respond_to_missing = 0.00 s 3399s [4405/5474] TestDefined#test_autoloaded_noload = 0.02 s 3399s [4406/5474] TestDefined#test_defined_constant = 0.00 s 3399s [4407/5474] TestDefined#test_defined_private_method = 0.00 s 3399s [4408/5474] TestDefined#test_exception = 0.00 s 3402s [4409/5474] TestDefined#test_super_toplevel = 3.70 s 3402s [4410/5474] TestDefined#test_super_in_included_method = 0.00 s 3402s [4411/5474] TestDefined#test_defined_literal = 0.00 s 3402s [4412/5474] TestDefined#test_defined_public_method = 0.00 s 3402s [4413/5474] TestDefined#test_autoloaded_subclass = 0.00 s 3402s [4414/5474] TestDefined#test_defined_operator = 0.00 s 3402s [4415/5474] TestDefined#test_defined_undefined_method = 0.00 s 3402s [4416/5474] TestDefined#test_defined_empty_paren_arg = 0.00 s 3402s [4417/5474] TestDefined#test_defined_yield = 0.00 s 3402s [4418/5474] TestDefined#test_defined_global_variable = 0.00 s 3402s [4419/5474] TestDefined#test_defined_method = 0.01 s 3402s [4420/5474] TestDefined#test_super_in_block = 0.00 s 3402s [4421/5474] TestDefined#test_defined_refined_call_without_using = 0.00 s 3402s [4422/5474] TestDefined#test_defined_local_variable = 0.00 s 3402s [4423/5474] TestDefined#test_defined_undef = 0.00 s 3402s [4424/5474] TestDefined#test_top_level_constant_not_defined = 0.00 s 3402s [4425/5474] TestDefined#test_defined_refined_vcall_without_using = 0.00 s 3402s [4426/5474] TestDefined#test_defined_attrasgn = 0.00 s 3402s [4427/5474] TestLazyEnumerator#test_select_multiple_values = 0.00 s 3402s [4428/5474] TestLazyEnumerator#test_drop_while = 0.05 s 3402s [4429/5474] TestLazyEnumerator#test_grep = 0.01 s 3402s [4430/5474] TestLazyEnumerator#test_zip_short_arg = 0.02 s 3402s [4431/5474] TestLazyEnumerator#test_zip = 0.01 s 3402s [4432/5474] TestLazyEnumerator#test_grep_v = 0.01 s 3402s [4433/5474] TestLazyEnumerator#test_cycle = 0.01 s 3402s [4434/5474] TestLazyEnumerator#test_map_packed_nested = 0.00 s 3402s [4435/5474] TestLazyEnumerator#test_grep_multiple_values = 0.01 s 3402s [4436/5474] TestLazyEnumerator#test_drop_nested = 0.01 s 3402s [4437/5474] TestLazyEnumerator#test_with_index_size = 0.00 s 3402s [4438/5474] TestLazyEnumerator#test_uniq = 0.00 s 3402s [4439/5474] TestLazyEnumerator#test_grep_with_block = 0.00 s 3402s [4440/5474] TestLazyEnumerator#test_flat_map_hash = 0.00 s 3402s [4441/5474] TestLazyEnumerator#test_take_while = 0.00 s 3402s [4442/5474] TestLazyEnumerator#test_inspect = 0.01 s 3402s [4443/5474] TestLazyEnumerator#test_zip_lazy_on_args = 0.00 s 3402s [4444/5474] TestLazyEnumerator#test_each_slice_limit = 0.00 s 3402s [4445/5474] TestLazyEnumerator#test_drop = 0.00 s 3402s [4446/5474] TestLazyEnumerator#test_no_warnings = 0.00 s 3402s [4447/5474] TestLazyEnumerator#test_drop_and_take = 0.00 s 3402s [4448/5474] TestLazyEnumerator#test_filter_map = 0.00 s 3402s [4449/5474] TestLazyEnumerator#test_initialize = 0.01 s 3402s [4450/5474] TestLazyEnumerator#test_flat_map_non_array = 0.00 s 3402s [4451/5474] TestLazyEnumerator#test_force = 0.00 s 3402s [4452/5474] TestLazyEnumerator#test_lazy_to_enum = 0.00 s 3402s [4453/5474] TestLazyEnumerator#test_take_nested = 0.00 s 3403s [4454/5474] TestLazyEnumerator#test_flat_map = 0.00 s 3403s [4455/5474] TestLazyEnumerator#test_cycle_with_block = 0.00 s 3403s [4456/5474] TestLazyEnumerator#test_grep_v_multiple_values = 0.01 s 3403s [4457/5474] TestLazyEnumerator#test_require_block = 0.01 s 3403s [4458/5474] TestLazyEnumerator#test_each_args = 0.00 s 3403s [4459/5474] TestLazyEnumerator#test_reject_multiple_values = 0.00 s 3403s [4460/5474] TestLazyEnumerator#test_grep_v_with_block = 0.00 s 3403s [4461/5474] TestLazyEnumerator#test_lazy_eager = 0.00 s 3403s [4462/5474] TestLazyEnumerator#test_cycle_chain = 0.00 s 3403s [4463/5474] TestLazyEnumerator#test_zip_bad_arg = 0.00 s 3403s [4464/5474] TestLazyEnumerator#test_zip_nested = 0.03 s 3410s [4465/5474] TestLazyEnumerator#test_map_zip = 7.59 s 3410s [4466/5474] TestLazyEnumerator#test_laziness_conservation = 0.01 s 3410s [4467/5474] TestLazyEnumerator#test_drop_while_nested = 0.01 s 3410s [4468/5474] TestLazyEnumerator#test_map = 0.01 s 3410s [4469/5474] TestLazyEnumerator#test_zip_without_arg = 0.01 s 3410s [4470/5474] TestLazyEnumerator#test_zip_efficient_on_array_args = 0.00 s 3410s [4471/5474] TestLazyEnumerator#test_take_recycle = 0.00 s 3410s [4472/5474] TestLazyEnumerator#test_take_bad_arg = 0.00 s 3410s [4473/5474] TestLazyEnumerator#test_each_cons_limit = 0.00 s 3410s [4474/5474] TestLazyEnumerator#test_symbol_chain = 0.00 s 3410s [4475/5474] TestLazyEnumerator#test_take = 0.00 s 3410s [4476/5474] TestLazyEnumerator#test_select = 0.00 s 3410s [4477/5474] TestLazyEnumerator#test_flat_map_to_ary = 0.01 s 3410s [4478/5474] TestLazyEnumerator#test_take_rewound = 0.04 s 3410s [4479/5474] TestLazyEnumerator#test_reject = 0.00 s 3410s [4480/5474] TestLazyEnumerator#test_each_line = 0.01 s 3410s [4481/5474] TestLazyEnumerator#test_flat_map_nested = 0.00 s 3410s [4482/5474] TestLazyEnumerator#test_zip_with_block = 0.00 s 3410s [4483/5474] TestLazyEnumerator#test_flat_map_take = 0.00 s 3410s [4484/5474] TestLazyEnumerator#test_size = 0.03 s 3410s [4485/5474] TestLazyEnumerator#test_zip_nonsingle = 0.01 s 3410s [4486/5474] TestCase#test_case = 0.00 s 3410s [4487/5474] TestCase#test_nomethoderror = 0.00 s 3410s [4488/5474] TestCase#test_optimization = 0.00 s 3410s [4489/5474] TestCase#test_method_missing = 0.00 s 3410s [4490/5474] TestHash::TestSubHash#test_rehash = 0.00 s 3410s [4491/5474] TestHash::TestSubHash#test_dup_equality = 0.00 s 3410s [4492/5474] TestHash::TestSubHash#test_except_on_identhash = 0.00 s 3410s [4493/5474] TestHash::TestSubHash#test_clear_initialize_copy = 0.00 s 3410s [4494/5474] TestHash::TestSubHash#test_reject_on_identhash = 0.00 s 3410s [4495/5474] TestHash::TestSubHash#test_initialize_wrong_arguments = 0.00 s 3410s [4496/5474] TestHash::TestSubHash#test_s_AREF_frozen_key_id = 0.00 s 3410s [4497/5474] TestHash::TestSubHash#test_dig_with_respond_to = 0.00 s 3410s [4498/5474] TestHash::TestSubHash#test_recursive_hash_value_array = 0.00 s 3410s [4499/5474] TestHash::TestSubHash#test_shift2 = 0.00 s 3410s [4500/5474] TestHash::TestSubHash#test_key? = 0.00 s 3410s [4501/5474] TestHash::TestSubHash#test_transform_values_bang = 0.01 s 3410s [4502/5474] TestHash::TestSubHash#test_to_h_block = 0.00 s 3410s [4503/5474] TestHash::TestSubHash#test_delete_if = 0.01 s 3410s [4504/5474] TestHash::TestSubHash#test_ruby2_keywords_hash? = 0.00 s 3410s [4505/5474] TestHash::TestSubHash#test_select! = 0.00 s 3410s [4506/5474] TestHash::TestSubHash#test_update4 = 0.00 s 3410s [4507/5474] TestHash::TestSubHash#test_hash = 0.01 s 3410s [4508/5474] TestHash::TestSubHash#test_cmp = 0.00 s 3410s [4509/5474] TestHash::TestSubHash#test_update2 = 0.00 s 3410s [4510/5474] TestHash::TestSubHash#test_slice_on_identhash = 0.00 s 3410s [4511/5474] TestHash::TestSubHash#test_bad_initialize_copy = 0.00 s 3410s [4512/5474] TestHash::TestSubHash#test_flatten_arity = 0.00 s 3410s [4513/5474] TestHash::TestSubHash#test_dig = 0.00 s 3410s [4514/5474] TestHash::TestSubHash#test_fetch2 = 0.00 s 3410s [4515/5474] TestHash::TestSubHash#test_empty? = 0.00 s 3410s [4516/5474] TestHash::TestSubHash#test_select_on_identhash = 0.00 s 3410s [4517/5474] TestHash::TestSubHash#test_threaded_iter_level = 0.01 s 3410s [4518/5474] TestHash::TestSubHash#test_each_pair = 0.03 s 3410s [4519/5474] TestHash::TestSubHash#test_rehash2 = 0.01 s 3410s [4520/5474] TestHash::TestSubHash#test_inverse_hash = 0.00 s 3410s [4521/5474] TestHash::TestSubHash#test_to_h_default_proc = 0.00 s 3410s [4522/5474] TestHash::TestSubHash#test_member? = 0.00 s 3410s [4523/5474] TestHash::TestSubHash#test_update = 0.00 s 3411s [4524/5474] TestHash::TestSubHash#test_to_proc = 0.00 s 3411s [4525/5474] TestHash::TestSubHash#test_value? = 0.00 s 3411s [4526/5474] TestHash::TestSubHash#test_transform_keys = 0.00 s 3411s [4527/5474] TestHash::TestSubHash#test_huge_iter_level = 0.01 s 3411s [4528/5474] TestHash::TestSubHash#test_default= = 0.00 s 3411s [4529/5474] TestHash::TestSubHash#test_each_value = 0.00 s 3411s [4530/5474] TestHash::TestSubHash#test_dup = 0.00 s 3411s [4531/5474] TestHash::TestSubHash#test_values_at = 0.00 s 3411s [4532/5474] TestHash::TestSubHash#test_ar2st = 0.01 s 3411s [4533/5474] TestHash::TestSubHash#test_hash_aset_fstring_identity = 0.00 s 3411s [4534/5474] TestHash::TestSubHash#test_merge = 0.00 s 3411s [4535/5474] TestHash::TestSubHash#test_hash_popped = 0.00 s 3411s [4536/5474] TestHash::TestSubHash#test_except = 0.00 s 3411s [4537/5474] TestHash::TestSubHash#test_clear = 0.00 s 3411s [4538/5474] TestHash::TestSubHash#test_merge! = 0.01 s 3411s [4539/5474] TestHash::TestSubHash#test_ASET = 0.00 s 3411s [4540/5474] TestHash::TestSubHash#test_hash2 = 0.00 s 3411s [4541/5474] TestHash::TestSubHash#test_assoc = 0.00 s 3411s [4542/5474] TestHash::TestSubHash#test_sort = 0.00 s 3411s [4543/5474] TestHash::TestSubHash#test_s_AREF_from_list = 0.00 s 3411s [4544/5474] TestHash::TestSubHash#test_key2? = 0.00 s 3411s [4545/5474] TestHash::TestSubHash#test_invert = 0.00 s 3411s [4546/5474] TestHash::TestSubHash#test_create = 0.01 s 3411s [4547/5474] TestHash::TestSubHash#test_same_key = 0.00 s 3411s [4548/5474] TestHash::TestSubHash#test_flatten = 0.00 s 3411s [4549/5474] TestHash::TestSubHash#test_key = 0.00 s 3411s [4550/5474] TestHash::TestSubHash#test_hash_bignum_hash = 0.00 s 3411s [4551/5474] TestHash::TestSubHash#test_label_syntax = 0.00 s 3411s [4552/5474] TestHash::TestSubHash#test_to_h = 0.00 s 3411s [4553/5474] TestHash::TestSubHash#test_select_reject_will_not_rehash = 0.00 s 3411s [4554/5474] TestHash::TestSubHash#test_reject! = 0.01 s 3411s [4555/5474] TestHash::TestSubHash#test_cmp_samekeys = 0.00 s 3411s [4556/5474] TestHash::TestSubHash#test_transform_keys_on_identhash = 0.00 s 3411s [4557/5474] TestHash::TestSubHash#test_wrapper = 0.00 s 3411s [4558/5474] TestHash::TestSubHash#test_delete = 0.00 s 3411s [4559/5474] TestHash::TestSubHash#test_clear2 = 0.00 s 3411s [4560/5474] TestHash::TestSubHash#test_reject_bang2 = 0.00 s 3411s [4561/5474] TestHash::TestSubHash#test_size2 = 0.00 s 3411s [4562/5474] TestHash::TestSubHash#test_ruby2_keywords_hash = 0.00 s 3411s [4563/5474] TestHash::TestSubHash#test_default = 0.00 s 3411s [4564/5474] TestHash::TestSubHash#test_self_initialize_copy = 0.00 s 3411s [4565/5474] TestHash::TestSubHash#test_nil_to_h = 0.00 s 3411s [4566/5474] TestHash::TestSubHash#test_value2? = 0.00 s 3411s [4567/5474] TestHash::TestSubHash#test_to_hash = 0.00 s 3411s [4568/5474] TestHash::TestSubHash#test_try_convert = 0.00 s 3411s [4569/5474] TestHash::TestSubHash#test_s_AREF_key_tampering = 0.00 s 3411s [4570/5474] TestHash::TestSubHash#test_replace_bug15358 = 0.00 s 3411s [4571/5474] TestHash::TestSubHash#test_transform_keys_bang = 0.01 s 3411s [4572/5474] TestHash::TestSubHash#test_each_key = 0.00 s 3411s [4573/5474] TestHash::TestSubHash#test_ASET_fstring_key = 0.00 s 3411s [4574/5474] TestHash::TestSubHash#test_to_a = 0.00 s 3411s [4575/5474] TestHash::TestSubHash#test_merge_on_identhash = 0.00 s 3411s [4576/5474] TestHash::TestSubHash#test_filter! = 0.00 s 3411s [4577/5474] TestHash::TestSubHash#test_s_AREF_from_hash = 0.00 s 3411s [4578/5474] TestHash::TestSubHash#test_dup_will_not_rehash = 0.00 s 3411s [4579/5474] TestHash::TestSubHash#test_compare_by_identity = 0.00 s 3411s [4580/5474] TestHash::TestSubHash#test_keys = 0.00 s 3411s [4581/5474] TestHash::TestSubHash#test_compact = 0.00 s 3411s [4582/5474] TestHash::TestSubHash#test_fetch = 0.00 s 3411s [4583/5474] TestHash::TestSubHash#test_recursive_key = 0.00 s 3411s [4584/5474] TestHash::TestSubHash#test_slice = 0.00 s 3411s [4585/5474] TestHash::TestSubHash#test_hash_aref_fstring_identity = 0.00 s 3411s [4586/5474] TestHash::TestSubHash#test_s_new = 0.00 s 3411s [4587/5474] TestHash::TestSubHash#test_recursive_hash_value_array_hash = 0.00 s 3411s [4588/5474] TestHash::TestSubHash#test_to_s = 0.00 s 3411s [4589/5474] TestHash::TestSubHash#test_hash_hash = 0.00 s 3411s [4590/5474] TestHash::TestSubHash#test_ASET_fstring_non_literal_key = 0.00 s 3411s [4591/5474] TestHash::TestSubHash#test_assoc_compare_by_identity = 0.00 s 3412s [4592/5474] TestHash::TestSubHash#test_broken_hash_value = 0.78 s 3412s [4593/5474] TestHash::TestSubHash#test_replace = 0.00 s 3412s [4594/5474] TestHash::TestSubHash#test_replace2 = 0.01 s 3412s [4595/5474] TestHash::TestSubHash#test_keep_if = 0.00 s 3412s [4596/5474] TestHash::TestSubHash#test_to_h_default_value = 0.00 s 3412s [4597/5474] TestHash::TestSubHash#test_equal2 = 0.00 s 3412s [4598/5474] TestHash::TestSubHash#test_s_AREF_from_pairs = 0.00 s 3412s [4599/5474] TestHash::TestSubHash#test_transform_values_on_identhash = 0.00 s 3412s [4600/5474] TestHash::TestSubHash#test_replace_bug9230 = 0.00 s 3412s [4601/5474] TestHash::TestSubHash#test_store = 0.01 s 3412s [4602/5474] TestHash::TestSubHash#test_values = 0.00 s 3412s [4603/5474] TestHash::TestSubHash#test_EQUAL = 0.00 s 3412s [4604/5474] TestHash::TestSubHash#test_fetch_values = 0.00 s 3412s [4605/5474] TestHash::TestSubHash#test_filter = 0.01 s 3412s [4606/5474] TestHash::TestSubHash#test_update3 = 0.00 s 3412s [4607/5474] TestHash::TestSubHash#test_shift_none = 0.00 s 3412s [4608/5474] TestHash::TestSubHash#test_default_proc = 0.00 s 3412s [4609/5474] TestHash::TestSubHash#test_update5 = 0.00 s 3412s [4610/5474] TestHash::TestSubHash#test_reserved_hash_val = 0.00 s 3412s [4611/5474] TestHash::TestSubHash#test_each = 0.01 s 3412s [4612/5474] TestHash::TestSubHash#test_length = 0.00 s 3412s [4613/5474] TestHash::TestSubHash#test_shift = 0.00 s 3412s [4614/5474] TestHash::TestSubHash#test_recursive_hash_value_struct = 0.00 s 3412s [4615/5474] TestHash::TestSubHash#test_AREF = 0.00 s 3412s [4616/5474] TestHash::TestSubHash#test_include? = 0.00 s 3412s [4617/5474] TestHash::TestSubHash#test_clone = 0.00 s 3412s [4618/5474] TestHash::TestSubHash#test_select = 0.01 s 3412s [4619/5474] TestHash::TestSubHash#test_bug_12706 = 0.00 s 3412s [4620/5474] TestHash::TestSubHash#test_reject = 0.01 s 3412s [4621/5474] TestHash::TestSubHash#test_recursive_hash_value_hash_array = 0.00 s 3412s [4622/5474] TestHash::TestSubHash#test_rassoc = 0.00 s 3412s [4623/5474] TestHash::TestSubHash#test_to_h_instance_variable = 0.00 s 3412s [4624/5474] TestHash::TestSubHash#test_s_AREF_duplicated_key = 0.00 s 3412s [4625/5474] TestHash::TestSubHash#test_transform_values = 0.00 s 3412s [4626/5474] TestHash::TestSubHash#test_size = 0.00 s 3412s Finished tests in 1495.941643s, 3.0924 tests/s, 1230.1262 assertions/s. 3412s 4626 tests, 1840197 assertions, 0 failures, 0 errors, 19 skips 3412s 3412s ruby -v: jruby 9.4.6.0 (3.1.4) 2024-03-20 9.4.6.0+ds OpenJDK 64-Bit Server VM 21.0.2+13-Ubuntu-2 on 21.0.2+13-Ubuntu-2 +jit [aarch64-linux] 3413s autopkgtest [11:51:36]: test mri-core: -----------------------] 3413s autopkgtest [11:51:36]: test mri-core: - - - - - - - - - - results - - - - - - - - - - 3413s mri-core PASS 3414s autopkgtest [11:51:37]: test mri-extra: preparing testbed 3419s Reading package lists... 3420s Building dependency tree... 3420s Reading state information... 3420s Starting pkgProblemResolver with broken count: 0 3420s Starting 2 pkgProblemResolver with broken count: 0 3420s Done 3421s The following NEW packages will be installed: 3421s autopkgtest-satdep 3421s 0 upgraded, 1 newly installed, 0 to remove and 0 not upgraded. 3421s Need to get 0 B/756 B of archives. 3421s After this operation, 0 B of additional disk space will be used. 3421s Get:1 /tmp/autopkgtest.nFBjtB/11-autopkgtest-satdep.deb autopkgtest-satdep arm64 0 [756 B] 3421s Selecting previously unselected package autopkgtest-satdep. 3421s (Reading database ... (Reading database ... 5% (Reading database ... 10% (Reading database ... 15% (Reading database ... 20% (Reading database ... 25% (Reading database ... 30% (Reading database ... 35% (Reading database ... 40% (Reading database ... 45% (Reading database ... 50% (Reading database ... 55% (Reading database ... 60% (Reading database ... 65% (Reading database ... 70% (Reading database ... 75% (Reading database ... 80% (Reading database ... 85% (Reading database ... 90% (Reading database ... 95% (Reading database ... 100% (Reading database ... 84014 files and directories currently installed.) 3421s Preparing to unpack .../11-autopkgtest-satdep.deb ... 3421s Unpacking autopkgtest-satdep (0) ... 3421s Setting up autopkgtest-satdep (0) ... 3424s (Reading database ... 84014 files and directories currently installed.) 3424s Removing autopkgtest-satdep (0) ... 3424s autopkgtest [11:51:47]: test mri-extra: [----------------------- 3425s installing system gems into jruby: 3425s * diff-lcs-1.5.0 3425s * minitest-5.15.0 3425s * power_assert-2.0.1 3425s * rake-13.0.6 3425s * rexml-3.2.5 3425s * rspec-3.12.0 3425s * rspec-core-3.12.0 3425s * rspec-expectations-3.12.1 3425s * rspec-mocks-3.12.1 3425s * rspec-support-3.12.0 3425s * test-unit-3.5.3 3431s /usr/share/jruby/bin/jruby test/mri/runner.rb --color=never --tty=no --excludes=test/mri/excludes:test/mri/excludes_wip -q -- coverage racc objspace test_open3.rb test_tracer.rb ruby/test_process.rb ruby/test_settracefunc.rb ruby/test_signal.rb ruby/test_syntax.rb ruby/test_yield.rb 3437s Run options: 3437s --seed=19161 3437s --color=never 3437s --tty=no 3437s --excludes=test/mri/excludes:test/mri/excludes_wip 3437s -q 3437s -- 3438s 3438s # Running tests: 3438s 3936s org/jruby/RubyIO.java:1590:in `write': Broken pipe - (Errno::EPIPE) 3936s from org/jruby/RubyIO.java:1479:in `write' 3936s from org/jruby/RubyIO.java:2853:in `write' 3936s from org/jruby/RubyIO.java:1855:in `print' 3936s from org/jruby/RubyKernel.java:753:in `print' 3936s from -e:1:in `
' 3965s org/jruby/RubyIO.java:1590:in `write': Broken pipe - (Errno::EPIPE) 3965s from org/jruby/RubyIO.java:1479:in `write' 3965s from org/jruby/RubyIO.java:2853:in `write' 3965s from org/jruby/RubyIO.java:1855:in `print' 3965s from org/jruby/RubyKernel.java:753:in `print' 3965s from -e:1:in `
' 4006s org/jruby/RubyIO.java:1590:in `write': Broken pipe - (Errno::EPIPE) 4006s from org/jruby/RubyIO.java:1479:in `write' 4006s from org/jruby/RubyIO.java:2853:in `write' 4006s from org/jruby/RubyIO.java:1855:in `print' 4006s from org/jruby/RubyKernel.java:753:in `print' 4006s from -e:1:in `
' 4281s /tmp/autopkgtest.nFBjtB/autopkgtest_tmp/test/mri/ruby/test_syntax.rb:149: warning: key :a is duplicated and overwritten on line 149 4281s /tmp/autopkgtest.nFBjtB/autopkgtest_tmp/test/mri/ruby/test_syntax.rb:150: warning: key :a is duplicated and overwritten on line 150 4505s sh: 1: cd: can't cd to /tmp/d20240320-26199-t1f0pf/vd 4559s sh: 1: exec: /tmp/d20240320-26199-g6pt7p/notexist: not found 4660s 4660s 1) Failure: 4660s TestOpen3#test_pipeline [/tmp/autopkgtest.nFBjtB/autopkgtest_tmp/test/mri/test_open3.rb:332]: 4660s expected but was 4660s . 4660s 4660s 2) Failure: 4660s TestOpen3#test_pipeline_r [/tmp/autopkgtest.nFBjtB/autopkgtest_tmp/test/mri/test_open3.rb:270]: 4660s <"12"> expected but was 4660s <"2">. 4660s 4660s 3) Failure: 4660s TestOpen3#test_capture3_flip [/tmp/autopkgtest.nFBjtB/autopkgtest_tmp/test/mri/test_open3.rb:190]: 4660s <"oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooorake aborted! 4660s Command failed with status (5): [/usr/share/jruby/bin/jruby test/mri/runner...] 4660s /tmp/autopkgtest.nFBjtB/autopkgtest_tmp/rakelib/test.rake:118:in `block in
' 4660s /usr/lib/ruby/gems/3.1.0/gems/rake-13.0.6/exe/rake:27:in `
' 4660s ooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooTasks: TOP => test:mri:extra => test:mri:extra:int 4660s oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo"> expected but was 4660s <"oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo">. 4660s 4660s 4) Failure: 4660s TestOpen3#test_pipeline_w [/tmp/autopkgtest.nFBjtB/autopkgtest_tmp/test/mri/test_open3.rb:288]: 4660s expected but was 4660s . 4660s 4660s 5) Failure: 4660s TestOpen3#test_pipeline_start [/tmp/autopkgtest.nFBjtB/autopkgtest_tmp/test/mri/test_open3.rb:303]: 4660s Failed assertion, no message given. 4660s 4660s Finished tests in 1222.148171s, 0.2823 tests/s, 17.1943 assertions/s. 4660s 345 tests, 21014 assertions, 5 failures, 0 errors, 2 skips 4660s 4660s ruby -v: jruby 9.4.6.0 (3.1.4) 2024-03-20 9.4.6.0+ds OpenJDK 64-Bit Server VM 21.0.2+13-Ubuntu-2 on 21.0.2+13-Ubuntu-2 +jit [aarch64-linux] 4660s (See full trace by running task with --trace) 4661s autopkgtest [12:12:24]: test mri-extra: -----------------------] 4661s mri-extra FLAKY non-zero exit status 1 4661s autopkgtest [12:12:24]: test mri-extra: - - - - - - - - - - results - - - - - - - - - - 4662s autopkgtest [12:12:25]: test mri-stdlib: preparing testbed 4664s Reading package lists... 4664s Building dependency tree... 4664s Reading state information... 4664s Starting pkgProblemResolver with broken count: 0 4664s Starting 2 pkgProblemResolver with broken count: 0 4664s Done 4665s The following NEW packages will be installed: 4665s autopkgtest-satdep 4665s 0 upgraded, 1 newly installed, 0 to remove and 0 not upgraded. 4665s Need to get 0 B/756 B of archives. 4665s After this operation, 0 B of additional disk space will be used. 4665s Get:1 /tmp/autopkgtest.nFBjtB/12-autopkgtest-satdep.deb autopkgtest-satdep arm64 0 [756 B] 4665s Selecting previously unselected package autopkgtest-satdep. 4666s (Reading database ... (Reading database ... 5% (Reading database ... 10% (Reading database ... 15% (Reading database ... 20% (Reading database ... 25% (Reading database ... 30% (Reading database ... 35% (Reading database ... 40% (Reading database ... 45% (Reading database ... 50% (Reading database ... 55% (Reading database ... 60% (Reading database ... 65% (Reading database ... 70% (Reading database ... 75% (Reading database ... 80% (Reading database ... 85% (Reading database ... 90% (Reading database ... 95% (Reading database ... 100% (Reading database ... 84014 files and directories currently installed.) 4666s Preparing to unpack .../12-autopkgtest-satdep.deb ... 4666s Unpacking autopkgtest-satdep (0) ... 4666s Setting up autopkgtest-satdep (0) ... 4668s (Reading database ... 84014 files and directories currently installed.) 4668s Removing autopkgtest-satdep (0) ... 4669s autopkgtest [12:12:32]: test mri-stdlib: [----------------------- 4669s installing system gems into jruby: 4669s * diff-lcs-1.5.0 4669s * minitest-5.15.0 4669s * power_assert-2.0.1 4669s * rake-13.0.6 4669s * rexml-3.2.5 4669s * rspec-3.12.0 4669s * rspec-core-3.12.0 4669s * rspec-expectations-3.12.1 4669s * rspec-mocks-3.12.1 4669s * rspec-support-3.12.0 4669s * test-unit-3.5.3 4669s ** debugging mode enabled ** 4669s excluded test: test/mri/excludes/TestOpenURISSL.rb::test_validation_success 4669s excluded test: test/mri/excludes/TestOpenURISSL.rb::test_validation_failure 4669s excluded test: test/mri/excludes/TestOpenURISSL.rb::test_validation_noverify 4669s excluded test: test/mri/excludes/TestNetHTTP_v1_2.rb::test_get__break 4669s excluded test: test/mri/excludes/TestRelineAsReadline.rb::test_interrupt_in_other_thread 4669s excluded test: test/mri/excludes/TestIO_Console.rb::test_failed_path 4677s /usr/share/jruby/bin/jruby test/mri/runner.rb --color=never -v --excludes=test/mri/excludes:test/mri/excludes_wip -q -- base64 benchmark bigdecimal cgi csv date dbm digest dtrace erb etc fiber/test_address_resolve.rb fiber/test_backtrace.rb fiber/test_enumerator.rb fiber/test_io.rb fiber/test_io_buffer.rb fiber/test_mutex.rb fiber/test_process.rb fiber/test_ractor.rb fiber/test_scheduler.rb fiber/test_sleep.rb fiber/test_thread.rb fiber/test_timeout.rb fileutils gdbm io irb json logger matrix monitor net nkf open-uri openssl optparse ostruct pathname psych rdoc readline reline resolv rinda ripper socket stringio strscan syslog uri win32ole yaml zlib test_abbrev.rb test_delegate.rb test_extlibs.rb test_find.rb test_forwardable.rb test_ipaddr.rb test_mutex_m.rb test_observer.rb test_pp.rb test_prettyprint.rb test_prime.rb test_pstore.rb test_pty.rb test_rbconfig.rb test_securerandom.rb test_set.rb test_shellwords.rb test_singleton.rb test_sorted_set.rb test_syslog.rb test_tempfile.rb test_time.rb test_timeout.rb test_tmpdir.rb test_tsort.rb test_unicode_normalize.rb test_weakref.rb 4690s /tmp/autopkgtest.nFBjtB/autopkgtest_tmp/test/mri/matrix/test_matrix.rb: no such file to load -- matrix 4691s /tmp/autopkgtest.nFBjtB/autopkgtest_tmp/test/mri/net/ftp/test_buffered_socket.rb: no such file to load -- net/ftp 4693s /tmp/autopkgtest.nFBjtB/autopkgtest_tmp/test/mri/net/pop/test_pop.rb: no such file to load -- net/pop 4693s /tmp/autopkgtest.nFBjtB/autopkgtest_tmp/test/mri/net/smtp/test_response.rb: no such file to load -- net/smtp 4695s !!!! Missing jruby-win32ole gem: jruby -S gem install jruby-win32ole 4695s !!!! Missing jruby-win32ole gem: jruby -S gem install jruby-win32ole 4695s !!!! Missing jruby-win32ole gem: jruby -S gem install jruby-win32ole 4695s !!!! Missing jruby-win32ole gem: jruby -S gem install jruby-win32ole 4695s !!!! Missing jruby-win32ole gem: jruby -S gem install jruby-win32ole 4695s !!!! Missing jruby-win32ole gem: jruby -S gem install jruby-win32ole 4695s !!!! Missing jruby-win32ole gem: jruby -S gem install jruby-win32ole 4695s !!!! Missing jruby-win32ole gem: jruby -S gem install jruby-win32ole 4695s !!!! Missing jruby-win32ole gem: jruby -S gem install jruby-win32ole 4695s !!!! Missing jruby-win32ole gem: jruby -S gem install jruby-win32ole 4695s !!!! Missing jruby-win32ole gem: jruby -S gem install jruby-win32ole 4695s !!!! Missing jruby-win32ole gem: jruby -S gem install jruby-win32ole 4695s !!!! Missing jruby-win32ole gem: jruby -S gem install jruby-win32ole 4695s !!!! Missing jruby-win32ole gem: jruby -S gem install jruby-win32ole 4695s !!!! Missing jruby-win32ole gem: jruby -S gem install jruby-win32ole 4695s !!!! Missing jruby-win32ole gem: jruby -S gem install jruby-win32ole 4695s !!!! Missing jruby-win32ole gem: jruby -S gem install jruby-win32ole 4695s !!!! Missing jruby-win32ole gem: jruby -S gem install jruby-win32ole 4695s !!!! Missing jruby-win32ole gem: jruby -S gem install jruby-win32ole 4695s !!!! Missing jruby-win32ole gem: jruby -S gem install jruby-win32ole 4695s !!!! Missing jruby-win32ole gem: jruby -S gem install jruby-win32ole 4695s /tmp/autopkgtest.nFBjtB/autopkgtest_tmp/test/mri/test_prime.rb: no such file to load -- prime 4695s Run options: 4695s --seed=19355 4695s --color=never 4695s -v 4695s --excludes=test/mri/excludes:test/mri/excludes_wip 4695s -q 4695s -- 4695s 4695s # Running tests: 4695s 4695s [ 1/8505] TestCSVParseQuoteCharNil::DifferentOFS#test_multiple_space = 0.07 s 4696s [ 2/8505] TestCSVParseQuoteCharNil::DifferentOFS#test_comma = 0.17 s 4696s [ 3/8505] TestCSVParseQuoteCharNil::DifferentOFS#test_nil_nil = 0.00 s 4696s [ 4/8505] TestCSVParseQuoteCharNil::DifferentOFS#test_space_no_ascii = 0.01 s 4696s [ 5/8505] TestCSVParseQuoteCharNil::DifferentOFS#test_unquoted_value_multiple_characters_col_sep = 0.00 s 4696s [ 6/8505] TestCSVParseQuoteCharNil::DifferentOFS#test_line = 0.01 s 4696s [ 7/8505] TestCSVParseQuoteCharNil::DifferentOFS#test_space = 0.00 s 4696s [ 8/8505] TestCSVParseQuoteCharNil::DifferentOFS#test_end_with_nil = 0.00 s 4696s [ 9/8505] TestCSVParseQuoteCharNil::DifferentOFS#test_csv_header_string = 0.03 s 4696s [ 10/8505] TestCSVParseQuoteCharNil::DifferentOFS#test_multiple_characters_leading_empty_fields = 0.00 s 4696s [ 11/8505] TestCSVParseQuoteCharNil::DifferentOFS#test_full = 0.00 s 4696s [ 12/8505] TestRDocComment#test_extract_call_seq_c_separator = 0.10 s 4696s [ 13/8505] TestRDocComment#test_extract_call_seq_c = 0.07 s 4696s [ 14/8505] TestRDocComment#test_text_equals = 0.00 s 4696s [ 15/8505] TestRDocComment#test_extract_call_seq = 0.00 s 4696s [ 16/8505] TestRDocComment#test_normalize_eh = 0.01 s 4696s [ 17/8505] TestRDocComment#test_text = 0.01 s 4696s [ 18/8505] TestRDocComment#test_text_equals_no_text = 0.01 s 4696s [ 19/8505] TestRDocComment#test_extract_call_seq_commented = 0.00 s 4696s [ 20/8505] TestRDocComment#test_normalize = 0.08 s 4696s [ 21/8505] TestRDocComment#test_remove_private_star2 = 0.01 s 4696s [ 22/8505] TestRDocComment#test_parse = 0.06 s 4696s [ 23/8505] TestRDocComment#test_format = 0.00 s 4696s [ 24/8505] TestRDocComment#test_initialize_copy = 0.00 s 4696s [ 25/8505] TestRDocComment#test_extract_call_seq_blank = 0.00 s 4696s [ 26/8505] TestRDocComment#test_remove_private_encoding = 0.01 s 4696s [ 27/8505] TestRDocComment#test_remove_private_long = 0.01 s 4696s [ 28/8505] TestRDocComment#test_format_equals = 0.10 s 4696s [ 29/8505] TestRDocComment#test_extract_call_seq_undent = 0.01 s 4696s [ 30/8505] TestRDocComment#test_remove_private_toggle_encoding_ruby_bug? = 0.01 s 4696s [ 31/8505] TestRDocComment#test_remove_private_rule = 0.02 s 4696s [ 32/8505] TestRDocComment#test_remove_private_toggle_encoding = 0.01 s 4696s [ 33/8505] TestRDocComment#test_tomdoc_eh = 0.01 s 4696s [ 34/8505] TestRDocComment#test_normalize_document = 0.01 s 4696s [ 35/8505] TestRDocComment#test_force_encoding = 0.00 s 4697s [ 36/8505] TestRDocComment#test_parse_rd = 0.24 s 4697s [ 37/8505] TestRDocComment#test_remove_private_toggle = 0.01 s 4697s [ 38/8505] TestRDocComment#test_equals2 = 0.01 s 4697s [ 39/8505] TestRDocComment#test_remove_private_star = 0.00 s 4697s [ 40/8505] TestRDocComment#test_remove_private_hash = 0.00 s 4697s [ 41/8505] TestRDocComment#test_remove_private_hash_trail = 0.00 s 4697s [ 42/8505] TestRDocComment#test_extract_call_seq_c_no_blank = 0.01 s 4697s [ 43/8505] TestRDocComment#test_extract_call_seq_no_blank = 0.00 s 4697s [ 44/8505] TestRDocComment#test_text_equals_parsed = 0.00 s 4697s [ 45/8505] TestRDocComment#test_location = 0.01 s 4697s [ 46/8505] TestRDocComment#test_empty_eh = 0.00 s 4697s [ 47/8505] TestRDocComment#test_normalize_twice = 0.00 s 4697s [ 48/8505] TestCSVParseUnconvertedFields::DifferentOFS#test_parsed_header = 0.03 s 4697s [ 49/8505] TestCSVParseUnconvertedFields::DifferentOFS#test_custom = 0.04 s 4697s [ 50/8505] TestCSVParseUnconvertedFields::DifferentOFS#test_return_headers = 0.00 s 4697s [ 51/8505] TestCSVParseUnconvertedFields::DifferentOFS#test_no_fields = 0.01 s 4697s [ 52/8505] TestCSVParseUnconvertedFields::DifferentOFS#test_specified_headers = 0.01 s 4697s [ 53/8505] TestCSVParseUnconvertedFields::DifferentOFS#test_header_converters = 0.00 s 4697s [ 54/8505] TestCSVWriteQuoteEmptyGenerate#test_empty_only_false = 0.00 s 4697s [ 55/8505] TestCSVWriteQuoteEmptyGenerate#test_empty_default = 0.04 s 4697s [ 56/8505] TestCSVWriteQuoteEmptyGenerate#test_quote_empty_default = 0.00 s 4697s [ 57/8505] TestCSVWriteQuoteEmptyGenerate#test_empty_double_default = 0.00 s 4697s [ 58/8505] TestCSVWriteQuoteEmptyGenerate#test_empty_false = 0.00 s 4697s [ 59/8505] TestCSVWriteQuoteEmptyGenerate#test_quote_empty_false = 0.00 s 4697s [ 60/8505] TestCSVWriteQuoteEmptyGenerate#test_empty_double_false = 0.00 s 4697s [ 61/8505] TestCSVWriteQuoteEmptyGenerate#test_empty_only_default = 0.00 s 4699s [ 62/8505] TestNetHTTPKeepAlive#test_keep_alive_get_auto_retry = 2.16 s 4699s [ 63/8505] TestNetHTTPKeepAlive#test_keep_alive_server_close = 0.17 s 4701s [ 64/8505] TestNetHTTPKeepAlive#test_keep_alive_get_auto_reconnect = 1.57 s 4702s [ 65/8505] TestNetHTTPKeepAlive#test_keep_alive_reset_on_new_connection = 1.55 s 4704s [ 66/8505] TestNetHTTPKeepAlive#test_server_closed_connection_auto_reconnect = 1.75 s 4704s [ 67/8505] TestNetHTTPKeepAlive#test_http_retry_success = 0.03 s 4704s [ 68/8505] TestNetHTTPKeepAlive#test_http_retry_failed = 0.03 s 4704s [ 69/8505] PrettyPrintTest::StrictPrettyExample#test_08 = 0.04 s 4704s [ 70/8505] PrettyPrintTest::StrictPrettyExample#test_06 = 0.02 s 4704s [ 71/8505] PrettyPrintTest::StrictPrettyExample#test_00_04 = 0.01 s 4704s [ 72/8505] PrettyPrintTest::StrictPrettyExample#test_11_31 = 0.01 s 4704s [ 73/8505] PrettyPrintTest::StrictPrettyExample#test_32 = 0.00 s 4704s [ 74/8505] PrettyPrintTest::StrictPrettyExample#test_09 = 0.01 s 4704s [ 75/8505] PrettyPrintTest::StrictPrettyExample#test_05 = 0.00 s 4704s [ 76/8505] PrettyPrintTest::StrictPrettyExample#test_07 = 0.00 s 4704s [ 77/8505] PrettyPrintTest::StrictPrettyExample#test_10 = 0.00 s 4704s [ 78/8505] TestRDocParserSimple#test_remove_coding_comment = 0.08 s 4704s [ 79/8505] TestRDocParserSimple#test_scan = 0.04 s 4704s [ 80/8505] TestRDocParserSimple#test_initialize_metadata = 0.01 s 4704s [ 81/8505] TestRDocParserSimple#test_remove_private_comments = 0.00 s 4704s [ 82/8505] TestRDocParserSimple#test_remove_private_comments_star = 0.00 s 4704s [ 83/8505] TestRDocParserSimple#test_remove_private_comments_rule = 0.01 s 4705s [ 84/8505] TestRDocMarkupToHtmlCrossref#test_convert_RDOCLINK_rdoc_ref = 0.95 s 4706s [ 85/8505] TestRDocMarkupToHtmlCrossref#test_convert_CROSSREF_label_space = 0.38 s 4706s [ 86/8505] TestRDocMarkupToHtmlCrossref#test_handle_regexp_CROSSREF = 0.18 s 4706s [ 87/8505] TestRDocMarkupToHtmlCrossref#test_handle_regexp_CROSSREF_with_arg_looks_like_TIDYLINK = 0.24 s 4706s [ 88/8505] TestRDocMarkupToHtmlCrossref#test_link_class_method_full = 0.16 s 4707s [ 89/8505] TestRDocMarkupToHtmlCrossref#test_convert_CROSSREF_constant = 0.19 s 4707s [ 90/8505] TestRDocMarkupToHtmlCrossref#test_convert_RDOCLINK_rdoc_ref_method_percent = 0.13 s 4707s [ 91/8505] TestRDocMarkupToHtmlCrossref#test_convert_CROSSREF_section = 0.13 s 4707s [ 92/8505] TestRDocMarkupToHtmlCrossref#test_link = 0.09 s 4707s [ 93/8505] TestRDocMarkupToHtmlCrossref#test_handle_regexp_TIDYLINK_rdoc = 0.14 s 4707s [ 94/8505] TestRDocMarkupToHtmlCrossref#test_link_for_method_traverse = 0.08 s 4707s [ 95/8505] TestRDocMarkupToHtmlCrossref#test_convert_CROSSREF_label = 0.11 s 4707s [ 96/8505] TestRDocMarkupToHtmlCrossref#test_convert_RDOCLINK_rdoc_ref_method_percent_label = 0.11 s 4707s [ 97/8505] TestRDocMarkupToHtmlCrossref#test_convert_CROSSREF = 0.09 s 4708s [ 98/8505] TestRDocMarkupToHtmlCrossref#test_handle_regexp_CROSSREF_label = 0.13 s 4708s [ 99/8505] TestRDocMarkupToHtmlCrossref#test_convert_RDOCLINK_rdoc_ref_method_label = 0.21 s 4708s [ 100/8505] TestRDocMarkupToHtmlCrossref#test_gen_url = 0.09 s 4708s [ 101/8505] TestRDocMarkupToHtmlCrossref#test_to_html_CROSSREF_email = 0.12 s 4708s [ 102/8505] TestRDocMarkupToHtmlCrossref#test_convert_RDOCLINK_rdoc_ref_method = 0.08 s 4708s [ 103/8505] TestRDocMarkupToHtmlCrossref#test_convert_RDOCLINK_rdoc_ref_method_escape_html = 0.13 s 4708s [ 104/8505] TestRDocMarkupToHtmlCrossref#test_handle_regexp_CROSSREF_show_hash_false = 0.08 s 4708s [ 105/8505] TestRDocMarkupToHtmlCrossref#test_to_html_CROSSREF_email_hyperlink_all = 0.09 s 4708s [ 106/8505] TestRDocMarkupToHtmlCrossref#test_convert_CROSSREF_label_period = 0.08 s 4709s [ 107/8505] TestRDocMarkupToHtmlCrossref#test_handle_regexp_HYPERLINK_rdoc = 0.07 s 4709s [ 108/8505] TestRDocMarkupToHtmlCrossref#test_handle_regexp_TIDYLINK_label = 0.11 s 4709s [ 109/8505] TestRDocMarkupToHtmlCrossref#test_convert_RDOCLINK_rdoc_ref_label = 0.09 s 4709s [ 110/8505] TestRDocMarkupToHtmlCrossref#test_convert_CROSSREF_label_for_md = 0.07 s 4709s [ 111/8505] TestFiberThread#test_thread_join = 0.01 s 4709s [ 112/8505] TestFiberThread#test_thread_join_hang = 0.09 s 4709s [ 113/8505] TestFiberThread#test_thread_join_blocking = 0.01 s 4709s [ 114/8505] TestFiberThread#test_thread_join_implicit = 0.11 s 4715s [ 115/8505] TestLogDevice#test_shifting_age_in_multiprocess = 6.06 s 4715s [ 116/8505] TestLogDevice#test_reopen_file_by_file = 0.03 s 4715s [ 117/8505] TestLogDevice#test_shifting_size = 0.07 s 4718s [ 118/8505] TestLogDevice#test_shifting_midnight = 3.07 s 4718s [ 119/8505] TestLogDevice#test_write = 0.01 s 4718s [ 120/8505] TestLogDevice#test_close = 0.01 s 4718s [ 121/8505] TestLogDevice#test_reopen_io_by_file = 0.02 s 4718s [ 122/8505] TestLogDevice#test_initialize = 0.02 s 4718s [ 123/8505] TestLogDevice#test_shifting_age_variants = 0.02 s 4718s [ 124/8505] TestLogDevice#test_reopen_io = 0.00 s 4724s [ 125/8505] TestLogDevice#test_shifting_size_in_multiprocess = 5.85 s 4724s [ 126/8505] TestLogDevice#test_invalid_shifting_age = 0.00 s 4724s [ 127/8505] TestLogDevice#test_reopen_file = 0.01 s 4724s [ 128/8505] TestLogDevice#test_shifting_period_suffix = 0.03 s 4724s [ 129/8505] TestLogDevice#test_reopen_file_by_io = 0.00 s 4850s [ 130/8505] TestLogDevice#test_open_logfile_in_multiprocess = 126.10 s 4851s [ 131/8505] TestLogDevice#test_shifting_age = 0.16 s 4851s [ 132/8505] TestLogDevice#test_reopen_io_by_io = 0.00 s 4854s [ 133/8505] TestLogDevice#test_shifting_midnight_exist_file = 3.30 s 4854s [ 134/8505] TestNetHTTPSwitchingProtocols#test_info = 0.30 s 4854s [ 135/8505] TestBigMath#test_const = 0.01 s 4854s [ 136/8505] TestBigMath#test_sqrt = 0.01 s 4854s [ 137/8505] TestBigMath#test_cos = 0.10 s 4854s [ 138/8505] TestBigMath#test_sin = 0.10 s 4855s [ 139/8505] TestBigMath#test_atan = 0.44 s 4860s [ 140/8505] TestBigMath#test_log = 4.67 s 4860s [ 141/8505] OpenSSL::TestPKCS12#test_new_with_no_certs = 0.79 s 4860s [ 142/8505] TestFiberEnumerator#test_read_characters = 0.02 s 4860s [ 143/8505] TestRDocMarkupToTableOfContents#test_accept_heading_1 = 0.01 s 4860s [ 144/8505] TestRDocMarkupToTableOfContents#test_accept_heading_3 = 0.01 s 4860s [ 145/8505] TestRDocMarkupToTableOfContents#test_accept_heading_suppressed_crossref = 0.00 s 4860s [ 146/8505] TestRDocMarkupToTableOfContents#test_accept_list_start_ualpha = 0.00 s 4860s [ 147/8505] TestRDocMarkupToTableOfContents#test_accept_paragraph_break = 0.00 s 4860s [ 148/8505] TestRDocMarkupToTableOfContents#test_accept_block_quote = 0.00 s 4860s [ 149/8505] TestRDocMarkupToTableOfContents#test_accept_list_item_start_label = 0.00 s 4860s [ 150/8505] TestRDocMarkupToTableOfContents#test_accept_list_end_bullet = 0.00 s 4860s [ 151/8505] TestRDocMarkupToTableOfContents#test_suppressed_eh = 0.00 s 4860s [ 152/8505] TestRDocMarkupToTableOfContents#test_accept_rule = 0.01 s 4860s [ 153/8505] TestRDocMarkupToTableOfContents#test_accept_list_item_end_bullet = 0.00 s 4860s [ 154/8505] TestRDocMarkupToTableOfContents#test_accept_paragraph_underscore = 0.01 s 4860s [ 155/8505] TestRDocMarkupToTableOfContents#test_accept_list_item_start_bullet = 0.01 s 4860s [ 156/8505] TestRDocMarkupToTableOfContents#test_accept_list_end_label = 0.00 s 4860s [ 157/8505] TestRDocMarkupToTableOfContents#test_accept_heading = 0.00 s 4860s [ 158/8505] TestRDocMarkupToTableOfContents#test_accept_list_start_lalpha = 0.00 s 4860s [ 159/8505] TestRDocMarkupToTableOfContents#test_list_nested = 0.01 s 4860s [ 160/8505] TestRDocMarkupToTableOfContents#test_accept_heading_b = 0.00 s 4860s [ 161/8505] TestRDocMarkupToTableOfContents#test_accept_list_item_start_number = 0.00 s 4860s [ 162/8505] TestRDocMarkupToTableOfContents#test_accept_document = 0.00 s 4860s [ 163/8505] TestRDocMarkupToTableOfContents#test_accept_list_item_end_number = 0.00 s 4861s [ 164/8505] TestRDocMarkupToTableOfContents#test_accept_list_end_number = 0.00 s 4861s [ 165/8505] TestRDocMarkupToTableOfContents#test_accept_paragraph_i = 0.00 s 4861s [ 166/8505] TestRDocMarkupToTableOfContents#test_accept_verbatim = 0.00 s 4861s [ 167/8505] TestRDocMarkupToTableOfContents#test_list_verbatim = 0.01 s 4861s [ 168/8505] TestRDocMarkupToTableOfContents#test_accept_list_end_ualpha = 0.00 s 4861s [ 169/8505] TestRDocMarkupToTableOfContents#test_accept_list_item_end_ualpha = 0.00 s 4861s [ 170/8505] TestRDocMarkupToTableOfContents#test_accept_list_item_start_ualpha = 0.00 s 4861s [ 171/8505] TestRDocMarkupToTableOfContents#test_accept_paragraph_b = 0.00 s 4861s [ 172/8505] TestRDocMarkupToTableOfContents#test_accept_paragraph_plus = 0.00 s 4861s [ 173/8505] TestRDocMarkupToTableOfContents#test_accept_list_item_end_label = 0.00 s 4861s [ 174/8505] TestRDocMarkupToTableOfContents#test_accept_list_start_bullet = 0.00 s 4861s [ 175/8505] TestRDocMarkupToTableOfContents#test_accept_document_omit_headings_below = 0.00 s 4861s [ 176/8505] TestRDocMarkupToTableOfContents#test_accept_list_start_note = 0.00 s 4861s [ 177/8505] TestRDocMarkupToTableOfContents#test_accept_list_end_lalpha = 0.00 s 4861s [ 178/8505] TestRDocMarkupToTableOfContents#test_accept_raw = 0.00 s 4861s [ 179/8505] TestRDocMarkupToTableOfContents#test_accept_list_item_start_note = 0.00 s 4861s [ 180/8505] TestRDocMarkupToTableOfContents#test_accept_list_item_end_lalpha = 0.00 s 4861s [ 181/8505] TestRDocMarkupToTableOfContents#test_accept_list_item_start_lalpha = 0.00 s 4861s [ 182/8505] TestRDocMarkupToTableOfContents#test_end_accepting = 0.00 s 4861s [ 183/8505] TestRDocMarkupToTableOfContents#test_accept_heading_suppressed = 0.00 s 4861s [ 184/8505] TestRDocMarkupToTableOfContents#test_accept_list_item_start_note_multi_label = 0.01 s 4861s [ 185/8505] TestRDocMarkupToTableOfContents#test_accept_list_item_start_note_multi_description = 0.00 s 4861s [ 186/8505] TestRDocMarkupToTableOfContents#test_accept_list_start_number = 0.00 s 4861s [ 187/8505] TestRDocMarkupToTableOfContents#test_accept_list_end_note = 0.00 s 4861s [ 188/8505] TestRDocMarkupToTableOfContents#test_accept_heading_4 = 0.00 s 4861s [ 189/8505] TestRDocMarkupToTableOfContents#test_accept_list_start_label = 0.00 s 4861s [ 190/8505] TestRDocMarkupToTableOfContents#test_accept_heading_2 = 0.00 s 4861s [ 191/8505] TestRDocMarkupToTableOfContents#test_accept_paragraph_star = 0.00 s 4861s [ 192/8505] TestRDocMarkupToTableOfContents#test_accept_blank_line = 0.00 s 4861s [ 193/8505] TestRDocMarkupToTableOfContents#test_accept_paragraph = 0.00 s 4861s [ 194/8505] TestRDocMarkupToTableOfContents#test_accept_paragraph_br = 0.00 s 4861s [ 195/8505] TestRDocMarkupToTableOfContents#test_accept_list_item_start_note_2 = 0.00 s 4861s [ 196/8505] TestRDocMarkupToTableOfContents#test_start_accepting = 0.00 s 4861s [ 197/8505] TestRDocMarkupToTableOfContents#test_accept_list_item_end_note = 0.00 s 4861s [ 198/8505] TestSocket_UNIXSocket#test_abstract_namespace = 0.00 s 4861s [ 199/8505] TestSocket_UNIXSocket#test_abstract_unix_socket_econnrefused = 0.00 s 4861s [ 200/8505] TestSocket_UNIXSocket#test_epipe = 0.00 s 4861s [ 201/8505] TestSocket_UNIXSocket#test_autobind = 0.00 s 4861s [ 202/8505] TestSocket_UNIXSocket#test_sendcred_cmsgcred = 0.00 s 4861s [ 203/8505] TestSocket_UNIXSocket#test_getcred_ucred = 0.00 s 4861s [ 204/8505] TestSocket_UNIXSocket#test_sendmsg_ancillarydata_unix_rights = 0.00 s 4861s [ 205/8505] TestSocket_UNIXSocket#test_getcred_xucred = 0.00 s 4861s [ 206/8505] TestSocket_UNIXSocket#test_sendmsg = 0.00 s 4861s [ 207/8505] TestSocket_UNIXSocket#test_open_nul_byte = 0.00 s 4861s [ 208/8505] TestSocket_UNIXSocket#test_noname_unpack_sockaddr_un = 0.00 s 4861s [ 209/8505] TestSocket_UNIXSocket#test_fd_passing_n2 = 0.00 s 4861s [ 210/8505] TestSocket_UNIXSocket#test_sendcred_ucred = 0.00 s 4861s [ 211/8505] TestSocket_UNIXSocket#test_sendmsg_ancillarydata_int = 0.00 s 4861s [ 212/8505] TestSocket_UNIXSocket#test_abstract_unix_server_socket = 0.00 s 4861s [ 213/8505] TestSocket_UNIXSocket#test_noname_recvfrom = 0.00 s 4861s [ 214/8505] TestSocket_UNIXSocket#test_recvmsg = 0.00 s 4861s [ 215/8505] TestSocket_UNIXSocket#test_too_long_path = 0.00 s 4861s [ 216/8505] TestSocket_UNIXSocket#test_initialize = 0.01 s 4861s [ 217/8505] TestSocket_UNIXSocket#test_abstract_unix_server = 0.00 s 4861s [ 218/8505] TestSocket_UNIXSocket#test_fd_passing_class_mode = 0.00 s 4861s [ 219/8505] TestSocket_UNIXSocket#test_unix_socket_pair_close_on_exec = 0.00 s 4861s [ 220/8505] TestSocket_UNIXSocket#test_noname_path = 0.00 s 4861s [ 221/8505] TestSocket_UNIXSocket#test_fd_passing_n = 0.00 s 4861s [ 222/8505] TestSocket_UNIXSocket#test_noname_addr = 0.00 s 4861s [ 223/8505] TestSocket_UNIXSocket#test_sendcred_sockcred = 0.00 s 4861s [ 224/8505] TestSocket_UNIXSocket#test_noname_recv_nonblock = 0.00 s 4861s [ 225/8505] TestSocket_UNIXSocket#test_noname_peeraddr = 0.00 s 4861s [ 226/8505] TestRDocContext#test_each_method_enumerator = 0.12 s 4861s [ 227/8505] TestRDocContext#test_find_class_method_named = 0.07 s 4861s [ 228/8505] TestRDocContext#test_child_name = 0.06 s 4861s [ 229/8505] TestRDocContext#test_methods_by_type = 0.11 s 4861s [ 230/8505] TestRDocContext#test_add_method_alias = 0.10 s 4861s [ 231/8505] TestRDocContext#test_add_section = 0.11 s 4862s [ 232/8505] TestRDocContext#test_add_method = 0.10 s 4862s [ 233/8505] TestRDocContext#test_add_alias_method_attr = 0.09 s 4862s [ 234/8505] TestRDocContext#test_section_contents_only_default = 0.07 s 4862s [ 235/8505] TestRDocContext#test_visibility_def = 0.13 s 4862s [ 236/8505] TestRDocContext#test_add_to_temporary_section = 0.08 s 4862s [ 237/8505] TestRDocContext#test_remove_invisible_protected = 0.10 s 4862s [ 238/8505] TestRDocContext#test_section_contents_unused = 0.12 s 4862s [ 239/8505] TestRDocContext#test_remove_invisible_public_force = 0.07 s 4862s [ 240/8505] TestRDocContext#test_sort_sections = 0.06 s 4862s [ 241/8505] TestRDocContext#test_methods_matching = 0.07 s 4862s [ 242/8505] TestRDocContext#test_add_to_done_documenting = 0.06 s 4862s [ 243/8505] TestRDocContext#test_section_contents_no_default = 0.06 s 4862s [ 244/8505] TestRDocContext#test_current_section = 0.05 s 4862s [ 245/8505] TestRDocContext#test_add_class_object = 0.07 s 4863s [ 246/8505] TestRDocContext#test_remove_invisible_private = 0.08 s 4863s [ 247/8505] TestRDocContext#test_find_enclosing_module_named = 0.08 s 4863s [ 248/8505] TestRDocContext#test_find_method = 0.14 s 4863s [ 249/8505] TestRDocContext#test_add_extend = 0.05 s 4863s [ 250/8505] TestRDocContext#test_find_symbol_module = 0.06 s 4863s [ 251/8505] TestRDocContext#test_remove_invisible_in_public = 0.08 s 4863s [ 252/8505] TestRDocContext#test_add_class = 0.06 s 4863s [ 253/8505] TestRDocContext#test_each_section_enumerator = 0.05 s 4863s [ 254/8505] TestRDocContext#test_add_to = 0.06 s 4863s [ 255/8505] TestRDocContext#test_find_attribute_named = 0.05 s 4863s [ 256/8505] TestRDocContext#test_add_module_class = 0.06 s 4863s [ 257/8505] TestRDocContext#test_add_require = 0.10 s 4863s [ 258/8505] TestRDocContext#test_add_alias = 0.06 s 4863s [ 259/8505] TestRDocContext#test_find_constant_named = 0.06 s 4863s [ 260/8505] TestRDocContext#test_find_symbol = 0.06 s 4864s [ 261/8505] TestRDocContext#test_add_alias_method_singleton = 0.06 s 4864s [ 262/8505] TestRDocContext#test_add_module_alias = 0.06 s 4864s [ 263/8505] TestRDocContext#test_remove_invisible_in_protected = 0.10 s 4864s [ 264/8505] TestRDocContext#test_add_to_no_document_self = 0.06 s 4864s [ 265/8505] TestRDocContext#test_methods_by_type_section = 0.06 s 4864s [ 266/8505] TestRDocContext#test_add_module_alias_top_level = 0.06 s 4864s [ 267/8505] TestRDocContext#test_sort_sections_tomdoc_missing = 0.10 s 4864s [ 268/8505] TestRDocContext#test_add_method_duplicate = 0.08 s 4864s [ 269/8505] TestRDocContext#test_sort_sections_tomdoc = 0.06 s 4864s [ 270/8505] TestRDocContext#test_fully_documented_eh = 0.08 s 4864s [ 271/8505] TestRDocContext#test_find_module_named = 0.06 s 4864s [ 272/8505] TestRDocContext#test_initialize = 0.09 s 4864s [ 273/8505] TestRDocContext#test_spaceship = 0.05 s 4864s [ 274/8505] TestRDocContext#test_add_class_upgrade = 0.07 s 4865s [ 275/8505] TestRDocContext#test_each_section = 0.15 s 4865s [ 276/8505] TestRDocContext#test_each_section_only_display = 0.05 s 4865s [ 277/8505] TestRDocContext#test_add = 0.05 s 4865s [ 278/8505] TestRDocContext#test_add_module = 0.07 s 4865s [ 279/8505] TestRDocContext#test_add_class_superclass = 0.20 s 4865s [ 280/8505] TestRDocContext#test_find_local_symbol = 0.06 s 4865s [ 281/8505] TestRDocContext#test_find_instance_method_named = 0.05 s 4865s [ 282/8505] TestRDocContext#test_find_file_named = 0.05 s 4865s [ 283/8505] TestRDocContext#test_add_section_no_comment = 0.06 s 4865s [ 284/8505] TestRDocContext#test_add_class_singleton = 0.05 s 4866s [ 285/8505] TestRDocContext#test_add_alias_method = 0.18 s 4866s [ 286/8505] TestRDocContext#test_classes = 0.07 s 4866s [ 287/8505] TestRDocContext#test_remove_invisible_in_public_force = 0.04 s 4866s [ 288/8505] TestRDocContext#test_add_method_duplicate_loading = 0.11 s 4866s [ 289/8505] TestRDocContext#test_equals2 = 0.05 s 4866s [ 290/8505] TestRDocContext#test_methods_matching_singleton = 0.04 s 4866s [ 291/8505] TestRDocContext#test_add_constant = 0.04 s 4866s [ 292/8505] TestRDocContext#test_find_symbol_method = 0.07 s 4866s [ 293/8505] TestRDocContext#test_add_class_basic_object = 0.06 s 4866s [ 294/8505] TestRDocContext#test_set_current_section = 0.10 s 4866s [ 295/8505] TestRDocContext#test_section_contents = 0.05 s 4866s [ 296/8505] TestRDocContext#test_find_method_named = 0.11 s 4866s [ 297/8505] TestRDocContext#test_add_include = 0.05 s 4866s [ 298/8505] TestRDocContext#test_remove_invisible_in_protected_force = 0.05 s 4866s [ 299/8505] TestRDocContext#test_remove_invisible_nodoc = 0.05 s 4866s [ 300/8505] TestRDocContext#test_defined_in_eh = 0.05 s 4867s [ 301/8505] TestRDocContext#test_methods_matching_inherit = 0.05 s 4867s [ 302/8505] TestRDocContext#test_remove_invisible_public = 0.05 s 4867s [ 303/8505] TestRDocRdInlineParser#test_parse_ref_quote_content = 0.01 s 4867s [ 304/8505] TestRDocRdInlineParser#test_parse_ref_substitute_multi_content3 = 0.01 s 4867s [ 305/8505] TestRDocRdInlineParser#test_parse_ref_substitute_quote = 0.01 s 4867s [ 306/8505] TestRDocRdInlineParser#test_parse_var = 0.00 s 4867s [ 307/8505] TestRDocRdInlineParser#test_parse_footnote = 0.00 s 4867s [ 308/8505] TestRDocRdInlineParser#test_parse_verb = 0.00 s 4867s [ 309/8505] TestRDocRdInlineParser#test_parse_kbd = 0.00 s 4867s [ 310/8505] TestRDocRdInlineParser#test_parse_index = 0.00 s 4867s [ 311/8505] TestRDocRdInlineParser#test_parse_verb_backslash_backslash = 0.00 s 4867s [ 312/8505] TestRDocRdInlineParser#test_parse_verb_emphasis = 0.00 s 4867s [ 313/8505] TestRDocRdInlineParser#test_parse_ref_substitute_multi_content = 0.01 s 4867s [ 314/8505] TestRDocRdInlineParser#test_parse_ref_substitute_filename_quote = 0.00 s 4867s [ 315/8505] TestRDocRdInlineParser#test_parse = 0.00 s 4867s [ 316/8505] TestRDocRdInlineParser#test_parse_ref_substitute_url = 0.01 s 4867s [ 317/8505] TestRDocRdInlineParser#test_parse_ref_quote_content_multi = 0.01 s 4867s [ 318/8505] TestRDocRdInlineParser#test_parse_verb_multiple = 0.00 s 4867s [ 319/8505] TestRDocRdInlineParser#test_parse_verb_backslash_quote = 0.00 s 4867s [ 320/8505] TestRDocRdInlineParser#test_parse_ref_filename_quote = 0.00 s 4867s [ 321/8505] TestRDocRdInlineParser#test_parse_newline = 0.00 s 4867s [ 322/8505] TestRDocRdInlineParser#test_parse_ref = 0.00 s 4867s [ 323/8505] TestRDocRdInlineParser#test_parse_ref_substitute_filename = 0.00 s 4867s [ 324/8505] TestRDocRdInlineParser#test_parse_multiple = 0.00 s 4867s [ 325/8505] TestRDocRdInlineParser#test_parse_em = 0.00 s 4867s [ 326/8505] TestRDocRdInlineParser#test_parse_ref_substitute_quote_content = 0.00 s 4867s [ 327/8505] TestRDocRdInlineParser#test_parse_ref_url = 0.00 s 4867s [ 328/8505] TestRDocRdInlineParser#test_parse_ref_substitute_element_quote = 0.00 s 4867s [ 329/8505] TestRDocRdInlineParser#test_parse_verb_backslash = 0.00 s 4867s [ 330/8505] TestRDocRdInlineParser#test_parse_ref_quote = 0.00 s 4867s [ 331/8505] TestRDocRdInlineParser#test_parse_quote = 0.00 s 4867s [ 332/8505] TestRDocRdInlineParser#test_parse_ref_substitute_multi_content2 = 0.00 s 4867s [ 333/8505] TestRDocRdInlineParser#test_parse_ref_substitute = 0.00 s 4867s [ 334/8505] TestRDocRdInlineParser#test_parse_ref_substitute_filename_label = 0.00 s 4867s [ 335/8505] TestRDocRdInlineParser#test_parse_ref_em = 0.00 s 4867s [ 336/8505] TestRDocRdInlineParser#test_parse_code = 0.00 s 4867s [ 337/8505] TestRDocRdInlineParser#test_parse_ref_filename = 0.00 s 4867s [ 338/8505] TestNetHTTPForceEncoding#test_response_body_encoding_true_with_content_type = 0.07 s 4867s [ 339/8505] TestNetHTTPForceEncoding#test_response_body_encoding_encoding_without_content_type = 0.04 s 4867s [ 340/8505] TestNetHTTPForceEncoding#test_response_body_encoding_true_without_content_type = 0.21 s 4867s [ 341/8505] TestNetHTTPForceEncoding#test_response_body_encoding_string_without_content_type = 0.02 s 4867s [ 342/8505] TestNetHTTPForceEncoding#test_response_body_encoding_false = 0.02 s 4867s [ 343/8505] JSONEncodingTest#test_chars = 0.03 s 4867s [ 344/8505] JSONEncodingTest#test_parse = 0.01 s 4867s [ 345/8505] JSONEncodingTest#test_generate = 0.00 s 4867s [ 346/8505] JSONEncodingTest#test_unicode = 0.00 s 4867s [ 347/8505] TestResolvAddr#test_valid_ipv6_link_local_address = 0.00 s 4867s [ 348/8505] TestResolvAddr#test_valid_socket_ip_address_list = 0.01 s 4867s [ 349/8505] TestResolvAddr#test_invalid_byte_comment = 0.01 s 4867s [ 350/8505] TestResolvAddr#test_hosts_by_command = 0.01 s 4867s [ 351/8505] TestResolvAddr#test_invalid_ipv4_address = 0.15 s 4867s [ 352/8505] PrettyPrintTest::TailGroup#test_1 = 0.01 s 4867s [ 353/8505] TestNetHTTPContinue#test_expect_continue = 0.10 s 4867s [ 354/8505] TestNetHTTPContinue#test_expect_continue_error_before_body = 0.05 s 4868s [ 355/8505] TestNetHTTPContinue#test_expect_continue_error = 0.21 s 4868s [ 356/8505] TestNetHTTPContinue#test_expect_continue_timeout = 0.23 s 4869s [ 357/8505] TestNetHTTPContinue#test_expect_continue_error_while_waiting = 0.61 s 4869s [ 358/8505] TestOpenURI#test_content_encoding = 0.18 s 4869s [ 359/8505] TestOpenURI#test_multiple_cookies = 0.05 s 4869s [ 360/8505] TestOpenURI#test_close_in_block_big = 0.04 s 4869s [ 361/8505] TestOpenURI#test_read_timeout = 0.22 s 4869s [ 362/8505] TestOpenURI#test_redirect_invalid = 0.02 s 4869s [ 363/8505] TestOpenURI#test_open_too_many_arg = 0.00 s 4869s [ 364/8505] TestOpenURI#test_last_modified = 0.02 s 4869s [ 365/8505] TestOpenURI#test_redirect_relative = 0.03 s 4869s [ 366/8505] TestOpenURI#test_proxy_http_basic_authentication_failure = 0.05 s 4869s [ 367/8505] TestOpenURI#test_multi_proxy_opt = 0.00 s 4869s [ 368/8505] TestOpenURI#test_header = 0.07 s 4869s [ 369/8505] TestOpenURI#test_404 = 0.06 s 4869s [ 370/8505] TestOpenURI#test_progress_chunked = 0.04 s 4869s [ 371/8505] TestOpenURI#test_open_uri = 0.04 s 4869s [ 372/8505] TestOpenURI#test_redirect = 0.10 s 4869s [ 373/8505] TestOpenURI#test_non_http_proxy = 0.00 s 4870s [ 374/8505] TestOpenURI#test_redirect_auth_failure_r2 = 0.03 s 4870s [ 375/8505] TestOpenURI#test_proxy_http_basic_authentication_success = 0.09 s 4870s [ 376/8505] TestOpenURI#test_encoding = 0.10 s 4870s [ 377/8505] TestOpenURI#test_quoted_attvalue = 0.03 s 4870s [ 378/8505] TestOpenURI#test_without_block = 0.02 s 4870s [ 379/8505] TestOpenURI#test_redirect_loop = 0.06 s 4870s [ 380/8505] TestOpenURI#test_uri_read = 0.02 s 4870s [ 381/8505] TestOpenURI#test_redirect_auth_success = 0.02 s 4870s [ 382/8505] TestOpenURI#test_redirect_auth_failure_r1 = 0.03 s 4870s [ 383/8505] TestOpenURI#test_200 = 0.02 s 4870s [ 384/8505] TestOpenURI#test_mode = 0.08 s 4870s [ 385/8505] TestOpenURI#test_close_in_block_small = 0.02 s 4870s [ 386/8505] TestOpenURI#test_proxy = 0.11 s 4870s [ 387/8505] TestOpenURI#test_200_uri_open = 0.02 s 4871s [ 388/8505] TestOpenURI#test_open_timeout = 0.51 s 4871s [ 389/8505] TestOpenURI#test_authenticated_proxy_http_basic_authentication_success = 0.05 s 4871s [ 390/8505] TestOpenURI#test_ftp_over_http_proxy = 0.03 s 4871s [ 391/8505] TestOpenURI#test_ftp_over_http_proxy_auth = 0.03 s 4871s [ 392/8505] TestOpenURI#test_userinfo = 0.00 s 4871s [ 393/8505] TestOpenURI#test_progress = 0.04 s 4871s [ 394/8505] TestOpenURI#test_invalid_option = 0.00 s 4871s [ 395/8505] TestOpenURI#test_200big = 0.03 s 4871s [ 396/8505] JSONAdditionTest#test_core = 0.04 s 4871s [ 397/8505] JSONAdditionTest#test_extended_json_fail2 = 0.06 s 4871s [ 398/8505] JSONAdditionTest#test_extended_json_default = 0.00 s 4871s [ 399/8505] JSONAdditionTest#test_raw_strings = 0.01 s 4871s [ 400/8505] JSONAdditionTest#test_set = 0.01 s 4871s [ 401/8505] JSONAdditionTest#test_extended_json = 0.00 s 4871s [ 402/8505] JSONAdditionTest#test_bigdecimal = 0.01 s 4871s [ 403/8505] JSONAdditionTest#test_ostruct = 0.01 s 4871s [ 404/8505] JSONAdditionTest#test_extended_json_fail1 = 0.00 s 4871s [ 405/8505] JSONAdditionTest#test_extended_json_disabled = 0.04 s 4871s [ 406/8505] JSONAdditionTest#test_rational_complex = 0.00 s 4871s [ 407/8505] OpenSSL::TestKDF#test_pbkdf2_hmac_sha1_rfc6070_c_4096_len_16 = 0.10 s 4871s [ 408/8505] OpenSSL::TestKDF#test_scrypt_rfc7914_second = 0.01 s 4873s [ 409/8505] OpenSSL::TestKDF#test_pbkdf2_hmac_sha256_c_20000_len_32 = 1.26 s 4873s [ 410/8505] OpenSSL::TestKDF#test_pkcs5_pbkdf2_hmac_compatibility = 0.00 s 4873s [ 411/8505] OpenSSL::TestKDF#test_hkdf_rfc5869_test_case_4 = 0.00 s 4873s [ 412/8505] OpenSSL::TestKDF#test_pbkdf2_hmac_sha1_rfc6070_c_4096_len_25 = 0.14 s 4873s [ 413/8505] OpenSSL::TestKDF#test_pbkdf2_hmac_sha1_rfc6070_c_4096_len_20 = 0.08 s 4873s [ 414/8505] OpenSSL::TestKDF#test_pbkdf2_hmac_sha1_rfc6070_c_1_len_20 = 0.00 s 4873s [ 415/8505] OpenSSL::TestKDF#test_hkdf_rfc5869_test_case_1 = 0.00 s 4873s [ 416/8505] OpenSSL::TestKDF#test_hkdf_rfc5869_test_case_3 = 0.00 s 4873s [ 417/8505] OpenSSL::TestKDF#test_scrypt_rfc7914_first = 0.00 s 4873s [ 418/8505] OpenSSL::TestKDF#test_pbkdf2_hmac_sha1_rfc6070_c_2_len_20 = 0.00 s 4873s [ 419/8505] Reline::LineEditor::StringProcessingTest#test_calculate_width_with_escape_sequence = 0.04 s 4873s [ 420/8505] Reline::LineEditor::StringProcessingTest#test_completion_proc_with_preposing_and_postposing = 0.05 s 4873s [ 421/8505] Reline::LineEditor::StringProcessingTest#test_calculate_width = 0.00 s 4873s [ 422/8505] CGIMultipartTest#test_cgi_multipart_badbody = 0.05 s 4873s [ 423/8505] CGIMultipartTest#test_cgi_multipart_maxmultipartlength = 0.02 s 4873s [ 424/8505] CGIMultipartTest#test_cgi_multipart_stringio = 0.02 s 4873s [ 425/8505] CGIMultipartTest#test_cgi_multipart_tempfile = 0.02 s 4876s [ 426/8505] CGIMultipartTest#test_cgi_multipart_without_tempfile = 3.09 s 4876s [ 427/8505] CGIMultipartTest#test_cgi_multipart_maxmultipartcount = 0.16 s 4876s [ 428/8505] CGIMultipartTest#test_cgi_multipart_maxmultipartlength_lambda = 0.00 s 4876s [ 429/8505] CGIMultipartTest#test_cgi_multipart_boundary_10240 = 0.00 s 4876s [ 430/8505] CGIMultipartTest#test_cgi_multipart_quoteboundary = 0.00 s 4876s [ 431/8505] TestRDocMarkup#test_convert = 0.05 s 4876s [ 432/8505] TestRDocMarkup#test_convert_custom_markup = 0.01 s 4876s [ 433/8505] TestRDocMarkup#test_class_parse = 0.00 s 4876s [ 434/8505] TestRDocMarkup#test_convert_document = 0.04 s 4876s [ 435/8505] TestRDocMarkupToMarkdown#test_accept_heading_1 = 0.01 s 4876s [ 436/8505] TestRDocMarkupToMarkdown#test_accept_heading_3 = 0.02 s 4876s [ 437/8505] TestRDocMarkupToMarkdown#test_accept_heading_suppressed_crossref = 0.00 s 4876s [ 438/8505] TestRDocMarkupToMarkdown#test_accept_list_start_ualpha = 0.00 s 4876s [ 439/8505] TestRDocMarkupToMarkdown#test_accept_paragraph_break = 0.01 s 4876s [ 440/8505] TestRDocMarkupToMarkdown#test_accept_block_quote = 0.01 s 4876s [ 441/8505] TestRDocMarkupToMarkdown#test_handle_rdoc_link_label_footmark = 0.00 s 4876s [ 442/8505] TestRDocMarkupToMarkdown#test_accept_list_item_start_label = 0.00 s 4876s [ 443/8505] TestRDocMarkupToMarkdown#test_accept_list_end_bullet = 0.00 s 4876s [ 444/8505] TestRDocMarkupToMarkdown#test_handle_rdoc_link_label_foottext = 0.01 s 4876s [ 445/8505] TestRDocMarkupToMarkdown#test_accept_rule = 0.00 s 4876s [ 446/8505] TestRDocMarkupToMarkdown#test_attributes = 0.00 s 4876s [ 447/8505] TestRDocMarkupToMarkdown#test_accept_list_item_end_bullet = 0.01 s 4876s [ 448/8505] TestRDocMarkupToMarkdown#test_convert_TIDYLINK = 0.01 s 4876s [ 449/8505] TestRDocMarkupToMarkdown#test_accept_paragraph_underscore = 0.00 s 4876s [ 450/8505] TestRDocMarkupToMarkdown#test_accept_list_item_start_bullet = 0.00 s 4876s [ 451/8505] TestRDocMarkupToMarkdown#test_convert_RDOCLINK_image = 0.00 s 4876s [ 452/8505] TestRDocMarkupToMarkdown#test_accept_list_end_label = 0.00 s 4876s [ 453/8505] TestRDocMarkupToMarkdown#test_accept_heading = 0.00 s 4876s [ 454/8505] TestRDocMarkupToMarkdown#test_accept_list_start_lalpha = 0.00 s 4876s [ 455/8505] TestRDocMarkupToMarkdown#test_list_nested = 0.01 s 4876s [ 456/8505] TestRDocMarkupToMarkdown#test_accept_verbatim_indent = 0.00 s 4876s [ 457/8505] TestRDocMarkupToMarkdown#test_accept_heading_b = 0.00 s 4876s [ 458/8505] TestRDocMarkupToMarkdown#test_accept_list_item_start_number = 0.00 s 4876s [ 459/8505] TestRDocMarkupToMarkdown#test_accept_document = 0.00 s 4876s [ 460/8505] TestRDocMarkupToMarkdown#test_accept_list_item_end_number = 0.00 s 4876s [ 461/8505] TestRDocMarkupToMarkdown#test_accept_verbatim_big_indent = 0.00 s 4876s [ 462/8505] TestRDocMarkupToMarkdown#test_accept_list_end_number = 0.00 s 4876s [ 463/8505] TestRDocMarkupToMarkdown#test_accept_paragraph_i = 0.00 s 4876s [ 464/8505] TestRDocMarkupToMarkdown#test_accept_verbatim = 0.00 s 4876s [ 465/8505] TestRDocMarkupToMarkdown#test_handle_rdoc_link_ref = 0.00 s 4876s [ 466/8505] TestRDocMarkupToMarkdown#test_list_verbatim = 0.00 s 4876s [ 467/8505] TestRDocMarkupToMarkdown#test_accept_heading_indent = 0.04 s 4877s [ 468/8505] TestRDocMarkupToMarkdown#test_accept_list_end_ualpha = 0.01 s 4877s [ 469/8505] TestRDocMarkupToMarkdown#test_accept_list_item_end_ualpha = 0.00 s 4877s [ 470/8505] TestRDocMarkupToMarkdown#test_handle_rdoc_link_label_label = 0.01 s 4877s [ 471/8505] TestRDocMarkupToMarkdown#test_accept_rule_indent = 0.00 s 4877s [ 472/8505] TestRDocMarkupToMarkdown#test_accept_list_item_start_ualpha = 0.00 s 4877s [ 473/8505] TestRDocMarkupToMarkdown#test_accept_paragraph_b = 0.00 s 4877s [ 474/8505] TestRDocMarkupToMarkdown#test_accept_paragraph_indent = 0.01 s 4877s [ 475/8505] TestRDocMarkupToMarkdown#test_accept_paragraph_plus = 0.00 s 4877s [ 476/8505] TestRDocMarkupToMarkdown#test_accept_list_item_end_label = 0.00 s 4877s [ 477/8505] TestRDocMarkupToMarkdown#test_accept_list_start_bullet = 0.00 s 4877s [ 478/8505] TestRDocMarkupToMarkdown#test_accept_list_start_note = 0.00 s 4877s [ 479/8505] TestRDocMarkupToMarkdown#test_accept_list_end_lalpha = 0.00 s 4877s [ 480/8505] TestRDocMarkupToMarkdown#test_accept_raw = 0.00 s 4877s [ 481/8505] TestRDocMarkupToMarkdown#test_accept_list_item_start_note = 0.00 s 4877s [ 482/8505] TestRDocMarkupToMarkdown#test_accept_list_item_end_lalpha = 0.00 s 4877s [ 483/8505] TestRDocMarkupToMarkdown#test_accept_list_item_start_lalpha = 0.00 s 4877s [ 484/8505] TestRDocMarkupToMarkdown#test_end_accepting = 0.00 s 4877s [ 485/8505] TestRDocMarkupToMarkdown#test_accept_paragraph_wrap = 0.01 s 4877s [ 486/8505] TestRDocMarkupToMarkdown#test_accept_list_item_start_note_multi_label = 0.00 s 4877s [ 487/8505] TestRDocMarkupToMarkdown#test_accept_list_item_start_note_multi_description = 0.00 s 4877s [ 488/8505] TestRDocMarkupToMarkdown#test_accept_list_start_number = 0.00 s 4877s [ 489/8505] TestRDocMarkupToMarkdown#test_accept_list_end_note = 0.00 s 4877s [ 490/8505] TestRDocMarkupToMarkdown#test_accept_heading_4 = 0.00 s 4877s [ 491/8505] TestRDocMarkupToMarkdown#test_accept_list_start_label = 0.00 s 4877s [ 492/8505] TestRDocMarkupToMarkdown#test_accept_heading_2 = 0.00 s 4877s [ 493/8505] TestRDocMarkupToMarkdown#test_accept_paragraph_star = 0.00 s 4877s [ 494/8505] TestRDocMarkupToMarkdown#test_accept_blank_line = 0.00 s 4877s [ 495/8505] TestRDocMarkupToMarkdown#test_accept_paragraph = 0.00 s 4877s [ 496/8505] TestRDocMarkupToMarkdown#test_convert_RDOCLINK = 0.00 s 4877s [ 497/8505] TestRDocMarkupToMarkdown#test_accept_paragraph_br = 0.00 s 4877s [ 498/8505] TestRDocMarkupToMarkdown#test_accept_list_item_start_note_2 = 0.01 s 4877s [ 499/8505] TestRDocMarkupToMarkdown#test_start_accepting = 0.00 s 4877s [ 500/8505] TestRDocMarkupToMarkdown#test_accept_list_item_end_note = 0.00 s 4877s [ 501/8505] TestCSVWriteForceQuotesGenerateLine#test_false = 0.00 s 4877s [ 502/8505] TestCSVWriteForceQuotesGenerateLine#test_field_name = 0.01 s 4877s [ 503/8505] TestCSVWriteForceQuotesGenerateLine#test_field_unknown = 0.01 s 4877s [ 504/8505] TestCSVWriteForceQuotesGenerateLine#test_true = 0.00 s 4877s [ 505/8505] TestCSVWriteForceQuotesGenerateLine#test_field_name_without_headers = 0.00 s 4877s [ 506/8505] TestCSVWriteForceQuotesGenerateLine#test_default = 0.00 s 4877s [ 507/8505] TestCSVWriteForceQuotesGenerateLine#test_field_index = 0.00 s 4877s [ 508/8505] Psych::TestStream#test_predicate_document? = 0.04 s 4877s [ 509/8505] Psych::TestStream#test_parse_stream_break = 0.01 s 4877s [ 510/8505] Psych::TestStream#test_load_stream_yields_documents = 0.03 s 4877s [ 511/8505] Psych::TestStream#test_load_partial = 0.00 s 4877s [ 512/8505] Psych::TestStream#test_start_takes_block = 0.03 s 4877s [ 513/8505] Psych::TestStream#test_explicit_documents = 0.03 s 4877s [ 514/8505] Psych::TestStream#test_no_backreferences = 0.01 s 4877s [ 515/8505] Psych::TestStream#test_predicate_stream? = 0.02 s 4877s [ 516/8505] Psych::TestStream#test_load_stream_break = 0.01 s 4877s [ 517/8505] Psych::TestStream#test_predicate_sequence? = 0.00 s 4877s [ 518/8505] Psych::TestStream#test_predicate_mapping? = 0.00 s 4877s [ 519/8505] Psych::TestStream#test_parse_partial = 0.00 s 4877s [ 520/8505] Psych::TestStream#test_parse_stream_yields_documents = 0.00 s 4877s [ 521/8505] Psych::TestStream#test_predicate_scalar? = 0.00 s 4877s [ 522/8505] Psych::TestStream#test_predicate_alias? = 0.00 s 4877s [ 523/8505] TestRDocGeneratorRI#test_generate_dry_run = 0.02 s 4877s [ 524/8505] TestRDocGeneratorRI#test_generate = 0.08 s 4877s [ 525/8505] TestRDocMarkupFormatter#test_add_regexp_handling_TIDYLINK = 0.02 s 4877s [ 526/8505] TestRDocMarkupFormatter#test_parse_url_anchor = 0.01 s 4877s [ 527/8505] TestRDocMarkupFormatter#test_parse_url = 0.00 s 4877s [ 528/8505] TestRDocMarkupFormatter#test_parse_url_link_id = 0.00 s 4877s [ 529/8505] TestRDocMarkupFormatter#test_convert_tt_regexp_handling = 0.00 s 4877s [ 530/8505] TestRDocMarkupFormatter#test_class_gen_relative_url = 0.00 s 4877s [ 531/8505] TestRDocMarkupFormatter#test_add_regexp_handling_RDOCLINK = 0.00 s 4877s [ 532/8505] TestRDocMarkupFormatter#test_parse_url_scheme = 0.00 s 4877s [ 533/8505] TestRDocMarkupFormatter#test_parse_url_rdoc_label = 0.00 s 4877s [ 534/8505] TestRDocMarkupFormatter#test_parse_url_link = 0.00 s 4877s [ 535/8505] TestSyslog#test_instance = 0.00 s 4877s [ 536/8505] TestSyslog#test_opened? = 0.01 s 4877s [ 537/8505] TestSyslog#test_inspect = 0.00 s 4877s [ 538/8505] TestSyslog#test_close = 0.00 s 4877s [ 539/8505] TestSyslog#test_open = 0.00 s 4877s [ 540/8505] TestSyslog#test_new = 0.00 s 4877s [ 541/8505] TestCSVInterfaceReadWrite#test_instance_shortcut_with_io = 0.01 s 4877s [ 542/8505] TestCSVInterfaceReadWrite#test_filter_headers_array_write_headers = 0.05 s 4877s [ 543/8505] TestCSVInterfaceReadWrite#test_filter_headers_true_write_headers = 0.02 s 4877s [ 544/8505] TestCSVInterfaceReadWrite#test_instance_append = 0.00 s 4877s [ 545/8505] TestCSVInterfaceReadWrite#test_instance_same = 0.00 s 4877s [ 546/8505] TestCSVInterfaceReadWrite#test_instance_shortcut = 0.00 s 4877s [ 547/8505] TestCSVInterfaceReadWrite#test_filter = 0.01 s 4877s [ 548/8505] TestCSVInterfaceReadWrite#test_filter_headers_true = 0.00 s 4877s [ 549/8505] Reline::KillRing::Test#test_append_three = 0.02 s 4877s [ 550/8505] Reline::KillRing::Test#test_append_three_with_max_two = 0.00 s 4877s [ 551/8505] Reline::KillRing::Test#test_append_complex_chain = 0.00 s 4877s [ 552/8505] Reline::KillRing::Test#test_append_after = 0.00 s 4877s [ 553/8505] Reline::KillRing::Test#test_append_two = 0.00 s 4877s [ 554/8505] Reline::KillRing::Test#test_append_chain_two = 0.00 s 4877s [ 555/8505] Reline::KillRing::Test#test_append_four_with_max_two = 0.00 s 4877s [ 556/8505] Reline::KillRing::Test#test_append_one = 0.00 s 4877s [ 557/8505] Reline::KillRing::Test#test_enumerable = 0.00 s 4877s [ 558/8505] Reline::KillRing::Test#test_append_before = 0.00 s 4877s [ 559/8505] TestOptionParser::OptArg#test_abbrev = 0.05 s 4877s [ 560/8505] TestOptionParser::OptArg#test_order = 0.02 s 4877s [ 561/8505] TestOptionParser::OptArg#test_short = 0.01 s 4877s [ 562/8505] TestOptionParser::OptArg#test_hyphenize = 0.00 s 4877s [ 563/8505] TestOptionParser::OptArg#test_regexp = 0.01 s 4877s [ 564/8505] TestOptionParser::OptArg#test_nonopt_pattern = 0.01 s 4877s [ 565/8505] TestOptionParser::OptArg#test_into = 0.01 s 4877s [ 566/8505] TestOptionParser::OptArg#test_permute = 0.01 s 4877s [ 567/8505] TestOptionParser::OptArg#test_long = 0.01 s 4877s [ 568/8505] TestOptionParser::OptArg#test_require_exact = 0.02 s 4877s [ 569/8505] TestRDocParserChangeLog#test_continue_entry_body = 0.00 s 4879s [ 570/8505] TestRDocParserChangeLog#test_scan_git = 1.15 s 4879s [ 571/8505] TestRDocParserChangeLog#test_parse_entries_bad_time = 0.01 s 4879s [ 572/8505] TestRDocParserChangeLog#test_parse_entries = 0.00 s 4879s [ 573/8505] TestRDocParserChangeLog#test_class_can_parse = 0.01 s 4879s [ 574/8505] TestRDocParserChangeLog#test_scan = 0.02 s 4879s [ 575/8505] TestRDocParserChangeLog#test_parse_entries_git = 0.01 s 4879s [ 576/8505] TestRDocParserChangeLog#test_create_items = 0.00 s 4879s [ 577/8505] TestRDocParserChangeLog#test_continue_entry_body_empty = 0.00 s 4879s [ 578/8505] TestRDocParserChangeLog#test_continue_entry_body_function = 0.00 s 4879s [ 579/8505] TestRDocParserChangeLog#test_parse_entries_gnu = 0.00 s 4879s [ 580/8505] TestRDocParserChangeLog#test_group_entries = 0.00 s 4879s [ 581/8505] TestRDocParserChangeLog#test_create_entries = 0.01 s 4879s [ 582/8505] TestRDocParserChangeLog#test_create_entries_colons = 0.00 s 4879s [ 583/8505] TestRDocParserChangeLog#test_scan_git_commit_date = 0.10 s 4879s [ 584/8505] TestRDocParserChangeLog#test_create_document = 0.01 s 4879s [ 585/8505] JSONExtParserTest#test_allocate = 0.00 s 4879s [ 586/8505] TestRDocParser#test_class_for_forbidden = 0.01 s 4879s [ 587/8505] TestRDocParser#test_class_binary_japanese_text = 0.01 s 4879s [ 588/8505] TestRDocParser#test_class_use_markup_tomdoc = 0.00 s 4879s [ 589/8505] TestRDocParser#test_class_can_parse_zip = 0.00 s 4879s [ 590/8505] TestRDocParser#test_class_for_modeline = 0.01 s 4879s [ 591/8505] TestRDocParser#test_class_use_markup = 0.00 s 4879s [ 592/8505] TestRDocParser#test_class_use_markup_unknown = 0.00 s 4879s [ 593/8505] TestRDocParser#test_class_can_parse = 0.02 s 4879s [ 594/8505] TestRDocParser#test_check_modeline_coding = 0.00 s 4879s [ 595/8505] TestRDocParser#test_check_modeline_no_modeline = 0.00 s 4879s [ 596/8505] TestRDocParser#test_class_binary_japanese_rdoc = 0.00 s 4879s [ 597/8505] TestRDocParser#test_check_modeline_with_other = 0.00 s 4879s [ 598/8505] TestRDocParser#test_class_for_markup = 0.00 s 4879s [ 599/8505] TestRDocParser#test_class_use_markup_modeline = 0.00 s 4879s [ 600/8505] TestRDocParser#test_initialize = 0.00 s 4879s [ 601/8505] TestRDocParser#test_class_use_markup_markdown = 0.00 s 4879s [ 602/8505] TestRDocParser#test_class_use_markup_modeline_shebang = 0.00 s 4879s [ 603/8505] TestRDocParser#test_can_parse_modeline = 0.00 s 4879s [ 604/8505] TestRDocParser#test_class_binary_large_japanese_rdoc = 0.00 s 4879s [ 605/8505] TestRDocParser#test_class_binary_eh_ISO_2022_JP = 0.00 s 4879s [ 606/8505] TestRDocParser#test_class_for_executable = 0.01 s 4879s [ 607/8505] TestRDocParser#test_class_use_markup_none = 0.00 s 4879s [ 608/8505] TestRDocParser#test_check_modeline = 0.00 s 4879s [ 609/8505] TestRDocParser#test_class_use_markup_shebang = 0.00 s 4879s [ 610/8505] TestRDocParser#test_class_for_binary = 0.00 s 4879s [ 611/8505] TestRDocParser#test_class_binary_eh_marshal = 0.00 s 4879s [ 612/8505] Psych::TestObjectReferences#test_module_has_references = 0.02 s 4879s [ 613/8505] Psych::TestObjectReferences#test_complex_has_references = 0.05 s 4879s [ 614/8505] Psych::TestObjectReferences#test_struct_has_references = 0.01 s 4879s [ 615/8505] Psych::TestObjectReferences#test_float_references = 0.00 s 4879s [ 616/8505] Psych::TestObjectReferences#test_range_has_references = 0.01 s 4879s [ 617/8505] Psych::TestObjectReferences#test_regexp_references = 0.00 s 4879s [ 618/8505] Psych::TestObjectReferences#test_binary_references = 0.00 s 4879s [ 619/8505] Psych::TestObjectReferences#test_datetime_has_references = 0.12 s 4879s [ 620/8505] Psych::TestObjectReferences#test_class_has_references = 0.00 s 4879s [ 621/8505] Psych::TestObjectReferences#test_rational_has_references = 0.01 s 4879s [ 622/8505] OpenSSL::TestEOF1LowlevelSocket#test_eof_3 = 0.35 s 4880s [ 623/8505] OpenSSL::TestEOF1LowlevelSocket#test_eof_1 = 0.75 s 4881s [ 624/8505] OpenSSL::TestEOF1LowlevelSocket#test_eof_0 = 0.36 s 4881s [ 625/8505] OpenSSL::TestEOF1LowlevelSocket#test_eof_2 = 0.11 s 4881s [ 626/8505] OpenSSL::TestEOF1LowlevelSocket#test_eof_0_rw = 0.03 s 4881s [ 627/8505] TestDateCompat#test_compat = 0.00 s 4881s [ 628/8505] PPTestModule::PPDelegateTest#test_delegate_cycle = 0.04 s 4881s [ 629/8505] PPTestModule::PPDelegateTest#test_delegate = 0.00 s 4881s [ 630/8505] TestCSVWriteForceQuotesGenerate#test_false = 0.01 s 4881s [ 631/8505] TestCSVWriteForceQuotesGenerate#test_field_name = 0.01 s 4881s [ 632/8505] TestCSVWriteForceQuotesGenerate#test_field_unknown = 0.01 s 4881s [ 633/8505] TestCSVWriteForceQuotesGenerate#test_true = 0.00 s 4881s [ 634/8505] TestCSVWriteForceQuotesGenerate#test_field_name_without_headers = 0.00 s 4881s [ 635/8505] TestCSVWriteForceQuotesGenerate#test_default = 0.00 s 4881s [ 636/8505] TestCSVWriteForceQuotesGenerate#test_field_index = 0.00 s 4881s [ 637/8505] Reline::KeyActor::Emacs::Test#test_ed_transpose_words = 0.10 s 4881s [ 638/8505] Reline::KeyActor::Emacs::Test#test_ed_digit = 0.06 s 4881s [ 639/8505] Reline::KeyActor::Emacs::Test#test_completion_with_perfect_match = 0.04 s 4881s [ 640/8505] Reline::KeyActor::Emacs::Test#test_em_kill_region_mbchar = 0.04 s 4881s [ 641/8505] Reline::KeyActor::Emacs::Test#test_em_delete_prev_char_for_mbchar_by_plural_code_points = 0.05 s 4881s [ 642/8505] Reline::KeyActor::Emacs::Test#test_ed_insert_for_include_zwj_emoji = 0.04 s 4881s [ 643/8505] Reline::KeyActor::Emacs::Test#test_em_set_mark_and_em_exchange_mark = 0.04 s 4881s [ 644/8505] Reline::KeyActor::Emacs::Test#test_em_capitol_case_with_complex_example = 0.05 s 4881s [ 645/8505] Reline::KeyActor::Emacs::Test#test_ed_next_and_prev_char_for_mbchar_by_plural_code_points = 0.03 s 4881s [ 646/8505] Reline::KeyActor::Emacs::Test#test_halfwidth_kana_width_dakuten = 0.02 s 4881s [ 647/8505] Reline::KeyActor::Emacs::Test#test_em_upper_case_with_complex_example = 0.03 s 4881s [ 648/8505] Reline::KeyActor::Emacs::Test#test_ed_delete_prev_word_for_mbchar_by_plural_code_points = 0.03 s 4881s [ 649/8505] Reline::KeyActor::Emacs::Test#test_em_delete_prev_char_for_mbchar = 0.01 s 4881s [ 650/8505] Reline::KeyActor::Emacs::Test#test_em_delete_next_word = 0.03 s 4881s [ 651/8505] Reline::KeyActor::Emacs::Test#test_completion_with_completion_ignore_case = 0.03 s 4881s [ 652/8505] Reline::KeyActor::Emacs::Test#test_em_delete_for_mbchar_by_plural_code_points = 0.01 s 4882s [ 653/8505] Reline::KeyActor::Emacs::Test#test_completion_in_middle_of_line = 0.11 s 4882s [ 654/8505] Reline::KeyActor::Emacs::Test#test_ed_search_prev_history = 0.02 s 4882s [ 655/8505] Reline::KeyActor::Emacs::Test#test_em_lower_case_with_complex_example = 0.02 s 4882s [ 656/8505] Reline::KeyActor::Emacs::Test#test_ed_insert_for_include_valiation_selector = 0.00 s 4882s [ 657/8505] Reline::KeyActor::Emacs::Test#test_ed_clear_screen_with_inputed = 0.01 s 4882s [ 658/8505] Reline::KeyActor::Emacs::Test#test_ed_transpose_chars = 0.02 s 4882s [ 659/8505] Reline::KeyActor::Emacs::Test#test_em_delete_or_list = 0.01 s 4882s [ 660/8505] Reline::KeyActor::Emacs::Test#test_ed_move_to_end = 0.03 s 4882s [ 661/8505] Reline::KeyActor::Emacs::Test#test_em_prev_word_for_mbchar = 0.02 s 4882s [ 662/8505] Reline::KeyActor::Emacs::Test#test_em_delete = 0.00 s 4882s [ 663/8505] Reline::KeyActor::Emacs::Test#test_ed_move_to_beg_with_blank = 0.01 s 4882s [ 664/8505] Reline::KeyActor::Emacs::Test#test_search_history_to_back_in_the_middle_of_histories = 0.10 s 4882s [ 665/8505] Reline::KeyActor::Emacs::Test#test_search_history_by_last_determined = 0.06 s 4882s [ 666/8505] Reline::KeyActor::Emacs::Test#test_ed_kill_line = 0.00 s 4882s [ 667/8505] Reline::KeyActor::Emacs::Test#test_modify_lines_with_wrong_rs = 0.06 s 4882s [ 668/8505] Reline::KeyActor::Emacs::Test#test_search_history_twice = 0.01 s 4882s [ 669/8505] Reline::KeyActor::Emacs::Test#test_search_history_to_front = 0.01 s 4882s [ 670/8505] Reline::KeyActor::Emacs::Test#test_completion = 0.01 s 4882s [ 671/8505] Reline::KeyActor::Emacs::Test#test_em_exchange_mark_without_mark = 0.01 s 4882s [ 672/8505] Reline::KeyActor::Emacs::Test#test_ed_transpose_words_with_one_word = 0.01 s 4882s [ 673/8505] Reline::KeyActor::Emacs::Test#test_em_lower_case = 0.01 s 4882s [ 674/8505] Reline::KeyActor::Emacs::Test#test_ed_insert_mbchar_one = 0.00 s 4882s [ 675/8505] Reline::KeyActor::Emacs::Test#test_ed_insert_for_plural_mbchar_by_plural_code_points = 0.01 s 4882s [ 676/8505] Reline::KeyActor::Emacs::Test#test_em_next_word_for_mbchar = 0.03 s 4882s [ 677/8505] Reline::KeyActor::Emacs::Test#test_ed_newline_with_cr = 0.01 s 4882s [ 678/8505] Reline::KeyActor::Emacs::Test#test_ed_insert_two = 0.00 s 4882s [ 679/8505] Reline::KeyActor::Emacs::Test#test_ed_delete_prev_word_for_mbchar = 0.01 s 4882s [ 680/8505] Reline::KeyActor::Emacs::Test#test_em_upper_case = 0.01 s 4882s [ 681/8505] Reline::KeyActor::Emacs::Test#test_em_next_word_for_mbchar_by_plural_code_points = 0.01 s 4882s [ 682/8505] Reline::KeyActor::Emacs::Test#test_em_delete_next_word_for_mbchar = 0.01 s 4882s [ 683/8505] Reline::KeyActor::Emacs::Test#test_em_delete_prev_char = 0.00 s 4882s [ 684/8505] Reline::KeyActor::Emacs::Test#test_move_to_beg_end = 0.02 s 4882s [ 685/8505] Reline::KeyActor::Emacs::Test#test_em_kill_region_with_kill_ring = 0.01 s 4882s [ 686/8505] Reline::KeyActor::Emacs::Test#test_ed_transpose_chars_for_mbchar = 0.01 s 4882s [ 687/8505] Reline::KeyActor::Emacs::Test#test_move_next_and_prev_for_mbchar = 0.00 s 4882s [ 688/8505] Reline::KeyActor::Emacs::Test#test_ed_insert_for_mbchar_by_plural_code_points = 0.00 s 4882s [ 689/8505] Reline::KeyActor::Emacs::Test#test_completion_with_indent = 0.02 s 4882s [ 690/8505] Reline::KeyActor::Emacs::Test#test_ed_search_next_history = 0.01 s 4882s [ 691/8505] Reline::KeyActor::Emacs::Test#test_em_delete_next_word_for_mbchar_by_plural_code_points = 0.02 s 4882s [ 692/8505] Reline::KeyActor::Emacs::Test#test_completion_with_indent_and_completer_quote_characters = 0.01 s 4882s [ 693/8505] Reline::KeyActor::Emacs::Test#test_em_next_word = 0.01 s 4882s [ 694/8505] Reline::KeyActor::Emacs::Test#test_ed_delete_next_char = 0.00 s 4882s [ 695/8505] Reline::KeyActor::Emacs::Test#test_completion_duplicated_list = 0.02 s 4882s [ 696/8505] Reline::KeyActor::Emacs::Test#test_vi_search_prev = 0.01 s 4882s [ 697/8505] Reline::KeyActor::Emacs::Test#test_ed_search_prev_history_without_match = 0.01 s 4882s [ 698/8505] Reline::KeyActor::Emacs::Test#test_em_kill_line = 0.01 s 4882s [ 699/8505] Reline::KeyActor::Emacs::Test#test_ignore_NUL_by_ed_quoted_insert = 0.00 s 4882s [ 700/8505] Reline::KeyActor::Emacs::Test#test_ed_next_and_prev_char = 0.01 s 4882s [ 701/8505] Reline::KeyActor::Emacs::Test#test_input_unknown_char = 0.00 s 4882s [ 702/8505] Reline::KeyActor::Emacs::Test#test_larger_histories_than_history_size = 0.01 s 4882s [ 703/8505] Reline::KeyActor::Emacs::Test#test_ed_transpose_words_with_one_word_for_mbchar = 0.02 s 4882s [ 704/8505] Reline::KeyActor::Emacs::Test#test_em_delete_for_mbchar = 0.00 s 4882s [ 705/8505] Reline::KeyActor::Emacs::Test#test_search_history_with_isearch_terminator = 0.02 s 4882s [ 706/8505] Reline::KeyActor::Emacs::Test#test_ed_transpose_words_for_mbchar = 0.02 s 4882s [ 707/8505] Reline::KeyActor::Emacs::Test#test_search_history_to_back = 0.01 s 4882s [ 708/8505] Reline::KeyActor::Emacs::Test#test_search_history_front_and_back = 0.01 s 4882s [ 709/8505] Reline::KeyActor::Emacs::Test#test_ed_search_prev_history_with_empty = 0.00 s 4882s [ 710/8505] Reline::KeyActor::Emacs::Test#test_search_history_back_and_front = 0.01 s 4882s [ 711/8505] Reline::KeyActor::Emacs::Test#test_ed_delete_prev_word = 0.01 s 4882s [ 712/8505] Reline::KeyActor::Emacs::Test#test_move_next_and_prev_for_mbchar_by_plural_code_points = 0.01 s 4883s [ 713/8505] Reline::KeyActor::Emacs::Test#test_ed_argument_digit_by_meta_num = 0.04 s 4883s [ 714/8505] Reline::KeyActor::Emacs::Test#test_em_prev_word = 0.07 s 4883s [ 715/8505] Reline::KeyActor::Emacs::Test#test_move_next_and_prev = 0.02 s 4883s [ 716/8505] Reline::KeyActor::Emacs::Test#test_em_kill_region = 0.01 s 4883s [ 717/8505] Reline::KeyActor::Emacs::Test#test_em_prev_word_for_mbchar_by_plural_code_points = 0.01 s 4883s [ 718/8505] Reline::KeyActor::Emacs::Test#test_ed_newline_with_lf = 0.00 s 4883s [ 719/8505] Reline::KeyActor::Emacs::Test#test_ed_insert_one = 0.00 s 4883s [ 720/8505] Reline::KeyActor::Emacs::Test#test_completion_with_nil_value = 0.01 s 4883s [ 721/8505] Reline::KeyActor::Emacs::Test#test_ed_insert_mbchar_two = 0.00 s 4883s [ 722/8505] Reline::KeyActor::Emacs::Test#test_ed_transpose_chars_for_mbchar_by_plural_code_points = 0.01 s 4883s [ 723/8505] Reline::KeyActor::Emacs::Test#test_ed_next_and_prev_char_for_mbchar = 0.01 s 4883s [ 724/8505] Reline::KeyActor::Emacs::Test#test_ed_search_prev_next_history_in_multibyte = 0.02 s 4883s [ 725/8505] Reline::KeyActor::Emacs::Test#test_ed_clear_screen = 0.00 s 4883s [ 726/8505] Reline::KeyActor::Emacs::Test#test_ed_quoted_insert = 0.02 s 4883s [ 727/8505] Reline::KeyActor::Emacs::Test#test_ed_search_next_history_with_empty = 0.01 s 4883s [ 728/8505] Reline::KeyActor::Emacs::Test#test_em_yank_pop = 0.02 s 4883s [ 729/8505] Reline::KeyActor::Emacs::Test#test_ed_move_to_beg = 0.01 s 4883s [ 730/8505] Reline::KeyActor::Emacs::Test#test_em_capitol_case = 0.05 s 4883s [ 731/8505] TestRDocMarkupParagraph#test_text = 0.02 s 4883s [ 732/8505] TestRDocMarkupParagraph#test_text_break = 0.00 s 4883s [ 733/8505] TestRDocMarkupParagraph#test_accept = 0.00 s 4883s [ 734/8505] TestFiberTimeout#test_timeout_on_main_fiber = 0.00 s 4883s [ 735/8505] TestRipper::Ripper::TestInput#test_invalid_gets = 0.00 s 4883s [ 736/8505] TestRipper::Ripper::TestInput#test_column = 0.00 s 4883s [ 737/8505] TestRipper::Ripper::TestInput#test_yydebug = 0.00 s 4883s [ 738/8505] TestRipper::Ripper::TestInput#test_end_seen_eh = 0.00 s 4883s [ 739/8505] TestRipper::Ripper::TestInput#test_yydebug_equals = 0.00 s 4883s [ 740/8505] TestRipper::Ripper::TestInput#test_parse = 0.00 s 4883s [ 741/8505] TestRipper::Ripper::TestInput#test_encoding = 0.00 s 4883s [ 742/8505] TestRipper::Ripper::TestInput#test_lineno = 0.00 s 4887s [ 743/8505] TestRipper::Ripper::TestInput#test_regexp_enc_error = 4.57 s 4887s [ 744/8505] TestRipper::Ripper::TestInput#test_regexp_with_option = 0.00 s 4887s [ 745/8505] TestRipper::Ripper::TestInput#test_state = 0.00 s 4888s [ 746/8505] TestRipper::Ripper::TestInput#test_filename = 0.00 s 4888s [ 747/8505] TestRipper::Ripper::TestInput#test_dedent_string = 0.00 s 4888s [ 748/8505] TC_Set#test_xor = 0.00 s 4888s [ 749/8505] TC_Set#test_spacecraft_operator = 0.00 s 4888s [ 750/8505] TC_Set#test_freeze = 0.00 s 4888s [ 751/8505] TC_Set#test_minus = 0.00 s 4888s [ 752/8505] TC_Set#test_proper_superset? = 0.00 s 4888s [ 753/8505] TC_Set#test_freeze_dup = 0.00 s 4888s [ 754/8505] TC_Set#test_empty? = 0.00 s 4888s [ 755/8505] TC_Set#test_select! = 0.00 s 4888s [ 756/8505] TC_Set#test_delete_if = 0.00 s 4888s [ 757/8505] TC_Set#test_freeze_clone = 0.00 s 4888s [ 758/8505] TC_Set#test_merge = 0.00 s 4888s [ 759/8505] TC_Set#test_dup = 0.00 s 4888s [ 760/8505] TC_Set#test_inspect = 0.00 s 4888s [ 761/8505] TC_Set#test_eq = 0.00 s 4888s [ 762/8505] TC_Set#test_clear = 0.00 s 4888s [ 763/8505] TC_Set#test_subset? = 0.00 s 4888s [ 764/8505] TC_Set#test_flatten = 0.00 s 4888s [ 765/8505] TC_Set#test_proper_subset? = 0.00 s 4888s [ 766/8505] TC_Set#test_plus = 0.00 s 4888s [ 767/8505] TC_Set#test_delete = 0.00 s 4888s [ 768/8505] TC_Set#test_reset = 0.00 s 4888s [ 769/8505] TC_Set#test_divide = 0.04 s 4888s [ 770/8505] TC_Set#test_and = 0.00 s 4888s [ 771/8505] TC_Set#test_reject! = 0.01 s 4888s [ 772/8505] TC_Set#test_eqq = 0.00 s 4888s [ 773/8505] TC_Set#test_superset? = 0.00 s 4888s [ 774/8505] TC_Set#test_aref = 0.00 s 4888s [ 775/8505] TC_Set#test_compare_by_identity = 0.00 s 4888s [ 776/8505] TC_Set#test_filter! = 0.00 s 4888s [ 777/8505] TC_Set#test_to_a = 0.00 s 4888s [ 778/8505] TC_Set#test_add = 0.08 s 4888s [ 779/8505] TC_Set#test_s_new = 0.13 s 4888s [ 780/8505] TC_Set#test_keep_if = 0.01 s 4888s [ 781/8505] TC_Set#test_replace = 0.00 s 4888s [ 782/8505] TC_Set#test_collect! = 0.02 s 4888s [ 783/8505] TC_Set#test_to_s = 0.00 s 4888s [ 784/8505] TC_Set#test_each = 0.00 s 4888s [ 785/8505] TC_Set#test_freeze_clone_false = 0.01 s 4888s [ 786/8505] TC_Set#test_join = 0.00 s 4888s [ 787/8505] TC_Set#test_clone = 0.00 s 4888s [ 788/8505] TC_Set#test_include? = 0.00 s 4888s [ 789/8505] TC_Set#test_size = 0.00 s 4888s [ 790/8505] TC_Set#test_classify = 0.01 s 4888s [ 791/8505] TC_Set#test_subtract = 0.00 s 4888s [ 792/8505] URI::TestCommon#test_decode_www_form_component = 0.02 s 4888s [ 793/8505] URI::TestCommon#test_regexp = 0.01 s 4888s [ 794/8505] URI::TestCommon#test_encode_www_form_component = 0.02 s 4888s [ 795/8505] URI::TestCommon#test_kernel_uri = 0.01 s 4888s [ 796/8505] URI::TestCommon#test_encode_www_form = 0.01 s 4888s [ 797/8505] URI::TestCommon#test_decode_www_form = 0.01 s 4888s [ 798/8505] URI::TestCommon#test_extract = 0.01 s 4888s [ 799/8505] URI::TestCommon#test_decode_uri_component = 0.01 s 4888s [ 800/8505] URI::TestCommon#test_encode_uri_component = 0.00 s 4888s [ 801/8505] URI::TestCommon#test_register_scheme_lowercase = 0.00 s 4888s [ 802/8505] URI::TestCommon#test_register_scheme = 0.00 s 4888s [ 803/8505] URI::TestCommon#test_register_scheme_with_symbols = 0.00 s 4888s [ 804/8505] URI::TestCommon#test_ractor = 0.00 s 4888s [ 805/8505] TestCSVInterfaceRead::DifferentOFS#test_eof? = 0.04 s 4888s [ 806/8505] TestCSVInterfaceRead::DifferentOFS#test_open_readlines = 0.02 s 4888s [ 807/8505] TestCSVInterfaceRead::DifferentOFS#test_open_with_invalid_replace = 0.01 s 4888s [ 808/8505] TestCSVInterfaceRead::DifferentOFS#test_foreach_mode = 0.01 s 4888s [ 809/8505] TestCSVInterfaceRead::DifferentOFS#test_open_encoding_nonexistent = 0.00 s 4888s [ 810/8505] TestCSVInterfaceRead::DifferentOFS#test_open_closed = 0.00 s 4888s [ 811/8505] TestCSVInterfaceRead::DifferentOFS#test_open_encoding_invalid = 0.01 s 4888s [ 812/8505] TestCSVInterfaceRead::DifferentOFS#test_open_with_invalid_replace_and_replace_string = 0.00 s 4888s [ 813/8505] TestCSVInterfaceRead::DifferentOFS#test_readlines = 0.00 s 4888s [ 814/8505] TestCSVInterfaceRead::DifferentOFS#test_open_read = 0.00 s 4888s [ 815/8505] TestCSVInterfaceRead::DifferentOFS#test_new_nil = 0.00 s 4888s [ 816/8505] TestCSVInterfaceRead::DifferentOFS#test_open_with_undef_replace_and_replace_string = 0.00 s 4888s [ 817/8505] TestCSVInterfaceRead::DifferentOFS#test_parse_line_empty = 0.00 s 4888s [ 818/8505] TestCSVInterfaceRead::DifferentOFS#test_enumerator = 0.00 s 4888s [ 819/8505] TestCSVInterfaceRead::DifferentOFS#test_read = 0.01 s 4888s [ 820/8505] TestCSVInterfaceRead::DifferentOFS#test_parse_line_empty_line = 0.00 s 4888s [ 821/8505] TestCSVInterfaceRead::DifferentOFS#test_parse = 0.00 s 4888s [ 822/8505] TestCSVInterfaceRead::DifferentOFS#test_parse_block = 0.00 s 4888s [ 823/8505] TestCSVInterfaceRead::DifferentOFS#test_each_twice = 0.00 s 4888s [ 824/8505] TestCSVInterfaceRead::DifferentOFS#test_shift_and_each = 0.01 s 4888s [ 825/8505] TestCSVInterfaceRead::DifferentOFS#test_open_invalid_byte_sequence_in_utf_8 = 0.00 s 4888s [ 826/8505] TestCSVInterfaceRead::DifferentOFS#test_table = 0.01 s 4888s [ 827/8505] TestCSVInterfaceRead::DifferentOFS#test_parse_headers_only = 0.01 s 4888s [ 828/8505] TestCSVInterfaceRead::DifferentOFS#test_open_block_return_value = 0.00 s 4888s [ 829/8505] TestCSVInterfaceRead::DifferentOFS#test_foreach = 0.01 s 4888s [ 830/8505] TestCSVInterfaceRead::DifferentOFS#test_open_with_invalid_nil = 0.00 s 4888s [ 831/8505] TestCSVInterfaceRead::DifferentOFS#test_open_with_undef_replace = 0.00 s 4888s [ 832/8505] TestCSVInterfaceRead::DifferentOFS#test_options_not_modified = 0.05 s 4888s [ 833/8505] TestCSVInterfaceRead::DifferentOFS#test_closed? = 0.01 s 4888s [ 834/8505] TestCSVInterfaceRead::DifferentOFS#test_open_encoding_utf_8_with_bom = 0.01 s 4888s [ 835/8505] TestCSVInterfaceRead::DifferentOFS#test_parse_line_shortcut = 0.00 s 4888s [ 836/8505] TestCSVInterfaceRead::DifferentOFS#test_parse_line = 0.00 s 4888s [ 837/8505] TestCSVInterfaceRead::DifferentOFS#test_shift = 0.02 s 4888s [ 838/8505] TestCSVInterfaceRead::DifferentOFS#test_foreach_enumurator = 0.00 s 4888s [ 839/8505] TestCSVInterfaceRead::DifferentOFS#test_parse_enumerator = 0.00 s 4888s [ 840/8505] TestCSVInterfaceRead::DifferentOFS#test_open_auto_close = 0.00 s 4888s [ 841/8505] TestCSVInterfaceRead::DifferentOFS#test_open_encoding_valid = 0.00 s 4889s [ 842/8505] Psych::TestSafeLoad#test_foo = 0.02 s 4889s [ 843/8505] Psych::TestSafeLoad#test_symbol = 0.03 s 4889s [ 844/8505] Psych::TestSafeLoad#test_permitted_symbol = 0.01 s 4889s [ 845/8505] Psych::TestSafeLoad#test_raises_when_alias_found_if_alias_parsing_not_enabled = 0.01 s 4889s [ 846/8505] Psych::TestSafeLoad#test_safe_load_raises_on_bad_input = 0.01 s 4889s [ 847/8505] Psych::TestSafeLoad#test_anon_struct = 0.01 s 4889s [ 848/8505] Psych::TestSafeLoad#test_basic_String = 0.00 s 4889s [ 849/8505] Psych::TestSafeLoad#test_safe_load_default_fallback = 0.00 s 4889s [ 850/8505] Psych::TestSafeLoad#test_aliases_are_parsed_when_alias_parsing_is_enabled = 0.00 s 4889s [ 851/8505] Psych::TestSafeLoad#test_basic_Float = 0.00 s 4889s [ 852/8505] Psych::TestSafeLoad#test_safe_load = 0.00 s 4889s [ 853/8505] Psych::TestSafeLoad#test_basic_Integer = 0.00 s 4889s [ 854/8505] Psych::TestSafeLoad#test_basic_Hash = 0.00 s 4889s [ 855/8505] Psych::TestSafeLoad#test_struct_depends_on_sym = 0.02 s 4889s [ 856/8505] Psych::TestSafeLoad#test_basic_Array = 0.00 s 4889s [ 857/8505] TestCSVParseColumnSeparator::DifferentOFS#test_comma = 0.00 s 4889s [ 858/8505] TestCSVParseColumnSeparator::DifferentOFS#test_multiple_characters_include_sub_separator = 0.00 s 4889s [ 859/8505] TestCSVParseColumnSeparator::DifferentOFS#test_tab = 0.00 s 4889s [ 860/8505] TestCSVParseColumnSeparator::DifferentOFS#test_space = 0.00 s 4889s [ 861/8505] TestCSVParseColumnSeparator::DifferentOFS#test_multiple_characters_leading_empty_fields = 0.01 s 4889s [ 862/8505] TestCSVParseUnconvertedFields#test_parsed_header = 0.00 s 4889s [ 863/8505] TestCSVParseUnconvertedFields#test_custom = 0.01 s 4889s [ 864/8505] TestCSVParseUnconvertedFields#test_return_headers = 0.00 s 4889s [ 865/8505] TestCSVParseUnconvertedFields#test_no_fields = 0.00 s 4889s [ 866/8505] TestCSVParseUnconvertedFields#test_specified_headers = 0.00 s 4889s [ 867/8505] TestCSVParseUnconvertedFields#test_header_converters = 0.00 s 4889s [ 868/8505] TestCSVParseInvalid#test_no_column_mixed_new_lines = 0.00 s 4889s [ 869/8505] TestCSVParseInvalid#test_ignore_invalid_line_cr_lf = 0.02 s 4889s [ 870/8505] OpenSSL::TestX509CRL#test_basic = 0.04 s 4889s [ 871/8505] OpenSSL::TestX509CRL#test_revoked = 0.20 s 4889s [ 872/8505] OpenSSL::TestX509CRL#test_crlnumber = 0.03 s 4889s [ 873/8505] OpenSSL::TestX509CRL#test_sign_and_verify = 0.04 s 4889s [ 874/8505] TestDigestRactor::TestSHA256Ractor#test_s_hexdigest = 0.01 s 4889s [ 875/8505] TestRDocMarkupAttributeManager#test_add_word_pair_map = 0.01 s 4889s [ 876/8505] TestRDocMarkupAttributeManager#test_basic = 0.02 s 4889s [ 877/8505] TestRDocMarkupAttributeManager#test_regexp_handling = 0.01 s 4889s [ 878/8505] TestRDocMarkupAttributeManager#test_convert_attrs_ignores_code = 0.00 s 4889s [ 879/8505] TestRDocMarkupAttributeManager#test_convert_attrs = 0.00 s 4889s [ 880/8505] TestRDocMarkupAttributeManager#test_convert_attrs_does_not_ignore_after_tt = 0.00 s 4889s [ 881/8505] TestRDocMarkupAttributeManager#test_html_like_em_bold_nested_mixed_case = 0.00 s 4889s [ 882/8505] TestRDocMarkupAttributeManager#test_exclude_tag_flow = 0.00 s 4889s [ 883/8505] TestRDocMarkupAttributeManager#test_exclude_tag = 0.00 s 4889s [ 884/8505] TestRDocMarkupAttributeManager#test_mask_protected_sequence = 0.00 s 4889s [ 885/8505] TestRDocMarkupAttributeManager#test_html_like_teletype_em_bold_SGML = 0.01 s 4889s [ 886/8505] TestRDocMarkupAttributeManager#test_add_regexp_handling = 0.00 s 4889s [ 887/8505] TestRDocMarkupAttributeManager#test_add_html_tag = 0.00 s 4889s [ 888/8505] TestRDocMarkupAttributeManager#test_html_like_em_bold_nested_1 = 0.00 s 4889s [ 889/8505] TestRDocMarkupAttributeManager#test_add_word_pair_invalid = 0.00 s 4889s [ 890/8505] TestRDocMarkupAttributeManager#test_convert_attrs_ignores_tt = 0.00 s 4889s [ 891/8505] TestRDocMarkupAttributeManager#test_initial_html = 0.00 s 4889s [ 892/8505] TestRDocMarkupAttributeManager#test_tt_html = 0.00 s 4889s [ 893/8505] TestRDocMarkupAttributeManager#test_html_like_em_bold_nested_2 = 0.00 s 4889s [ 894/8505] TestRDocMarkupAttributeManager#test_lost_tag_for_the_second_time = 0.00 s 4889s [ 895/8505] TestRDocMarkupAttributeManager#test_bold_html_escaped = 0.00 s 4889s [ 896/8505] TestRDocMarkupAttributeManager#test_escapes = 0.03 s 4889s [ 897/8505] TestRDocMarkupAttributeManager#test_convert_attrs_preserves_double = 0.00 s 4889s [ 898/8505] TestRDocMarkupAttributeManager#test_html_like_em_bold_SGML = 0.00 s 4889s [ 899/8505] TestRDocMarkupAttributeManager#test_adding = 0.00 s 4889s [ 900/8505] TestRDocMarkupAttributeManager#test_add_word_pair = 0.00 s 4889s [ 901/8505] TestRDocMarkupAttributeManager#test_combined = 0.00 s 4889s [ 902/8505] TestRDocMarkupAttributeManager#test_add_word_pair_matching = 0.00 s 4889s [ 903/8505] TestRDocMarkupAttributeManager#test_bold = 0.00 s 4889s [ 904/8505] TestRDocMarkupAttributeManager#test_add_word_pair_angle = 0.00 s 4889s [ 905/8505] TestRDocMarkupAttributeManager#test_html_like_em_bold_mixed_case = 0.00 s 4889s [ 906/8505] TestRDocMarkupAttributeManager#test_html_like_em_bold = 0.00 s 4889s [ 907/8505] TestRDocMarkupAttributeManager#test_html_like_teletype = 0.00 s 4889s [ 908/8505] TestRDocMarkupAttributeManager#test_initial_word_pairs = 0.00 s 4889s [ 909/8505] TestRDocMarkupAttributeManager#test_protect = 0.00 s 4889s [ 910/8505] URI::TestParser#test_compare = 0.04 s 4889s [ 911/8505] URI::TestParser#test_parse_query_pct_encoded = 0.04 s 4889s [ 912/8505] URI::TestParser#test_parse_auth = 0.00 s 4889s [ 913/8505] URI::TestParser#test_split = 0.00 s 4889s [ 914/8505] URI::TestParser#test_raise_bad_uri_for_integer = 0.00 s 4889s [ 915/8505] URI::TestParser#test_inspect = 0.01 s 4889s [ 916/8505] URI::TestParser#test_parse = 0.01 s 4889s [ 917/8505] URI::TestParser#test_unescape = 0.01 s 4889s [ 918/8505] OpenSSL::TestX509Store#test_add_cert_duplicate = 0.00 s 4889s [ 919/8505] OpenSSL::TestX509Store#test_ctx_cleanup = 0.01 s 4889s [ 920/8505] OpenSSL::TestX509Store#test_dup = 0.00 s 4890s [ 921/8505] OpenSSL::TestX509Store#test_verify_purpose = 0.08 s 4890s [ 922/8505] OpenSSL::TestX509Store#test_verify_validity_period = 0.13 s 4890s [ 923/8505] TestRDocAnyMethod#test_param_seq = 0.08 s 4890s [ 924/8505] TestRDocAnyMethod#test_superclass_method_multilevel = 0.05 s 4890s [ 925/8505] TestRDocAnyMethod#test_param_seq_call_seq = 0.05 s 4890s [ 926/8505] TestRDocAnyMethod#test_param_list_call_seq = 0.05 s 4890s [ 927/8505] TestRDocAnyMethod#test_is_alias_for = 0.05 s 4890s [ 928/8505] TestRDocAnyMethod#test_parent_name = 0.05 s 4890s [ 929/8505] TestRDocAnyMethod#test_call_seq_equals = 0.07 s 4890s [ 930/8505] TestRDocAnyMethod#test_marshal_dump_version_2 = 0.07 s 4890s [ 931/8505] TestRDocAnyMethod#test_param_list_block_params = 0.05 s 4890s [ 932/8505] TestRDocAnyMethod#test_marshal_load_aliased_method_with_nil_singleton = 0.05 s 4890s [ 933/8505] TestRDocAnyMethod#test_call_seq_handles_aliases = 0.06 s 4890s [ 934/8505] TestRDocAnyMethod#test_call_seq_returns_nil_if_alias_is_missing_from_call_seq = 0.05 s 4890s [ 935/8505] TestRDocAnyMethod#test_param_list_ampersand_param_block_params = 0.05 s 4890s [ 936/8505] TestRDocAnyMethod#test_param_list_params_block_params = 0.05 s 4890s [ 937/8505] TestRDocAnyMethod#test_arglists = 0.05 s 4891s [ 938/8505] TestRDocAnyMethod#test_name = 0.05 s 4891s [ 939/8505] TestRDocAnyMethod#test_full_name = 0.06 s 4891s [ 940/8505] TestRDocAnyMethod#test_aref = 0.05 s 4891s [ 941/8505] TestRDocAnyMethod#test_store_equals = 0.05 s 4891s [ 942/8505] TestRDocAnyMethod#test_marshal_load_version_0 = 0.05 s 4891s [ 943/8505] TestRDocAnyMethod#test_markup_code_with_line_numbers = 0.06 s 4891s [ 944/8505] TestRDocAnyMethod#test_name_call_seq = 0.05 s 4891s [ 945/8505] TestRDocAnyMethod#test_marshal_load_class_method = 0.05 s 4891s [ 946/8505] TestRDocAnyMethod#test_marshal_load_aliased_method = 0.06 s 4891s [ 947/8505] TestRDocAnyMethod#test_markup_code_with_variable_expansion = 0.06 s 4891s [ 948/8505] TestRDocAnyMethod#test_c_function = 0.05 s 4891s [ 949/8505] TestRDocAnyMethod#test_marshal_load_instance_method = 0.05 s 4891s [ 950/8505] TestRDocAnyMethod#test_name_call_seq_dot = 0.04 s 4891s [ 951/8505] TestRDocAnyMethod#test_markup_code = 0.04 s 4891s [ 952/8505] TestRDocAnyMethod#test_param_list_params = 0.05 s 4891s [ 953/8505] TestRDocAnyMethod#test_markup_code_empty = 0.05 s 4891s [ 954/8505] TestRDocAnyMethod#test_param_list_empty_params_with_block = 0.04 s 4891s [ 955/8505] TestRDocAnyMethod#test_param_list_default = 0.04 s 4891s [ 956/8505] TestRDocAnyMethod#test_marshal_dump = 0.05 s 4891s [ 957/8505] TestRDocAnyMethod#test_superclass_method = 0.05 s 4892s [ 958/8505] TestRDocAnyMethod#test_param_list_ampersand_param = 0.04 s 4892s [ 959/8505] Psych::TestDateTime#test_non_utc = 0.02 s 4892s [ 960/8505] Psych::TestDateTime#test_datetime_non_utc = 0.02 s 4892s [ 961/8505] Psych::TestDateTime#test_proleptic_gregorian_date = 0.02 s 4892s [ 962/8505] Psych::TestDateTime#test_proleptic_gregorian_datetime = 0.01 s 4892s [ 963/8505] Psych::TestDateTime#test_string_tag = 0.00 s 4892s [ 964/8505] Psych::TestDateTime#test_datetime_timezone_offset = 0.01 s 4892s [ 965/8505] Psych::TestDateTime#test_negative_year = 0.01 s 4892s [ 966/8505] Psych::TestDateTime#test_usec = 0.01 s 4892s [ 967/8505] Psych::TestDateTime#test_invalid_date = 0.01 s 4892s [ 968/8505] Psych::TestDateTime#test_julian_date = 0.01 s 4892s [ 969/8505] Psych::TestDateTime#test_timezone_offset = 0.00 s 4892s [ 970/8505] Psych::TestDateTime#test_new_datetime = 0.01 s 4892s [ 971/8505] Psych::TestDateTime#test_round_trip = 0.01 s 4892s [ 972/8505] Psych::TestDateTime#test_alias_with_time = 0.00 s 4892s [ 973/8505] Psych::TestDateTime#test_julian_datetime = 0.01 s 4892s [ 974/8505] IMAPTest#test_encode_utf7 = 0.01 s 4892s [ 975/8505] IMAPTest#test_imaps_verify_none = 0.20 s 4892s [ 976/8505] IMAPTest#test_format_date = 0.00 s 4892s [ 977/8505] IMAPTest#test_imaps_unknown_ca = 0.12 s 4892s [ 978/8505] IMAPTest#test_format_datetime = 0.00 s 4892s [ 979/8505] IMAPTest#test_imaps_with_ca_file = 0.18 s 4892s [ 980/8505] IMAPTest#test_decode_utf7 = 0.00 s 4892s [ 981/8505] IMAPTest#test_default_port = 0.00 s 4892s [ 982/8505] URI::TestFile#test_build = 0.02 s 4892s [ 983/8505] URI::TestFile#test_parse = 0.00 s 4892s [ 984/8505] TestWeakRef#test_ref = 0.00 s 4892s [ 985/8505] TestWeakRef#test_not_reference_different_object = 0.01 s 4892s [ 986/8505] TestOptionParser::AutoConf#test_help = 0.08 s 4892s [ 987/8505] TestOptionParser::AutoConf#test_without = 0.01 s 4892s [ 988/8505] TestOptionParser::AutoConf#test_with = 0.00 s 4892s [ 989/8505] TestOptionParser::AutoConf#test_enable_value = 0.01 s 4892s [ 990/8505] TestOptionParser::AutoConf#test_disable = 0.00 s 4892s [ 991/8505] TestOptionParser::AutoConf#test_enable = 0.02 s 4892s [ 992/8505] PPTestModule::PPTest#test_list0123_11 = 0.02 s 4892s [ 993/8505] PPTestModule::PPTest#test_list0123_12 = 0.01 s 4892s [ 994/8505] PPTestModule::PPTest#test_redefined_method = 0.00 s 4892s [ 995/8505] PPTestModule::PPTest#test_struct_override_members = 0.01 s 4892s [ 996/8505] Rinda::TestRingServer#test_make_socket_unicast = 0.02 s 4893s [ 997/8505] Rinda::TestRingServer#test_shutdown = 0.08 s 4893s [ 998/8505] TestCSVInterfaceWrite#test_generate_append = 0.00 s 4893s [ 999/8505] TestCSVInterfaceWrite#test_append_hash_headers_string = 0.01 s 4893s [1000/8505] TestCSVInterfaceWrite#test_write_headers = 0.00 s 4893s [1001/8505] TestCSVInterfaceWrite#test_headers_detection = 0.00 s 4893s [1002/8505] TestCSVInterfaceWrite#test_generate_default = 0.00 s 4893s [1003/8505] TestCSVInterfaceWrite#test_generate_line_row_sep = 0.00 s 4893s [1004/8505] TestCSVInterfaceWrite#test_append_hash = 0.00 s 4893s [1005/8505] TestCSVInterfaceWrite#test_options_not_modified = 0.00 s 4893s [1006/8505] TestCSVInterfaceWrite#test_lineno = 0.01 s 4893s [1007/8505] TestCSVInterfaceWrite#test_append_row = 0.00 s 4893s [1008/8505] TestCSVInterfaceWrite#test_generate_line_shortcut = 0.00 s 4893s [1009/8505] TestCSVInterfaceWrite#test_write_headers_empty = 0.01 s 4893s [1010/8505] TestCSVInterfaceWrite#test_append_hash_headers_array = 0.00 s 4893s [1011/8505] TestCSVInterfaceWrite#test_generate_no_new_line = 0.00 s 4893s [1012/8505] TestCSVInterfaceWrite#test_generate_line_col_sep = 0.00 s 4893s [1013/8505] TestCSVParseConvert::DifferentOFS#test_nil_value = 0.00 s 4893s [1014/8505] TestCSVParseConvert::DifferentOFS#test_empty_value = 0.00 s 4893s [1015/8505] TestCSVParseConvert::DifferentOFS#test_custom = 0.01 s 4893s [1016/8505] TestCSVParseConvert::DifferentOFS#test_all = 0.01 s 4893s [1017/8505] TestCSVParseConvert::DifferentOFS#test_float = 0.01 s 4893s [1018/8505] TestCSVParseConvert::DifferentOFS#test_custom_field_info_line = 0.01 s 4893s [1019/8505] TestCSVParseConvert::DifferentOFS#test_numeric = 0.01 s 4893s [1020/8505] TestCSVParseConvert::DifferentOFS#test_integer_float = 0.01 s 4893s [1021/8505] TestCSVParseConvert::DifferentOFS#test_integer = 0.01 s 4893s [1022/8505] TestCSVParseConvert::DifferentOFS#test_custom_field_info_header = 0.01 s 4893s [1023/8505] TestCSVParseConvert::DifferentOFS#test_custom_blank_field = 0.00 s 4893s [1024/8505] TestCSVParseConvert::DifferentOFS#test_float_integer = 0.00 s 4893s [1025/8505] TestCSVParseConvert::DifferentOFS#test_builtin_custom = 0.01 s 4893s [1026/8505] PPTestModule::PPSingleLineTest#test_hash = 0.02 s 4893s [1027/8505] TestRDocGeneratorMarkup#test_aref_to = 0.00 s 4893s [1028/8505] TestRDocGeneratorMarkup#test_as_href = 0.00 s 4893s [1029/8505] TestRDocGeneratorMarkup#test_description = 0.02 s 4893s [1030/8505] TestRDocGeneratorMarkup#test_formatter = 0.01 s 4893s [1031/8505] TestRDocGeneratorMarkup#test_cvs_url = 0.00 s 4893s [1032/8505] HTTPRequestTest#test_header_set = 0.00 s 4893s [1033/8505] HTTPRequestTest#test_initialize_GET = 0.00 s 4893s [1034/8505] HTTPRequestTest#test_initialize_GET_range = 0.00 s 4893s [1035/8505] HTTPRequestTest#test_initialize_HEAD = 0.00 s 4893s [1036/8505] HTTPRequestTest#test_initialize_GET_uri = 0.02 s 4893s [1037/8505] HTTPRequestTest#test_initialize_accept_encoding = 0.00 s 4893s [1038/8505] TestCSVParseRewind::DifferentOFS#test_default = 0.01 s 4893s [1039/8505] TestCSVParseRewind::DifferentOFS#test_have_headers = 0.01 s 4893s [1040/8505] TestDateConv#test_to_datetime__from_datetime = 0.00 s 4893s [1041/8505] TestDateConv#test_to_date__from_datetime = 0.00 s 4893s [1042/8505] TestDateConv#test_to_date__from_date = 0.00 s 4893s [1043/8505] TestDateConv#test_to_time__from_time = 0.00 s 4893s [1044/8505] TestDateConv#test_to_datetime__from_time = 0.00 s 4893s [1045/8505] TestDateConv#test_to_datetime__from_date = 0.00 s 4893s [1046/8505] TestDateConv#test_to_date__from_time = 0.00 s 4893s [1047/8505] TestDateConv#test_to_time_to_date_roundtrip__from_gregorian_date = 0.00 s 4893s [1048/8505] TestDateConv#test_to_class = 0.00 s 4893s [1049/8505] TestDateConv#test_to_time__from_date = 0.00 s 4893s [1050/8505] TestDigest::TestSHA384#test_s_hexdigest = 0.00 s 4893s [1051/8505] TestDigest::TestSHA384#test_bubblebabble_class = 0.00 s 4893s [1052/8505] TestDigest::TestSHA384#test_instance_eval = 0.00 s 4893s [1053/8505] TestDigest::TestSHA384#test_update = 0.00 s 4893s [1054/8505] TestDigest::TestSHA384#test_bubblebabble = 0.00 s 4893s [1055/8505] TestDigest::TestSHA384#test_s_base64digest = 0.00 s 4893s [1056/8505] TestDigest::TestSHA384#test_eq = 0.00 s 4893s [1057/8505] TestDigest::TestSHA384#test_alignment = 0.00 s 4893s [1058/8505] TestDigest::TestSHA384#test_s_new = 0.00 s 4893s [1059/8505] TestDigest::TestSHA384#test_s_digest = 0.00 s 4893s [1060/8505] TestDigest::TestSHA384#test_bubblebabble_instance = 0.00 s 4893s [1061/8505] TestDigest::TestSHA384#test_s_file = 0.01 s 4893s [1062/8505] TestSocket_BasicSocket#test_close_write = 0.00 s 4893s [1063/8505] TestSocket_BasicSocket#test_write_nonblock_buffered = 0.01 s 4893s [1064/8505] TestSocket_BasicSocket#test_getsockopt = 0.00 s 4893s [1065/8505] TestSocket_BasicSocket#test_read_write_nonblock = 0.01 s 4893s [1066/8505] TestSocket_BasicSocket#test_close_read = 0.00 s 4893s [1067/8505] TestSocket_BasicSocket#test_read_nonblock_mix_buffered = 0.00 s 4893s [1068/8505] TestCSVFeatures::DifferentOFS#test_col_sep_empty = 0.01 s 4893s [1069/8505] TestCSVFeatures::DifferentOFS#test_csv_char_readers = 0.01 s 4893s [1070/8505] TestCSVFeatures::DifferentOFS#test_unknown_options = 0.01 s 4893s [1071/8505] TestCSVFeatures::DifferentOFS#test_gzip_writer = 0.01 s 4893s [1072/8505] TestCSVFeatures::DifferentOFS#test_quote_char_special_regexp_char = 0.03 s 4893s [1073/8505] TestCSVFeatures::DifferentOFS#test_line_separator_autodetection_for_non_seekable_input_cr = 0.01 s 4893s [1074/8505] TestCSVFeatures::DifferentOFS#test_quote_char = 0.03 s 4893s [1075/8505] TestCSVFeatures::DifferentOFS#test_failing_to_reset_headers_in_rewind = 0.01 s 4893s [1076/8505] TestCSVFeatures::DifferentOFS#test_inspect_shows_headers_when_available = 0.03 s 4893s [1077/8505] TestCSVFeatures::DifferentOFS#test_quote_char_special_regexp_char_liberal_parsing = 0.05 s 4893s [1078/8505] TestCSVFeatures::DifferentOFS#test_line_separator_autodetection_for_non_seekable_input_cr_lf = 0.02 s 4893s [1079/8505] TestCSVFeatures::DifferentOFS#test_failing_to_escape_col_sep = 0.00 s 4893s [1080/8505] TestCSVFeatures::DifferentOFS#test_line = 0.02 s 4893s [1081/8505] TestCSVFeatures::DifferentOFS#test_line_separator_autodetection_for_non_seekable_input_1024_over_lf = 0.02 s 4893s [1082/8505] TestCSVFeatures::DifferentOFS#test_row_sep_auto_discovery = 0.01 s 4893s [1083/8505] TestCSVFeatures::DifferentOFS#test_line_separator_autodetection_for_non_seekable_input_lf = 0.00 s 4893s [1084/8505] TestCSVFeatures::DifferentOFS#test_col_sep = 0.04 s 4893s [1085/8505] TestCSVFeatures::DifferentOFS#test_csv_behavior_readers = 0.01 s 4894s [1086/8505] TestCSVFeatures::DifferentOFS#test_lineno = 0.45 s 4894s [1087/8505] TestCSVFeatures::DifferentOFS#test_readline = 0.06 s 4894s [1088/8505] TestCSVFeatures::DifferentOFS#test_skip_blanks = 0.02 s 4895s [1089/8505] TestCSVFeatures::DifferentOFS#test_line_separator_autodetection_for_non_seekable_input_many_cr_only = 0.82 s 4895s [1090/8505] TestCSVFeatures::DifferentOFS#test_line_separator_autodetection_for_non_seekable_input_1024_over_cr_lf = 0.08 s 4895s [1091/8505] TestCSVFeatures::DifferentOFS#test_col_sep_nil = 0.00 s 4895s [1092/8505] TestCSVFeatures::DifferentOFS#test_row_sep = 0.02 s 4895s [1093/8505] TestCSVFeatures::DifferentOFS#test_converters_reader = 0.01 s 4895s [1094/8505] TestCSVFeatures::DifferentOFS#test_inspect_shows_key_attributes = 0.01 s 4895s [1095/8505] TestCSVFeatures::DifferentOFS#test_inspect_is_smart_about_io_types = 0.04 s 4895s [1096/8505] TestCSVFeatures::DifferentOFS#test_version = 0.00 s 4895s [1097/8505] TestCSVFeatures::DifferentOFS#test_inspect_encoding_is_ascii_compatible = 0.03 s 4895s [1098/8505] TestCSVFeatures::DifferentOFS#test_header_converters_reader = 0.01 s 4895s [1099/8505] TestCSVFeatures::DifferentOFS#test_table_nil_equality = 0.00 s 4895s [1100/8505] TestRDocMarkdownTest#test_inline_html_advanced = 0.22 s 4895s [1101/8505] TestRDocMarkdownTest#test_code_spans = 0.26 s 4896s [1102/8505] TestRDocMarkdownTest#test_amps_and_angle_encoding = 0.39 s 4896s [1103/8505] TestRDocMarkdownTest#test_links_reference_style = 0.41 s 4896s [1104/8505] TestRDocMarkdownTest#test_links_shortcut_references = 0.10 s 4896s [1105/8505] TestRDocMarkdownTest#test_tidyness = 0.05 s 4896s [1106/8505] TestRDocMarkdownTest#test_nested_blockquotes = 0.07 s 4897s [1107/8505] TestRDocMarkdownTest#test_ordered_and_unordered_lists = 0.86 s 4897s [1108/8505] TestRDocMarkdownTest#test_hard_wrapped_paragraphs_with_list_like_lines = 0.09 s 4898s [1109/8505] TestRDocMarkdownTest#test_markdown_documentation_basics = 0.65 s 4898s [1110/8505] TestRDocMarkdownTest#test_auto_links = 0.10 s 4898s [1111/8505] TestRDocMarkdownTest#test_strong_and_em_together = 0.08 s 4898s [1112/8505] TestRDocMarkdownTest#test_tabs = 0.05 s 4898s [1113/8505] TestRDocMarkdownTest#test_horizontal_rules = 0.13 s 4898s [1114/8505] TestRDocMarkdownTest#test_blockquotes_with_code_blocks = 0.02 s 4898s [1115/8505] TestRDocMarkdownTest#test_inline_html_comments = 0.03 s 4898s [1116/8505] TestRDocMarkdownTest#test_code_blocks = 0.02 s 4899s [1117/8505] TestRDocMarkdownTest#test_backslash_escapes = 0.86 s 4899s [1118/8505] TestRDocMarkdownTest#test_inline_html_simple = 0.21 s 4900s [1119/8505] TestRDocMarkdownTest#test_literal_quotes_in_titles = 0.03 s 4900s [1120/8505] TestRDocMarkdownTest#test_links_inline_style = 0.04 s 4902s [1121/8505] TestRDocMarkdownTest#test_markdown_documentation_syntax = 2.46 s 4902s [1122/8505] Random::Formatter::TestClassMethods#test_base64 = 0.01 s 4902s [1123/8505] Random::Formatter::TestClassMethods#test_hex_encoding = 0.00 s 4902s [1124/8505] Random::Formatter::TestClassMethods#test_random_number_float_by_zero = 0.01 s 4902s [1125/8505] Random::Formatter::TestClassMethods#test_urlsafe_base64 = 0.02 s 4902s [1126/8505] Random::Formatter::TestClassMethods#test_uuid = 0.00 s 4902s [1127/8505] Random::Formatter::TestClassMethods#test_alphanumeric = 0.03 s 4902s [1128/8505] Random::Formatter::TestClassMethods#test_random_number_float = 0.01 s 4902s [1129/8505] Random::Formatter::TestClassMethods#test_random_bytes = 0.01 s 4902s [1130/8505] Random::Formatter::TestClassMethods#test_random_number_int = 0.00 s 4902s [1131/8505] Random::Formatter::TestClassMethods#test_hex = 0.01 s 4902s [1132/8505] TestRDocClassModule#test_find_class_named = 0.07 s 4902s [1133/8505] TestRDocClassModule#test_from_module_comment = 0.05 s 4902s [1134/8505] TestRDocClassModule#test_merge_comment_version_0 = 0.06 s 4902s [1135/8505] TestRDocClassModule#test_update_includes = 0.05 s 4902s [1136/8505] TestRDocClassModule#test_update_includes_trim = 0.05 s 4902s [1137/8505] TestRDocClassModule#test_superclass = 0.04 s 4902s [1138/8505] TestRDocClassModule#test_update_includes_with_colons = 0.05 s 4903s [1139/8505] TestRDocClassModule#test_update_aliases_module = 0.05 s 4903s [1140/8505] TestRDocClassModule#test_merge_sections = 0.06 s 4903s [1141/8505] TestRDocClassModule#test_add_comment_comment = 0.04 s 4903s [1142/8505] TestRDocClassModule#test_merge_attributes = 0.05 s 4903s [1143/8505] TestRDocClassModule#test_merge = 0.04 s 4903s [1144/8505] TestRDocClassModule#test_search_record_merged = 0.09 s 4903s [1145/8505] TestRDocClassModule#test_add_comment_duplicate = 0.07 s 4903s [1146/8505] TestRDocClassModule#test_parse = 0.04 s 4903s [1147/8505] TestRDocClassModule#test_comment_equals_comment = 0.04 s 4903s [1148/8505] TestRDocClassModule#test_update_extends_with_colons = 0.04 s 4903s [1149/8505] TestRDocClassModule#test_parse_comment = 0.08 s 4903s [1150/8505] TestRDocClassModule#test_parse_comment_location = 0.07 s 4903s [1151/8505] TestRDocClassModule#test_update_extends_trim = 0.07 s 4903s [1152/8505] TestRDocClassModule#test_marshal_load_version_1 = 0.06 s 4903s [1153/8505] TestRDocClassModule#test_marshal_load_version_3 = 0.05 s 4903s [1154/8505] TestRDocClassModule#test_merge_collections_drop = 0.04 s 4903s [1155/8505] TestRDocClassModule#test_merge_includes = 0.05 s 4904s [1156/8505] TestRDocClassModule#test_parse_comment_format = 0.06 s 4904s [1157/8505] TestRDocClassModule#test_merge_constants_version_0 = 0.14 s 4904s [1158/8505] TestRDocClassModule#test_merge_extends = 0.05 s 4904s [1159/8505] TestRDocClassModule#test_comment_equals = 0.04 s 4904s [1160/8505] TestRDocClassModule#test_merge_sections_overlap = 0.12 s 4904s [1161/8505] TestRDocClassModule#test_merge_methods = 0.09 s 4904s [1162/8505] TestRDocClassModule#test_update_extends = 0.10 s 4904s [1163/8505] TestRDocClassModule#test_add_comment = 0.06 s 4904s [1164/8505] TestRDocClassModule#test_store_equals = 0.08 s 4905s [1165/8505] TestRDocClassModule#test_update_aliases_reparent = 0.69 s 4905s [1166/8505] TestRDocClassModule#test_marshal_dump_visibility = 0.05 s 4905s [1167/8505] TestRDocClassModule#test_marshal_load_version_2 = 0.05 s 4905s [1168/8505] TestRDocClassModule#test_marshal_load_version_0 = 0.05 s 4905s [1169/8505] TestRDocClassModule#test_ancestors = 0.04 s 4905s [1170/8505] TestRDocClassModule#test_search_record = 0.05 s 4905s [1171/8505] TestRDocClassModule#test_update_aliases_class = 0.04 s 4905s [1172/8505] TestRDocClassModule#test_update_aliases_reparent_root = 0.04 s 4905s [1173/8505] TestRDocClassModule#test_each_ancestor_cycle = 0.04 s 4905s [1174/8505] TestRDocClassModule#test_documented_eh = 0.06 s 4905s [1175/8505] TestRDocClassModule#test_document_self_or_methods = 0.05 s 4905s [1176/8505] TestRDocClassModule#test_merge_methods_version_0 = 0.05 s 4905s [1177/8505] TestRDocClassModule#test_merge_includes_version_0 = 0.04 s 4906s [1178/8505] TestRDocClassModule#test_merge_attributes_version_0 = 0.05 s 4906s [1179/8505] TestRDocClassModule#test_remove_nodoc_children = 0.04 s 4906s [1180/8505] TestRDocClassModule#test_add_comment_stopdoc = 0.06 s 4906s [1181/8505] TestRDocClassModule#test_merge_comment = 0.05 s 4906s [1182/8505] TestRDocClassModule#test_marshal_dump = 0.05 s 4906s [1183/8505] TestRDocClassModule#test_merge_constants = 0.04 s 4906s [1184/8505] TestRDocClassModule#test_each_ancestor = 0.05 s 4906s [1185/8505] TestCSVInterfaceWrite::DifferentOFS#test_generate_append = 0.02 s 4906s [1186/8505] TestCSVInterfaceWrite::DifferentOFS#test_append_hash_headers_string = 0.01 s 4906s [1187/8505] TestCSVInterfaceWrite::DifferentOFS#test_write_headers = 0.01 s 4906s [1188/8505] TestCSVInterfaceWrite::DifferentOFS#test_headers_detection = 0.00 s 4906s [1189/8505] TestCSVInterfaceWrite::DifferentOFS#test_generate_default = 0.00 s 4906s [1190/8505] TestCSVInterfaceWrite::DifferentOFS#test_generate_line_row_sep = 0.00 s 4906s [1191/8505] TestCSVInterfaceWrite::DifferentOFS#test_append_hash = 0.01 s 4906s [1192/8505] TestCSVInterfaceWrite::DifferentOFS#test_options_not_modified = 0.01 s 4906s [1193/8505] TestCSVInterfaceWrite::DifferentOFS#test_lineno = 0.02 s 4906s [1194/8505] TestCSVInterfaceWrite::DifferentOFS#test_append_row = 0.01 s 4906s [1195/8505] TestCSVInterfaceWrite::DifferentOFS#test_generate_line_shortcut = 0.00 s 4906s [1196/8505] TestCSVInterfaceWrite::DifferentOFS#test_write_headers_empty = 0.01 s 4906s [1197/8505] TestCSVInterfaceWrite::DifferentOFS#test_append_hash_headers_array = 0.01 s 4906s [1198/8505] TestCSVInterfaceWrite::DifferentOFS#test_generate_no_new_line = 0.00 s 4906s [1199/8505] TestCSVInterfaceWrite::DifferentOFS#test_generate_line_col_sep = 0.00 s 4906s [1200/8505] TC_IPAddr#test_s_new_ntoh = 0.03 s 4906s [1201/8505] TC_IPAddr#test_reverse = 0.01 s 4906s [1202/8505] TC_IPAddr#test_zone_id = 0.01 s 4906s [1203/8505] TC_IPAddr#test_ip6_int = 0.00 s 4906s [1204/8505] TC_IPAddr#test_netmask = 0.01 s 4906s [1205/8505] TC_IPAddr#test_ntop = 0.00 s 4906s [1206/8505] TC_IPAddr#test_s_new = 0.08 s 4906s [1207/8505] TC_IPAddr#test_ip6_arpa = 0.00 s 4906s [1208/8505] TC_IPAddr#test_ipv4_mapped = 0.01 s 4906s [1209/8505] TC_IPAddr#test_to_s = 0.00 s 4906s [1210/8505] TC_IPAddr#test_prefix_writer = 0.01 s 4906s [1211/8505] TC_IPAddr#test_ipv4_compat = 0.02 s 4906s [1212/8505] TestRDocEncoding#test_class_read_file_encoding_with_signature = 0.00 s 4906s [1213/8505] TestRDocEncoding#test_class_detect_encoding = 0.01 s 4906s [1214/8505] TestRDocEncoding#test_class_read_file_encoding_invalid = 0.01 s 4906s [1215/8505] TestRDocEncoding#test_class_read_file_encoding_fancy = 0.00 s 4906s [1216/8505] TestRDocEncoding#test_class_read_file_encoding_iso_2022_jp = 0.01 s 4906s [1217/8505] TestRDocEncoding#test_class_set_encoding_bad = 0.00 s 4906s [1218/8505] TestRDocEncoding#test_class_read_file_encoding_guess = 0.00 s 4906s [1219/8505] TestRDocEncoding#test_class_read_file = 0.00 s 4906s [1220/8505] TestRDocEncoding#test_class_read_file_encoding_convert = 0.00 s 4906s [1221/8505] TestRDocEncoding#test_class_read_file_encoding_fail = 0.00 s 4906s [1222/8505] TestRDocEncoding#test_class_read_file_encoding_force_transcode = 0.00 s 4906s [1223/8505] TestRDocEncoding#test_class_read_file_encoding = 0.00 s 4906s [1224/8505] TestRDocEncoding#test_sanity = 0.00 s 4906s [1225/8505] TestFiberIOBuffer#test_write_nonblock = 0.01 s 4906s [1226/8505] TestOptionParser::ReqArg::Def4#test_abbrev = 0.01 s 4906s [1227/8505] TestOptionParser::ReqArg::Def4#test_order = 0.01 s 4906s [1228/8505] TestOptionParser::ReqArg::Def4#test_short = 0.00 s 4906s [1229/8505] TestOptionParser::ReqArg::Def4#test_hyphenize = 0.00 s 4906s [1230/8505] TestOptionParser::ReqArg::Def4#test_regexp = 0.00 s 4906s [1231/8505] TestOptionParser::ReqArg::Def4#test_nonopt_pattern = 0.01 s 4906s [1232/8505] TestOptionParser::ReqArg::Def4#test_into = 0.02 s 4906s [1233/8505] TestOptionParser::ReqArg::Def4#test_permute = 0.01 s 4906s [1234/8505] TestOptionParser::ReqArg::Def4#test_long = 0.00 s 4906s [1235/8505] TestOptionParser::ReqArg::Def4#test_require_exact = 0.03 s 4906s [1236/8505] TestCSVTable::DifferentOFS#test_delete_if_row = 0.01 s 4906s [1237/8505] TestCSVTable::DifferentOFS#test_set_by_col_with_header_row = 0.01 s 4906s [1238/8505] TestCSVTable::DifferentOFS#test_headers_only = 0.00 s 4906s [1239/8505] TestCSVTable::DifferentOFS#test_append = 0.00 s 4906s [1240/8505] TestCSVTable::DifferentOFS#test_dig_cell_no_dig = 0.00 s 4906s [1241/8505] TestCSVTable::DifferentOFS#test_headers_empty = 0.00 s 4906s [1242/8505] TestCSVTable::DifferentOFS#test_values_at = 0.01 s 4906s [1243/8505] TestCSVTable::DifferentOFS#test_headers = 0.00 s 4906s [1244/8505] TestCSVTable::DifferentOFS#test_to_csv = 0.01 s 4906s [1245/8505] TestCSVTable::DifferentOFS#test_array_delegation = 0.00 s 4906s [1246/8505] TestCSVTable::DifferentOFS#test_delete_row = 0.02 s 4906s [1247/8505] TestCSVTable::DifferentOFS#test_dig_by_column = 0.00 s 4906s [1248/8505] TestCSVTable::DifferentOFS#test_dig_mixed = 0.00 s 4906s [1249/8505] TestCSVTable::DifferentOFS#test_delete_if_row_without_block = 0.01 s 4906s [1250/8505] TestCSVTable::DifferentOFS#test_delete_column = 0.01 s 4906s [1251/8505] TestCSVTable::DifferentOFS#test_initialize = 0.00 s 4906s [1252/8505] TestCSVTable::DifferentOFS#test_to_a = 0.00 s 4906s [1253/8505] TestCSVTable::DifferentOFS#test_delete_with_blank_rows = 0.00 s 4906s [1254/8505] TestCSVTable::DifferentOFS#test_delete_mixed_multiple = 0.00 s 4906s [1255/8505] TestCSVTable::DifferentOFS#test_headers_modified_by_row = 0.00 s 4906s [1256/8505] TestCSVTable::DifferentOFS#test_delete_if_column = 0.01 s 4906s [1257/8505] TestCSVTable::DifferentOFS#test_delete_headers_only = 0.00 s 4906s [1258/8505] TestCSVTable::DifferentOFS#test_each = 0.02 s 4906s [1259/8505] TestCSVTable::DifferentOFS#test_each_split = 0.00 s 4906s [1260/8505] TestCSVTable::DifferentOFS#test_delete_mixed_one = 0.00 s 4906s [1261/8505] TestCSVTable::DifferentOFS#test_index = 0.01 s 4906s [1262/8505] TestCSVTable::DifferentOFS#test_set_row_or_column = 0.01 s 4906s [1263/8505] TestCSVTable::DifferentOFS#test_inspect_encoding_is_ascii_compatible = 0.01 s 4906s [1264/8505] TestCSVTable::DifferentOFS#test_dig_by_row = 0.00 s 4907s [1265/8505] TestCSVTable::DifferentOFS#test_modes = 0.01 s 4907s [1266/8505] TestCSVTable::DifferentOFS#test_inspect_shows_current_mode = 0.01 s 4907s [1267/8505] TestCSVTable::DifferentOFS#test_delete_if_column_without_block = 0.01 s 4907s [1268/8505] TestCSVTable::DifferentOFS#test_enumerable = 0.00 s 4907s [1269/8505] TestCSVTable::DifferentOFS#test_dig_cell = 0.00 s 4907s [1270/8505] TestRipper::Filter#test_filter_lineno = 0.02 s 4907s [1271/8505] TestRipper::Filter#test_filter_state = 0.01 s 4907s [1272/8505] TestRipper::Filter#test_filter_lineno_set = 0.01 s 4907s [1273/8505] TestRipper::Filter#test_filter_token = 0.00 s 4907s [1274/8505] TestRipper::Filter#test_filter_filename = 0.05 s 4907s [1275/8505] TestRipper::Filter#test_filter_column = 0.01 s 4907s [1276/8505] TestRipper::Filter#test_filter_filename_unset = 0.01 s 4907s [1277/8505] TestCSVWriteGeneralGenerate#test_quote_lf_last = 0.00 s 4907s [1278/8505] TestCSVWriteGeneralGenerate#test_with_default_internal = 0.01 s 4907s [1279/8505] TestCSVWriteGeneralGenerate#test_cr_lf = 0.00 s 4907s [1280/8505] TestCSVWriteGeneralGenerate#test_quote = 0.00 s 4907s [1281/8505] TestCSVWriteGeneralGenerate#test_comma = 0.01 s 4907s [1282/8505] TestCSVWriteGeneralGenerate#test_nil_values_only = 0.00 s 4907s [1283/8505] TestCSVWriteGeneralGenerate#test_encoding_utf8 = 0.00 s 4907s [1284/8505] TestCSVWriteGeneralGenerate#test_cr_lf_lf = 0.00 s 4907s [1285/8505] TestCSVWriteGeneralGenerate#test_cr_lf_comma_nil = 0.00 s 4907s [1286/8505] TestCSVWriteGeneralGenerate#test_encoding_euc_jp = 0.01 s 4907s [1287/8505] TestCSVWriteGeneralGenerate#test_cr = 0.00 s 4907s [1288/8505] TestCSVWriteGeneralGenerate#test_quote_lf = 0.00 s 4907s [1289/8505] TestCSVWriteGeneralGenerate#test_one_element = 0.00 s 4907s [1290/8505] TestCSVWriteGeneralGenerate#test_quote_last = 0.00 s 4907s [1291/8505] TestCSVWriteGeneralGenerate#test_cr_lf_comma = 0.00 s 4907s [1292/8505] TestCSVWriteGeneralGenerate#test_tab = 0.00 s 4907s [1293/8505] TestCSVWriteGeneralGenerate#test_quote_character_double = 0.00 s 4907s [1294/8505] TestCSVWriteGeneralGenerate#test_nil_empty = 0.00 s 4907s [1295/8505] TestCSVWriteGeneralGenerate#test_nil_value_last = 0.00 s 4907s [1296/8505] TestCSVWriteGeneralGenerate#test_nil_value_first = 0.00 s 4907s [1297/8505] TestCSVWriteGeneralGenerate#test_nil_cr = 0.00 s 4907s [1298/8505] TestCSVWriteGeneralGenerate#test_semi_colon = 0.00 s 4907s [1299/8505] TestCSVWriteGeneralGenerate#test_nil_values = 0.00 s 4907s [1300/8505] TestCSVWriteGeneralGenerate#test_comma_double = 0.00 s 4907s [1301/8505] TestCSVWriteGeneralGenerate#test_col_sep = 0.00 s 4907s [1302/8505] TestCSVWriteGeneralGenerate#test_quote_lf_value_lf = 0.00 s 4907s [1303/8505] TestCSVWriteGeneralGenerate#test_tab_values = 0.00 s 4907s [1304/8505] TestCSVWriteGeneralGenerate#test_cr_dot_lf = 0.00 s 4907s [1305/8505] TestCSVWriteGeneralGenerate#test_quote_character = 0.00 s 4907s [1306/8505] TestCSVWriteGeneralGenerate#test_nil_value_middle = 0.00 s 4907s [1307/8505] TestCSVWriteGeneralGenerate#test_encoding_with_default_internal = 0.01 s 4907s [1308/8505] TestCSVWriteGeneralGenerate#test_row_sep = 0.00 s 4907s [1309/8505] TestCSVWriteGeneralGenerate#test_nil_double_only = 0.00 s 4907s [1310/8505] TestCSVWriteGeneralGenerate#test_values = 0.00 s 4907s [1311/8505] TestCSVWriteGeneralGenerate#test_force_quotes = 0.00 s 4907s [1312/8505] TestCSVWriteGeneralGenerate#test_quote_lf_value_lf_nil = 0.00 s 4907s [1313/8505] TestCSVWriteGeneralGenerate#test_comma_and_value = 0.00 s 4907s [1314/8505] TestCSVWriteGeneralGenerate#test_quote_cr = 0.00 s 4907s [1315/8505] TestCSVWriteGeneralGenerate#test_semi_colon_values = 0.00 s 4907s [1316/8505] TestCSVWriteGeneralGenerate#test_lf = 0.00 s 4907s [1317/8505] TestCSVWriteGeneralGenerate#test_cr_lf_cr = 0.00 s 4907s [1318/8505] TestCSVParseStrip#test_col_sep_incompatible_true = 0.00 s 4907s [1319/8505] TestCSVParseStrip#test_left = 0.00 s 4907s [1320/8505] TestCSVParseStrip#test_right = 0.00 s 4907s [1321/8505] TestCSVParseStrip#test_liberal_parsing = 0.00 s 4907s [1322/8505] TestCSVParseStrip#test_do_not_strip_cr = 0.00 s 4907s [1323/8505] TestCSVParseStrip#test_string = 0.00 s 4907s [1324/8505] TestCSVParseStrip#test_no_quote = 0.00 s 4907s [1325/8505] TestCSVParseStrip#test_col_sep_incompatible_string = 0.00 s 4907s [1326/8505] TestCSVParseStrip#test_col_sep_compatible_string = 0.00 s 4907s [1327/8505] TestCSVParseStrip#test_quoted = 0.00 s 4907s [1328/8505] TestCSVParseStrip#test_both = 0.00 s 4907s [1329/8505] TestCSVParseStrip#test_do_not_strip_lf = 0.00 s 4907s [1330/8505] TestCSVParseStrip#test_do_not_strip_crlf = 0.00 s 4907s [1331/8505] TestCSVParseStrip#test_middle = 0.00 s 4907s [1332/8505] TestCSVWriteConvertersGenerateLine::DifferentOFS#test_nil_value = 0.00 s 4907s [1333/8505] TestCSVWriteConvertersGenerateLine::DifferentOFS#test_empty_value = 0.00 s 4907s [1334/8505] TestCSVWriteConvertersGenerateLine::DifferentOFS#test_one = 0.00 s 4907s [1335/8505] TestCSVWriteConvertersGenerateLine::DifferentOFS#test_multiple = 0.00 s 4907s [1336/8505] TestCSVWriteGeneralGenerateLine::DifferentOFS#test_quote_lf_last = 0.00 s 4907s [1337/8505] TestCSVWriteGeneralGenerateLine::DifferentOFS#test_with_default_internal = 0.01 s 4907s [1338/8505] TestCSVWriteGeneralGenerateLine::DifferentOFS#test_cr_lf = 0.00 s 4907s [1339/8505] TestCSVWriteGeneralGenerateLine::DifferentOFS#test_quote = 0.00 s 4907s [1340/8505] TestCSVWriteGeneralGenerateLine::DifferentOFS#test_comma = 0.00 s 4907s [1341/8505] TestCSVWriteGeneralGenerateLine::DifferentOFS#test_nil_values_only = 0.00 s 4907s [1342/8505] TestCSVWriteGeneralGenerateLine::DifferentOFS#test_encoding_utf8 = 0.00 s 4907s [1343/8505] TestCSVWriteGeneralGenerateLine::DifferentOFS#test_cr_lf_lf = 0.00 s 4907s [1344/8505] TestCSVWriteGeneralGenerateLine::DifferentOFS#test_cr_lf_comma_nil = 0.00 s 4907s [1345/8505] TestCSVWriteGeneralGenerateLine::DifferentOFS#test_encoding_euc_jp = 0.00 s 4907s [1346/8505] TestCSVWriteGeneralGenerateLine::DifferentOFS#test_cr = 0.00 s 4907s [1347/8505] TestCSVWriteGeneralGenerateLine::DifferentOFS#test_quote_lf = 0.00 s 4907s [1348/8505] TestCSVWriteGeneralGenerateLine::DifferentOFS#test_one_element = 0.00 s 4907s [1349/8505] TestCSVWriteGeneralGenerateLine::DifferentOFS#test_quote_last = 0.00 s 4907s [1350/8505] TestCSVWriteGeneralGenerateLine::DifferentOFS#test_cr_lf_comma = 0.00 s 4907s [1351/8505] TestCSVWriteGeneralGenerateLine::DifferentOFS#test_tab = 0.04 s 4907s [1352/8505] TestCSVWriteGeneralGenerateLine::DifferentOFS#test_quote_character_double = 0.00 s 4907s [1353/8505] TestCSVWriteGeneralGenerateLine::DifferentOFS#test_nil_empty = 0.00 s 4907s [1354/8505] TestCSVWriteGeneralGenerateLine::DifferentOFS#test_nil_value_last = 0.00 s 4907s [1355/8505] TestCSVWriteGeneralGenerateLine::DifferentOFS#test_nil_value_first = 0.00 s 4907s [1356/8505] TestCSVWriteGeneralGenerateLine::DifferentOFS#test_nil_cr = 0.00 s 4907s [1357/8505] TestCSVWriteGeneralGenerateLine::DifferentOFS#test_semi_colon = 0.00 s 4907s [1358/8505] TestCSVWriteGeneralGenerateLine::DifferentOFS#test_nil_values = 0.00 s 4907s [1359/8505] TestCSVWriteGeneralGenerateLine::DifferentOFS#test_comma_double = 0.00 s 4907s [1360/8505] TestCSVWriteGeneralGenerateLine::DifferentOFS#test_col_sep = 0.00 s 4907s [1361/8505] TestCSVWriteGeneralGenerateLine::DifferentOFS#test_quote_lf_value_lf = 0.00 s 4907s [1362/8505] TestCSVWriteGeneralGenerateLine::DifferentOFS#test_tab_values = 0.00 s 4907s [1363/8505] TestCSVWriteGeneralGenerateLine::DifferentOFS#test_cr_dot_lf = 0.00 s 4907s [1364/8505] TestCSVWriteGeneralGenerateLine::DifferentOFS#test_quote_character = 0.03 s 4907s [1365/8505] TestCSVWriteGeneralGenerateLine::DifferentOFS#test_nil_value_middle = 0.00 s 4907s [1366/8505] TestCSVWriteGeneralGenerateLine::DifferentOFS#test_encoding_with_default_internal = 0.00 s 4907s [1367/8505] TestCSVWriteGeneralGenerateLine::DifferentOFS#test_row_sep = 0.00 s 4907s [1368/8505] TestCSVWriteGeneralGenerateLine::DifferentOFS#test_nil_double_only = 0.00 s 4907s [1369/8505] TestCSVWriteGeneralGenerateLine::DifferentOFS#test_values = 0.00 s 4907s [1370/8505] TestCSVWriteGeneralGenerateLine::DifferentOFS#test_force_quotes = 0.00 s 4907s [1371/8505] TestCSVWriteGeneralGenerateLine::DifferentOFS#test_quote_lf_value_lf_nil = 0.00 s 4907s [1372/8505] TestCSVWriteGeneralGenerateLine::DifferentOFS#test_comma_and_value = 0.00 s 4907s [1373/8505] TestCSVWriteGeneralGenerateLine::DifferentOFS#test_quote_cr = 0.00 s 4907s [1374/8505] TestCSVWriteGeneralGenerateLine::DifferentOFS#test_semi_colon_values = 0.00 s 4907s [1375/8505] TestCSVWriteGeneralGenerateLine::DifferentOFS#test_lf = 0.00 s 4907s [1376/8505] TestCSVWriteGeneralGenerateLine::DifferentOFS#test_cr_lf_cr = 0.00 s 4907s [1377/8505] TestRDocMarkupParser#test_tokenize_line_break = 0.00 s 4907s [1378/8505] TestRDocMarkupParser#test_parse_verbatim_rule2 = 0.01 s 4907s [1379/8505] TestRDocMarkupParser#test_parse_list_list_1 = 0.00 s 4907s [1380/8505] TestRDocMarkupParser#test_parse_heading = 0.00 s 4907s [1381/8505] TestRDocMarkupParser#test_parse_verbatim_note = 0.00 s 4907s [1382/8505] TestRDocMarkupParser#test_tokenize_paragraphs = 0.00 s 4907s [1383/8505] TestRDocMarkupParser#test_parse_verbatim_dash = 0.00 s 4907s [1384/8505] TestRDocMarkupParser#test_parse_heading_ualpha = 0.00 s 4907s [1385/8505] TestRDocMarkupParser#test_parse_verbatim_merge2 = 0.00 s 4907s [1386/8505] TestRDocMarkupParser#test_parse_heading_note = 0.00 s 4907s [1387/8505] TestRDocMarkupParser#test_parse_note = 0.00 s 4907s [1388/8505] TestRDocMarkupParser#test_tokenize_ualpha = 0.00 s 4907s [1389/8505] TestRDocMarkupParser#test_parse_heading_three = 0.00 s 4907s [1390/8505] TestRDocMarkupParser#test_parse_bullet_heading = 0.00 s 4907s [1391/8505] TestRDocMarkupParser#test_tokenize_verbatim_heading = 0.00 s 4907s [1392/8505] TestRDocMarkupParser#test_parse_note_empty = 0.00 s 4907s [1393/8505] TestRDocMarkupParser#test_parse_dash = 0.00 s 4907s [1394/8505] TestRDocMarkupParser#test_parse_verbatim_lalpha = 0.00 s 4907s [1395/8505] TestRDocMarkupParser#test_tokenize_lalpha = 0.00 s 4907s [1396/8505] TestRDocMarkupParser#test_parse_bullet_multiparagraph = 0.00 s 4907s [1397/8505] TestRDocMarkupParser#test_tokenize_note_not = 0.00 s 4907s [1398/8505] TestRDocMarkupParser#test_parse_trailing_cr = 0.00 s 4907s [1399/8505] TestRDocMarkupParser#test_parse_verbatim_ualpha = 0.00 s 4907s [1400/8505] TestRDocMarkupParser#test_parse_bullet_multiline = 0.00 s 4907s [1401/8505] TestRDocMarkupParser#test_parse_paragraph_multiline = 0.00 s 4907s [1402/8505] TestRDocMarkupParser#test_parse_number_bullet = 0.00 s 4907s [1403/8505] TestRDocMarkupParser#test_parse_label_bullet = 0.00 s 4907s [1404/8505] TestRDocMarkupParser#test_parse_verbatim_heading = 0.00 s 4907s [1405/8505] TestRDocMarkupParser#test_parse_bullet_indent_verbatim = 0.00 s 4907s [1406/8505] TestRDocMarkupParser#test_parse_heading_heading = 0.00 s 4907s [1407/8505] TestRDocMarkupParser#test_parse_heading_label = 0.00 s 4907s [1408/8505] TestRDocMarkupParser#test_parse_lists = 0.00 s 4907s [1409/8505] TestRDocMarkupParser#test_tokenize_rule = 0.00 s 4907s [1410/8505] TestRDocMarkupParser#test_parse_heading_lalpha = 0.00 s 4907s [1411/8505] TestRDocMarkupParser#test_tokenize_label = 0.00 s 4907s [1412/8505] TestRDocMarkupParser#test_parse_heading_empty = 0.00 s 4907s [1413/8505] TestRDocMarkupParser#test_parse_block_quote = 0.00 s 4907s [1414/8505] TestRDocMarkupParser#test_tokenize_label_note = 0.00 s 4907s [1415/8505] TestRDocMarkupParser#test_tokenize_heading = 0.00 s 4907s [1416/8505] TestRDocMarkupParser#test_tokenize_note_newline_windows = 0.00 s 4907s [1417/8505] TestRDocMarkupParser#test_parse_label = 0.00 s 4907s [1418/8505] TestRDocMarkupParser#test_tokenize_label_newline_windows = 0.00 s 4907s [1419/8505] TestRDocMarkupParser#test_parse_lalpha_ualpha = 0.00 s 4907s [1420/8505] TestRDocMarkupParser#test_parse_bullet = 0.00 s 4907s [1421/8505] TestRDocMarkupParser#test_tokenize_heading_empty = 0.00 s 4907s [1422/8505] TestRDocMarkupParser#test_parse_verbatim_merge = 0.00 s 4907s [1423/8505] TestRDocMarkupParser#test_tokenize_verbatim_rule_fancy = 0.00 s 4907s [1424/8505] TestRDocMarkupParser#test_parse_verbatim_trim = 0.00 s 4907s [1425/8505] TestRDocMarkupParser#test_tokenize_heading_heading = 0.00 s 4907s [1426/8505] TestRDocMarkupParser#test_parse_bullet_utf_8 = 0.01 s 4907s [1427/8505] TestRDocMarkupParser#test_parse_verbatim_markup_example = 0.00 s 4907s [1428/8505] TestRDocMarkupParser#test_parse_note_note = 0.00 s 4907s [1429/8505] TestRDocMarkupParser#test_tokenize_number_period_continue = 0.00 s 4907s [1430/8505] TestRDocMarkupParser#test_parse_verbatim_multiline = 0.00 s 4907s [1431/8505] TestRDocMarkupParser#test_tokenize_bullet_indent = 0.00 s 4907s [1432/8505] TestRDocMarkupParser#test_parse_verbatim_bullet = 0.00 s 4907s [1433/8505] TestRDocMarkupParser#test_parse_bullet_indent = 0.00 s 4907s [1434/8505] TestRDocMarkupParser#test_parse_whitespace = 0.00 s 4907s [1435/8505] TestRDocMarkupParser#test_parse_verbatim_label = 0.00 s 4907s [1436/8505] TestRDocMarkupParser#test_get = 0.00 s 4907s [1437/8505] TestRDocMarkupParser#test_parse_verbatim_heading2 = 0.00 s 4907s [1438/8505] TestRDocMarkupParser#test_parse_verbatim_fold = 0.00 s 4907s [1439/8505] TestRDocMarkupParser#test_tokenize_note_utf_8 = 0.00 s 4907s [1440/8505] TestRDocMarkupParser#test_tokenize_heading_no_space = 0.00 s 4907s [1441/8505] TestRDocMarkupParser#test_parse_paragraph_verbatim = 0.00 s 4907s [1442/8505] TestRDocMarkupParser#test_parse_bullet_paragraph = 0.00 s 4907s [1443/8505] TestRDocMarkupParser#test_parse_heading_bullet = 0.00 s 4907s [1444/8505] TestRDocMarkupParser#test_build_heading = 0.00 s 4907s [1445/8505] TestRDocMarkupParser#test_parse_lalpha_utf_8 = 0.00 s 4907s [1446/8505] TestRDocMarkupParser#test_tokenize_bullet = 0.00 s 4907s [1447/8505] TestRDocMarkupParser#test_tokenize_number_period = 0.00 s 4907s [1448/8505] TestRDocMarkupParser#test_tokenize_note_empty = 0.00 s 4907s [1449/8505] TestRDocMarkupParser#test_tokenize_verbatim_rule = 0.00 s 4907s [1450/8505] TestRDocMarkupParser#test_tokenize_number = 0.00 s 4907s [1451/8505] TestRDocMarkupParser#test_parse_lalpha = 0.00 s 4907s [1452/8505] TestRDocMarkupParser#test_parse_paragraph = 0.00 s 4907s [1453/8505] TestRDocMarkupParser#test_parse_rule = 0.00 s 4907s [1454/8505] TestRDocMarkupParser#test_parse_heading_number = 0.00 s 4907s [1455/8505] TestRDocMarkupParser#test_parse_list_verbatim = 0.00 s 4907s [1456/8505] TestRDocMarkupParser#test_parse_label_multi_label = 0.01 s 4907s [1457/8505] TestRDocMarkupParser#test_tokenize_note_newline = 0.00 s 4907s [1458/8505] TestRDocMarkupParser#test_peek_token = 0.01 s 4907s [1459/8505] TestRDocMarkupParser#test_parse_line_break = 0.00 s 4907s [1460/8505] TestRDocMarkupParser#test_parse_label_multi_line = 0.01 s 4907s [1461/8505] TestRDocMarkupParser#test_parse_verbatim_rule = 0.00 s 4907s [1462/8505] TestRDocMarkupParser#test_tokenize_line_break_long = 0.00 s 4907s [1463/8505] TestRDocMarkupParser#test_parse_label_newline = 0.00 s 4907s [1464/8505] TestRDocMarkupParser#test_parse_verbatim = 0.00 s 4907s [1465/8505] TestRDocMarkupParser#test_tokenize_note = 0.00 s 4907s [1466/8505] TestRDocMarkupParser#test_skip = 0.00 s 4907s [1467/8505] TestRDocMarkupParser#test_parse_list_list_2 = 0.00 s 4907s [1468/8505] TestRDocMarkupParser#test_parse_bullet_verbatim_heading = 0.00 s 4907s [1469/8505] TestRDocMarkupParser#test_tokenize_line_break_no_short = 0.00 s 4907s [1470/8505] TestRDocMarkupParser#test_parse_verbatim_number = 0.00 s 4907s [1471/8505] TestRDocMarkupParser#test_unget = 0.00 s 4907s [1472/8505] TestRDocMarkupParser#test_tokenize_rule_windows = 0.00 s 4907s [1473/8505] TestRDocMarkupParser#test_parse_ualpha = 0.00 s 4907s [1474/8505] TestRDocMarkupParser#test_parse_verbatim_multilevel = 0.00 s 4907s [1475/8505] TestRDocMarkupParser#test_verbatim_normalize = 0.00 s 4907s [1476/8505] TestRDocMarkupParser#test_tokenize_label_newline = 0.00 s 4907s [1477/8505] TestStringScannerFixedAnchor#test_invalid_encoding_string = 0.00 s 4907s [1478/8505] TestStringScannerFixedAnchor#test_set_pos = 0.00 s 4907s [1479/8505] TestStringScannerFixedAnchor#test_match_p = 0.00 s 4907s [1480/8505] TestStringScannerFixedAnchor#test_check = 0.00 s 4907s [1481/8505] TestStringScannerFixedAnchor#test_string_set_is_equal = 0.00 s 4907s [1482/8505] TestStringScannerFixedAnchor#test_check_until = 0.00 s 4907s [1483/8505] TestStringScannerFixedAnchor#test_aref_without_regex = 0.00 s 4907s [1484/8505] TestStringScannerFixedAnchor#test_rest_size = 0.00 s 4907s [1485/8505] TestStringScannerFixedAnchor#test_skip_with_begenning_of_line_anchor_match = 0.00 s 4907s [1486/8505] TestStringScannerFixedAnchor#test_fixed_anchor_false = 0.00 s 4907s [1487/8505] TestStringScannerFixedAnchor#test_scan_full = 0.00 s 4907s [1488/8505] TestStringScannerFixedAnchor#test_exist_p = 0.00 s 4907s [1489/8505] TestStringScannerFixedAnchor#test_s_mustc = 0.00 s 4907s [1490/8505] TestStringScannerFixedAnchor#test_dup = 0.00 s 4907s [1491/8505] TestStringScannerFixedAnchor#test_inspect = 0.00 s 4907s [1492/8505] TestStringScannerFixedAnchor#test_terminate = 0.00 s 4907s [1493/8505] TestStringScannerFixedAnchor#test_string = 0.00 s 4907s [1494/8505] TestStringScannerFixedAnchor#test_fixed_anchor_true = 0.00 s 4907s [1495/8505] TestStringScannerFixedAnchor#test_encoding_string = 0.00 s 4907s [1496/8505] TestStringScannerFixedAnchor#test_string_append = 0.00 s 4907s [1497/8505] TestStringScannerFixedAnchor#test_pos_unicode = 0.00 s 4907s [1498/8505] TestStringScannerFixedAnchor#test_skip_with_begenning_of_string_anchor_match = 0.00 s 4907s [1499/8505] TestStringScannerFixedAnchor#test_peek = 0.00 s 4907s [1500/8505] TestStringScannerFixedAnchor#test_scan_string = 0.00 s 4907s [1501/8505] TestStringScannerFixedAnchor#test_scan = 0.00 s 4907s [1502/8505] TestStringScannerFixedAnchor#test_skip_until = 0.00 s 4907s [1503/8505] TestStringScannerFixedAnchor#test_reset = 0.00 s 4907s [1504/8505] TestStringScannerFixedAnchor#test_encoding = 0.00 s 4907s [1505/8505] TestStringScannerFixedAnchor#test_s_allocate = 0.00 s 4907s [1506/8505] TestStringScannerFixedAnchor#test_exist_p_string = 0.00 s 4907s [1507/8505] TestStringScannerFixedAnchor#test_const_Version = 0.00 s 4907s [1508/8505] TestStringScannerFixedAnchor#test_rest = 0.00 s 4907s [1509/8505] TestStringScannerFixedAnchor#test_bol? = 0.00 s 4907s [1510/8505] TestStringScannerFixedAnchor#test_skip_with_begenning_of_line_anchor_not_match = 0.00 s 4907s [1511/8505] TestStringScannerFixedAnchor#test_unscan = 0.00 s 4907s [1512/8505] TestStringScannerFixedAnchor#test_s_new = 0.00 s 4907s [1513/8505] TestStringScannerFixedAnchor#test_concat = 0.00 s 4907s [1514/8505] TestStringScannerFixedAnchor#test_inspect2 = 0.00 s 4907s [1515/8505] TestStringScannerFixedAnchor#test_charpos_not_use_string_methods = 0.00 s 4907s [1516/8505] TestStringScannerFixedAnchor#test_const_Id = 0.00 s 4907s [1517/8505] TestStringScannerFixedAnchor#test_skip_with_begenning_of_string_anchor_not_match = 0.00 s 4907s [1518/8505] TestStringScannerFixedAnchor#test_eos? = 0.00 s 4907s [1519/8505] TestStringScannerFixedAnchor#test_matched_size = 0.00 s 4907s [1520/8505] TestStringScannerFixedAnchor#test_search_full = 0.00 s 4907s [1521/8505] TestStringScannerFixedAnchor#test_skip = 0.00 s 4907s [1522/8505] TestStringScannerFixedAnchor#test_pos = 0.00 s 4907s [1523/8505] TestStringScannerFixedAnchor#test_size = 0.00 s 4907s [1524/8505] TestStringScannerFixedAnchor#test_generic_regexp = 0.00 s 4907s [1525/8505] HTTPResponsesTest#test_status_code_classes = 0.00 s 4907s [1526/8505] OpenSSL::TestPKeyRSA#test_marshal = 0.00 s 4907s [1527/8505] OpenSSL::TestPKeyRSA#test_private = 0.10 s 4907s [1528/8505] OpenSSL::TestPKeyRSA#test_dup = 0.00 s 4907s [1529/8505] OpenSSL::TestPKeyRSA#test_sign_verify = 0.01 s 4907s [1530/8505] OpenSSL::TestPKeyRSA#test_verify_empty_rsa = 0.00 s 4907s [1531/8505] OpenSSL::TestPKeyRSA#test_sign_verify_raw_legacy = 0.09 s 4907s [1532/8505] OpenSSL::TestPKeyRSA#test_RSAPrivateKey = 0.01 s 4907s [1533/8505] OpenSSL::TestPKeyRSA#test_RSAPrivateKey_encrypted = 0.01 s 4908s [1534/8505] OpenSSL::TestPKeyRSA#test_new = 0.05 s 4908s [1535/8505] OpenSSL::TestPKeyRSA#test_s_generate = 0.03 s 4908s [1536/8505] TestProtocol#test_write0_timeout_multi2 = 0.11 s 4908s [1537/8505] TestProtocol#test_write0_success_multi2 = 0.01 s 4908s [1538/8505] TestProtocol#test_should_properly_dot_stuff_period_with_no_endline = 0.00 s 4908s [1539/8505] TestProtocol#test_write0_success = 0.00 s 4908s [1540/8505] TestProtocol#test_write0_success_multi1 = 0.00 s 4908s [1541/8505] TestProtocol#test_each_crlf_line = 0.02 s 4908s [1542/8505] TestProtocol#test_write0_success2 = 0.00 s 4908s [1543/8505] TestProtocol#test_write0_timeout = 0.10 s 4908s [1544/8505] TestProtocol#test_write0_multibyte = 0.00 s 4908s [1545/8505] TestProtocol#test_write0_timeout_multi1 = 0.10 s 4908s [1546/8505] TestSocketOption#test_bool = 0.00 s 4908s [1547/8505] TestSocketOption#test_unpack = 0.00 s 4908s [1548/8505] TestSocketOption#test_new = 0.00 s 4908s [1549/8505] TestDelegateClass#test_simpledelegator_clone = 0.00 s 4908s [1550/8505] TestDelegateClass#test_unset_simple_delegator = 0.00 s 4908s [1551/8505] TestDelegateClass#test_eql? = 0.00 s 4908s [1552/8505] TestDelegateClass#test_marshal = 0.00 s 4908s [1553/8505] TestDelegateClass#test_instance_methods = 0.00 s 4908s [1554/8505] TestDelegateClass#test_delegate_class_block = 0.00 s 4908s [1555/8505] TestDelegateClass#test_public_instance_methods = 0.00 s 4908s [1556/8505] TestDelegateClass#test_copy_frozen = 0.00 s 4908s [1557/8505] TestDelegateClass#test_DelegateClass_public_instance_method = 0.01 s 4908s [1558/8505] TestDelegateClass#test_extend = 0.00 s 4908s [1559/8505] TestDelegateClass#test_instance_method = 0.01 s 4908s [1560/8505] TestDelegateClass#test_DelegateClass_instance_method = 0.00 s 4908s [1561/8505] TestDelegateClass#test_dir_in_delegator_class = 0.00 s 4908s [1562/8505] TestDelegateClass#test_private_method = 0.00 s 4908s [1563/8505] TestDelegateClass#test_frozen = 0.00 s 4908s [1564/8505] TestDelegateClass#test_send_method_in_delegator = 0.00 s 4908s [1565/8505] TestDelegateClass#test_method_in_simple_delegator = 0.00 s 4908s [1566/8505] TestDelegateClass#test_module_methods_vs_kernel_methods = 0.00 s 4908s [1567/8505] TestDelegateClass#test_simpledelegator_class = 0.00 s 4908s [1568/8505] TestDelegateClass#test_protected_instance_methods = 0.00 s 4908s [1569/8505] TestDelegateClass#test_keyword_and_hash = 0.00 s 4908s [1570/8505] TestDelegateClass#test_keyword_argument = 0.00 s 4908s [1571/8505] TestDelegateClass#test_delegateclass_class = 0.00 s 4908s [1572/8505] TestDelegateClass#test_override = 0.00 s 4908s [1573/8505] TestDelegateClass#test_global_function = 0.00 s 4908s [1574/8505] TestDelegateClass#test_method_in_delegator_class = 0.00 s 4908s [1575/8505] TestDelegateClass#test_methods = 0.00 s 4908s [1576/8505] TestDelegateClass#test_unset_delegate_class = 0.00 s 4908s [1577/8505] TestDelegateClass#test_basicobject_respond_to = 0.00 s 4908s [1578/8505] TestDelegateClass#test_dir_in_simple_delegator = 0.00 s 4908s [1579/8505] TestCSVParseGeneral#test_row_sep_auto_cr_lf = 0.00 s 4908s [1580/8505] TestCSVParseGeneral#test_field_size_limit_controls_lookahead = 0.01 s 4908s [1581/8505] TestCSVParseGeneral#test_mastering_regex_example = 0.00 s 4908s [1582/8505] TestCSVParseGeneral#test_malformed_csv_cr_middle_line = 0.00 s 4908s [1583/8505] TestCSVParseGeneral#test_row_sep_auto_cr = 0.00 s 4908s [1584/8505] TestCSVParseGeneral#test_aras_edge_cases = 0.02 s 4908s [1585/8505] TestCSVParseGeneral#test_the_parse_fails_fast_when_it_can_for_unescaped_quotes = 0.01 s 4908s [1586/8505] TestCSVParseGeneral#test_james_edge_cases = 0.00 s 4908s [1587/8505] TestCSVParseGeneral#test_seeked_string_io = 0.00 s 4908s [1588/8505] TestCSVParseGeneral#test_std_lib_csv = 0.03 s 4908s [1589/8505] TestCSVParseGeneral#test_non_regex_edge_cases = 0.00 s 4908s [1590/8505] TestCSVParseGeneral#test_field_size_limit_in_extended_column_exceeding = 0.01 s 4908s [1591/8505] TestCSVParseGeneral#test_malformed_csv_illegal_quote_middle_line = 0.00 s 4908s [1592/8505] TestCSVParseGeneral#test_field_size_limit_in_extended_column_not_exceeding = 0.00 s 4908s [1593/8505] TestCSVParseGeneral#test_malformed_csv_cr_first_line = 0.00 s 4908s [1594/8505] TestCSVParseGeneral#test_row_sep_auto_lf = 0.00 s 4908s [1595/8505] TestCSVParseGeneral#test_rob_edge_cases = 0.01 s 4908s [1596/8505] TestCSVParseGeneral#test_the_parse_fails_fast_when_it_can_for_unquoted_fields = 0.00 s 4908s [1597/8505] TestCSVParseGeneral#test_malformed_csv_unclosed_quote = 0.01 s 4908s [1598/8505] TestStringScanner#test_invalid_encoding_string = 0.07 s 4908s [1599/8505] TestStringScanner#test_set_pos = 0.00 s 4908s [1600/8505] TestStringScanner#test_match_p = 0.01 s 4908s [1601/8505] TestStringScanner#test_check = 0.00 s 4908s [1602/8505] TestStringScanner#test_string_set_is_equal = 0.11 s 4908s [1603/8505] TestStringScanner#test_check_until = 0.00 s 4908s [1604/8505] TestStringScanner#test_aref_without_regex = 0.00 s 4908s [1605/8505] TestStringScanner#test_rest_size = 0.00 s 4908s [1606/8505] TestStringScanner#test_captures = 0.00 s 4908s [1607/8505] TestStringScanner#test_skip_with_begenning_of_line_anchor_match = 0.00 s 4908s [1608/8505] TestStringScanner#test_fixed_anchor_false = 0.01 s 4908s [1609/8505] TestStringScanner#test_scan_full = 0.02 s 4908s [1610/8505] TestStringScanner#test_getch = 0.00 s 4908s [1611/8505] TestStringScanner#test_exist_p = 0.00 s 4908s [1612/8505] TestStringScanner#test_s_mustc = 0.00 s 4908s [1613/8505] TestStringScanner#test_values_at = 0.00 s 4908s [1614/8505] TestStringScanner#test_dup = 0.00 s 4908s [1615/8505] TestStringScanner#test_inspect = 0.00 s 4908s [1616/8505] TestStringScanner#test_terminate = 0.00 s 4908s [1617/8505] TestStringScanner#test_string = 0.00 s 4908s [1618/8505] TestStringScanner#test_fixed_anchor_true = 0.00 s 4908s [1619/8505] TestStringScanner#test_encoding_string = 0.00 s 4908s [1620/8505] TestStringScanner#test_string_append = 0.00 s 4908s [1621/8505] TestStringScanner#test_pos_unicode = 0.00 s 4908s [1622/8505] TestStringScanner#test_get_byte = 0.00 s 4908s [1623/8505] TestStringScanner#test_skip_with_begenning_of_string_anchor_match = 0.00 s 4908s [1624/8505] TestStringScanner#test_peek = 0.00 s 4908s [1625/8505] TestStringScanner#test_scan_string = 0.00 s 4908s [1626/8505] TestStringScanner#test_scan = 0.00 s 4908s [1627/8505] TestStringScanner#test_skip_until = 0.00 s 4908s [1628/8505] TestStringScanner#test_reset = 0.00 s 4908s [1629/8505] TestStringScanner#test_encoding = 0.00 s 4908s [1630/8505] TestStringScanner#test_s_allocate = 0.00 s 4908s [1631/8505] TestStringScanner#test_exist_p_string = 0.00 s 4908s [1632/8505] TestStringScanner#test_const_Version = 0.00 s 4908s [1633/8505] TestStringScanner#test_rest = 0.00 s 4908s [1634/8505] TestStringScanner#test_bol? = 0.00 s 4908s [1635/8505] TestStringScanner#test_unscan = 0.00 s 4908s [1636/8505] TestStringScanner#test_s_new = 0.00 s 4909s [1637/8505] TestStringScanner#test_concat = 0.00 s 4909s [1638/8505] TestStringScanner#test_inspect2 = 0.00 s 4909s [1639/8505] TestStringScanner#test_post_match = 0.00 s 4909s [1640/8505] TestStringScanner#test_charpos_not_use_string_methods = 0.01 s 4909s [1641/8505] TestStringScanner#test_const_Id = 0.00 s 4909s [1642/8505] TestStringScanner#test_pre_match = 0.00 s 4909s [1643/8505] TestStringScanner#test_eos? = 0.00 s 4909s [1644/8505] TestStringScanner#test_matched_size = 0.00 s 4909s [1645/8505] TestStringScanner#test_search_full = 0.00 s 4909s [1646/8505] TestStringScanner#test_skip = 0.00 s 4909s [1647/8505] TestStringScanner#test_pos = 0.00 s 4909s [1648/8505] TestStringScanner#test_AREF = 0.00 s 4909s [1649/8505] TestStringScanner#test_size = 0.00 s 4909s [1650/8505] TestStringScanner#test_matched = 0.00 s 4909s [1651/8505] TestStringScanner#test_generic_regexp = 0.00 s 4909s [1652/8505] TestERB#test_with_location = 0.01 s 4909s [1653/8505] TestERB#test_with_filename = 0.03 s 4909s [1654/8505] TestERB#test_without_filename = 0.00 s 4909s [1655/8505] TestERB#test_without_filename_with_safe_level = 0.00 s 4909s [1656/8505] TestERB#test_with_filename_lineno = 0.01 s 4909s [1657/8505] TestERB#test_html_escape = 0.00 s 4909s [1658/8505] TestERB#test_with_filename_and_safe_level = 0.00 s 4909s [1659/8505] TestOptionParser::ReqArg::Def2#test_abbrev = 0.02 s 4909s [1660/8505] TestOptionParser::ReqArg::Def2#test_order = 0.01 s 4909s [1661/8505] TestOptionParser::ReqArg::Def2#test_short = 0.01 s 4909s [1662/8505] TestOptionParser::ReqArg::Def2#test_hyphenize = 0.01 s 4909s [1663/8505] TestOptionParser::ReqArg::Def2#test_regexp = 0.00 s 4909s [1664/8505] TestOptionParser::ReqArg::Def2#test_nonopt_pattern = 0.00 s 4909s [1665/8505] TestOptionParser::ReqArg::Def2#test_into = 0.00 s 4909s [1666/8505] TestOptionParser::ReqArg::Def2#test_permute = 0.01 s 4909s [1667/8505] TestOptionParser::ReqArg::Def2#test_long = 0.01 s 4909s [1668/8505] TestOptionParser::ReqArg::Def2#test_require_exact = 0.03 s 4909s [1669/8505] TestCSVRow#test_has_key? = 0.01 s 4909s [1670/8505] TestCSVRow#test_field = 0.00 s 4909s [1671/8505] TestCSVRow#test_append = 0.00 s 4909s [1672/8505] TestCSVRow#test_delete_if = 0.00 s 4909s [1673/8505] TestCSVRow#test_each_pair = 0.00 s 4909s [1674/8505] TestCSVRow#test_dig_by_header = 0.00 s 4909s [1675/8505] TestCSVRow#test_dig_cell_no_dig = 0.00 s 4909s [1676/8505] TestCSVRow#test_dup = 0.00 s 4909s [1677/8505] TestCSVRow#test_headers = 0.00 s 4909s [1678/8505] TestCSVRow#test_set_field = 0.00 s 4909s [1679/8505] TestCSVRow#test_inspect_shows_header_field_pairs = 0.00 s 4909s [1680/8505] TestCSVRow#test_to_csv = 0.02 s 4909s [1681/8505] TestCSVRow#test_array_delegation = 0.00 s 4909s [1682/8505] TestCSVRow#test_delete_if_without_block = 0.01 s 4909s [1683/8505] TestCSVRow#test_fields = 0.00 s 4909s [1684/8505] TestCSVRow#test_delete = 0.00 s 4909s [1685/8505] TestCSVRow#test_to_hash = 0.11 s 4909s [1686/8505] TestCSVRow#test_inspect_shows_symbol_headers_as_bare_attributes = 0.01 s 4909s [1687/8505] TestCSVRow#test_initialize = 0.01 s 4909s [1688/8505] TestCSVRow#test_dig_by_index = 0.00 s 4909s [1689/8505] TestCSVRow#test_to_a = 0.00 s 4909s [1690/8505] TestCSVRow#test_can_be_compared_with_other_classes = 0.00 s 4909s [1691/8505] TestCSVRow#test_fetch = 0.00 s 4909s [1692/8505] TestCSVRow#test_queries = 0.00 s 4909s [1693/8505] TestCSVRow#test_each = 0.01 s 4909s [1694/8505] TestCSVRow#test_row_type = 0.00 s 4909s [1695/8505] TestCSVRow#test_index = 0.00 s 4909s [1696/8505] TestCSVRow#test_inspect_encoding_is_ascii_compatible = 0.00 s 4909s [1697/8505] TestCSVRow#test_can_be_compared_when_not_a_row = 0.00 s 4909s [1698/8505] TestCSVRow#test_enumerable = 0.00 s 4909s [1699/8505] TestCSVRow#test_dig_cell = 0.00 s 4909s [1700/8505] TestCSVWriteConvertersGenerateLine#test_nil_value = 0.00 s 4909s [1701/8505] TestCSVWriteConvertersGenerateLine#test_empty_value = 0.00 s 4909s [1702/8505] TestCSVWriteConvertersGenerateLine#test_one = 0.00 s 4909s [1703/8505] TestCSVWriteConvertersGenerateLine#test_multiple = 0.00 s 4909s [1704/8505] Psych::TestSerializeSubclasses#test_some_object = 0.01 s 4909s [1705/8505] Psych::TestSerializeSubclasses#test_struct_subclass = 0.01 s 4909s [1706/8505] TestRDocMarkupPreProcess#test_handle_directive_stopdoc = 0.00 s 4909s [1707/8505] TestRDocMarkupPreProcess#test_handle_directive_args = 0.01 s 4909s [1708/8505] TestRDocMarkupPreProcess#test_handle_directive_yield_no_context = 0.00 s 4909s [1709/8505] TestRDocMarkupPreProcess#test_handle_directive_yield = 0.00 s 4909s [1710/8505] TestRDocMarkupPreProcess#test_handle_directive_arg = 0.00 s 4909s [1711/8505] TestRDocMarkupPreProcess#test_handle_comment = 0.00 s 4909s [1712/8505] TestRDocMarkupPreProcess#test_handle_directive_nodoc_all = 0.00 s 4909s [1713/8505] TestRDocMarkupPreProcess#test_handle_unregistered = 0.00 s 4909s [1714/8505] TestRDocMarkupPreProcess#test_handle_directive_registered_block = 0.00 s 4909s [1715/8505] TestRDocMarkupPreProcess#test_handle_directive_registered = 0.01 s 4909s [1716/8505] TestRDocMarkupPreProcess#test_handle_directive_block_nil = 0.00 s 4909s [1717/8505] TestRDocMarkupPreProcess#test_handle_directive_nodoc = 0.00 s 4909s [1718/8505] TestRDocMarkupPreProcess#test_handle_directive_category = 0.00 s 4909s [1719/8505] TestRDocMarkupPreProcess#test_handle_directive_enddoc = 0.00 s 4909s [1720/8505] TestRDocMarkupPreProcess#test_handle_directive_main = 0.00 s 4909s [1721/8505] TestRDocMarkupPreProcess#test_handle_directive_yield_block_param = 0.00 s 4909s [1722/8505] TestRDocMarkupPreProcess#test_handle_directive_arg_no_context = 0.00 s 4909s [1723/8505] TestRDocMarkupPreProcess#test_include_file_encoding_incompatible = 0.02 s 4909s [1724/8505] TestRDocMarkupPreProcess#test_handle_directive_startdoc = 0.00 s 4909s [1725/8505] TestRDocMarkupPreProcess#test_handle_directive_blankline = 0.01 s 4909s [1726/8505] TestRDocMarkupPreProcess#test_handle_directive_include = 0.01 s 4909s [1727/8505] TestRDocMarkupPreProcess#test_handle_directive_unhandled = 0.00 s 4909s [1728/8505] TestRDocMarkupPreProcess#test_class_register = 0.00 s 4909s [1729/8505] TestRDocMarkupPreProcess#test_include_file_in_other_directory = 0.01 s 4909s [1730/8505] TestRDocMarkupPreProcess#test_handle_directive_unhandled_block = 0.00 s 4909s [1731/8505] TestRDocMarkupPreProcess#test_handle_directive_block = 0.00 s 4909s [1732/8505] TestRDocMarkupPreProcess#test_handle_directive_block_false = 0.00 s 4909s [1733/8505] TestRDocMarkupPreProcess#test_handle_directive_notnew = 0.00 s 4909s [1734/8505] TestRDocMarkupPreProcess#test_class_post_process = 0.00 s 4909s [1735/8505] TestRDocMarkupPreProcess#test_handle_directive_doc_no_context = 0.00 s 4909s [1736/8505] TestRDocMarkupPreProcess#test_handle_directive_registered_code_object = 0.00 s 4909s [1737/8505] TestRDocMarkupPreProcess#test_handle = 0.00 s 4909s [1738/8505] TestRDocMarkupPreProcess#test_handle_directive_downcase = 0.00 s 4909s [1739/8505] TestRDocMarkupPreProcess#test_handle_directive_title = 0.02 s 4909s [1740/8505] TestRDocMarkupPreProcess#test_handle_directive_yields = 0.00 s 4909s [1741/8505] TestRDocMarkupPreProcess#test_include_file = 0.00 s 4909s [1742/8505] TestRDocMarkupPreProcess#test_handle_post_process = 0.00 s 4909s [1743/8505] TestRDocMarkupPreProcess#test_handle_directive_nodoc_no_context = 0.00 s 4909s [1744/8505] TestRDocMarkupPreProcess#test_handle_directive_doc = 0.00 s 4909s [1745/8505] TestRDocMarkupPreProcess#test_handle_directive_not_dash_new = 0.00 s 4909s [1746/8505] TestRDocMarkupPreProcess#test_handle_directive_not_new = 0.00 s 4909s [1747/8505] TestRDocMarkupPreProcess#test_handle_markup = 0.00 s 4909s [1748/8505] TestRDocMarkupPreProcess#test_handle_markup_empty = 0.00 s 4909s [1749/8505] Psych::TestDeprecated#test_coder_scalar = 0.00 s 4909s [1750/8505] Psych::TestDeprecated#test_yaml_initialize_and_init_with = 0.01 s 4909s [1751/8505] Psych::TestDeprecated#test_recursive_quick_emit_encode_with = 0.02 s 4909s [1752/8505] TestRDocMarkupToTtOnly#test_accept_heading_1 = 0.01 s 4909s [1753/8505] TestRDocMarkupToTtOnly#test_accept_heading_3 = 0.01 s 4909s [1754/8505] TestRDocMarkupToTtOnly#test_accept_heading_suppressed_crossref = 0.00 s 4909s [1755/8505] TestRDocMarkupToTtOnly#test_accept_list_start_ualpha = 0.00 s 4909s [1756/8505] TestRDocMarkupToTtOnly#test_accept_paragraph_break = 0.00 s 4909s [1757/8505] TestRDocMarkupToTtOnly#test_accept_block_quote = 0.01 s 4909s [1758/8505] TestRDocMarkupToTtOnly#test_accept_list_item_start_label = 0.00 s 4909s [1759/8505] TestRDocMarkupToTtOnly#test_accept_list_end_bullet = 0.00 s 4909s [1760/8505] TestRDocMarkupToTtOnly#test_accept_rule = 0.00 s 4909s [1761/8505] TestRDocMarkupToTtOnly#test_accept_list_item_end_bullet = 0.00 s 4909s [1762/8505] TestRDocMarkupToTtOnly#test_accept_paragraph_underscore = 0.01 s 4909s [1763/8505] TestRDocMarkupToTtOnly#test_accept_list_item_start_bullet = 0.00 s 4909s [1764/8505] TestRDocMarkupToTtOnly#test_accept_list_end_label = 0.00 s 4909s [1765/8505] TestRDocMarkupToTtOnly#test_accept_heading = 0.00 s 4909s [1766/8505] TestRDocMarkupToTtOnly#test_accept_list_start_lalpha = 0.01 s 4909s [1767/8505] TestRDocMarkupToTtOnly#test_list_nested = 0.01 s 4909s [1768/8505] TestRDocMarkupToTtOnly#test_accept_heading_b = 0.00 s 4909s [1769/8505] TestRDocMarkupToTtOnly#test_accept_list_item_start_number = 0.00 s 4909s [1770/8505] TestRDocMarkupToTtOnly#test_accept_document = 0.00 s 4909s [1771/8505] TestRDocMarkupToTtOnly#test_accept_list_item_end_number = 0.00 s 4909s [1772/8505] TestRDocMarkupToTtOnly#test_accept_list_end_number = 0.01 s 4909s [1773/8505] TestRDocMarkupToTtOnly#test_accept_paragraph_i = 0.01 s 4909s [1774/8505] TestRDocMarkupToTtOnly#test_accept_verbatim = 0.01 s 4909s [1775/8505] TestRDocMarkupToTtOnly#test_list_verbatim = 0.00 s 4909s [1776/8505] TestRDocMarkupToTtOnly#test_accept_list_end_ualpha = 0.01 s 4909s [1777/8505] TestRDocMarkupToTtOnly#test_accept_list_item_end_ualpha = 0.00 s 4909s [1778/8505] TestRDocMarkupToTtOnly#test_accept_list_item_start_ualpha = 0.00 s 4909s [1779/8505] TestRDocMarkupToTtOnly#test_accept_paragraph_b = 0.01 s 4909s [1780/8505] TestRDocMarkupToTtOnly#test_accept_paragraph_plus = 0.00 s 4909s [1781/8505] TestRDocMarkupToTtOnly#test_accept_list_item_end_label = 0.00 s 4909s [1782/8505] TestRDocMarkupToTtOnly#test_accept_list_start_bullet = 0.00 s 4909s [1783/8505] TestRDocMarkupToTtOnly#test_accept_list_start_note = 0.00 s 4909s [1784/8505] TestRDocMarkupToTtOnly#test_accept_list_end_lalpha = 0.00 s 4909s [1785/8505] TestRDocMarkupToTtOnly#test_accept_raw = 0.00 s 4909s [1786/8505] TestRDocMarkupToTtOnly#test_accept_list_item_start_note = 0.00 s 4909s [1787/8505] TestRDocMarkupToTtOnly#test_accept_list_item_end_lalpha = 0.00 s 4909s [1788/8505] TestRDocMarkupToTtOnly#test_accept_list_item_start_lalpha = 0.00 s 4909s [1789/8505] TestRDocMarkupToTtOnly#test_end_accepting = 0.00 s 4909s [1790/8505] TestRDocMarkupToTtOnly#test_accept_list_item_start_note_multi_label = 0.00 s 4909s [1791/8505] TestRDocMarkupToTtOnly#test_accept_list_item_start_note_multi_description = 0.00 s 4909s [1792/8505] TestRDocMarkupToTtOnly#test_accept_list_start_number = 0.00 s 4909s [1793/8505] TestRDocMarkupToTtOnly#test_accept_list_end_note = 0.00 s 4909s [1794/8505] TestRDocMarkupToTtOnly#test_accept_heading_4 = 0.00 s 4909s [1795/8505] TestRDocMarkupToTtOnly#test_accept_list_start_label = 0.00 s 4909s [1796/8505] TestRDocMarkupToTtOnly#test_accept_heading_2 = 0.00 s 4909s [1797/8505] TestRDocMarkupToTtOnly#test_accept_paragraph_star = 0.00 s 4909s [1798/8505] TestRDocMarkupToTtOnly#test_accept_blank_line = 0.00 s 4909s [1799/8505] TestRDocMarkupToTtOnly#test_accept_paragraph = 0.00 s 4909s [1800/8505] TestRDocMarkupToTtOnly#test_accept_paragraph_br = 0.01 s 4909s [1801/8505] TestRDocMarkupToTtOnly#test_accept_list_item_start_note_2 = 0.01 s 4909s [1802/8505] TestRDocMarkupToTtOnly#test_start_accepting = 0.00 s 4909s [1803/8505] TestRDocMarkupToTtOnly#test_accept_list_item_end_note = 0.00 s 4909s [1804/8505] TestSocket_UDPSocket#test_open = 0.01 s 4909s [1805/8505] TestSocket_UDPSocket#test_connect = 0.00 s 4910s [1806/8505] TestRDocRubygemsHook#test_remove_unwritable = 0.03 s 4910s [1807/8505] TestRDocRubygemsHook#test_generate_default_gem = 0.02 s 4910s [1808/8505] TestRDocRubygemsHook#test_setup = 0.01 s 4910s [1809/8505] TestRDocRubygemsHook#test_setup_unwritable = 0.02 s 4910s [1810/8505] TestRDocRubygemsHook#test_generate_no_overwrite = 0.15 s 4910s [1811/8505] TestRDocRubygemsHook#test_delete_legacy_args = 0.01 s 4911s [1812/8505] TestRDocRubygemsHook#test_generate_all = 0.77 s 4911s [1813/8505] TestRDocRubygemsHook#test_rdoc_installed? = 0.01 s 4911s [1814/8505] TestRDocRubygemsHook#test_remove = 0.02 s 4911s [1815/8505] TestRDocRubygemsHook#test_generate = 0.06 s 4911s [1816/8505] TestRDocRubygemsHook#test_initialize = 0.00 s 4911s [1817/8505] TestRDocRubygemsHook#test_document = 0.43 s 4911s [1818/8505] TestRDocRubygemsHook#test_new_rdoc = 0.01 s 4911s [1819/8505] TestRDocRubygemsHook#test_generate_force = 0.07 s 4911s [1820/8505] TestRDocRubygemsHook#test_generate_configuration_rdoc_array = 0.06 s 4911s [1821/8505] TestRDocRubygemsHook#test_generate_configuration_rdoc_string = 0.11 s 4911s [1822/8505] TestRDocRubygemsHook#test_generate_disabled = 0.01 s 4911s [1823/8505] TestRDocRubygemsHook#test_ri_installed? = 0.08 s 4912s [1824/8505] TestRDocNormalClass#test_definition = 0.20 s 4912s [1825/8505] TestRDocNormalClass#test_direct_ancestors = 0.07 s 4912s [1826/8505] TestRDocNormalClass#test_aref = 0.04 s 4912s [1827/8505] TestRDocNormalClass#test_ancestors = 0.08 s 4912s [1828/8505] TestRDocNormalClass#test_ancestors_multilevel = 0.04 s 4912s [1829/8505] TestOptionParser::BashCompletion#test_two_hyphen = 0.01 s 4912s [1830/8505] TestOptionParser::BashCompletion#test_long_for_option = 0.02 s 4912s [1831/8505] TestOptionParser::BashCompletion#test_one_hyphen = 0.00 s 4912s [1832/8505] TestOptionParser::BashCompletion#test_case_sensitive = 0.00 s 4912s [1833/8505] TestOptionParser::BashCompletion#test_long_for_option_args = 0.00 s 4912s [1834/8505] TestOptionParser::BashCompletion#test_long_f = 0.00 s 4912s [1835/8505] TestOptionParser::BashCompletion#test_empty = 0.00 s 4912s [1836/8505] TestOptionParser::BashCompletion#test_long_for_option_complete = 0.00 s 4912s [1837/8505] CGITagHelperTest#test_cgi_tag_helper_html3 = 0.18 s 4912s [1838/8505] CGITagHelperTest#test_cgi_tag_helper_html5 = 0.01 s 4912s [1839/8505] OpenSSL::TestX509Name#test_s_parse_rfc2253 = 0.03 s 4912s [1840/8505] OpenSSL::TestX509Name#test_marshal = 0.00 s 4912s [1841/8505] OpenSSL::TestX509Name#test_add_entry_street = 0.00 s 4912s [1842/8505] OpenSSL::TestX509Name#test_s_parse = 0.00 s 4912s [1843/8505] OpenSSL::TestX509Name#test_hash = 0.00 s 4912s [1844/8505] OpenSSL::TestX509Name#test_equality = 0.00 s 4912s [1845/8505] OpenSSL::TestX509Name#test_s_new = 0.00 s 4912s [1846/8505] OpenSSL::TestX509Name#test_unrecognized_oid = 0.00 s 4912s [1847/8505] OpenSSL::TestX509Name#test_add_entry = 0.00 s 4912s [1848/8505] OpenSSL::TestX509Name#test_equals2 = 0.00 s 4912s [1849/8505] OpenSSL::TestX509Name#test_unrecognized_oid_parse_encode_equality = 0.00 s 4912s [1850/8505] Psych::TestNil#test_nil = 0.00 s 4912s [1851/8505] Psych::TestNil#test_array_nil = 0.00 s 4912s [1852/8505] TestRDocContextSection#test_hash = 0.00 s 4912s [1853/8505] TestRDocContextSection#test_marshal_dump_no_comment = 0.00 s 4912s [1854/8505] TestRDocContextSection#test_aref = 0.00 s 4912s [1855/8505] TestRDocContextSection#test_add_comment = 0.00 s 4912s [1856/8505] TestRDocContextSection#test_marshal_load_version_0 = 0.00 s 4912s [1857/8505] TestRDocContextSection#test_remove_comment_array = 0.00 s 4912s [1858/8505] TestRDocContextSection#test_equals = 0.00 s 4912s [1859/8505] TestRDocContextSection#test_eql_eh = 0.00 s 4912s [1860/8505] TestRDocContextSection#test_remove_comment_document = 0.00 s 4912s [1861/8505] TestRDocContextSection#test_extract_comment = 0.00 s 4912s [1862/8505] TestRDocContextSection#test_marshal_dump = 0.00 s 4912s [1863/8505] TestRDocMarkupToBs#test_accept_heading_1 = 0.01 s 4912s [1864/8505] TestRDocMarkupToBs#test_accept_heading_3 = 0.05 s 4912s [1865/8505] TestRDocMarkupToBs#test_accept_heading_suppressed_crossref = 0.01 s 4912s [1866/8505] TestRDocMarkupToBs#test_accept_list_start_ualpha = 0.01 s 4912s [1867/8505] TestRDocMarkupToBs#test_accept_paragraph_break = 0.01 s 4912s [1868/8505] TestRDocMarkupToBs#test_accept_block_quote = 0.00 s 4912s [1869/8505] TestRDocMarkupToBs#test_accept_list_item_start_label = 0.02 s 4912s [1870/8505] TestRDocMarkupToBs#test_accept_list_end_bullet = 0.01 s 4912s [1871/8505] TestRDocMarkupToBs#test_accept_rule = 0.00 s 4912s [1872/8505] TestRDocMarkupToBs#test_attributes = 0.01 s 4912s [1873/8505] TestRDocMarkupToBs#test_accept_list_item_end_bullet = 0.02 s 4912s [1874/8505] TestRDocMarkupToBs#test_accept_paragraph_underscore = 0.01 s 4912s [1875/8505] TestRDocMarkupToBs#test_accept_list_item_start_bullet = 0.00 s 4912s [1876/8505] TestRDocMarkupToBs#test_accept_list_end_label = 0.00 s 4912s [1877/8505] TestRDocMarkupToBs#test_accept_heading = 0.00 s 4912s [1878/8505] TestRDocMarkupToBs#test_accept_list_start_lalpha = 0.00 s 4912s [1879/8505] TestRDocMarkupToBs#test_list_nested = 0.01 s 4912s [1880/8505] TestRDocMarkupToBs#test_accept_verbatim_indent = 0.00 s 4912s [1881/8505] TestRDocMarkupToBs#test_accept_heading_b = 0.00 s 4912s [1882/8505] TestRDocMarkupToBs#test_accept_list_item_start_number = 0.00 s 4912s [1883/8505] TestRDocMarkupToBs#test_accept_document = 0.00 s 4912s [1884/8505] TestRDocMarkupToBs#test_accept_list_item_end_number = 0.00 s 4912s [1885/8505] TestRDocMarkupToBs#test_accept_verbatim_big_indent = 0.00 s 4912s [1886/8505] TestRDocMarkupToBs#test_accept_list_end_number = 0.00 s 4912s [1887/8505] TestRDocMarkupToBs#test_accept_paragraph_i = 0.00 s 4912s [1888/8505] TestRDocMarkupToBs#test_accept_verbatim = 0.00 s 4912s [1889/8505] TestRDocMarkupToBs#test_list_verbatim = 0.00 s 4912s [1890/8505] TestRDocMarkupToBs#test_accept_heading_indent = 0.00 s 4912s [1891/8505] TestRDocMarkupToBs#test_accept_list_end_ualpha = 0.00 s 4912s [1892/8505] TestRDocMarkupToBs#test_accept_list_item_end_ualpha = 0.00 s 4912s [1893/8505] TestRDocMarkupToBs#test_accept_rule_indent = 0.00 s 4912s [1894/8505] TestRDocMarkupToBs#test_accept_list_item_start_ualpha = 0.00 s 4912s [1895/8505] TestRDocMarkupToBs#test_accept_paragraph_b = 0.00 s 4912s [1896/8505] TestRDocMarkupToBs#test_accept_paragraph_indent = 0.00 s 4912s [1897/8505] TestRDocMarkupToBs#test_accept_paragraph_plus = 0.00 s 4912s [1898/8505] TestRDocMarkupToBs#test_accept_list_item_end_label = 0.01 s 4912s [1899/8505] TestRDocMarkupToBs#test_accept_list_start_bullet = 0.00 s 4912s [1900/8505] TestRDocMarkupToBs#test_accept_list_start_note = 0.00 s 4912s [1901/8505] TestRDocMarkupToBs#test_accept_list_end_lalpha = 0.00 s 4912s [1902/8505] TestRDocMarkupToBs#test_accept_raw = 0.00 s 4912s [1903/8505] TestRDocMarkupToBs#test_accept_list_item_start_note = 0.00 s 4912s [1904/8505] TestRDocMarkupToBs#test_accept_list_item_end_lalpha = 0.00 s 4912s [1905/8505] TestRDocMarkupToBs#test_accept_list_item_start_lalpha = 0.00 s 4912s [1906/8505] TestRDocMarkupToBs#test_end_accepting = 0.00 s 4912s [1907/8505] TestRDocMarkupToBs#test_accept_paragraph_wrap = 0.00 s 4912s [1908/8505] TestRDocMarkupToBs#test_accept_list_item_start_note_multi_label = 0.00 s 4912s [1909/8505] TestRDocMarkupToBs#test_accept_list_item_start_note_multi_description = 0.00 s 4912s [1910/8505] TestRDocMarkupToBs#test_accept_list_start_number = 0.00 s 4912s [1911/8505] TestRDocMarkupToBs#test_accept_list_end_note = 0.00 s 4912s [1912/8505] TestRDocMarkupToBs#test_accept_heading_4 = 0.00 s 4912s [1913/8505] TestRDocMarkupToBs#test_accept_list_start_label = 0.00 s 4912s [1914/8505] TestRDocMarkupToBs#test_accept_heading_2 = 0.00 s 4912s [1915/8505] TestRDocMarkupToBs#test_accept_paragraph_star = 0.00 s 4912s [1916/8505] TestRDocMarkupToBs#test_accept_blank_line = 0.03 s 4912s [1917/8505] TestRDocMarkupToBs#test_accept_paragraph = 0.00 s 4912s [1918/8505] TestRDocMarkupToBs#test_accept_paragraph_br = 0.00 s 4912s [1919/8505] TestRDocMarkupToBs#test_accept_list_item_start_note_2 = 0.00 s 4912s [1920/8505] TestRDocMarkupToBs#test_start_accepting = 0.00 s 4912s [1921/8505] TestRDocMarkupToBs#test_accept_list_item_end_note = 0.00 s 4912s [1922/8505] Psych::TestJSONTree#test_time = 0.01 s 4913s [1923/8505] Psych::TestJSONTree#test_list_to_json = 0.01 s 4913s [1924/8505] Psych::TestJSONTree#test_hash = 0.00 s 4913s [1925/8505] Psych::TestJSONTree#test_nil = 0.00 s 4913s [1926/8505] Psych::TestJSONTree#test_float = 0.00 s 4913s [1927/8505] Psych::TestJSONTree#test_symbol = 0.00 s 4913s [1928/8505] Psych::TestJSONTree#test_datetime = 0.01 s 4913s [1929/8505] Psych::TestJSONTree#test_string = 0.00 s 4913s [1930/8505] Psych::TestJSONTree#test_int = 0.00 s 4913s [1931/8505] Psych::TestJSONTree#test_json_list_dump_exclude_tag = 0.01 s 4913s [1932/8505] OpenSSL::TestRandom#test_pseudo_bytes = 0.00 s 4913s [1933/8505] OpenSSL::TestRandom#test_random_bytes = 0.00 s 4913s [1934/8505] TestStringIO#test_set_fcntl = 0.00 s 4913s [1935/8505] TestStringIO#test_ungetbyte = 0.00 s 4913s [1936/8505] TestStringIO#test_mode_error = 0.00 s 4913s [1937/8505] TestStringIO#test_binary_encoding_read_and_default_internal = 0.00 s 4913s [1938/8505] TestStringIO#test_method = 0.00 s 4913s [1939/8505] TestStringIO#test_readbyte = 0.00 s 4913s [1940/8505] TestStringIO#test_write_encoding = 0.00 s 4913s [1941/8505] TestStringIO#test_each_char = 0.00 s 4913s [1942/8505] TestStringIO#test_putc = 0.00 s 4913s [1943/8505] TestStringIO#test_readlines_limit_0 = 0.00 s 4913s [1944/8505] TestStringIO#test_ungetbyte_padding = 0.00 s 4913s [1945/8505] TestStringIO#test_fsync = 0.00 s 4913s [1946/8505] TestStringIO#test_putc_nonascii = 0.00 s 4913s [1947/8505] TestStringIO#test_eof_0_seek = 0.00 s 4913s [1948/8505] TestStringIO#test_write_nonblock = 0.00 s 4913s [1949/8505] TestStringIO#test_close_write = 0.00 s 4913s [1950/8505] TestStringIO#test_ungetc = 0.00 s 4913s [1951/8505] TestStringIO#test_each_char_closed = 0.00 s 4913s [1952/8505] TestStringIO#test_readlines = 0.00 s 4913s [1953/8505] TestStringIO#test_gets2 = 0.00 s 4913s [1954/8505] TestStringIO#test_getbyte = 0.00 s 4913s [1955/8505] TestStringIO#test_frozen_string = 0.00 s 4913s [1956/8505] TestStringIO#test_readchar = 0.00 s 4913s [1957/8505] TestStringIO#test_each_byte = 0.00 s 4913s [1958/8505] TestStringIO#test_each_codepoint = 0.00 s 4913s [1959/8505] TestStringIO#test_gets_chomp_eol = 0.00 s 4913s [1960/8505] TestStringIO#test_dup = 0.00 s 4913s [1961/8505] TestStringIO#test_read = 0.00 s 4913s [1962/8505] TestStringIO#test_write_nonblock_no_exceptions = 0.00 s 4913s [1963/8505] TestStringIO#test_overwrite = 0.00 s 4913s [1964/8505] TestStringIO#test_eof_3 = 0.00 s 4913s [1965/8505] TestStringIO#test_truncate = 0.00 s 4913s [1966/8505] TestStringIO#test_ungetc_padding = 0.00 s 4913s [1967/8505] TestStringIO#test_eof_1 = 0.00 s 4913s [1968/8505] TestStringIO#test_write_with_multiple_arguments = 0.00 s 4913s [1969/8505] TestStringIO#test_write = 0.00 s 4913s [1970/8505] TestStringIO#test_gets_chomp = 0.00 s 4913s [1971/8505] TestStringIO#test_close = 0.00 s 4913s [1972/8505] TestStringIO#test_open = 0.00 s 4913s [1973/8505] TestStringIO#test_eof_0 = 0.00 s 4913s [1974/8505] TestStringIO#test_frozen = 0.00 s 4913s [1975/8505] TestStringIO#test_eof_2 = 0.00 s 4913s [1976/8505] TestStringIO#test_initialize = 0.00 s 4913s [1977/8505] TestStringIO#test_ungetbyte_pos = 0.00 s 4913s [1978/8505] TestStringIO#test_sysread = 0.00 s 4913s [1979/8505] TestStringIO#test_closed = 0.00 s 4913s [1980/8505] TestStringIO#test_eof_1_seek = 0.00 s 4913s [1981/8505] TestStringIO#test_binmode = 0.00 s 4913s [1982/8505] TestStringIO#test_close_read = 0.00 s 4913s [1983/8505] TestStringIO#test_lineno = 0.00 s 4913s [1984/8505] TestStringIO#test_reopen = 0.00 s 4913s [1985/8505] TestStringIO#test_each_line_limit_0 = 0.00 s 4913s [1986/8505] TestStringIO#test_seek_beyond_eof = 0.00 s 4913s [1987/8505] TestStringIO#test_each = 0.00 s 4913s [1988/8505] TestStringIO#test_set_encoding = 0.00 s 4913s [1989/8505] TestStringIO#test_read_nonblock = 0.00 s 4913s [1990/8505] TestStringIO#test_seek = 0.00 s 4913s [1991/8505] TestStringIO#test_readpartial = 0.00 s 4913s [1992/8505] TestStringIO#test_new_block_warning = 0.00 s 4913s [1993/8505] TestStringIO#test_sync = 0.00 s 4913s [1994/8505] TestStringIO#test_pos = 0.00 s 4913s [1995/8505] TestStringIO#test_size = 0.00 s 4913s [1996/8505] TestStringIO#test_ungetc_pos = 0.00 s 4913s [1997/8505] TestStringIO#test_closed_write = 0.00 s 4913s [1998/8505] TestStringIO#test_closed_read = 0.00 s 4913s [1999/8505] TestStringIO#test_isatty = 0.00 s 4913s [2000/8505] TestStringIO#test_eof_0_rw = 0.00 s 4913s [2001/8505] TestStringIO#test_gets = 0.00 s 4913s [2002/8505] TestRDocMarkupInclude#test_equals2 = 0.00 s 4913s [2003/8505] TestCSVInterfaceReadWrite::DifferentOFS#test_instance_shortcut_with_io = 0.01 s 4913s [2004/8505] TestCSVInterfaceReadWrite::DifferentOFS#test_filter_headers_array_write_headers = 0.02 s 4913s [2005/8505] TestCSVInterfaceReadWrite::DifferentOFS#test_filter_headers_true_write_headers = 0.01 s 4913s [2006/8505] TestCSVInterfaceReadWrite::DifferentOFS#test_instance_append = 0.01 s 4913s [2007/8505] TestCSVInterfaceReadWrite::DifferentOFS#test_instance_same = 0.00 s 4913s [2008/8505] TestCSVInterfaceReadWrite::DifferentOFS#test_instance_shortcut = 0.00 s 4913s [2009/8505] TestCSVInterfaceReadWrite::DifferentOFS#test_filter = 0.01 s 4913s [2010/8505] TestCSVInterfaceReadWrite::DifferentOFS#test_filter_headers_true = 0.01 s 4913s [2011/8505] TestRDocNormalModule#test_definition = 0.04 s 4913s [2012/8505] TestRDocNormalModule#test_ancestors_module = 0.04 s 4913s [2013/8505] TestRDocNormalModule#test_aref = 0.03 s 4913s [2014/8505] TestRDocNormalModule#test_module_eh = 0.03 s 4913s [2015/8505] URI::TestHTTP#test_build = 0.00 s 4913s [2016/8505] URI::TestHTTP#test_authority = 0.01 s 4913s [2017/8505] URI::TestHTTP#test_normalize = 0.01 s 4913s [2018/8505] URI::TestHTTP#test_parse = 0.00 s 4913s [2019/8505] URI::TestHTTP#test_request_uri = 0.01 s 4913s [2020/8505] URI::TestHTTP#test_equal = 0.00 s 4913s [2021/8505] URI::TestHTTP#test_origin = 0.00 s 4913s [2022/8505] URI::TestHTTP#test_select = 0.02 s 4913s [2023/8505] OpenSSL::TestEC#test_marshal = 0.15 s 4913s [2024/8505] OpenSSL::TestEC#test_sign_verify = 0.04 s 4913s [2025/8505] TestCSVWriteForceQuotesGenerate::DifferentOFS#test_false = 0.00 s 4913s [2026/8505] TestCSVWriteForceQuotesGenerate::DifferentOFS#test_field_name = 0.00 s 4913s [2027/8505] TestCSVWriteForceQuotesGenerate::DifferentOFS#test_field_unknown = 0.00 s 4913s [2028/8505] TestCSVWriteForceQuotesGenerate::DifferentOFS#test_true = 0.00 s 4913s [2029/8505] TestCSVWriteForceQuotesGenerate::DifferentOFS#test_field_name_without_headers = 0.00 s 4913s [2030/8505] TestCSVWriteForceQuotesGenerate::DifferentOFS#test_default = 0.00 s 4913s [2031/8505] TestCSVWriteForceQuotesGenerate::DifferentOFS#test_field_index = 0.00 s 4913s [2032/8505] TestOptionParser::NoArg::Def1#test_abbrev = 0.01 s 4913s [2033/8505] TestOptionParser::NoArg::Def1#test_order = 0.01 s 4913s [2034/8505] TestOptionParser::NoArg::Def1#test_short = 0.01 s 4913s [2035/8505] TestOptionParser::NoArg::Def1#test_hyphenize = 0.00 s 4913s [2036/8505] TestOptionParser::NoArg::Def1#test_regexp = 0.00 s 4913s [2037/8505] TestOptionParser::NoArg::Def1#test_nonopt_pattern = 0.00 s 4913s [2038/8505] TestOptionParser::NoArg::Def1#test_into = 0.00 s 4913s [2039/8505] TestOptionParser::NoArg::Def1#test_permute = 0.01 s 4913s [2040/8505] TestOptionParser::NoArg::Def1#test_long = 0.00 s 4913s [2041/8505] TestOptionParser::NoArg::Def1#test_ambiguous = 0.01 s 4913s [2042/8505] TestOptionParser::NoArg::Def1#test_require_exact = 0.02 s 4913s [2043/8505] TestObserver#test_observers = 0.02 s 4913s [2044/8505] TestResolvMDNS#test_mdns_each_address = 0.02 s 4913s [2045/8505] OpenSSL::TestEOF2LowlevelSocket#test_eof_3 = 0.19 s 4915s [2046/8505] OpenSSL::TestEOF2LowlevelSocket#test_eof_1 = 1.02 s 4915s [2047/8505] OpenSSL::TestEOF2LowlevelSocket#test_eof_0 = 0.27 s 4915s [2048/8505] OpenSSL::TestEOF2LowlevelSocket#test_eof_2 = 0.11 s 4915s [2049/8505] OpenSSL::TestEOF2LowlevelSocket#test_eof_0_rw = 0.03 s 4915s [2050/8505] TestCSVParseEach#test_twice = 0.00 s 4915s [2051/8505] TestDigest::TestSHA1#test_s_hexdigest = 0.00 s 4915s [2052/8505] TestDigest::TestSHA1#test_bubblebabble_class = 0.00 s 4915s [2053/8505] TestDigest::TestSHA1#test_instance_eval = 0.00 s 4915s [2054/8505] TestDigest::TestSHA1#test_update = 0.00 s 4915s [2055/8505] TestDigest::TestSHA1#test_bubblebabble = 0.00 s 4915s [2056/8505] TestDigest::TestSHA1#test_s_base64digest = 0.00 s 4915s [2057/8505] TestDigest::TestSHA1#test_eq = 0.00 s 4915s [2058/8505] TestDigest::TestSHA1#test_alignment = 0.00 s 4915s [2059/8505] TestDigest::TestSHA1#test_s_new = 0.00 s 4915s [2060/8505] TestDigest::TestSHA1#test_s_digest = 0.00 s 4915s [2061/8505] TestDigest::TestSHA1#test_bubblebabble_instance = 0.00 s 4915s [2062/8505] TestDigest::TestSHA1#test_s_file = 0.01 s 4915s [2063/8505] TestSyslogLogger#test_info_eh = 0.00 s 4915s [2064/8505] TestSyslogLogger#test_custom_formatter = 0.01 s 4915s [2065/8505] TestSyslogLogger#test_warn_eh = 0.00 s 4915s [2066/8505] TestSyslogLogger#test_debug_eh = 0.00 s 4915s [2067/8505] TestSyslogLogger#test_unknown_eh = 0.00 s 4915s [2068/8505] TestSyslogLogger#test_facility = 0.00 s 4915s [2069/8505] TestSyslogLogger#test_initialize = 0.00 s 4915s [2070/8505] TestSyslogLogger#test_fatal_eh = 0.00 s 4915s [2071/8505] TestSyslogLogger#test_error_eh = 0.00 s 4915s [2072/8505] TestDateStrptime#test_strptime = 0.01 s 4915s [2073/8505] TestDateStrptime#test__strptime__2 = 0.01 s 4917s [2074/8505] TestDateStrptime#test_strptime__2 = 2.01 s 4917s [2075/8505] TestDateStrptime#test__strptime = 0.07 s 4917s [2076/8505] TestDateStrptime#test_strptime__d_to_s = 0.02 s 4917s [2077/8505] TestDateStrptime#test_strptime__minus = 0.00 s 4917s [2078/8505] TestDateStrptime#test__strptime__width = 0.01 s 4917s [2079/8505] TestDateStrptime#test_given_string = 0.00 s 4917s [2080/8505] TestDateStrptime#test_strptime__comp = 0.02 s 4917s [2081/8505] TestDateStrptime#test__strptime__fail = 0.00 s 4917s [2082/8505] TestCSVDataConverters#test_builtin_integer_converter = 0.01 s 4917s [2083/8505] TestCSVDataConverters#test_builtin_date_converter = 0.01 s 4917s [2084/8505] TestCSVDataConverters#test_builtin_date_time_converter_iso8601_under_second_offset = 0.00 s 4917s [2085/8505] TestCSVDataConverters#test_builtin_date_time_converter_iso8601_minute = 0.00 s 4917s [2086/8505] TestCSVDataConverters#test_builtin_date_time_converter_iso8601_offset = 0.00 s 4917s [2087/8505] TestCSVDataConverters#test_builtin_date_time_converter_iso8601_under_second = 0.00 s 4917s [2088/8505] TestCSVDataConverters#test_builtin_float_converter = 0.01 s 4917s [2089/8505] TestCSVDataConverters#test_builtin_date_time_converter = 0.00 s 4917s [2090/8505] TestCSVDataConverters#test_builtin_date_time_converter_iso8601_date = 0.00 s 4917s [2091/8505] TestCSVDataConverters#test_builtin_date_time_converter_iso8601_utc = 0.00 s 4917s [2092/8505] TestCSVDataConverters#test_builtin_date_time_converter_iso8601_second = 0.00 s 4917s [2093/8505] TestRDocStats#test_summary = 0.04 s 4917s [2094/8505] TestRDocStats#test_report_constant_alias = 0.04 s 4917s [2095/8505] TestRDocStats#test_report_skip_object = 0.01 s 4917s [2096/8505] TestRDocStats#test_summary_level_1 = 0.03 s 4917s [2097/8505] TestRDocStats#test_report_attr_documented = 0.01 s 4917s [2098/8505] TestRDocStats#test_report_constant = 0.01 s 4917s [2099/8505] TestRDocStats#test_report_class_documented_level_1 = 0.01 s 4917s [2100/8505] TestRDocStats#test_undoc_params_keywords = 0.00 s 4917s [2101/8505] TestRDocStats#test_report_method_parameters_yield = 0.01 s 4917s [2102/8505] TestRDocStats#test_report_class = 0.01 s 4917s [2103/8505] TestRDocStats#test_report_class_empty = 0.00 s 4917s [2104/8505] TestRDocStats#test_report_method_parameters = 0.01 s 4917s [2105/8505] TestRDocStats#test_doc_stats = 0.00 s 4917s [2106/8505] TestRDocStats#test_report_method_class = 0.00 s 4917s [2107/8505] TestRDocStats#test_report_method_documented = 0.00 s 4917s [2108/8505] TestRDocStats#test_undoc_params_block = 0.00 s 4917s [2109/8505] TestRDocStats#test_doc_stats_documented = 0.00 s 4917s [2110/8505] TestRDocStats#test_report_class_documented = 0.00 s 4917s [2111/8505] TestRDocStats#test_report_method = 0.00 s 4917s [2112/8505] TestRDocStats#test_report_class_empty_2 = 0.00 s 4917s [2113/8505] TestRDocStats#test_report_constant_line = 0.00 s 4917s [2114/8505] TestRDocStats#test_undoc_params_splat = 0.00 s 4917s [2115/8505] TestRDocStats#test_undoc_params = 0.00 s 4917s [2116/8505] TestRDocStats#test_summary_level_false = 0.00 s 4917s [2117/8505] TestRDocStats#test_report_class_method_documented = 0.00 s 4917s [2118/8505] TestRDocStats#test_report_attr = 0.00 s 4917s [2119/8505] TestRDocStats#test_report_attr_line = 0.01 s 4917s [2120/8505] TestRDocStats#test_report_class_module_ignore = 0.00 s 4917s [2121/8505] TestRDocStats#test_report_empty = 0.00 s 4917s [2122/8505] TestRDocStats#test_report_constant_documented = 0.02 s 4917s [2123/8505] TestRDocStats#test_report_method_line = 0.01 s 4917s [2124/8505] TestRDocStats#test_report_method_parameters_documented = 0.01 s 4917s [2125/8505] TestRDocStats#test_undoc_params_documented = 0.00 s 4917s [2126/8505] TestRDocStats#test_doc_stats_display_eh = 0.00 s 4917s [2127/8505] TestFiberCurrentRactor#test_ractor_shareable = 0.00 s 4918s [2128/8505] Psych::TestScalar#test_some_bytes = 0.01 s 4918s [2129/8505] Psych::TestScalar#test_utf_8 = 0.00 s 4918s [2130/8505] PPTestModule::PPCycleTest#test_hash = 0.02 s 4918s [2131/8505] PPTestModule::PPCycleTest#test_struct = 0.02 s 4918s [2132/8505] PPTestModule::PPCycleTest#test_array = 0.00 s 4918s [2133/8505] PPTestModule::PPCycleTest#test_share_nil = 0.01 s 4918s [2134/8505] OpenSSL::TestEOF2#test_eof_3 = 0.12 s 4919s [2135/8505] OpenSSL::TestEOF2#test_eof_1 = 1.00 s 4919s [2136/8505] OpenSSL::TestEOF2#test_eof_0 = 0.34 s 4919s [2137/8505] OpenSSL::TestEOF2#test_eof_2 = 0.11 s 4919s [2138/8505] OpenSSL::TestEOF2#test_eof_0_rw = 0.03 s 4919s [2139/8505] TestCSVWriteQuoteEmptyGenerateLine::DifferentOFS#test_empty_only_false = 0.00 s 4919s [2140/8505] TestCSVWriteQuoteEmptyGenerateLine::DifferentOFS#test_empty_default = 0.00 s 4919s [2141/8505] TestCSVWriteQuoteEmptyGenerateLine::DifferentOFS#test_quote_empty_default = 0.00 s 4919s [2142/8505] TestCSVWriteQuoteEmptyGenerateLine::DifferentOFS#test_empty_double_default = 0.00 s 4919s [2143/8505] TestCSVWriteQuoteEmptyGenerateLine::DifferentOFS#test_empty_false = 0.00 s 4919s [2144/8505] TestCSVWriteQuoteEmptyGenerateLine::DifferentOFS#test_quote_empty_false = 0.00 s 4919s [2145/8505] TestCSVWriteQuoteEmptyGenerateLine::DifferentOFS#test_empty_double_false = 0.00 s 4919s [2146/8505] TestCSVWriteQuoteEmptyGenerateLine::DifferentOFS#test_empty_only_default = 0.00 s 4919s [2147/8505] CGIUtilTest#test_cgi_escape:TIS-620 = 0.00 s 4919s [2148/8505] CGIUtilTest#test_cgi_escape:MacJapanese = 0.00 s 4919s [2149/8505] CGIUtilTest#test_cgi_unescapeHTML:Windows-1254 = 0.00 s 4919s [2150/8505] CGIUtilTest#test_cgi_escape_with_invalid_byte_sequence = 0.00 s 4919s [2151/8505] CGIUtilTest#test_cgi_unescapeHTML_invalid = 0.00 s 4919s [2152/8505] CGIUtilTest#test_cgi_unescape:SJIS-SoftBank = 0.00 s 4919s [2153/8505] CGIUtilTest#test_cgi_escapeHTML:UTF-8 = 0.00 s 4919s [2154/8505] CGIUtilTest#test_cgi_unescapeHTML:macCroatian = 0.00 s 4919s [2155/8505] CGIUtilTest#test_cgi_escapeHTML:ISO-8859-9 = 0.00 s 4919s [2156/8505] CGIUtilTest#test_cgi_escapeHTML:IBM775 = 0.00 s 4919s [2157/8505] CGIUtilTest#test_cgi_unescapeHTML:Windows-1256 = 0.00 s 4919s [2158/8505] CGIUtilTest#test_cgi_escape:GB1988 = 0.00 s 4919s [2159/8505] CGIUtilTest#test_cgi_escape:stateless-ISO-2022-JP-KDDI = 0.00 s 4919s [2160/8505] CGIUtilTest#test_cgi_escapeHTML:CP50220 = 0.00 s 4919s [2161/8505] CGIUtilTest#test_cgi_escape:UTF8-DoCoMo = 0.00 s 4919s [2162/8505] CGIUtilTest#test_cgi_unescape:Emacs-Mule = 0.00 s 4919s [2163/8505] CGIUtilTest#test_cgi_escape:CP852 = 0.00 s 4919s [2164/8505] CGIUtilTest#test_cgi_unescapeHTML:Windows-1250 = 0.00 s 4919s [2165/8505] CGIUtilTest#test_cgi_escape:EUC-TW = 0.00 s 4919s [2166/8505] CGIUtilTest#test_cgi_escapeHTML:macRoman = 0.00 s 4919s [2167/8505] CGIUtilTest#test_cgi_escapeHTML:CP950 = 0.00 s 4919s [2168/8505] CGIUtilTest#test_cgi_escape:EUC-JIS-2004 = 0.00 s 4919s [2169/8505] CGIUtilTest#test_cgi_unescapeHTML:Windows-1252 = 0.00 s 4919s [2170/8505] CGIUtilTest#test_cgi_escape:CP850 = 0.00 s 4919s [2171/8505] CGIUtilTest#test_cgi_unescape:Big5 = 0.00 s 4919s [2172/8505] CGIUtilTest#test_cgi_escape:IBM866 = 0.00 s 4919s [2173/8505] CGIUtilTest#test_cgi_escapeHTML:ISO-8859-3 = 0.00 s 4919s [2174/8505] CGIUtilTest#test_cgi_escape:EUC-JP = 0.00 s 4919s [2175/8505] CGIUtilTest#test_cgi_unescapeHTML:eucJP-ms = 0.00 s 4919s [2176/8505] CGIUtilTest#test_cgi_escapeHTML:macTurkish = 0.00 s 4919s [2177/8505] CGIUtilTest#test_cgi_unescapeHTML:UTF8-MAC = 0.00 s 4919s [2178/8505] CGIUtilTest#test_cgi_unescape:Windows-874 = 0.00 s 4919s [2179/8505] CGIUtilTest#test_cgi_escape:SJIS-KDDI = 0.00 s 4919s [2180/8505] CGIUtilTest#test_cgi_pretty = 0.00 s 4919s [2181/8505] CGIUtilTest#test_cgi_unescape:IBM720 = 0.00 s 4919s [2182/8505] CGIUtilTest#test_cgi_escape:IBM864 = 0.00 s 4919s [2183/8505] CGIUtilTest#test_cgi_escapeHTML:ISO-8859-1 = 0.00 s 4919s [2184/8505] CGIUtilTest#test_cgi_unescape:GBK = 0.00 s 4919s [2185/8505] CGIUtilTest#test_cgi_unescapeHTML:Windows-1258 = 0.00 s 4919s [2186/8505] CGIUtilTest#test_cgi_escapeElement = 0.00 s 4919s [2187/8505] CGIUtilTest#test_cgi_unescapeHTML:macGreek = 0.00 s 4919s [2188/8505] CGIUtilTest#test_cgi_escape:macIceland = 0.00 s 4919s [2189/8505] CGIUtilTest#test_cgi_escapeHTML:UTF-16LE = 0.00 s 4919s [2190/8505] CGIUtilTest#test_cgi_unescape:UTF8-KDDI = 0.00 s 4919s [2191/8505] CGIUtilTest#test_cgi_escapeHTML:ISO-8859-7 = 0.00 s 4919s [2192/8505] CGIUtilTest#test_cgi_escape:IBM862 = 0.00 s 4919s [2193/8505] CGIUtilTest#test_cgi_unescape:EUC-KR = 0.00 s 4919s [2194/8505] CGIUtilTest#test_cgi_escapeHTML:Windows-31J = 0.00 s 4919s [2195/8505] CGIUtilTest#test_cgi_escapeHTML:Big5-UAO = 0.00 s 4919s [2196/8505] CGIUtilTest#test_cgi_unescapeHTML:SJIS-SoftBank = 0.00 s 4919s [2197/8505] CGIUtilTest#test_cgi_unescapeHTML:SJIS-DoCoMo = 0.00 s 4919s [2198/8505] CGIUtilTest#test_cgi_unescapeHTML:UTF-16BE = 0.01 s 4919s [2199/8505] CGIUtilTest#test_cgi_escapeHTML:ISO-8859-5 = 0.00 s 4919s [2200/8505] CGIUtilTest#test_cgi_escape:IBM860 = 0.00 s 4919s [2201/8505] CGIUtilTest#test_cgi_unescapeHTML:Big5-HKSCS = 0.00 s 4919s [2202/8505] CGIUtilTest#test_cgi_escape:macCroatian = 0.00 s 4919s [2203/8505] CGIUtilTest#test_cgi_escapeHTML:Windows-1252 = 0.00 s 4919s [2204/8505] CGIUtilTest#test_cgi_unescape:Windows-1252 = 0.00 s 4919s [2205/8505] CGIUtilTest#test_cgi_unescapeHTML:KOI8-R = 0.00 s 4919s [2206/8505] CGIUtilTest#test_cgi_escapeHTML:Windows-1250 = 0.00 s 4919s [2207/8505] CGIUtilTest#test_cgi_unescapeHTML:MacJapanese = 0.00 s 4919s [2208/8505] CGIUtilTest#test_cgi_unescape:Windows-1250 = 0.00 s 4919s [2209/8505] CGIUtilTest#test_cgi_unescape:IBM869 = 0.00 s 4919s [2210/8505] CGIUtilTest#test_cgi_escapeHTML:macThai = 0.00 s 4919s [2211/8505] CGIUtilTest#test_cgi_escapeHTML:macCyrillic = 0.00 s 4919s [2212/8505] CGIUtilTest#test_cgi_unescape:Windows-1256 = 0.00 s 4919s [2213/8505] CGIUtilTest#test_cgi_escapeHTML:Windows-1256 = 0.00 s 4919s [2214/8505] CGIUtilTest#test_cgi_escape:stateless-ISO-2022-JP = 0.00 s 4919s [2215/8505] CGIUtilTest#test_cgi_escapeHTML:UTF-32BE = 0.00 s 4919s [2216/8505] CGIUtilTest#test_cgi_escapeHTML:IBM857 = 0.00 s 4919s [2217/8505] CGIUtilTest#test_cgi_escape:macRomania = 0.00 s 4919s [2218/8505] CGIUtilTest#test_cgi_unescape:Windows-1254 = 0.00 s 4919s [2219/8505] CGIUtilTest#test_cgi_escapeHTML:Windows-1254 = 0.00 s 4919s [2220/8505] CGIUtilTest#test_cgi_unescapeHTML:UTF8-DoCoMo = 0.00 s 4919s [2221/8505] CGIUtilTest#test_cgi_unescape:macThai = 0.00 s 4919s [2222/8505] CGIUtilTest#test_cgi_unescapeHTML:Emacs-Mule = 0.00 s 4919s [2223/8505] CGIUtilTest#test_cgi_unescapeHTML:GBK = 0.00 s 4919s [2224/8505] CGIUtilTest#test_cgi_include_unescape = 0.00 s 4919s [2225/8505] CGIUtilTest#test_cgi_escapeHTML:IBM855 = 0.00 s 4919s [2226/8505] CGIUtilTest#test_cgi_unescapeHTML:UTF-32LE = 0.01 s 4919s [2227/8505] CGIUtilTest#test_cgi_unescapeHTML:ISO-2022-JP = 0.00 s 4919s [2228/8505] CGIUtilTest#test_cgi_escapeHTML:CP949 = 0.00 s 4919s [2229/8505] CGIUtilTest#test_cgi_unescapeHTML:IBM037 = 0.00 s 4919s [2230/8505] CGIUtilTest#test_cgi_unescape:ISO-8859-14 = 0.00 s 4919s [2231/8505] CGIUtilTest#test_cgi_unescape:IBM865 = 0.00 s 4919s [2232/8505] CGIUtilTest#test_cgi_unescapeHTML:US-ASCII = 0.00 s 4919s [2233/8505] CGIUtilTest#test_cgi_escape:GB2312 = 0.00 s 4919s [2234/8505] CGIUtilTest#test_cgi_unescapeHTML:IBM437 = 0.00 s 4919s [2235/8505] CGIUtilTest#test_cgi_include_escape = 0.00 s 4919s [2236/8505] CGIUtilTest#test_cgi_unescapeHTML:CP855 = 0.00 s 4919s [2237/8505] CGIUtilTest#test_cgi_escapeHTML:CESU-8 = 0.00 s 4919s [2238/8505] CGIUtilTest#test_cgi_unescape:IBM737 = 0.00 s 4919s [2239/8505] CGIUtilTest#test_cgi_unescape:ISO-8859-16 = 0.00 s 4919s [2240/8505] CGIUtilTest#test_cgi_unescape:CP951 = 0.00 s 4919s [2241/8505] CGIUtilTest#test_cgi_escapeHTML:KOI8-U = 0.00 s 4919s [2242/8505] CGIUtilTest#test_cgi_unescape:Windows-1258 = 0.00 s 4919s [2243/8505] CGIUtilTest#test_cgi_escapeHTML:Windows-1258 = 0.00 s 4919s [2244/8505] CGIUtilTest#test_cgi_escape:macUkraine = 0.00 s 4919s [2245/8505] CGIUtilTest#test_cgi_unescapeHTML:IBM852 = 0.00 s 4919s [2246/8505] CGIUtilTest#test_cgi_unescape:ISO-8859-10 = 0.00 s 4919s [2247/8505] CGIUtilTest#test_cgi_unescapeHTML:Shift_JIS = 0.00 s 4919s [2248/8505] CGIUtilTest#test_cgi_escape:SJIS-DoCoMo = 0.00 s 4919s [2249/8505] CGIUtilTest#test_cgi_unescape:Big5-HKSCS = 0.00 s 4919s [2250/8505] CGIUtilTest#test_cgi_escapeHTML:UTF8-KDDI = 0.00 s 4919s [2251/8505] CGIUtilTest#test_cgi_include_escapeHTML = 0.00 s 4919s [2252/8505] CGIUtilTest#test_cgi_unescape:IBM861 = 0.00 s 4919s [2253/8505] CGIUtilTest#test_cgi_unescapeHTML:UTF-32 = 0.00 s 4919s [2254/8505] CGIUtilTest#test_cgi_escapeHTML = 0.00 s 4919s [2255/8505] CGIUtilTest#test_cgi_unescapeHTML:TIS-620 = 0.00 s 4919s [2256/8505] CGIUtilTest#test_cgi_escape_html_dont_freeze = 0.00 s 4919s [2257/8505] CGIUtilTest#test_cgi_unescape:stateless-ISO-2022-JP = 0.00 s 4919s [2258/8505] CGIUtilTest#test_cgi_unescape:IBM863 = 0.00 s 4919s [2259/8505] CGIUtilTest#test_cgi_unescapeHTML:ISO-8859-1 = 0.00 s 4919s [2260/8505] CGIUtilTest#test_cgi_unescape:stateless-ISO-2022-JP-KDDI = 0.00 s 4919s [2261/8505] CGIUtilTest#test_cgi_unescape:CP850 = 0.00 s 4919s [2262/8505] CGIUtilTest#test_cgi_escapeHTML:ISO-8859-10 = 0.00 s 4919s [2263/8505] CGIUtilTest#test_cgi_unescape:IBM437 = 0.00 s 4919s [2264/8505] CGIUtilTest#test_cgi_include_unescapeHTML = 0.00 s 4919s [2265/8505] CGIUtilTest#test_cgi_unescapeHTML:IBM865 = 0.00 s 4919s [2266/8505] CGIUtilTest#test_cgi_escapeHTML:EUC-TW = 0.00 s 4919s [2267/8505] CGIUtilTest#test_cgi_unescapeHTML:GB12345 = 0.00 s 4919s [2268/8505] CGIUtilTest#test_cgi_unescapeHTML:IBM737 = 0.00 s 4919s [2269/8505] CGIUtilTest#test_cgi_escapeHTML:UTF8-MAC = 0.00 s 4919s [2270/8505] CGIUtilTest#test_cgi_unescapeHTML:macTurkish = 0.00 s 4919s [2271/8505] CGIUtilTest#test_cgi_escapeHTML:eucJP-ms = 0.00 s 4919s [2272/8505] CGIUtilTest#test_cgi_unescape:CP852 = 0.00 s 4919s [2273/8505] CGIUtilTest#test_cgi_unescapeHTML:ISO-8859-3 = 0.00 s 4919s [2274/8505] CGIUtilTest#test_cgi_escape = 0.00 s 4919s [2275/8505] CGIUtilTest#test_cgi_unescapeHTML:UTF-8 = 0.00 s 4919s [2276/8505] CGIUtilTest#test_cgi_escapeHTML:GB1988 = 0.00 s 4919s [2277/8505] CGIUtilTest#test_cgi_escape:ISO-8859-15 = 0.00 s 4919s [2278/8505] CGIUtilTest#test_cgi_escapeHTML:ISO-8859-14 = 0.00 s 4919s [2279/8505] CGIUtilTest#test_cgi_escapeHTML:Big5-HKSCS = 0.00 s 4919s [2280/8505] CGIUtilTest#test_cgi_unescapeHTML:ISO-8859-5 = 0.00 s 4919s [2281/8505] CGIUtilTest#test_cgi_unescape:IBM852 = 0.00 s 4919s [2282/8505] CGIUtilTest#test_cgi_unescapeHTML:CP950 = 0.00 s 4919s [2283/8505] CGIUtilTest#test_cgi_escapeHTML:UTF-16BE = 0.00 s 4919s [2284/8505] CGIUtilTest#test_cgi_unescapeHTML:UTF8-SoftBank = 0.00 s 4919s [2285/8505] CGIUtilTest#test_cgi_escape:IBM775 = 0.00 s 4919s [2286/8505] CGIUtilTest#test_cgi_unescapeHTML:Big5-UAO = 0.00 s 4919s [2287/8505] CGIUtilTest#test_cgi_escape:ISO-8859-13 = 0.00 s 4919s [2288/8505] CGIUtilTest#test_cgi_unescapeHTML:IBM861 = 0.00 s 4919s [2289/8505] CGIUtilTest#test_cgi_unescapeHTML:ISO-8859-7 = 0.00 s 4919s [2290/8505] CGIUtilTest#test_cgi_escapeHTML:ISO-8859-16 = 0.00 s 4919s [2291/8505] CGIUtilTest#test_cgi_unescapeHTML:UTF-16LE = 0.00 s 4919s [2292/8505] CGIUtilTest#test_cgi_escapeHTML:macGreek = 0.00 s 4919s [2293/8505] CGIUtilTest#test_cgi_unescapeHTML:IBM863 = 0.00 s 4919s [2294/8505] CGIUtilTest#test_cgi_escape:ISO-8859-11 = 0.00 s 4919s [2295/8505] CGIUtilTest#test_cgi_unescapeHTML:macCentEuro = 0.00 s 4919s [2296/8505] CGIUtilTest#test_cgi_escapeHTML:IBM860 = 0.00 s 4919s [2297/8505] CGIUtilTest#test_cgi_unescape:macCyrillic = 0.00 s 4919s [2298/8505] CGIUtilTest#test_cgi_unescape:SJIS-KDDI = 0.00 s 4919s [2299/8505] CGIUtilTest#test_cgi_unescapeHTML:ISO-8859-9 = 0.00 s 4919s [2300/8505] CGIUtilTest#test_cgi_unescape:KOI8-R = 0.00 s 4919s [2301/8505] CGIUtilTest#test_cgi_escapeHTML:IBM862 = 0.00 s 4919s [2302/8505] CGIUtilTest#test_cgi_unescape:UTF8-SoftBank = 0.00 s 4919s [2303/8505] CGIUtilTest#test_cgi_unescapeHTML:stateless-ISO-2022-JP = 0.00 s 4919s [2304/8505] CGIUtilTest#test_cgi_unescapeHTML:IBM869 = 0.00 s 4919s [2305/8505] CGIUtilTest#test_cgi_unescape:GB18030 = 0.00 s 4919s [2306/8505] CGIUtilTest#test_cgi_escapeHTML:IBM864 = 0.00 s 4919s [2307/8505] CGIUtilTest#test_cgi_unescape:EUC-JIS-2004 = 0.00 s 4919s [2308/8505] CGIUtilTest#test_cgi_escapeHTML:EUC-JIS-2004 = 0.00 s 4919s [2309/8505] CGIUtilTest#test_cgi_unescapeHTML:macRoman = 0.00 s 4919s [2310/8505] CGIUtilTest#test_cgi_escape_html_preserve_encoding = 0.00 s 4919s [2311/8505] CGIUtilTest#test_cgi_escapeHTML:IBM866 = 0.00 s 4919s [2312/8505] CGIUtilTest#test_cgi_escapeHTML:EUC-JP = 0.00 s 4919s [2313/8505] CGIUtilTest#test_cgi_escapeHTML:ISO-2022-JP-KDDI = 0.00 s 4919s [2314/8505] CGIUtilTest#test_cgi_escapeHTML:GB18030 = 0.00 s 4919s [2315/8505] CGIUtilTest#test_cgi_escape:UTF8-KDDI = 0.00 s 4919s [2316/8505] CGIUtilTest#test_cgi_escapeHTML:CP51932 = 0.00 s 4919s [2317/8505] CGIUtilTest#test_cgi_escape:IBM855 = 0.00 s 4919s [2318/8505] CGIUtilTest#test_cgi_unescape:macTurkish = 0.00 s 4919s [2319/8505] CGIUtilTest#test_cgi_escape:Windows-1258 = 0.00 s 4919s [2320/8505] CGIUtilTest#test_cgi_unescape:ISO-8859-3 = 0.00 s 4919s [2321/8505] CGIUtilTest#test_cgi_unescapeHTML:ISO-8859-15 = 0.00 s 4919s [2322/8505] CGIUtilTest#test_cgi_unescape_preserve_encoding = 0.00 s 4919s [2323/8505] CGIUtilTest#test_cgi_escape:IBM857 = 0.00 s 4919s [2324/8505] CGIUtilTest#test_cgi_unescapeHTML_uppercasecharacter = 0.00 s 4919s [2325/8505] CGIUtilTest#test_cgi_unescape:ISO-8859-1 = 0.00 s 4919s [2326/8505] CGIUtilTest#test_cgi_escapeHTML:US-ASCII = 0.00 s 4919s [2327/8505] CGIUtilTest#test_cgi_unescape:Windows-31J = 0.00 s 4919s [2328/8505] CGIUtilTest#test_cgi_unescape:CP51932 = 0.00 s 4919s [2329/8505] CGIUtilTest#test_cgi_unescapeHTML:stateless-ISO-2022-JP-KDDI = 0.00 s 4919s [2330/8505] CGIUtilTest#test_cgi_unescapeHTML:IBM720 = 0.00 s 4919s [2331/8505] CGIUtilTest#test_cgi_unescape:ISO-8859-7 = 0.00 s 4919s [2332/8505] CGIUtilTest#test_cgi_unescapeHTML:ISO-8859-11 = 0.00 s 4919s [2333/8505] CGIUtilTest#test_cgi_escape:macCentEuro = 0.00 s 4919s [2334/8505] CGIUtilTest#test_cgi_escape:ISO-8859-8 = 0.00 s 4919s [2335/8505] CGIUtilTest#test_cgi_unescape:ISO-8859-5 = 0.00 s 4919s [2336/8505] CGIUtilTest#test_cgi_unescapeHTML:EUC-KR = 0.00 s 4919s [2337/8505] CGIUtilTest#test_cgi_escapeHTML:Windows-874 = 0.00 s 4919s [2338/8505] CGIUtilTest#test_cgi_unescapeHTML:UTF-16 = 0.00 s 4919s [2339/8505] CGIUtilTest#test_cgi_unescapeHTML:ISO-8859-13 = 0.00 s 4919s [2340/8505] CGIUtilTest#test_cgi_escapeHTML:CP855 = 0.00 s 4919s [2341/8505] CGIUtilTest#test_cgi_escapeHTML:SJIS-KDDI = 0.00 s 4919s [2342/8505] CGIUtilTest#test_cgi_escape:Windows-1250 = 0.00 s 4919s [2343/8505] CGIUtilTest#test_cgi_escape:ISO-8859-6 = 0.00 s 4919s [2344/8505] CGIUtilTest#test_cgi_unescapeHTML:CP949 = 0.00 s 4919s [2345/8505] CGIUtilTest#test_cgi_unescapeHTML:EUC-JIS-2004 = 0.00 s 4919s [2346/8505] CGIUtilTest#test_cgi_escape:ISO-8859-4 = 0.00 s 4919s [2347/8505] CGIUtilTest#test_cgi_escape:Windows-1252 = 0.00 s 4919s [2348/8505] CGIUtilTest#test_cgi_unescape:ISO-8859-9 = 0.00 s 4919s [2349/8505] CGIUtilTest#test_cgi_escapeHTML:UTF-32LE = 0.00 s 4919s [2350/8505] CGIUtilTest#test_cgi_escapeHTML:Emacs-Mule = 0.00 s 4919s [2351/8505] CGIUtilTest#test_cgi_escape:ASCII-8BIT = 0.00 s 4919s [2352/8505] CGIUtilTest#test_cgi_escape:GB12345 = 0.00 s 4919s [2353/8505] CGIUtilTest#test_cgi_escape:KOI8-U = 0.00 s 4919s [2354/8505] CGIUtilTest#test_cgi_escape:ISO-8859-2 = 0.00 s 4919s [2355/8505] CGIUtilTest#test_cgi_escape:CP951 = 0.00 s 4919s [2356/8505] CGIUtilTest#test_cgi_escape:CESU-8 = 0.00 s 4919s [2357/8505] CGIUtilTest#test_cgi_escape:Windows-1254 = 0.00 s 4919s [2358/8505] CGIUtilTest#test_cgi_escapeHTML:GB2312 = 0.00 s 4919s [2359/8505] CGIUtilTest#test_cgi_unescapeHTML:UTF-32BE = 0.00 s 4919s [2360/8505] CGIUtilTest#test_cgi_escape:Windows-1256 = 0.00 s 4919s [2361/8505] CGIUtilTest#test_cgi_unescapeHTML:CP50221 = 0.00 s 4919s [2362/8505] CGIUtilTest#test_cgi_unescape:IBM775 = 0.00 s 4919s [2363/8505] CGIUtilTest#test_cgi_unescape:Big5-UAO = 0.00 s 4919s [2364/8505] CGIUtilTest#test_cgi_escape:IBM852 = 0.00 s 4919s [2365/8505] CGIUtilTest#test_cgi_unescape:ISO-8859-4 = 0.00 s 4919s [2366/8505] CGIUtilTest#test_cgi_escape:ISO-8859-9 = 0.00 s 4919s [2367/8505] CGIUtilTest#test_cgi_escape_with_unreserved_characters = 0.00 s 4919s [2368/8505] CGIUtilTest#test_cgi_unescapeHTML:ISO-8859-10 = 0.00 s 4919s [2369/8505] CGIUtilTest#test_cgi_unescapeHTML:ISO-2022-JP-KDDI = 0.00 s 4919s [2370/8505] CGIUtilTest#test_cgi_escapeHTML:Big5 = 0.00 s 4919s [2371/8505] CGIUtilTest#test_cgi_unescape:ISO-8859-6 = 0.00 s 4919s [2372/8505] CGIUtilTest#test_cgi_unescapeHTML:ISO-8859-16 = 0.00 s 4919s [2373/8505] CGIUtilTest#test_cgi_unescapeHTML:Big5 = 0.00 s 4919s [2374/8505] CGIUtilTest#test_cgi_unescapeHTML:GB2312 = 0.00 s 4919s [2375/8505] CGIUtilTest#test_cgi_escape:IBM437 = 0.00 s 4919s [2376/8505] CGIUtilTest#test_cgi_escapeHTML:macCentEuro = 0.00 s 4919s [2377/8505] CGIUtilTest#test_cgi_escape:macThai = 0.00 s 4919s [2378/8505] CGIUtilTest#test_cgi_unescapeHTML:ISO-8859-14 = 0.00 s 4919s [2379/8505] CGIUtilTest#test_cgi_escapeHTML:GBK = 0.00 s 4919s [2380/8505] CGIUtilTest#test_cgi_unescape:ASCII-8BIT = 0.00 s 4919s [2381/8505] CGIUtilTest#test_cgi_escapeHTML:Shift_JIS = 0.00 s 4919s [2382/8505] CGIUtilTest#test_cgi_escape:Windows-874 = 0.00 s 4919s [2383/8505] CGIUtilTest#test_cgi_unescapeHTML:UTF8-KDDI = 0.00 s 4919s [2384/8505] CGIUtilTest#test_cgi_unescape:ISO-8859-2 = 0.00 s 4919s [2385/8505] CGIUtilTest#test_cgi_escape:Big5-UAO = 0.00 s 4919s [2386/8505] CGIUtilTest#test_cgi_unescape:UTF8-DoCoMo = 0.00 s 4919s [2387/8505] CGIUtilTest#test_cgi_unescapeHTML:CP50220 = 0.00 s 4919s [2388/8505] CGIUtilTest#test_cgi_escape:ISO-8859-1 = 0.00 s 4919s [2389/8505] CGIUtilTest#test_cgi_unescape:macRoman = 0.00 s 4919s [2390/8505] CGIUtilTest#test_cgi_escape:Windows-1257 = 0.00 s 4919s [2391/8505] CGIUtilTest#test_cgi_escapeHTML:IBM720 = 0.00 s 4919s [2392/8505] CGIUtilTest#test_cgi_escapeHTML:CP852 = 0.00 s 4919s [2393/8505] CGIUtilTest#test_cgi_unescape = 0.00 s 4919s [2394/8505] CGIUtilTest#test_cgi_escape:Windows-1255 = 0.00 s 4919s [2395/8505] CGIUtilTest#test_cgi_escape:CP950 = 0.00 s 4919s [2396/8505] CGIUtilTest#test_cgi_escape:ISO-8859-3 = 0.00 s 4919s [2397/8505] CGIUtilTest#test_cgi_escape:macTurkish = 0.00 s 4919s [2398/8505] CGIUtilTest#test_cgi_escapeHTML:CP850 = 0.00 s 4919s [2399/8505] CGIUtilTest#test_cgi_unescape:MacJapanese = 0.00 s 4919s [2400/8505] CGIUtilTest#test_cgi_escapeHTML:EUC-KR = 0.00 s 4919s [2401/8505] CGIUtilTest#test_cgi_escape:KOI8-R = 0.00 s 4919s [2402/8505] CGIUtilTest#test_cgi_escapeHTML:UTF-16 = 0.00 s 4919s [2403/8505] CGIUtilTest#test_cgi_escape:Windows-1253 = 0.00 s 4919s [2404/8505] CGIUtilTest#test_cgi_unescape:ISO-8859-8 = 0.00 s 4919s [2405/8505] CGIUtilTest#test_cgi_escape:ISO-8859-5 = 0.00 s 4919s [2406/8505] CGIUtilTest#test_cgi_escapeHTML:SJIS-SoftBank = 0.00 s 4919s [2407/8505] CGIUtilTest#test_cgi_escape:UTF-8 = 0.00 s 4919s [2408/8505] CGIUtilTest#test_cgi_escape:ISO-8859-7 = 0.00 s 4919s [2409/8505] CGIUtilTest#test_cgi_include_h = 0.00 s 4919s [2410/8505] CGIUtilTest#test_cgi_escapeHTML:macIceland = 0.00 s 4919s [2411/8505] CGIUtilTest#test_cgi_escape:Windows-1251 = 0.00 s 4919s [2412/8505] CGIUtilTest#test_cgi_escape:macRoman = 0.00 s 4919s [2413/8505] CGIUtilTest#test_cgi_unescapeHTML:IBM862 = 0.00 s 4919s [2414/8505] CGIUtilTest#test_cgi_escape:ISO-8859-10 = 0.00 s 4919s [2415/8505] CGIUtilTest#test_cgi_unescape:TIS-620 = 0.00 s 4919s [2416/8505] CGIUtilTest#test_cgi_unescape:SJIS-DoCoMo = 0.00 s 4919s [2417/8505] CGIUtilTest#test_cgi_unescapeHTML:ISO-8859-6 = 0.00 s 4919s [2418/8505] CGIUtilTest#test_cgi_escapeHTML:TIS-620 = 0.00 s 4919s [2419/8505] CGIUtilTest#test_cgi_unescapeHTML:IBM860 = 0.00 s 4919s [2420/8505] CGIUtilTest#test_cgi_unescapeHTML:CP951 = 0.00 s 4919s [2421/8505] CGIUtilTest#test_cgi_unescape:CP855 = 0.00 s 4919s [2422/8505] CGIUtilTest#test_cgi_unescapeHTML:ISO-8859-4 = 0.00 s 4919s [2423/8505] CGIUtilTest#test_cgi_escapeHTML:ISO-8859-15 = 0.00 s 4919s [2424/8505] CGIUtilTest#test_cgi_unescapeHTML:IBM866 = 0.00 s 4919s [2425/8505] CGIUtilTest#test_cgi_escape:ISO-8859-14 = 0.00 s 4919s [2426/8505] CGIUtilTest#test_cgi_unescapeHTML:EUC-JP = 0.00 s 4919s [2427/8505] CGIUtilTest#test_cgi_unescapeHTML:ASCII-8BIT = 0.00 s 4919s [2428/8505] CGIUtilTest#test_cgi_unescapeHTML:Windows-874 = 0.00 s 4919s [2429/8505] CGIUtilTest#test_cgi_escape:CP949 = 0.00 s 4919s [2430/8505] CGIUtilTest#test_cgi_unescapeHTML:ISO-8859-2 = 0.00 s 4919s [2431/8505] CGIUtilTest#test_cgi_escapeHTML:ISO-8859-13 = 0.00 s 4919s [2432/8505] CGIUtilTest#test_cgi_unescape:IBM855 = 0.00 s 4919s [2433/8505] CGIUtilTest#test_cgi_unescape:Shift_JIS = 0.00 s 4919s [2434/8505] CGIUtilTest#test_cgi_escapeHTML:IBM869 = 0.00 s 4919s [2435/8505] CGIUtilTest#test_cgi_escape:ISO-8859-16 = 0.00 s 4919s [2436/8505] CGIUtilTest#test_cgi_unescapeHTML:IBM864 = 0.00 s 4919s [2437/8505] CGIUtilTest#test_cgi_escapeHTML:macRomania = 0.00 s 4919s [2438/8505] CGIUtilTest#test_cgi_escapeHTML:ISO-8859-11 = 0.00 s 4919s [2439/8505] CGIUtilTest#test_cgi_unescape:IBM857 = 0.00 s 4919s [2440/8505] CGIUtilTest#test_cgi_unescape:CESU-8 = 0.00 s 4919s [2441/8505] CGIUtilTest#test_cgi_unescapeHTML:macThai = 0.00 s 4919s [2442/8505] CGIUtilTest#test_cgi_escapeHTML:IBM737 = 0.00 s 4919s [2443/8505] CGIUtilTest#test_cgi_unescape:KOI8-U = 0.00 s 4919s [2444/8505] CGIUtilTest#test_cgi_unescapeHTML:GB1988 = 0.00 s 4919s [2445/8505] CGIUtilTest#test_cgi_escape:SJIS-SoftBank = 0.00 s 4919s [2446/8505] CGIUtilTest#test_cgi_escapeHTML:IBM865 = 0.00 s 4919s [2447/8505] CGIUtilTest#test_cgi_unescapeHTML:EUC-TW = 0.00 s 4919s [2448/8505] CGIUtilTest#test_cgi_unescape:macCroatian = 0.00 s 4919s [2449/8505] CGIUtilTest#test_cgi_escapeHTML:IBM863 = 0.00 s 4919s [2450/8505] CGIUtilTest#test_cgi_unescapeHTML:ISO-8859-8 = 0.00 s 4919s [2451/8505] CGIUtilTest#test_cgi_escapeHTML:macUkraine = 0.00 s 4919s [2452/8505] CGIUtilTest#test_cgi_escapeHTML:IBM861 = 0.00 s 4919s [2453/8505] CGIUtilTest#test_cgi_escapeHTML:macCroatian = 0.00 s 4919s [2454/8505] CGIUtilTest#test_cgi_unescapeHTML:KOI8-U = 0.00 s 4919s [2455/8505] CGIUtilTest#test_cgi_unescapeHTML:CESU-8 = 0.00 s 4919s [2456/8505] CGIUtilTest#test_cgi_escapeHTML:Windows-1255 = 0.00 s 4919s [2457/8505] CGIUtilTest#test_cgi_unescape:GB1988 = 0.00 s 4919s [2458/8505] CGIUtilTest#test_cgi_unescape:Windows-1255 = 0.00 s 4919s [2459/8505] CGIUtilTest#test_cgi_escape:CP51932 = 0.00 s 4919s [2460/8505] CGIUtilTest#test_cgi_escapeHTML:IBM037 = 0.00 s 4919s [2461/8505] CGIUtilTest#test_cgi_escapeHTML:stateless-ISO-2022-JP = 0.00 s 4919s [2462/8505] CGIUtilTest#test_cgi_escapeHTML:Windows-1257 = 0.00 s 4919s [2463/8505] CGIUtilTest#test_cgi_unescapeHTML:GB18030 = 0.00 s 4919s [2464/8505] CGIUtilTest#test_cgi_escapeHTML:IBM437 = 0.00 s 4919s [2465/8505] CGIUtilTest#test_cgi_unescape:Windows-1257 = 0.00 s 4919s [2466/8505] CGIUtilTest#test_cgi_unescape:EUC-TW = 0.00 s 4919s [2467/8505] CGIUtilTest#test_cgi_unescapeHTML = 0.00 s 4919s [2468/8505] CGIUtilTest#test_cgi_unescapeHTML:SJIS-KDDI = 0.00 s 4919s [2469/8505] CGIUtilTest#test_cgi_escape:macCyrillic = 0.00 s 4919s [2470/8505] CGIUtilTest#test_cgi_escapeHTML:UTF-32 = 0.00 s 4919s [2471/8505] CGIUtilTest#test_cgi_unescape:Windows-1251 = 0.00 s 4919s [2472/8505] CGIUtilTest#test_cgi_unescapeHTML:macIceland = 0.00 s 4919s [2473/8505] CGIUtilTest#test_cgi_escapeHTML:Windows-1251 = 0.00 s 4919s [2474/8505] CGIUtilTest#test_cgi_escapeHTML:UTF8-SoftBank = 0.00 s 4919s [2475/8505] CGIUtilTest#test_cgi_unescape:macUkraine = 0.00 s 4919s [2476/8505] CGIUtilTest#test_cgi_escapeHTML:IBM852 = 0.00 s 4919s [2477/8505] CGIUtilTest#test_cgi_escape:Big5-HKSCS = 0.00 s 4919s [2478/8505] CGIUtilTest#test_cgi_unescape:Windows-1253 = 0.00 s 4919s [2479/8505] CGIUtilTest#test_cgi_escapeHTML:Windows-1253 = 0.00 s 4919s [2480/8505] CGIUtilTest#test_cgi_unescape:IBM862 = 0.00 s 4919s [2481/8505] CGIUtilTest#test_cgi_unescape:macGreek = 0.00 s 4919s [2482/8505] CGIUtilTest#test_cgi_unescapeHTML:CP850 = 0.00 s 4919s [2483/8505] CGIUtilTest#test_cgi_unescapeElement = 0.00 s 4919s [2484/8505] CGIUtilTest#test_cgi_unescape:ISO-8859-13 = 0.00 s 4919s [2485/8505] CGIUtilTest#test_cgi_unescape:IBM860 = 0.00 s 4919s [2486/8505] CGIUtilTest#test_cgi_unescape:UTF-8 = 0.00 s 4919s [2487/8505] CGIUtilTest#test_cgi_unescapeHTML:CP852 = 0.00 s 4919s [2488/8505] CGIUtilTest#test_cgi_escape:UTF8-MAC = 0.00 s 4919s [2489/8505] CGIUtilTest#test_cgi_escape:EUC-KR = 0.00 s 4920s [2490/8505] CGIUtilTest#test_cgi_escapeHTML:KOI8-R = 0.00 s 4920s [2491/8505] CGIUtilTest#test_cgi_escape:eucJP-ms = 0.00 s 4920s [2492/8505] CGIUtilTest#test_cgi_unescape:ISO-8859-11 = 0.00 s 4920s [2493/8505] CGIUtilTest#test_cgi_unescape:UTF8-MAC = 0.00 s 4920s [2494/8505] CGIUtilTest#test_cgi_unescapeHTML:Windows-31J = 0.00 s 4920s [2495/8505] CGIUtilTest#test_cgi_unescape:IBM866 = 0.00 s 4920s [2496/8505] CGIUtilTest#test_cgi_unescape:EUC-JP = 0.00 s 4920s [2497/8505] CGIUtilTest#test_cgi_unescape:eucJP-ms = 0.00 s 4920s [2498/8505] CGIUtilTest#test_cgi_escapeHTML:SJIS-DoCoMo = 0.00 s 4920s [2499/8505] CGIUtilTest#test_cgi_unescape:CP950 = 0.00 s 4920s [2500/8505] CGIUtilTest#test_cgi_unescapeHTML:IBM855 = 0.00 s 4920s [2501/8505] CGIUtilTest#test_cgi_unescape:GB12345 = 0.00 s 4920s [2502/8505] CGIUtilTest#test_cgi_escape:Big5 = 0.00 s 4920s [2503/8505] CGIUtilTest#test_cgi_escape:IBM720 = 0.00 s 4920s [2504/8505] CGIUtilTest#test_cgi_escapeHTML:GB12345 = 0.00 s 4920s [2505/8505] CGIUtilTest#test_cgi_unescape:IBM864 = 0.00 s 4920s [2506/8505] CGIUtilTest#test_cgi_unescape:ISO-8859-15 = 0.00 s 4920s [2507/8505] CGIUtilTest#test_cgi_unescapeHTML:IBM857 = 0.00 s 4920s [2508/8505] CGIUtilTest#test_cgi_unescape:macRomania = 0.00 s 4920s [2509/8505] CGIUtilTest#test_cgi_escape:macGreek = 0.00 s 4920s [2510/8505] CGIUtilTest#test_cgi_unescapeHTML:Windows-1253 = 0.00 s 4924s [2511/8505] CGIUtilTest#test_cgi_unescape_accept_charset = 4.53 s 4924s [2512/8505] CGIUtilTest#test_cgi_escapeHTML:MacJapanese = 0.03 s 4924s [2513/8505] CGIUtilTest#test_cgi_escapeHTML:CP951 = 0.00 s 4924s [2514/8505] CGIUtilTest#test_cgi_escape:IBM869 = 0.00 s 4924s [2515/8505] CGIUtilTest#test_cgi_escape:UTF8-SoftBank = 0.00 s 4924s [2516/8505] CGIUtilTest#test_cgi_unescapeHTML:Windows-1251 = 0.00 s 4924s [2517/8505] CGIUtilTest#test_cgi_escapeHTML:CP50221 = 0.01 s 4924s [2518/8505] CGIUtilTest#test_cgi_unescape:CP949 = 0.00 s 4924s [2519/8505] CGIUtilTest#test_cgi_escape_preserve_encoding = 0.00 s 4924s [2520/8505] CGIUtilTest#test_cgi_escapeHTML:stateless-ISO-2022-JP-KDDI = 0.00 s 4924s [2521/8505] CGIUtilTest#test_cgi_escape:Shift_JIS = 0.00 s 4924s [2522/8505] CGIUtilTest#test_cgi_unescapeHTML:Windows-1257 = 0.00 s 4924s [2523/8505] CGIUtilTest#test_cgi_unescapeHTML:macUkraine = 0.00 s 4924s [2524/8505] CGIUtilTest#test_cgi_escapeHTML:UTF8-DoCoMo = 0.00 s 4924s [2525/8505] CGIUtilTest#test_cgi_escape:CP855 = 0.00 s 4924s [2526/8505] CGIUtilTest#test_cgi_escapeHTML:ISO-8859-8 = 0.00 s 4924s [2527/8505] CGIUtilTest#test_cgi_unescapeHTML:macCyrillic = 0.00 s 4924s [2528/8505] CGIUtilTest#test_cgi_escape:GBK = 0.00 s 4924s [2529/8505] CGIUtilTest#test_cgi_unescapeHTML:Windows-1255 = 0.00 s 4924s [2530/8505] CGIUtilTest#test_cgi_unescape:macIceland = 0.00 s 4924s [2531/8505] CGIUtilTest#test_cgi_unescapeHTML:IBM775 = 0.00 s 4924s [2532/8505] CGIUtilTest#test_cgi_escapeHTML:ISO-8859-4 = 0.00 s 4924s [2533/8505] CGIUtilTest#test_cgi_escape:IBM861 = 0.00 s 4924s [2534/8505] CGIUtilTest#test_cgi_unescape:macCentEuro = 0.00 s 4924s [2535/8505] CGIUtilTest#test_cgi_escapeHTML:ISO-8859-6 = 0.00 s 4924s [2536/8505] CGIUtilTest#test_cgi_escape:IBM863 = 0.00 s 4924s [2537/8505] CGIUtilTest#test_cgi_escapeHTML:ISO-2022-JP = 0.00 s 4924s [2538/8505] CGIUtilTest#test_cgi_escape:US-ASCII = 0.00 s 4924s [2539/8505] CGIUtilTest#test_cgi_unescape:GB2312 = 0.00 s 4924s [2540/8505] CGIUtilTest#test_cgi_escape:IBM865 = 0.00 s 4924s [2541/8505] CGIUtilTest#test_cgi_unescapeHTML:CP51932 = 0.00 s 4924s [2542/8505] CGIUtilTest#test_cgi_unescape:US-ASCII = 0.00 s 4924s [2543/8505] CGIUtilTest#test_cgi_unescapeHTML:macRomania = 0.00 s 4924s [2544/8505] CGIUtilTest#test_cgi_escape:GB18030 = 0.00 s 4924s [2545/8505] CGIUtilTest#test_cgi_escape:Windows-31J = 0.00 s 4924s [2546/8505] CGIUtilTest#test_cgi_escapeHTML:ISO-8859-2 = 0.00 s 4924s [2547/8505] CGIUtilTest#test_cgi_escape:IBM737 = 0.00 s 4924s [2548/8505] CGIUtilTest#test_cgi_escape_html_duplicated = 0.00 s 4924s [2549/8505] CGIUtilTest#test_cgi_escapeHTML:ASCII-8BIT = 0.01 s 4924s [2550/8505] CGIUtilTest#test_cgi_escape:Emacs-Mule = 0.00 s 4924s [2551/8505] TestDigestRactor::TestMD5Ractor#test_s_hexdigest = 0.00 s 4924s [2552/8505] TestIOWaitUncommon#test_wait_readable_urandom = 0.00 s 4924s [2553/8505] TestIOWaitUncommon#test_wait_readable_random = 0.02 s 4924s [2554/8505] TestIOWaitUncommon#test_wait_writable_null = 0.00 s 4924s [2555/8505] TestIOWaitUncommon#test_tty_wait = 0.00 s 4924s [2556/8505] TestIOWaitUncommon#test_fifo_wait = 0.00 s 4924s [2557/8505] TestIOWaitUncommon#test_wait_readable_zero = 0.00 s 4924s [2558/8505] Net::TestBufferedIO#test_eof? = 0.00 s 4924s [2559/8505] TestCSVParseLiberalParsing::DifferentOFS#test_quote_after_column_separator = 0.01 s 4924s [2560/8505] TestCSVParseLiberalParsing::DifferentOFS#test_backslash_quote = 0.00 s 4924s [2561/8505] TestCSVParseLiberalParsing::DifferentOFS#test_middle_quote_end = 0.01 s 4924s [2562/8505] TestCSVParseLiberalParsing::DifferentOFS#test_space_quote = 0.00 s 4924s [2563/8505] TestCSVParseLiberalParsing::DifferentOFS#test_middle_quote_start = 0.00 s 4924s [2564/8505] TestCSVParseLiberalParsing::DifferentOFS#test_double_quote_outside_quote = 0.00 s 4924s [2565/8505] TestCSVParseLiberalParsing::DifferentOFS#test_quote_before_column_separator = 0.00 s 4924s [2566/8505] TestCSVParseQuoteCharNil#test_multiple_space = 0.01 s 4924s [2567/8505] TestCSVParseQuoteCharNil#test_comma = 0.00 s 4924s [2568/8505] TestCSVParseQuoteCharNil#test_nil_nil = 0.00 s 4924s [2569/8505] TestCSVParseQuoteCharNil#test_space_no_ascii = 0.01 s 4924s [2570/8505] TestCSVParseQuoteCharNil#test_unquoted_value_multiple_characters_col_sep = 0.00 s 4924s [2571/8505] TestCSVParseQuoteCharNil#test_line = 0.03 s 4924s [2572/8505] TestCSVParseQuoteCharNil#test_space = 0.00 s 4924s [2573/8505] TestCSVParseQuoteCharNil#test_end_with_nil = 0.01 s 4924s [2574/8505] TestCSVParseQuoteCharNil#test_csv_header_string = 0.01 s 4924s [2575/8505] TestCSVParseQuoteCharNil#test_multiple_characters_leading_empty_fields = 0.00 s 4924s [2576/8505] TestCSVParseQuoteCharNil#test_full = 0.00 s 4924s [2577/8505] URI::TestLDAP#test_parse = 0.04 s 4924s [2578/8505] URI::TestLDAP#test_parse_invalid_uri = 0.00 s 4924s [2579/8505] URI::TestLDAP#test_select = 0.00 s 4924s [2580/8505] TestKconv#test_utf8 = 0.03 s 4924s [2581/8505] TestKconv#test_kconv = 0.00 s 4924s [2582/8505] TestKconv#test_eucjp = 0.01 s 4924s [2583/8505] TestKconv#test_shiftjis = 0.00 s 4924s [2584/8505] TestKconv#test_jis = 0.01 s 4924s [2585/8505] Psych::TestException#test_parse_file_exception = 0.01 s 4924s [2586/8505] Psych::TestException#test_convert = 0.02 s 4924s [2587/8505] Psych::TestException#test_psych_parse_takes_file = 0.00 s 4924s [2588/8505] Psych::TestException#test_attributes = 0.00 s 4924s [2589/8505] Psych::TestException#test_load_file_exception = 0.00 s 4924s [2590/8505] Psych::TestException#test_psych_parse_stream_takes_file = 0.00 s 4924s [2591/8505] Psych::TestException#test_psych_syntax_error = 0.01 s 4924s [2592/8505] Psych::TestException#test_load_takes_file = 0.00 s 4924s [2593/8505] Psych::TestException#test_load_stream_takes_file = 0.00 s 4925s [2594/8505] Psych::TestException#test_naming_exception = 0.02 s 4925s [2595/8505] Psych::TestException#test_safe_load_file_exception = 0.00 s 4925s [2596/8505] TestFileUtilsNoWrite#test_visibility_fu_default_blksize = 0.00 s 4925s [2597/8505] TestFileUtilsNoWrite#test_visibility_chmod = 0.00 s 4925s [2598/8505] TestFileUtilsNoWrite#test_singleton_visibility_mkdir_p = 0.00 s 4925s [2599/8505] TestFileUtilsNoWrite#test_visibility_mv = 0.00 s 4925s [2600/8505] TestFileUtilsNoWrite#test_singleton_visibility_copy = 0.00 s 4925s [2601/8505] TestFileUtilsNoWrite#test_visibility_makedirs = 0.00 s 4925s [2602/8505] TestFileUtilsNoWrite#test_visibility_uptodate? = 0.00 s 4925s [2603/8505] TestFileUtilsNoWrite#test_visibility_copy_entry = 0.00 s 4925s [2604/8505] TestFileUtilsNoWrite#test_visibility_rm_r = 0.00 s 4925s [2605/8505] TestFileUtilsNoWrite#test_singleton_visibility_copy_file = 0.00 s 4925s [2606/8505] TestFileUtilsNoWrite#test_singleton_visibility_link = 0.00 s 4925s [2607/8505] TestFileUtilsNoWrite#test_singleton_visibility_rmdir = 0.00 s 4925s [2608/8505] TestFileUtilsNoWrite#test_visibility_remove_dir = 0.00 s 4925s [2609/8505] TestFileUtilsNoWrite#test_singleton_visibility_remove = 0.00 s 4925s [2610/8505] TestFileUtilsNoWrite#test_singleton_visibility_move = 0.00 s 4925s [2611/8505] TestFileUtilsNoWrite#test_visibility_mkdir = 0.00 s 4925s [2612/8505] TestFileUtilsNoWrite#test_visibility_compare_file = 0.00 s 4925s [2613/8505] TestFileUtilsNoWrite#test_visibility_chmod_R = 0.00 s 4925s [2614/8505] TestFileUtilsNoWrite#test_visibility_rm_f = 0.00 s 4925s [2615/8505] TestFileUtilsNoWrite#test_singleton_visibility_ln_sf = 0.00 s 4925s [2616/8505] TestFileUtilsNoWrite#test_singleton_visibility_cp_lr = 0.00 s 4925s [2617/8505] TestFileUtilsNoWrite#test_visibility_remove = 0.00 s 4925s [2618/8505] TestFileUtilsNoWrite#test_singleton_visibility_mv = 0.00 s 4925s [2619/8505] TestFileUtilsNoWrite#test_visibility_install = 0.00 s 4925s [2620/8505] TestFileUtilsNoWrite#test_visibility_safe_unlink = 0.00 s 4925s [2621/8505] TestFileUtilsNoWrite#test_singleton_visibility_getwd = 0.00 s 4925s [2622/8505] TestFileUtilsNoWrite#test_singleton_visibility_fu_blksize = 0.00 s 4925s [2623/8505] TestFileUtilsNoWrite#test_singleton_visibility_mkpath = 0.00 s 4925s [2624/8505] TestFileUtilsNoWrite#test_visibility_fu_stream_blksize = 0.00 s 4925s [2625/8505] TestFileUtilsNoWrite#test_singleton_visibility_rm_f = 0.00 s 4925s [2626/8505] TestFileUtilsNoWrite#test_singleton_visibility_cd = 0.00 s 4925s [2627/8505] TestFileUtilsNoWrite#test_visibility_mkpath = 0.00 s 4925s [2628/8505] TestFileUtilsNoWrite#test_visibility_cp = 0.00 s 4925s [2629/8505] TestFileUtilsNoWrite#test_visibility_move = 0.00 s 4925s [2630/8505] TestFileUtilsNoWrite#test_visibility_fu_windows? = 0.00 s 4925s [2631/8505] TestFileUtilsNoWrite#test_visibility_chdir = 0.00 s 4925s [2632/8505] TestFileUtilsNoWrite#test_singleton_visibility_identical? = 0.00 s 4925s [2633/8505] TestFileUtilsNoWrite#test_singleton_visibility_cp = 0.00 s 4925s [2634/8505] TestFileUtilsNoWrite#test_visibility_link_entry = 0.00 s 4925s [2635/8505] TestFileUtilsNoWrite#test_singleton_visibility_rm_r = 0.00 s 4925s [2636/8505] TestFileUtilsNoWrite#test_singleton_visibility_makedirs = 0.00 s 4925s [2637/8505] TestFileUtilsNoWrite#test_visibility_link = 0.00 s 4925s [2638/8505] TestFileUtilsNoWrite#test_singleton_visibility_compare_file = 0.04 s 4925s [2639/8505] TestFileUtilsNoWrite#test_visibility_touch = 0.00 s 4925s [2640/8505] TestFileUtilsNoWrite#test_singleton_visibility_remove_file = 0.00 s 4925s [2641/8505] TestFileUtilsNoWrite#test_visibility_symlink = 0.00 s 4925s [2642/8505] TestFileUtilsNoWrite#test_singleton_visibility_chown_R = 0.00 s 4925s [2643/8505] TestFileUtilsNoWrite#test_visibility_copy = 0.00 s 4925s [2644/8505] TestFileUtilsNoWrite#test_singleton_visibility_chown = 0.00 s 4925s [2645/8505] TestFileUtilsNoWrite#test_singleton_visibility_fu_default_blksize = 0.00 s 4925s [2646/8505] TestFileUtilsNoWrite#test_visibility_cd = 0.00 s 4925s [2647/8505] TestFileUtilsNoWrite#test_visibility_rm_rf = 0.00 s 4925s [2648/8505] TestFileUtilsNoWrite#test_singleton_visibility_copy_stream = 0.00 s 4925s [2649/8505] TestFileUtilsNoWrite#test_visibility_remove_entry_secure = 0.00 s 4925s [2650/8505] TestFileUtilsNoWrite#test_singleton_visibility_rmtree = 0.00 s 4925s [2651/8505] TestFileUtilsNoWrite#test_singleton_visibility_uptodate? = 0.00 s 4925s [2652/8505] TestFileUtilsNoWrite#test_visibility_copy_file = 0.00 s 4925s [2653/8505] TestFileUtilsNoWrite#test_singleton_visibility_chmod_R = 0.00 s 4925s [2654/8505] TestFileUtilsNoWrite#test_singleton_visibility_chmod = 0.00 s 4925s [2655/8505] TestFileUtilsNoWrite#test_visibility_rmtree = 0.00 s 4925s [2656/8505] TestFileUtilsNoWrite#test_singleton_visibility_cp_r = 0.00 s 4925s [2657/8505] TestFileUtilsNoWrite#test_visibility_remove_entry = 0.00 s 4925s [2658/8505] TestFileUtilsNoWrite#test_singleton_visibility_link_entry = 0.00 s 4925s [2659/8505] TestFileUtilsNoWrite#test_visibility_identical? = 0.00 s 4925s [2660/8505] TestFileUtilsNoWrite#test_visibility_mkdir_p = 0.00 s 4925s [2661/8505] TestFileUtilsNoWrite#test_visibility_fu_copy_stream0 = 0.00 s 4925s [2662/8505] TestFileUtilsNoWrite#test_visibility_cp_lr = 0.00 s 4925s [2663/8505] TestFileUtilsNoWrite#test_visibility_ln_sf = 0.00 s 4925s [2664/8505] TestFileUtilsNoWrite#test_singleton_visibility_mkdir = 0.00 s 4925s [2665/8505] TestFileUtilsNoWrite#test_singleton_visibility_fu_stream_blksize = 0.00 s 4925s [2666/8505] TestFileUtilsNoWrite#test_visibility_compare_stream = 0.00 s 4925s [2667/8505] TestFileUtilsNoWrite#test_singleton_visibility_ln_s = 0.00 s 4925s [2668/8505] TestFileUtilsNoWrite#test_visibility_rmdir = 0.00 s 4925s [2669/8505] TestFileUtilsNoWrite#test_visibility_fu_blksize = 0.00 s 4925s [2670/8505] TestFileUtilsNoWrite#test_singleton_visibility_fu_copy_stream0 = 0.00 s 4925s [2671/8505] TestFileUtilsNoWrite#test_visibility_cmp = 0.00 s 4925s [2672/8505] TestFileUtilsNoWrite#test_visibility_remove_file = 0.00 s 4925s [2673/8505] TestFileUtilsNoWrite#test_singleton_visibility_remove_entry_secure = 0.00 s 4925s [2674/8505] TestFileUtilsNoWrite#test_singleton_visibility_chdir = 0.00 s 4925s [2675/8505] TestFileUtilsNoWrite#test_singleton_visibility_remove_entry = 0.00 s 4925s [2676/8505] TestFileUtilsNoWrite#test_singleton_visibility_ln = 0.00 s 4925s [2677/8505] TestFileUtilsNoWrite#test_visibility_ln_s = 0.00 s 4925s [2678/8505] TestFileUtilsNoWrite#test_singleton_visibility_pwd = 0.00 s 4925s [2679/8505] TestFileUtilsNoWrite#test_visibility_chown_R = 0.00 s 4925s [2680/8505] TestFileUtilsNoWrite#test_singleton_visibility_symlink = 0.00 s 4925s [2681/8505] TestFileUtilsNoWrite#test_singleton_visibility_cmp = 0.00 s 4925s [2682/8505] TestFileUtilsNoWrite#test_visibility_copy_stream = 0.00 s 4925s [2683/8505] TestFileUtilsNoWrite#test_visibility_pwd = 0.00 s 4925s [2684/8505] TestFileUtilsNoWrite#test_visibility_getwd = 0.00 s 4925s [2685/8505] TestFileUtilsNoWrite#test_singleton_visibility_compare_stream = 0.00 s 4925s [2686/8505] TestFileUtilsNoWrite#test_singleton_visibility_rm = 0.00 s 4925s [2687/8505] TestFileUtilsNoWrite#test_singleton_visibility_remove_dir = 0.00 s 4925s [2688/8505] TestFileUtilsNoWrite#test_visibility_cp_r = 0.00 s 4925s [2689/8505] TestFileUtilsNoWrite#test_singleton_visibility_install = 0.00 s 4925s [2690/8505] TestFileUtilsNoWrite#test_singleton_visibility_copy_entry = 0.00 s 4925s [2691/8505] TestFileUtilsNoWrite#test_singleton_visibility_rm_rf = 0.00 s 4925s [2692/8505] TestFileUtilsNoWrite#test_visibility_rm = 0.00 s 4925s [2693/8505] TestFileUtilsNoWrite#test_singleton_visibility_safe_unlink = 0.00 s 4925s [2694/8505] TestFileUtilsNoWrite#test_visibility_chown = 0.00 s 4925s [2695/8505] TestFileUtilsNoWrite#test_singleton_visibility_fu_windows? = 0.00 s 4925s [2696/8505] TestFileUtilsNoWrite#test_singleton_visibility_touch = 0.00 s 4925s [2697/8505] TestFileUtilsNoWrite#test_visibility_ln = 0.00 s 4925s [2698/8505] TestIRB::TestRubyLex#test_bracket_corresponding_to_times = 0.26 s 4925s [2699/8505] TestIRB::TestRubyLex#test_do_corresponding_to_times = 0.03 s 4925s [2700/8505] TestIRB::TestRubyLex#test_broken_percent_literal = 0.00 s 4925s [2701/8505] TestIRB::TestRubyLex#test_corresponding_syntax_to_keyword_in = 0.03 s 4925s [2702/8505] TestIRB::TestRubyLex#test_oneliner_def_in_multiple_lines = 0.03 s 4925s [2703/8505] TestIRB::TestRubyLex#test_braces_on_their_own_line = 0.04 s 4926s [2704/8505] TestIRB::TestRubyLex#test_corresponding_syntax_to_keyword_do = 0.88 s 4926s [2705/8505] TestIRB::TestRubyLex#test_incomplete_coding_magic_comment = 0.00 s 4926s [2706/8505] TestIRB::TestRubyLex#test_dyanmic_prompt_with_blank_line = 0.01 s 4926s [2707/8505] TestIRB::TestRubyLex#test_do_corresponding_to_loop = 0.01 s 4926s [2708/8505] TestIRB::TestRubyLex#test_incomplete_vim_coding_magic_comment = 0.02 s 4926s [2709/8505] TestIRB::TestRubyLex#test_corresponding_syntax_to_keyword_do_in_class = 0.11 s 4926s [2710/8505] TestIRB::TestRubyLex#test_mixed_rescue = 0.09 s 4926s [2711/8505] TestIRB::TestRubyLex#test_incomplete_emacs_coding_magic_comment = 0.01 s 4926s [2712/8505] TestIRB::TestRubyLex#test_symbols = 0.03 s 4927s [2713/8505] TestIRB::TestRubyLex#test_oneliner_method_definition = 0.33 s 4927s [2714/8505] TestIRB::TestRubyLex#test_incomplete_encoding_magic_comment = 0.00 s 4927s [2715/8505] TestIRB::TestRubyLex#test_broken_percent_literal_in_method = 0.01 s 4927s [2716/8505] TestIRB::TestRubyLex#test_corresponding_syntax_to_keyword_for = 0.05 s 4927s [2717/8505] TestIRB::TestRubyLex#test_endless_range_at_end_of_line = 0.06 s 4928s [2718/8505] TestIRB::TestRubyLex#test_auto_indent = 1.20 s 4928s [2719/8505] TestIRB::TestRubyLex#test_a_closed_brace_and_not_closed_brace_in_a_line = 0.01 s 4928s [2720/8505] TestIRB::TestRubyLex#test_tlambda = 0.02 s 4928s [2721/8505] TestIRB::TestRubyLex#test_bracket_corresponding_to_loop = 0.01 s 4928s [2722/8505] TestIRB::TestRubyLex#test_corresponding_syntax_to_keyword_for_with_do = 0.03 s 4928s [2723/8505] TestDigestExtend#test_digest_length = 0.00 s 4928s [2724/8505] TestDigestExtend#test_digest = 0.02 s 4928s [2725/8505] TestDigestExtend#test_digest_s_hexencode = 0.01 s 4928s [2726/8505] TestDigestExtend#test_digest_hexdigest = 0.01 s 4928s [2727/8505] TestDigestExtend#test_class_reset = 0.00 s 4928s [2728/8505] TestDigestExtend#test_context = 0.00 s 4928s [2729/8505] TestDigestExtend#test_hexdigest = 0.00 s 4928s [2730/8505] TestDigestExtend#test_digest_hexdigest_bang = 0.00 s 4928s [2731/8505] TestDigestExtend#test_to_s = 0.00 s 4928s [2732/8505] TestDigestExtend#test_block_length = 0.00 s 4928s [2733/8505] TestDigestExtend#test_length = 0.00 s 4928s [2734/8505] TestDigestExtend#test_new = 0.00 s 4928s [2735/8505] TestDigestRactor::TestSHA512Ractor#test_s_hexdigest = 0.00 s 4928s [2736/8505] TestIRB::TestInit#test_setup_with_argv_preserves_global_argv = 0.02 s 4928s [2737/8505] TestIRB::TestInit#test_rc_file_in_subdir = 0.02 s 4933s [2738/8505] TestIRB::TestInit#test_recovery_sigint = 5.33 s 4933s [2739/8505] TestIRB::TestInit#test_rc_file = 0.01 s 4933s [2740/8505] TestIRB::TestInit#test_no_color_environment_variable = 0.05 s 4933s [2741/8505] TestIRB::TestInit#test_setup_with_minimum_argv_does_not_change_dollar0 = 0.01 s 4934s [2742/8505] TestRDocServlet#test_if_modified_since_not_modified = 0.19 s 4934s [2743/8505] TestRDocServlet#test_store_for_missing_gem = 0.05 s 4934s [2744/8505] TestRDocServlet#test_do_GET_not_modified = 0.03 s 4934s [2745/8505] TestRDocServlet#test_if_modified_since = 0.01 s 4934s [2746/8505] TestRDocServlet#test_do_GET_error = 0.02 s 4934s [2747/8505] TestRDocServlet#test_show_documentation_index = 0.04 s 4934s [2748/8505] TestRDocServlet#test_do_GET_root_search = 0.10 s 4934s [2749/8505] TestRDocServlet#test_store_for_gem = 0.01 s 4934s [2750/8505] TestRDocServlet#test_documentation_page_page_with_nesting = 0.04 s 4934s [2751/8505] TestRDocServlet#test_store_for_site = 0.01 s 4934s [2752/8505] TestRDocServlet#test_ri_paths = 0.01 s 4934s [2753/8505] TestRDocServlet#test_installed_docs = 0.02 s 4934s [2754/8505] TestRDocServlet#test_documentation_page_page = 0.03 s 4934s [2755/8505] TestRDocServlet#test_store_for_home = 0.01 s 4934s [2756/8505] TestRDocServlet#test_not_found = 0.02 s 4934s [2757/8505] TestRDocServlet#test_show_documentation_page = 0.03 s 4934s [2758/8505] TestRDocServlet#test_documentation_source = 0.01 s 4934s [2759/8505] TestRDocServlet#test_root_search = 0.02 s 4934s [2760/8505] TestRDocServlet#test_store_for_extra = 0.01 s 4934s [2761/8505] TestRDocServlet#test_documentation_page_class = 0.04 s 4934s [2762/8505] TestRDocServlet#test_asset = 0.01 s 4934s [2763/8505] TestRDocServlet#test_generator_for = 0.01 s 4934s [2764/8505] TestRDocServlet#test_do_GET = 0.02 s 4934s [2765/8505] TestRDocServlet#test_do_GET_mount_path = 0.02 s 4934s [2766/8505] TestRDocServlet#test_store_for_ruby = 0.01 s 4934s [2767/8505] TestRDocServlet#test_do_GET_asset_json_index = 0.01 s 4934s [2768/8505] TestRDocServlet#test_do_GET_asset_darkfish = 0.02 s 4934s [2769/8505] TestRDocServlet#test_show_documentation_table_of_contents = 0.02 s 4934s [2770/8505] TestRDocServlet#test_store_for_missing_documentation = 0.01 s 4934s [2771/8505] TestRDocServlet#test_error = 0.01 s 4934s [2772/8505] TestRDocServlet#test_do_GET_root = 0.02 s 4934s [2773/8505] TestRDocServlet#test_documentation_source_cached = 0.01 s 4934s [2774/8505] TestRDocServlet#test_not_found_message = 0.03 s 4934s [2775/8505] TestRDocServlet#test_root = 0.02 s 4934s [2776/8505] TestRDocServlet#test_show_documentation_search_index = 0.01 s 4934s [2777/8505] TestRDocServlet#test_documentation_page_not_found = 0.04 s 4934s [2778/8505] TestCSVWriteQuoteEmptyGenerateLine#test_empty_only_false = 0.00 s 4934s [2779/8505] TestCSVWriteQuoteEmptyGenerateLine#test_empty_default = 0.00 s 4934s [2780/8505] TestCSVWriteQuoteEmptyGenerateLine#test_quote_empty_default = 0.00 s 4934s [2781/8505] TestCSVWriteQuoteEmptyGenerateLine#test_empty_double_default = 0.00 s 4934s [2782/8505] TestCSVWriteQuoteEmptyGenerateLine#test_empty_false = 0.00 s 4934s [2783/8505] TestCSVWriteQuoteEmptyGenerateLine#test_quote_empty_false = 0.00 s 4934s [2784/8505] TestCSVWriteQuoteEmptyGenerateLine#test_empty_double_false = 0.00 s 4934s [2785/8505] TestCSVWriteQuoteEmptyGenerateLine#test_empty_only_default = 0.00 s 4934s [2786/8505] TestERBEncoding#test___ENCODING__ = 0.00 s 4934s [2787/8505] TestERBEncoding#test_literal_encoding = 0.00 s 4934s [2788/8505] TestERBEncoding#test_method_with_encoding = 0.01 s 4934s [2789/8505] TestERBEncoding#test_generate_magic_comment = 0.00 s 4934s [2790/8505] TestERBEncoding#test_result_encoding = 0.00 s 4935s [2791/8505] TestERBEncoding#test_recognize_magic_comment = 0.00 s 4938s [2792/8505] TestExtLibs#test_existence_of_objspace = 3.89 s 4943s [2793/8505] TestExtLibs#test_existence_of_json = 4.19 s 4947s [2794/8505] TestExtLibs#test_existence_of_io/nonblock = 4.46 s 4952s [2795/8505] TestExtLibs#test_existence_of_io/wait = 4.41 s 4956s [2796/8505] TestExtLibs#test_existence_of_zlib = 4.23 s 4960s [2797/8505] TestExtLibs#test_existence_of_stringio = 4.38 s 4964s [2798/8505] TestExtLibs#test_existence_of_pathname = 4.16 s 4969s [2799/8505] TestExtLibs#test_existence_of_date = 4.63 s 4973s [2800/8505] TestExtLibs#test_existence_of_thread = 3.97 s 4977s [2801/8505] TestExtLibs#test_existence_of_nkf = 4.19 s 4981s [2802/8505] TestExtLibs#test_existence_of_rbconfig/sizeof = 3.78 s 4985s [2803/8505] TestExtLibs#test_existence_of_digest/sha2 = 4.54 s 4990s [2804/8505] TestExtLibs#test_existence_of_socket = 4.65 s 4995s [2805/8505] TestExtLibs#test_existence_of_strscan = 4.62 s 4999s [2806/8505] TestExtLibs#test_existence_of_bigdecimal = 4.44 s 5003s [2807/8505] TestExtLibs#test_existence_of_digest/sha1 = 3.92 s 5008s [2808/8505] TestExtLibs#test_existence_of_ripper = 4.53 s 5012s [2809/8505] TestExtLibs#test_existence_of_fiber = 4.09 s 5015s [2810/8505] TestExtLibs#test_existence_of_digest/bubblebabble = 3.77 s 5019s [2811/8505] TestExtLibs#test_existence_of_fiddle = 4.01 s 5024s [2812/8505] TestExtLibs#test_existence_of_digest = 4.30 s 5028s [2813/8505] TestExtLibs#test_existence_of_etc = 4.11 s 5032s [2814/8505] TestExtLibs#test_existence_of_fcntl = 4.21 s 5036s [2815/8505] TestExtLibs#test_existence_of_coverage = 3.82 s 5040s [2816/8505] TestExtLibs#test_existence_of_digest/md5 = 3.86 s 5044s [2817/8505] TestExtLibs#test_existence_of_continuation = 3.78 s 5047s [2818/8505] TestExtLibs#test_existence_of_syslog = 3.81 s 5051s [2819/8505] TestExtLibs#test_existence_of_io/console = 4.05 s 5051s [2820/8505] TestMonitor#test_new_cond_before_initialize = 0.01 s 5051s [2821/8505] TestMonitor#test_initialize_with_keyword_arg = 0.01 s 5052s [2822/8505] TestMonitor#test_synchronize = 0.03 s 5052s [2823/8505] TestMonitor#test_enter_in_different_fibers = 0.01 s 5052s [2824/8505] TestMonitor#test_try_enter = 0.00 s 5052s [2825/8505] TestMonitor#test_enter_second_after_killed_thread = 0.00 s 5052s [2826/8505] TestMonitor#test_cond = 0.01 s 5052s [2827/8505] TestMonitor#test_exit = 0.00 s 5052s [2828/8505] TestMonitor#test_try_enter_second_after_killed_thread = 0.00 s 5052s [2829/8505] TestMonitor#test_mon_locked_and_owned = 0.00 s 5052s [2830/8505] TestMonitor#test_enter = 0.01 s 5052s [2831/8505] TestDigest::TestMD5#test_s_hexdigest = 0.01 s 5052s [2832/8505] TestDigest::TestMD5#test_bubblebabble_class = 0.00 s 5052s [2833/8505] TestDigest::TestMD5#test_instance_eval = 0.00 s 5052s [2834/8505] TestDigest::TestMD5#test_update = 0.00 s 5052s [2835/8505] TestDigest::TestMD5#test_bubblebabble = 0.00 s 5052s [2836/8505] TestDigest::TestMD5#test_s_base64digest = 0.00 s 5052s [2837/8505] TestDigest::TestMD5#test_eq = 0.00 s 5052s [2838/8505] TestDigest::TestMD5#test_alignment = 0.00 s 5052s [2839/8505] TestDigest::TestMD5#test_s_new = 0.00 s 5052s [2840/8505] TestDigest::TestMD5#test_s_digest = 0.00 s 5052s [2841/8505] TestDigest::TestMD5#test_bubblebabble_instance = 0.00 s 5052s [2842/8505] TestDigest::TestMD5#test_s_file = 0.00 s 5052s [2843/8505] PStoreTest#test_data_should_be_loaded_correctly_when_in_readwrite_mode = 0.02 s 5052s [2844/8505] PStoreTest#test_data_should_be_loaded_correctly_when_in_readonly_mode = 0.02 s 5052s [2845/8505] PStoreTest#test_changes_are_not_written_on_abort = 0.00 s 5052s [2846/8505] PStoreTest#test_nested_transaction_raises_error = 0.01 s 5052s [2847/8505] PStoreTest#test_opening_new_file_in_readwrite_mode_should_result_in_empty_values = 0.00 s 5052s [2848/8505] PStoreTest#test_thread_safe = 0.01 s 5052s [2849/8505] PStoreTest#test_opening_new_file_in_readonly_mode_should_result_in_empty_values = 0.00 s 5052s [2850/8505] PStoreTest#test_changes_after_commit_are_discarded = 0.00 s 5052s [2851/8505] PStoreTest#test_writing_inside_readonly_transaction_raises_error = 0.00 s 5052s [2852/8505] TestSocket#test_tcp_server_sockets = 0.00 s 5052s [2853/8505] TestSocket#test_bintime = 0.00 s 5052s [2854/8505] TestSocket#test_getifaddrs = 0.01 s 5052s [2855/8505] TestSocket#test_tcp = 0.00 s 5052s [2856/8505] TestSocket#test_ip_address_list = 0.00 s 5052s [2857/8505] TestSocket#test_ip_address_list_include_localhost = 0.00 s 5052s [2858/8505] TestSocket#test_socket_new = 0.00 s 5052s [2859/8505] TestSocket#test_connect_timeout = 0.00 s 5052s [2860/8505] TestSocket#test_unpack_sockaddr = 0.00 s 5052s [2861/8505] TestSocket#test_timestamp = 0.00 s 5052s [2862/8505] TestSocket#test_bind = 0.00 s 5052s [2863/8505] TestSocket#test_initialize = 0.01 s 5052s [2864/8505] TestSocket#test_tcp_server_sockets_in_rescue = 0.00 s 5052s [2865/8505] TestSocket#test_tcp_server_sockets_port0 = 0.00 s 5052s [2866/8505] TestSocket#test_timestampns = 0.00 s 5052s [2867/8505] TestSocket#test_closed_read = 0.21 s 5052s [2868/8505] Reline::TestKey#test_match_other = 0.00 s 5052s [2869/8505] Reline::TestKey#test_match_symbol = 0.00 s 5052s [2870/8505] Reline::TestKey#test_match_integer = 0.00 s 5052s [2871/8505] Reline::TestKey#test_match_key = 0.00 s 5052s [2872/8505] Psych::TestHash#test_empty_subclass = 0.01 s 5052s [2873/8505] Psych::TestHash#test_raises_if_anchor_not_defined = 0.00 s 5052s [2874/8505] Psych::TestHash#test_anchor_reuse = 0.01 s 5052s [2875/8505] Psych::TestHash#test_hash_subclass_with_ivars = 0.02 s 5052s [2876/8505] Psych::TestHash#test_custom_initialize_no_ivar = 0.01 s 5052s [2877/8505] Psych::TestHash#test_cycles = 0.00 s 5052s [2878/8505] Psych::TestHash#test_recursive_hash_uses_alias = 0.01 s 5052s [2879/8505] Psych::TestHash#test_self_referential = 0.01 s 5052s [2880/8505] Psych::TestHash#test_recursive_hash = 0.01 s 5052s [2881/8505] Psych::TestHash#test_referenced_hash_with_ivar = 0.02 s 5052s [2882/8505] Psych::TestHash#test_ref_append = 0.00 s 5052s [2883/8505] Psych::TestHash#test_custom_initialized = 0.03 s 5052s [2884/8505] Psych::TestHash#test_map = 0.00 s 5052s [2885/8505] Psych::TestHash#test_load_with_class_syck_compatibility = 0.00 s 5052s [2886/8505] PrettyPrintTest::NonString#test_7 = 0.00 s 5052s [2887/8505] PrettyPrintTest::NonString#test_6 = 0.01 s 5052s [2888/8505] TestDigest::TestBase#test_base = 0.00 s 5052s [2889/8505] TestForwardable#test_instance_delegate = 0.02 s 5052s [2890/8505] TestForwardable#test_non_module = 0.00 s 5052s [2891/8505] TestForwardable#test_def_instance_delegator_using_args_method_as_receiver = 0.00 s 5052s [2892/8505] TestForwardable#test_obj_single_delegator = 0.00 s 5052s [2893/8505] TestForwardable#test_def_instance_delegator_kw = 0.00 s 5052s [2894/8505] TestForwardable#test_obj_single_delegate = 0.01 s 5052s [2895/8505] TestForwardable#test_def_instance_delegator = 0.00 s 5052s [2896/8505] TestForwardable#test_aset = 0.00 s 5052s [2897/8505] TestForwardable#test_def_instance_delegator_constant = 0.00 s 5052s [2898/8505] TestForwardable#test_def_instance_delegators_using_block_method_as_receiver = 0.01 s 5052s [2899/8505] TestForwardable#test_obj_single_delegators = 0.01 s 5052s [2900/8505] TestForwardable#test_class_single_delegator = 0.01 s 5052s [2901/8505] TestForwardable#test_aref = 0.00 s 5052s [2902/8505] TestForwardable#test_def_instance_delegators_using_args_method_as_receiver = 0.01 s 5052s [2903/8505] TestForwardable#test_def_instance_delegators_send_id = 0.00 s 5052s [2904/8505] TestForwardable#test_obj_single_delegators_send_id = 0.00 s 5052s [2905/8505] TestForwardable#test_class_single_delegators = 0.00 s 5052s [2906/8505] TestForwardable#test_class_single_delegate = 0.01 s 5052s [2907/8505] TestForwardable#test_backtrace_adjustment = 0.00 s 5052s [2908/8505] TestForwardable#test_def_instance_delegator_using_block_method_as_receiver = 0.00 s 5052s [2909/8505] TestForwardable#test_on_private_method = 0.00 s 5052s [2910/8505] TestForwardable#test_basicobject_subclass = 0.00 s 5052s [2911/8505] TestForwardable#test_def_instance_delegators = 0.01 s 5052s [2912/8505] TestForwardable#test_def_instance_delegate_using_block_method_as_receiver = 0.01 s 5052s [2913/8505] TestForwardable#test_def_instance_delegate_using_args_method_as_receiver = 0.01 s 5052s [2914/8505] TestForwardable#test_uniop = 0.00 s 5052s [2915/8505] TestForwardable#test_binop = 0.00 s 5052s [2916/8505] OpenSSL::TestConfig#test_s_load = 0.03 s 5052s [2917/8505] OpenSSL::TestConfig#test_s_parse = 0.01 s 5052s [2918/8505] OpenSSL::TestConfig#test_sections = 0.00 s 5052s [2919/8505] OpenSSL::TestConfig#test_dup = 0.00 s 5052s [2920/8505] OpenSSL::TestConfig#test_inspect = 0.00 s 5052s [2921/8505] OpenSSL::TestConfig#test_get_value_ENV = 0.00 s 5052s [2922/8505] OpenSSL::TestConfig#test_initialize_with_empty_file = 0.00 s 5052s [2923/8505] OpenSSL::TestConfig#test_aref = 0.00 s 5052s [2924/8505] OpenSSL::TestConfig#test_initialize = 0.00 s 5052s [2925/8505] OpenSSL::TestConfig#test_initialize_with_example_file = 0.00 s 5052s [2926/8505] OpenSSL::TestConfig#test_to_s = 0.00 s 5052s [2927/8505] OpenSSL::TestConfig#test_each = 0.01 s 5052s [2928/8505] OpenSSL::TestConfig#test_get_value = 0.01 s 5052s [2929/8505] TestRDocMarkupAttributes#test_bitmap_for = 0.01 s 5052s [2930/8505] TestRDocMarkupAttributes#test_as_string = 0.00 s 5052s [2931/8505] TestRDocMarkupAttributes#test_each_name_of = 0.00 s 5052s [2932/8505] TestZlibInflate#test_inflate_partial_input = 0.00 s 5052s [2933/8505] TestZlibInflate#test_initialize = 0.00 s 5052s [2934/8505] TestZlibInflate#test_inflate_dictionary = 0.00 s 5052s [2935/8505] TestZlibInflate#test_inflate = 0.00 s 5052s [2936/8505] TestZlibInflate#test_set_dictionary = 0.00 s 5052s [2937/8505] TestZlibInflate#test_inflate_chunked_break = 0.01 s 5052s [2938/8505] TestZlibInflate#test_sync = 0.01 s 5052s [2939/8505] TestRDocMarkupHeading#test_aref = 0.01 s 5052s [2940/8505] TestRDocMarkupHeading#test_plain_html = 0.01 s 5052s [2941/8505] TestRDocMarkupHeading#test_label = 0.01 s 5052s [2942/8505] TestResolvDNS#test_each_name = 0.02 s 5053s [2943/8505] TestResolvDNS#test_too_big_label_address = 0.37 s 5053s [2944/8505] TestResolvDNS#test_no_fd_leak_connected = 0.00 s 5053s [2945/8505] TestResolvDNS#test_no_server = 0.06 s 5053s [2946/8505] TestResolvDNS#test_dots_diffences = 0.00 s 5053s [2947/8505] TestResolvDNS#test_ipv6_create = 0.00 s 5053s [2948/8505] TestResolvDNS#test_ipv6_to_s = 0.00 s 5053s [2949/8505] TestResolvDNS#test_query_ipv4_address = 0.03 s 5053s [2950/8505] TestResolvDNS#test_case_insensitive_name = 0.00 s 5053s [2951/8505] TestResolvDNS#test_ipv6_name = 0.00 s 5053s [2952/8505] TestResolvDNS#test_resolv_conf_by_command = 0.00 s 5053s [2953/8505] TestResolvDNS#test_no_fd_leak_unconnected = 0.02 s 5053s [2954/8505] TestResolvDNS#test_invalid_byte_comment = 0.00 s 5053s [2955/8505] TestResolvDNS#test_ipv6_should_be_16 = 0.02 s 5053s [2956/8505] TestResolvDNS#test_query_ipv4_address_timeout = 0.41 s 5053s [2957/8505] TestResolvDNS#test_resolve_with_2_ndots = 0.00 s 5057s [2958/8505] TC_SortedSet#test_ok_with_gem = 4.02 s 5062s [2959/8505] TC_SortedSet#test_ok_require = 4.33 s 5062s [2960/8505] Psych::TestParser#test_sequence_start_tag = 0.05 s 5062s [2961/8505] Psych::TestParser#test_syntax_error_twice = 0.01 s 5062s [2962/8505] Psych::TestParser#test_syntax_error_has_path_for_io = 0.01 s 5062s [2963/8505] Psych::TestParser#test_end_stream = 0.01 s 5062s [2964/8505] Psych::TestParser#test_scalar_with_anchor = 0.00 s 5062s [2965/8505] Psych::TestParser#test_ast_roundtrip = 0.01 s 5062s [2966/8505] Psych::TestParser#test_bom = 0.00 s 5062s [2967/8505] Psych::TestParser#test_alias = 0.01 s 5062s [2968/8505] Psych::TestParser#test_scalar_plain_implicit = 0.01 s 5062s [2969/8505] Psych::TestParser#test_sequence_end = 0.00 s 5062s [2970/8505] Psych::TestParser#test_mapping_end = 0.00 s 5062s [2971/8505] Psych::TestParser#test_mapping_tag = 0.01 s 5062s [2972/8505] Psych::TestParser#test_scalar = 0.00 s 5062s [2973/8505] Psych::TestParser#test_literal_scalar = 0.00 s 5062s [2974/8505] Psych::TestParser#test_end_document_explicit = 0.00 s 5062s [2975/8505] Psych::TestParser#test_end_document_implicit = 0.00 s 5062s [2976/8505] Psych::TestParser#test_mapping_block = 0.00 s 5062s [2977/8505] Psych::TestParser#test_exception_memory_leak = 0.03 s 5062s [2978/8505] Psych::TestParser#test_parse_io = 0.00 s 5062s [2979/8505] Psych::TestParser#test_bogus_io = 0.00 s 5062s [2980/8505] Psych::TestParser#test_syntax_error = 0.00 s 5062s [2981/8505] Psych::TestParser#test_external_encoding = 0.00 s 5062s [2982/8505] Psych::TestParser#test_scalar_with_tag = 0.00 s 5062s [2983/8505] Psych::TestParser#test_sequence_start_flow = 0.00 s 5062s [2984/8505] Psych::TestParser#test_sequence_start_anchor = 0.00 s 5062s [2985/8505] Psych::TestParser#test_mapping_start = 0.00 s 5062s [2986/8505] Psych::TestParser#test_mapping_anchor = 0.00 s 5062s [2987/8505] Psych::TestParser#test_filename = 0.00 s 5062s [2988/8505] Psych::TestParser#test_syntax_error_has_path_for_string = 0.00 s 5062s [2989/8505] Psych::TestParser#test_multiparse = 0.00 s 5062s [2990/8505] Psych::TestParser#test_sequence_start_block = 0.00 s 5062s [2991/8505] Psych::TestParser#test_start_stream = 0.00 s 5062s [2992/8505] TestCSVHeaders::DifferentOFS#test_builtin_symbol_converter = 0.01 s 5062s [2993/8505] TestCSVHeaders::DifferentOFS#test_builtin_symbol_converter_with_punctuation = 0.01 s 5062s [2994/8505] TestCSVHeaders::DifferentOFS#test_specified_empty = 0.00 s 5062s [2995/8505] TestCSVHeaders::DifferentOFS#test_table_support = 0.01 s 5062s [2996/8505] TestCSVHeaders::DifferentOFS#test_parse_empty = 0.00 s 5062s [2997/8505] TestCSVHeaders::DifferentOFS#test_return_headers = 0.00 s 5062s [2998/8505] TestCSVHeaders::DifferentOFS#test_blank_row = 0.00 s 5062s [2999/8505] TestCSVHeaders::DifferentOFS#test_parse_empty_line = 0.00 s 5062s [3000/8505] TestCSVHeaders::DifferentOFS#test_headers_reader = 0.00 s 5062s [3001/8505] TestCSVHeaders::DifferentOFS#test_specified_empty_line = 0.00 s 5062s [3002/8505] TestCSVHeaders::DifferentOFS#test_first_row = 0.01 s 5062s [3003/8505] TestCSVHeaders::DifferentOFS#test_custom_converter = 0.00 s 5062s [3004/8505] TestCSVHeaders::DifferentOFS#test_builtin_downcase_converter = 0.00 s 5062s [3005/8505] TestCSVHeaders::DifferentOFS#test_converters = 0.01 s 5062s [3006/8505] TestCSVHeaders::DifferentOFS#test_builtin_converters_with_blank_header = 0.00 s 5062s [3007/8505] TestCSVHeaders::DifferentOFS#test_skip_blanks = 0.01 s 5062s [3008/8505] TestCSVHeaders::DifferentOFS#test_csv_header_string = 0.01 s 5062s [3009/8505] TestCSVHeaders::DifferentOFS#test_csv_header_string_inherits_separators = 0.00 s 5062s [3010/8505] TestCSVHeaders::DifferentOFS#test_array_of_headers = 0.01 s 5062s [3011/8505] TestCSVHeaders::DifferentOFS#test_nil_row_header = 0.01 s 5062s [3012/8505] TestDigestRactor::TestSHA384Ractor#test_s_hexdigest = 0.00 s 5062s [3013/8505] TestCSVWriteGeneralGenerate::DifferentOFS#test_quote_lf_last = 0.00 s 5062s [3014/8505] TestCSVWriteGeneralGenerate::DifferentOFS#test_with_default_internal = 0.00 s 5062s [3015/8505] TestCSVWriteGeneralGenerate::DifferentOFS#test_cr_lf = 0.00 s 5062s [3016/8505] TestCSVWriteGeneralGenerate::DifferentOFS#test_quote = 0.00 s 5062s [3017/8505] TestCSVWriteGeneralGenerate::DifferentOFS#test_comma = 0.01 s 5062s [3018/8505] TestCSVWriteGeneralGenerate::DifferentOFS#test_nil_values_only = 0.00 s 5062s [3019/8505] TestCSVWriteGeneralGenerate::DifferentOFS#test_encoding_utf8 = 0.00 s 5062s [3020/8505] TestCSVWriteGeneralGenerate::DifferentOFS#test_cr_lf_lf = 0.00 s 5062s [3021/8505] TestCSVWriteGeneralGenerate::DifferentOFS#test_cr_lf_comma_nil = 0.00 s 5062s [3022/8505] TestCSVWriteGeneralGenerate::DifferentOFS#test_encoding_euc_jp = 0.00 s 5062s [3023/8505] TestCSVWriteGeneralGenerate::DifferentOFS#test_cr = 0.00 s 5062s [3024/8505] TestCSVWriteGeneralGenerate::DifferentOFS#test_quote_lf = 0.00 s 5062s [3025/8505] TestCSVWriteGeneralGenerate::DifferentOFS#test_one_element = 0.00 s 5062s [3026/8505] TestCSVWriteGeneralGenerate::DifferentOFS#test_quote_last = 0.00 s 5062s [3027/8505] TestCSVWriteGeneralGenerate::DifferentOFS#test_cr_lf_comma = 0.00 s 5062s [3028/8505] TestCSVWriteGeneralGenerate::DifferentOFS#test_tab = 0.00 s 5062s [3029/8505] TestCSVWriteGeneralGenerate::DifferentOFS#test_quote_character_double = 0.00 s 5062s [3030/8505] TestCSVWriteGeneralGenerate::DifferentOFS#test_nil_empty = 0.00 s 5062s [3031/8505] TestCSVWriteGeneralGenerate::DifferentOFS#test_nil_value_last = 0.00 s 5062s [3032/8505] TestCSVWriteGeneralGenerate::DifferentOFS#test_nil_value_first = 0.00 s 5062s [3033/8505] TestCSVWriteGeneralGenerate::DifferentOFS#test_nil_cr = 0.00 s 5062s [3034/8505] TestCSVWriteGeneralGenerate::DifferentOFS#test_semi_colon = 0.00 s 5062s [3035/8505] TestCSVWriteGeneralGenerate::DifferentOFS#test_nil_values = 0.00 s 5062s [3036/8505] TestCSVWriteGeneralGenerate::DifferentOFS#test_comma_double = 0.00 s 5062s [3037/8505] TestCSVWriteGeneralGenerate::DifferentOFS#test_col_sep = 0.00 s 5062s [3038/8505] TestCSVWriteGeneralGenerate::DifferentOFS#test_quote_lf_value_lf = 0.00 s 5062s [3039/8505] TestCSVWriteGeneralGenerate::DifferentOFS#test_tab_values = 0.00 s 5062s [3040/8505] TestCSVWriteGeneralGenerate::DifferentOFS#test_cr_dot_lf = 0.00 s 5062s [3041/8505] TestCSVWriteGeneralGenerate::DifferentOFS#test_quote_character = 0.00 s 5062s [3042/8505] TestCSVWriteGeneralGenerate::DifferentOFS#test_nil_value_middle = 0.00 s 5062s [3043/8505] TestCSVWriteGeneralGenerate::DifferentOFS#test_encoding_with_default_internal = 0.00 s 5062s [3044/8505] TestCSVWriteGeneralGenerate::DifferentOFS#test_row_sep = 0.00 s 5062s [3045/8505] TestCSVWriteGeneralGenerate::DifferentOFS#test_nil_double_only = 0.00 s 5062s [3046/8505] TestCSVWriteGeneralGenerate::DifferentOFS#test_values = 0.00 s 5062s [3047/8505] TestCSVWriteGeneralGenerate::DifferentOFS#test_force_quotes = 0.00 s 5062s [3048/8505] TestCSVWriteGeneralGenerate::DifferentOFS#test_quote_lf_value_lf_nil = 0.00 s 5062s [3049/8505] TestCSVWriteGeneralGenerate::DifferentOFS#test_comma_and_value = 0.00 s 5062s [3050/8505] TestCSVWriteGeneralGenerate::DifferentOFS#test_quote_cr = 0.00 s 5062s [3051/8505] TestCSVWriteGeneralGenerate::DifferentOFS#test_semi_colon_values = 0.00 s 5062s [3052/8505] TestCSVWriteGeneralGenerate::DifferentOFS#test_lf = 0.00 s 5062s [3053/8505] TestCSVWriteGeneralGenerate::DifferentOFS#test_cr_lf_cr = 0.00 s 5062s [3054/8505] TestTmpdir#test_world_writable = 0.04 s 5062s [3055/8505] TestTmpdir#test_mktmpdir_traversal = 0.01 s 5062s [3056/8505] TestTmpdir#test_mktmpdir_mutate = 0.01 s 5062s [3057/8505] TestTmpdir#test_mktmpdir_nil = 0.00 s 5062s [3058/8505] TestTmpdir#test_tmpdir_modifiable = 0.00 s 5062s [3059/8505] TestTmpdir#test_mktmpdir_traversal_array = 0.00 s 5062s [3060/8505] TestFind#test_dangling_symlink = 0.01 s 5062s [3061/8505] TestFind#test_change_dir_to_file = 0.01 s 5062s [3062/8505] TestFind#test_relative = 0.00 s 5062s [3063/8505] TestFind#test_encoding_ascii = 0.01 s 5062s [3064/8505] TestFind#test_to_path = 0.00 s 5062s [3065/8505] TestFind#test_countdown3 = 0.01 s 5062s [3066/8505] TestFind#test_enumerator = 0.00 s 5062s [3067/8505] TestFind#test_prune = 0.01 s 5062s [3068/8505] TestFind#test_countup3 = 0.01 s 5062s [3069/8505] TestFind#test_unreadable_dir = 0.01 s 5062s [3070/8505] TestFind#test_nonexistence = 0.00 s 5062s [3071/8505] TestFind#test_change_dir_to_symlink_loop = 0.01 s 5062s [3072/8505] TestFind#test_dangling_symlink_stat_error = 0.00 s 5062s [3073/8505] TestFind#test_rec = 0.00 s 5062s [3074/8505] TestFind#test_empty = 0.00 s 5062s [3075/8505] TestFind#test_dont_follow_symlink = 0.00 s 5062s [3076/8505] TestRDocMethodAttr#test_output_name = 0.05 s 5063s [3077/8505] TestRDocMethodAttr#test_is_alias_for = 0.04 s 5063s [3078/8505] TestRDocMethodAttr#test_pretty_print = 0.05 s 5063s [3079/8505] TestRDocMethodAttr#test_initialize_copy = 0.04 s 5063s [3080/8505] TestRDocMethodAttr#test_block_params_equal = 0.04 s 5063s [3081/8505] TestRDocMethodAttr#test_full_name = 0.13 s 5063s [3082/8505] TestRDocMethodAttr#test_spaceship = 0.05 s 5063s [3083/8505] TestRDocMethodAttr#test_search_record = 0.04 s 5063s [3084/8505] TestRDocMethodAttr#test_to_s = 0.04 s 5063s [3085/8505] TestRDocMethodAttr#test_find_method_or_attribute_recursive = 0.03 s 5063s [3086/8505] TestRDocMethodAttr#test_equals2 = 0.04 s 5063s [3087/8505] OpenSSL::TestOCSP#test_certificate_id_issuer_name_hash = 0.02 s 5063s [3088/8505] OpenSSL::TestOCSP#test_certificate_id_hash_algorithm = 0.02 s 5063s [3089/8505] OpenSSL::TestOCSP#test_response_dup = 0.02 s 5063s [3090/8505] OpenSSL::TestOCSP#test_certificate_id_dup = 0.01 s 5063s [3091/8505] OpenSSL::TestOCSP#test_request_dup = 0.01 s 5063s [3092/8505] OpenSSL::TestOCSP#test_request_nonce = 0.01 s 5063s [3093/8505] OpenSSL::TestOCSP#test_request_sign_verify = 0.03 s 5063s [3094/8505] OpenSSL::TestOCSP#test_basic_response_der = 0.03 s 5063s [3095/8505] OpenSSL::TestOCSP#test_single_response_check_validity = 0.02 s 5063s [3096/8505] OpenSSL::TestOCSP#test_single_response_der = 0.01 s 5063s [3097/8505] OpenSSL::TestOCSP#test_response_der = 0.01 s 5063s [3098/8505] OpenSSL::TestOCSP#test_response = 0.01 s 5063s [3099/8505] OpenSSL::TestOCSP#test_certificate_id_der = 0.01 s 5063s [3100/8505] OpenSSL::TestOCSP#test_basic_response_response_operations = 0.01 s 5063s [3101/8505] OpenSSL::TestOCSP#test_certificate_id_issuer_key_hash = 0.01 s 5063s [3102/8505] OpenSSL::TestOCSP#test_basic_response_dup = 0.02 s 5063s [3103/8505] TestNetHTTPPartialResponse#test_partial_response = 0.06 s 5063s [3104/8505] Psych::TestDocument#test_parse_version = 0.00 s 5063s [3105/8505] Psych::TestDocument#test_emit_bad_tag = 0.00 s 5063s [3106/8505] Psych::TestDocument#test_emit_version = 0.00 s 5063s [3107/8505] Psych::TestDocument#test_emit_tag = 0.00 s 5063s [3108/8505] Psych::TestDocument#test_emit_multitag = 0.00 s 5063s [3109/8505] TestBigDecimalUtil#test_Integer_to_d = 0.01 s 5063s [3110/8505] TestBigDecimalUtil#test_Float_to_d_without_precision = 0.00 s 5063s [3111/8505] TestBigDecimalUtil#test_Rational_to_d_with_negative_precision = 0.00 s 5063s [3112/8505] TestBigDecimalUtil#test_Rational_to_d = 0.00 s 5063s [3113/8505] TestBigDecimalUtil#test_Complex_to_d = 0.01 s 5063s [3114/8505] TestBigDecimalUtil#test_String_to_d = 0.01 s 5063s [3115/8505] TestBigDecimalUtil#test_invalid_String_to_d = 0.00 s 5063s [3116/8505] TestBigDecimalUtil#test_Nil_to_d = 0.00 s 5063s [3117/8505] TestBigDecimalUtil#test_Float_to_d_bug13331 = 0.00 s 5063s [3118/8505] TestBigDecimalUtil#test_BigDecimal_to_d = 0.00 s 5063s [3119/8505] TestBigDecimalUtil#test_Float_to_d_with_precision = 0.00 s 5063s [3120/8505] TestBigDecimalUtil#test_Float_to_d_issue_192 = 0.00 s 5063s [3121/8505] TestBigDecimalUtil#test_Rational_to_d_with_zero_precision = 0.00 s 5063s [3122/8505] TestCSVHeaders#test_builtin_symbol_converter = 0.00 s 5063s [3123/8505] TestCSVHeaders#test_builtin_symbol_converter_with_punctuation = 0.00 s 5063s [3124/8505] TestCSVHeaders#test_specified_empty = 0.00 s 5063s [3125/8505] TestCSVHeaders#test_table_support = 0.00 s 5063s [3126/8505] TestCSVHeaders#test_parse_empty = 0.00 s 5063s [3127/8505] TestCSVHeaders#test_return_headers = 0.01 s 5063s [3128/8505] TestCSVHeaders#test_blank_row = 0.01 s 5063s [3129/8505] TestCSVHeaders#test_parse_empty_line = 0.00 s 5063s [3130/8505] TestCSVHeaders#test_headers_reader = 0.01 s 5063s [3131/8505] TestCSVHeaders#test_specified_empty_line = 0.00 s 5063s [3132/8505] TestCSVHeaders#test_first_row = 0.02 s 5063s [3133/8505] TestCSVHeaders#test_custom_converter = 0.01 s 5063s [3134/8505] TestCSVHeaders#test_builtin_downcase_converter = 0.01 s 5063s [3135/8505] TestCSVHeaders#test_converters = 0.01 s 5063s [3136/8505] TestCSVHeaders#test_builtin_converters_with_blank_header = 0.00 s 5063s [3137/8505] TestCSVHeaders#test_skip_blanks = 0.01 s 5064s [3138/8505] TestCSVHeaders#test_csv_header_string = 0.02 s 5064s [3139/8505] TestCSVHeaders#test_csv_header_string_inherits_separators = 0.01 s 5064s [3140/8505] TestCSVHeaders#test_array_of_headers = 0.01 s 5064s [3141/8505] TestCSVHeaders#test_nil_row_header = 0.00 s 5064s [3142/8505] TestDigestRactor::TestSHA1Ractor#test_s_hexdigest = 0.00 s 5064s [3143/8505] CGICoreTest#test_cgi_core_out = 0.04 s 5064s [3144/8505] CGICoreTest#test_cgi_core_environs = 0.01 s 5064s [3145/8505] CGICoreTest#test_cgi_parse_illegal_query = 0.00 s 5064s [3146/8505] CGICoreTest#test_cgi_core_print = 0.00 s 5064s [3147/8505] CGICoreTest#test_cgi_core_htmltype_header = 0.01 s 5064s [3148/8505] CGICoreTest#test_cgi_core_params_GET = 0.00 s 5064s [3149/8505] CGICoreTest#test_cgi_core_params_POST = 0.00 s 5064s [3150/8505] CGICoreTest#test_cgi_core_params_encoding_check = 0.00 s 5064s [3151/8505] CGICoreTest#test_cgi_core_cookie = 0.00 s 5064s [3152/8505] Reline::Config::Test#test_bind_key = 0.01 s 5064s [3153/8505] Reline::Config::Test#test_inputrc_with_utf8 = 0.03 s 5064s [3154/8505] Reline::Config::Test#test_string_value_with_brackets = 0.00 s 5064s [3155/8505] Reline::Config::Test#test_encoding_is_ascii = 0.01 s 5064s [3156/8505] Reline::Config::Test#test_inputrc = 0.01 s 5064s [3157/8505] Reline::Config::Test#test_encoding_is_not_ascii = 0.01 s 5064s [3158/8505] Reline::Config::Test#test_unclosed_if = 0.01 s 5064s [3159/8505] Reline::Config::Test#test_relative_xdg_config_home = 0.01 s 5064s [3160/8505] Reline::Config::Test#test_bind_key_with_macro = 0.01 s 5064s [3161/8505] Reline::Config::Test#test_empty_inputrc_env = 0.00 s 5064s [3162/8505] Reline::Config::Test#test_comment_line = 0.01 s 5064s [3163/8505] Reline::Config::Test#test_default_key_bindings = 0.01 s 5064s [3164/8505] Reline::Config::Test#test_string_value_with_parens = 0.01 s 5064s [3165/8505] Reline::Config::Test#test_inputrc_with_eucjp = 0.00 s 5064s [3166/8505] Reline::Config::Test#test_bind_key_with_hexadecimal_number = 0.00 s 5064s [3167/8505] Reline::Config::Test#test_invalid_keystroke = 0.00 s 5064s [3168/8505] Reline::Config::Test#test_string_value_with_parens_and_quotes = 0.00 s 5064s [3169/8505] Reline::Config::Test#test_bind_key_with_meta_chars = 0.00 s 5064s [3170/8505] Reline::Config::Test#test_if = 0.01 s 5064s [3171/8505] Reline::Config::Test#test_if_with_false = 0.00 s 5064s [3172/8505] Reline::Config::Test#test_bind_key_with_ctrl_chars = 0.00 s 5064s [3173/8505] Reline::Config::Test#test_string_value = 0.00 s 5064s [3174/8505] Reline::Config::Test#test_additional_key_bindings_with_nesting_and_comment_out = 0.00 s 5064s [3175/8505] Reline::Config::Test#test_additional_key_bindings = 0.00 s 5064s [3176/8505] Reline::Config::Test#test_additional_key_bindings_for_other_keymap = 0.00 s 5064s [3177/8505] Reline::Config::Test#test_xdg_config_home = 0.00 s 5064s [3178/8505] Reline::Config::Test#test_unmatched_else = 0.00 s 5064s [3179/8505] Reline::Config::Test#test_unmatched_endif = 0.00 s 5064s [3180/8505] Reline::Config::Test#test_if_with_indent = 0.00 s 5064s [3181/8505] Reline::Config::Test#test_empty_inputrc = 0.00 s 5064s [3182/8505] Reline::Config::Test#test_history_size = 0.01 s 5064s [3183/8505] Reline::Config::Test#test_empty_xdg_config_home = 0.01 s 5064s [3184/8505] Reline::Config::Test#test_string_value_with_brackets_and_quotes = 0.00 s 5064s [3185/8505] Reline::Config::Test#test_bind_key_with_octal_number = 0.00 s 5064s [3186/8505] Reline::Config::Test#test_read_lines_with_variable = 0.00 s 5064s [3187/8505] Reline::Config::Test#test_read_lines = 0.01 s 5064s [3188/8505] Reline::Config::Test#test_include = 0.01 s 5064s [3189/8505] Reline::Config::Test#test_bind_key_with_escaped_chars = 0.01 s 5064s [3190/8505] Rinda::TupleSpaceProxyTest#test_symbol_tuple = 0.04 s 5075s [3191/8505] Rinda::TupleSpaceProxyTest#test_take_bug_8215 = 11.37 s 5075s [3192/8505] Rinda::TupleSpaceProxyTest#test_00_tuple = 0.00 s 5075s [3193/8505] Rinda::TupleSpaceProxyTest#test_cancel_01 = 0.12 s 5075s [3194/8505] Rinda::TupleSpaceProxyTest#test_00_renewer = 0.01 s 5075s [3195/8505] Rinda::TupleSpaceProxyTest#test_cancel_02 = 0.01 s 5075s [3196/8505] Rinda::TupleSpaceProxyTest#test_00_DRbObject = 0.02 s 5076s [3197/8505] Rinda::TupleSpaceProxyTest#test_ruby_talk_264062 = 0.23 s 5076s [3198/8505] Rinda::TupleSpaceProxyTest#test_inp_rdp = 0.00 s 5076s [3199/8505] TestStringScannerRactor#test_ractor = 0.00 s 5076s [3200/8505] TestShellwords#test_unmatched_quotes = 0.00 s 5076s [3201/8505] TestShellwords#test_whitespace = 0.01 s 5076s [3202/8505] TestShellwords#test_unmatched_double_quote = 0.00 s 5076s [3203/8505] TestShellwords#test_shellescape = 0.00 s 5076s [3204/8505] TestShellwords#test_shellwords = 0.00 s 5076s [3205/8505] TestShellwords#test_frozenness = 0.01 s 5076s [3206/8505] TestShellwords#test_backslashes = 0.00 s 5076s [3207/8505] TestShellwords#test_multibyte_characters = 0.00 s 5076s [3208/8505] TestShellwords#test_unmatched_single_quote = 0.00 s 5076s [3209/8505] TestTimeExtension#test_strptime_empty = 0.01 s 5076s [3210/8505] TestTimeExtension#test_rfc2822 = 0.01 s 5076s [3211/8505] TestTimeExtension#test_strptime_wuvg = 0.00 s 5076s [3212/8505] TestTimeExtension#test_strptime_s_z = 0.00 s 5076s [3213/8505] TestTimeExtension#test_iso8601_nsec = 0.00 s 5076s [3214/8505] TestTimeExtension#test_parse_fraction = 0.00 s 5076s [3215/8505] TestTimeExtension#test_xmlschema_leap_second = 0.01 s 5076s [3216/8505] TestTimeExtension#test_xmlschema_alias = 0.00 s 5076s [3217/8505] TestTimeExtension#test_ruby_talk_152866 = 0.00 s 5076s [3218/8505] TestTimeExtension#test_rfc2822_utc_roundtrip_summer = 0.00 s 5076s [3219/8505] TestTimeExtension#test_strptime = 0.00 s 5076s [3220/8505] TestTimeExtension#test_parse_offset_hour_minute_second = 0.00 s 5076s [3221/8505] TestTimeExtension#test_completion = 0.00 s 5076s [3222/8505] TestTimeExtension#test_encode_rfc2822 = 0.00 s 5076s [3223/8505] TestTimeExtension#test_rfc2616 = 0.00 s 5076s [3224/8505] TestTimeExtension#test_xmlschema = 0.00 s 5076s [3225/8505] TestTimeExtension#test_encode_httpdate = 0.00 s 5076s [3226/8505] TestTimeExtension#test_iso8601_alias = 0.01 s 5076s [3227/8505] TestTimeExtension#test_iso8601 = 0.02 s 5076s [3228/8505] TestTimeExtension#test_rfc822 = 0.00 s 5076s [3229/8505] TestTimeExtension#test_parse_with_various_object = 0.02 s 5076s [3230/8505] TestTimeExtension#test_iso8601_leap_second = 0.01 s 5076s [3231/8505] TestTimeExtension#test_xmlschema_fraction = 0.00 s 5076s [3232/8505] TestTimeExtension#test_rfc2822_leap_second = 0.00 s 5076s [3233/8505] TestTimeExtension#test_iso8601_fraction = 0.01 s 5076s [3234/8505] TestTimeExtension#test_xmlschema_nsec = 0.00 s 5076s [3235/8505] TestTimeExtension#test_strptime_Ymd_z = 0.00 s 5076s [3236/8505] TestTimeExtension#test_strptime_p = 0.00 s 5076s [3237/8505] TestTimeExtension#test_rfc2822_utc_roundtrip_winter = 0.00 s 5081s [3238/8505] TestTimeExtension#test_huge_precision = 4.64 s 5081s [3239/8505] TestTimeExtension#test_nsec = 0.01 s 5081s [3240/8505] TestTimeExtension#test_parse_now_nil = 0.00 s 5081s [3241/8505] TestTimeExtension#test_invalid = 0.02 s 5081s [3242/8505] TestTimeExtension#test_strptime_j = 0.00 s 5081s [3243/8505] TestTimeExtension#test_parse_leap_second = 0.00 s 5081s [3244/8505] HTTPSProxyTest#test_https_proxy_authentication = 0.01 s 5081s [3245/8505] JSONStringMatchingTest#test_match_date = 0.00 s 5081s [3246/8505] TestLoggerSeverity#test_level_assignment = 0.01 s 5081s [3247/8505] TestLoggerSeverity#test_enum = 0.00 s 5081s [3248/8505] TestCSVWriteQuoteEmptyGenerate::DifferentOFS#test_empty_only_false = 0.01 s 5081s [3249/8505] TestCSVWriteQuoteEmptyGenerate::DifferentOFS#test_empty_default = 0.00 s 5081s [3250/8505] TestCSVWriteQuoteEmptyGenerate::DifferentOFS#test_quote_empty_default = 0.00 s 5081s [3251/8505] TestCSVWriteQuoteEmptyGenerate::DifferentOFS#test_empty_double_default = 0.00 s 5081s [3252/8505] TestCSVWriteQuoteEmptyGenerate::DifferentOFS#test_empty_false = 0.00 s 5081s [3253/8505] TestCSVWriteQuoteEmptyGenerate::DifferentOFS#test_quote_empty_false = 0.00 s 5081s [3254/8505] TestCSVWriteQuoteEmptyGenerate::DifferentOFS#test_empty_double_false = 0.00 s 5081s [3255/8505] TestCSVWriteQuoteEmptyGenerate::DifferentOFS#test_empty_only_default = 0.00 s 5081s [3256/8505] OpenSSL::TestDigest#test_openssl_digest = 0.00 s 5081s [3257/8505] OpenSSL::TestDigest#test_dup = 0.01 s 5081s [3258/8505] OpenSSL::TestDigest#test_eql = 0.00 s 5081s [3259/8505] OpenSSL::TestDigest#test_digest = 0.00 s 5081s [3260/8505] OpenSSL::TestDigest#test_reset = 0.00 s 5081s [3261/8505] OpenSSL::TestDigest#test_digest_by_oid_and_name = 0.00 s 5081s [3262/8505] OpenSSL::TestDigest#test_digest_by_oid_and_name_sha2 = 0.00 s 5081s [3263/8505] OpenSSL::TestDigest#test_info = 0.00 s 5081s [3264/8505] OpenSSL::TestDigest#test_sha2 = 0.00 s 5081s [3265/8505] OpenSSL::TestDigest#test_digest_constants = 0.00 s 5081s [3266/8505] Psych::TestNumeric#test_big_decimal_round_trip = 0.01 s 5081s [3267/8505] Psych::TestNumeric#test_does_not_attempt_numeric = 0.00 s 5081s [3268/8505] Psych::TestNumeric#test_non_float_with_0 = 0.00 s 5081s [3269/8505] Psych::TestNumeric#test_load_float_with_dot = 0.00 s 5081s [3270/8505] Psych::TestNumeric#test_string_with_commas = 0.00 s 5081s [3271/8505] Psych::TestNumeric#test_string_with_commas_with_strict_integer = 0.00 s 5081s [3272/8505] Psych::TestNumeric#test_big_decimal_tag = 0.03 s 5081s [3273/8505] TestRDocGeneratorPOTPOEntry#test_references_multiple = 0.01 s 5081s [3274/8505] TestRDocGeneratorPOTPOEntry#test_references_normal = 0.01 s 5081s [3275/8505] TestRDocGeneratorPOTPOEntry#test_extracted_comment_normal = 0.00 s 5081s [3276/8505] TestRDocGeneratorPOTPOEntry#test_translator_comment_multiple_lines = 0.00 s 5081s [3277/8505] TestRDocGeneratorPOTPOEntry#test_msgid_back_slash = 0.00 s 5081s [3278/8505] TestRDocGeneratorPOTPOEntry#test_translator_comment_normal = 0.00 s 5081s [3279/8505] TestRDocGeneratorPOTPOEntry#test_msgid_multiple_lines = 0.00 s 5081s [3280/8505] TestRDocGeneratorPOTPOEntry#test_flags_multiple = 0.00 s 5081s [3281/8505] TestRDocGeneratorPOTPOEntry#test_msgid_normal = 0.00 s 5081s [3282/8505] TestRDocGeneratorPOTPOEntry#test_msgid_double_quote = 0.00 s 5081s [3283/8505] TestRDocGeneratorPOTPOEntry#test_extracted_comment_multiple_lines = 0.00 s 5081s [3284/8505] TestRDocGeneratorPOTPOEntry#test_flags_normal = 0.00 s 5081s [3285/8505] TestRDocGeneratorPOTPOEntry#test_full = 0.00 s 5081s [3286/8505] TestRDocGeneratorPOTPOEntry#test_msgid_tab = 0.00 s 5081s [3287/8505] TestAbbrev#test_abbrev = 0.01 s 5081s [3288/8505] TestAbbrev#test_abbrev_lf = 0.00 s 5081s [3289/8505] TestCSVParseLiberalParsing::TestBackslashQuote::DifferentOFS#test_quoted_value = 0.01 s 5081s [3290/8505] TestCSVParseLiberalParsing::TestBackslashQuote::DifferentOFS#test_double_quote_outside_quote = 0.01 s 5081s [3291/8505] TestCSVParseLiberalParsing::TestBackslashQuote::DifferentOFS#test_unquoted_value_multiple_characters_col_sep = 0.00 s 5081s [3292/8505] TestCSVParseLiberalParsing::TestBackslashQuote::DifferentOFS#test_unquoted_value = 0.00 s 5081s [3293/8505] TestBenchmark#test_bm_can_make_extra_calcultations_with_an_array_at_the_end_of_the_benchmark = 0.03 s 5082s [3294/8505] TestBenchmark#test_realtime_output = 1.00 s 5082s [3295/8505] TestBenchmark#test_bmbm_correctly_output_when_the_label_width_is_given__bmbm_ignore_it__but_it_is_a_frequent_mistake = 0.02 s 5082s [3296/8505] TestBenchmark#test_benchmark_makes_extra_calculations_with_an_Array_at_the_end_of_the_benchmark_and_show_the_result = 0.02 s 5082s [3297/8505] TestBenchmark#test_bm_returns_an_Array_of_the_times_with_the_labels = 0.02 s 5082s [3298/8505] TestBenchmark#test_bmbm_correctly_guess_the_label_width_even_when_not_given = 0.00 s 5082s [3299/8505] TestBenchmark#test_bugs_ruby_dev_40906_can_add_in_place_the_time_of_execution_of_the_block_given = 0.10 s 5082s [3300/8505] TestBenchmark#test_benchmark_does_not_print_any_space_if_the_given_caption_is_empty = 0.00 s 5082s [3301/8505] TestBenchmark#test_tms_to_h = 0.00 s 5082s [3302/8505] TestBenchmark#test_report_item_shows_the_title__even_if_not_a_string = 0.01 s 5082s [3303/8505] TestBenchmark#test_tms_outputs_nicely = 0.00 s 5082s [3304/8505] TestBenchmark#test_tms_wont_modify_the_format_String_given = 0.00 s 5082s [3305/8505] TestBenchmark#test_bm_correctly_output_when_the_label_width_is_given = 0.00 s 5082s [3306/8505] TestBenchmark#test_bm_correctly_output_when_no_label_is_given = 0.04 s 5082s [3307/8505] Rinda::TupleSpaceTest#test_symbol_tuple = 0.01 s 5082s [3308/8505] Rinda::TupleSpaceTest#test_00_tuple = 0.01 s 5082s [3309/8505] Rinda::TupleSpaceTest#test_cancel_01 = 0.11 s 5082s [3310/8505] Rinda::TupleSpaceTest#test_core_01 = 0.11 s 5082s [3311/8505] Rinda::TupleSpaceTest#test_core_02 = 0.11 s 5082s [3312/8505] Rinda::TupleSpaceTest#test_00_renewer = 0.01 s 5083s [3313/8505] Rinda::TupleSpaceTest#test_cancel_02 = 0.11 s 5083s [3314/8505] Rinda::TupleSpaceTest#test_00_DRbObject = 0.01 s 5083s [3315/8505] Rinda::TupleSpaceTest#test_ruby_talk_264062 = 0.02 s 5083s [3316/8505] Rinda::TupleSpaceTest#test_00_template = 0.01 s 5083s [3317/8505] Rinda::TupleSpaceTest#test_core_03_notify = 0.05 s 5083s [3318/8505] Rinda::TupleSpaceTest#test_inp_rdp = 0.01 s 5083s [3319/8505] TestRDocParserC#test_handle_method_args_minus_1 = 0.02 s 5083s [3320/8505] TestRDocParserC#test_handle_method_args_1 = 0.04 s 5083s [3321/8505] TestRDocParserC#test_do_attr_rb_attr = 0.02 s 5083s [3322/8505] TestRDocParserC#test_do_classes_class_under = 0.03 s 5083s [3323/8505] TestRDocParserC#test_find_class_comment_init = 0.00 s 5083s [3324/8505] TestRDocParserC#test_do_classes_class = 0.00 s 5083s [3325/8505] TestRDocParserC#test_define_method = 0.01 s 5083s [3326/8505] TestRDocParserC#test_do_constants = 0.03 s 5083s [3327/8505] TestRDocParserC#test_find_class_comment_define_class = 0.00 s 5083s [3328/8505] TestRDocParserC#test_load_variable_map_trim = 0.00 s 5083s [3329/8505] TestRDocParserC#test_find_body_document_method = 0.01 s 5083s [3330/8505] TestRDocParserC#test_do_aliases_missing_class = 0.01 s 5083s [3331/8505] TestRDocParserC#test_find_class_comment_define_class_bogus_comment = 0.00 s 5083s [3332/8505] TestRDocParserC#test_find_body_document_method_same = 0.01 s 5083s [3333/8505] TestRDocParserC#test_do_methods_in_y = 0.01 s 5083s [3334/8505] TestRDocParserC#test_find_body_define_comment = 0.01 s 5083s [3335/8505] TestRDocParserC#test_find_attr_comment_document_attr = 0.00 s 5083s [3336/8505] TestRDocParserC#test_find_body_macro = 0.02 s 5083s [3337/8505] TestRDocParserC#test_do_methods_in_c = 0.01 s 5083s [3338/8505] TestRDocParserC#test_find_const_comment_document_const = 0.01 s 5083s [3339/8505] TestRDocParserC#test_scan_order_dependent = 0.01 s 5083s [3340/8505] TestRDocParserC#test_do_attr_rb_define_attr = 0.00 s 5083s [3341/8505] TestRDocParserC#test_load_variable_map_legacy = 0.00 s 5083s [3342/8505] TestRDocParserC#test_rb_scan_args = 0.01 s 5083s [3343/8505] TestRDocParserC#test_define_method_private_singleton = 0.00 s 5083s [3344/8505] TestRDocParserC#test_class_can_parse = 0.01 s 5083s [3345/8505] TestRDocParserC#test_markup_format_override = 0.00 s 5083s [3346/8505] TestRDocParserC#test_do_classes_module = 0.00 s 5083s [3347/8505] TestRDocParserC#test_handle_method_initialize = 0.00 s 5083s [3348/8505] TestRDocParserC#test_do_classes_module_under = 0.01 s 5083s [3349/8505] TestRDocParserC#test_find_class_comment_define_class_Init_Foo_no_void = 0.00 s 5083s [3350/8505] TestRDocParserC#test_find_body_define = 0.00 s 5083s [3351/8505] TestRDocParserC#test_do_classes_class_under_rb_path2class = 0.00 s 5083s [3352/8505] TestRDocParserC#test_define_method_private = 0.00 s 5083s [3353/8505] TestRDocParserC#test_do_constants_curses = 0.01 s 5083s [3354/8505] TestRDocParserC#test_do_constants_file = 0.00 s 5083s [3355/8505] TestRDocParserC#test_define_method_with_prototype = 0.00 s 5083s [3356/8505] TestRDocParserC#test_find_body_2 = 0.01 s 5083s [3357/8505] TestRDocParserC#test_do_includes = 0.00 s 5083s [3358/8505] TestRDocParserC#test_define_method_dynamically = 0.00 s 5083s [3359/8505] TestRDocParserC#test_scan = 0.01 s 5083s [3360/8505] TestRDocParserC#test_find_body = 0.00 s 5083s [3361/8505] TestRDocParserC#test_find_modifiers_yields = 0.00 s 5083s [3362/8505] TestRDocParserC#test_find_class_comment = 0.00 s 5083s [3363/8505] TestRDocParserC#test_do_methods_in_cpp = 0.00 s 5083s [3364/8505] TestRDocParserC#test_define_method_singleton = 0.01 s 5083s [3365/8505] TestRDocParserC#test_find_class_comment_define_class_under_Init = 0.00 s 5083s [3366/8505] TestRDocParserC#test_find_body_cast = 0.00 s 5083s [3367/8505] TestRDocParserC#test_find_const_comment_document_const_full_name = 0.00 s 5083s [3368/8505] TestRDocParserC#test_handle_singleton = 0.00 s 5083s [3369/8505] TestRDocParserC#test_do_missing_cycle = 0.01 s 5083s [3370/8505] TestRDocParserC#test_do_methods_singleton_class = 0.00 s 5083s [3371/8505] TestRDocParserC#test_do_classes_struct = 0.00 s 5083s [3372/8505] TestRDocParserC#test_initialize = 0.00 s 5083s [3373/8505] TestRDocParserC#test_find_modifiers_nodoc = 0.00 s 5083s [3374/8505] TestRDocParserC#test_find_modifiers_call_seq = 0.01 s 5083s [3375/8505] TestRDocParserC#test_do_aliases_singleton = 0.01 s 5083s [3376/8505] TestRDocParserC#test_scan_method_copy = 0.02 s 5083s [3377/8505] TestRDocParserC#test_find_alias_comment = 0.00 s 5083s [3378/8505] TestRDocParserC#test_load_variable_map_singleton = 0.00 s 5083s [3379/8505] TestRDocParserC#test_do_classes_singleton = 0.00 s 5083s [3380/8505] TestRDocParserC#test_do_attr_rb_attr_2 = 0.01 s 5083s [3381/8505] TestRDocParserC#test_find_body_document_method_equals = 0.01 s 5083s [3382/8505] TestRDocParserC#test_find_attr_comment_document_attr_oneline = 0.00 s 5083s [3383/8505] TestRDocParserC#test_find_const_comment_rb_define = 0.00 s 5083s [3384/8505] TestRDocParserC#test_define_method_with_category = 0.00 s 5083s [3385/8505] TestRDocParserC#test_find_attr_comment_document_attr_overlap = 0.00 s 5083s [3386/8505] TestRDocParserC#test_do_classes_duplicate_class = 0.01 s 5083s [3387/8505] TestRDocParserC#test_find_class_comment_define_class_Init_Foo = 0.00 s 5083s [3388/8505] TestRDocParserC#test_do_aliases = 0.00 s 5083s [3389/8505] TestRDocParserC#test_handle_method_args_2 = 0.01 s 5083s [3390/8505] TestRDocParserC#test_handle_method_args_minus_2 = 0.00 s 5083s [3391/8505] TestRDocParserC#test_load_variable_map = 0.00 s 5083s [3392/8505] TestRDocParserC#test_handle_method_args_0 = 0.00 s 5083s [3393/8505] TestRDocParserC#test_load_variable_map_empty = 0.00 s 5083s [3394/8505] TestRDocParserC#test_markup_format_default = 0.00 s 5083s [3395/8505] TestRDocParserC#test_find_class_comment_define_class_under = 0.00 s 5083s [3396/8505] TestRDocParserC#test_look_for_directives_in = 0.00 s 5083s [3397/8505] TestRDocParserC#test_do_missing = 0.01 s 5083s [3398/8505] HTTPResponseTest#test_allow_empty_reason_code = 0.00 s 5083s [3399/8505] HTTPResponseTest#test_read_body_content_encoding_deflate_content_range = 0.04 s 5083s [3400/8505] HTTPResponseTest#test_read_body_body_encoding_true_with_utf8_meta_content_charset = 0.07 s 5083s [3401/8505] HTTPResponseTest#test_singleline_header = 0.00 s 5083s [3402/8505] HTTPResponseTest#test_ensure_zero_space_does_not_regress = 0.00 s 5083s [3403/8505] HTTPResponseTest#test_read_body_body_encoding_true_with_iso8859_1_meta_charset = 0.01 s 5083s [3404/8505] HTTPResponseTest#test_read_body_content_encoding_deflate_disabled = 0.00 s 5083s [3405/8505] HTTPResponseTest#test_read_body = 0.00 s 5083s [3406/8505] HTTPResponseTest#test_raises_exception_with_missing_reason = 0.00 s 5083s [3407/8505] HTTPResponseTest#test_read_body_block_mod = 0.05 s 5083s [3408/8505] HTTPResponseTest#test_read_body_string = 0.01 s 5083s [3409/8505] HTTPResponseTest#test_uri_equals = 0.00 s 5083s [3410/8505] HTTPResponseTest#test_read_body_body_encoding_string = 0.00 s 5083s [3411/8505] HTTPResponseTest#test_inspect_response = 0.01 s 5083s [3412/8505] HTTPResponseTest#test_read_body_block = 0.00 s 5083s [3413/8505] HTTPResponseTest#test_multiline_header = 0.00 s 5083s [3414/8505] HTTPResponseTest#test_read_code_type = 0.00 s 5083s [3415/8505] HTTPResponseTest#test_read_body_body_encoding_true_with_utf8_meta_charset = 0.00 s 5083s [3416/8505] HTTPResponseTest#test_allow_trailing_space_after_status = 0.00 s 5083s [3417/8505] HTTPResponseTest#test_read_body_body_encoding_true_with_iso_8859_1_content_type_header = 0.00 s 5083s [3418/8505] HTTPResponseTest#test_read_body_content_encoding_deflate_empty_body = 0.00 s 5083s [3419/8505] HTTPResponseTest#test_read_body_content_encoding_deflate_uppercase = 0.01 s 5083s [3420/8505] HTTPResponseTest#test_read_body_body_encoding_true_with_utf8_content_type_header = 0.00 s 5083s [3421/8505] HTTPResponseTest#test_read_body_content_encoding_deflate_empty_body_no_length = 0.00 s 5083s [3422/8505] HTTPResponseTest#test_read_body_body_encoding_encoding = 0.00 s 5083s [3423/8505] HTTPResponseTest#test_normal_status_line = 0.00 s 5084s [3424/8505] HTTPResponseTest#test_read_body_body_encoding_true_with_iso8859_1_meta_content_charset = 0.01 s 5084s [3425/8505] TestPathnameRactor#test_ractor_shareable = 0.00 s 5084s [3426/8505] TestRipper::ParserEvents#test_hshptn = 0.01 s 5084s [3427/8505] TestRipper::ParserEvents#test_mrhs_new_from_args = 0.01 s 5084s [3428/8505] TestRipper::ParserEvents#test_method_add_arg = 0.01 s 5084s [3429/8505] TestRipper::ParserEvents#test_binary(>) = 0.00 s 5084s [3430/8505] TestRipper::ParserEvents#test_assoc_new = 0.00 s 5084s [3431/8505] TestRipper::ParserEvents#test_else = 0.00 s 5084s [3432/8505] TestRipper::ParserEvents#test_symbol_literal = 0.00 s 5084s [3433/8505] TestRipper::ParserEvents#test_fcall = 0.00 s 5084s [3434/8505] TestRipper::ParserEvents#test_arg_ambiguous = 0.00 s 5084s [3435/8505] TestRipper::ParserEvents#test_qsymbols_new = 0.00 s 5084s [3436/8505] TestRipper::ParserEvents#test_params_mlhs_paren = 0.01 s 5084s [3437/8505] TestRipper::ParserEvents#test_program = 0.00 s 5084s [3438/8505] TestRipper::ParserEvents#test_do_block = 0.00 s 5084s [3439/8505] TestRipper::ParserEvents#test_assign_error_const_toplevel = 0.01 s 5084s [3440/8505] TestRipper::ParserEvents#test_assocs = 0.00 s 5084s [3441/8505] TestRipper::ParserEvents#test_yield0 = 0.00 s 5084s [3442/8505] TestRipper::ParserEvents#test_params_mlhs_add_post = 0.02 s 5084s [3443/8505] TestRipper::ParserEvents#test_ifop = 0.00 s 5084s [3444/8505] TestRipper::ParserEvents#test_binary(===) = 0.00 s 5084s [3445/8505] TestRipper::ParserEvents#test_mlhs_add_post = 0.01 s 5084s [3446/8505] TestRipper::ParserEvents#test_params = 0.01 s 5084s [3447/8505] TestRipper::ParserEvents#test_yield = 0.00 s 5084s [3448/8505] TestRipper::ParserEvents#test_regexp_new = 0.00 s 5084s [3449/8505] TestRipper::ParserEvents#test_binary(<=) = 0.00 s 5084s [3450/8505] TestRipper::ParserEvents#test_binary(&) = 0.00 s 5084s [3451/8505] TestRipper::ParserEvents#test_local_variables = 0.01 s 5084s [3452/8505] TestRipper::ParserEvents#test_args_new = 0.00 s 5084s [3453/8505] TestRipper::ParserEvents#test_binary(or) = 0.01 s 5084s [3454/8505] TestRipper::ParserEvents#test_qwords_new = 0.00 s 5084s [3455/8505] TestRipper::ParserEvents#test_brace_block = 0.00 s 5084s [3456/8505] TestRipper::ParserEvents#test_binary(*) = 0.00 s 5084s [3457/8505] TestRipper::ParserEvents#test_mlhs_new = 0.00 s 5084s [3458/8505] TestRipper::ParserEvents#test_unterminated_regexp = 0.00 s 5084s [3459/8505] TestRipper::ParserEvents#test_opassign = 0.01 s 5084s [3460/8505] TestRipper::ParserEvents#test_field = 0.00 s 5084s [3461/8505] TestRipper::ParserEvents#test_while_mod = 0.00 s 5084s [3462/8505] TestRipper::ParserEvents#test_event_coverage = 0.01 s 5084s [3463/8505] TestRipper::ParserEvents#test_if_mod = 0.00 s 5084s [3464/8505] TestRipper::ParserEvents#test_warn_cr_in_middle = 0.00 s 5084s [3465/8505] TestRipper::ParserEvents#test_args_add_star = 0.00 s 5084s [3466/8505] TestRipper::ParserEvents#test_hash = 0.01 s 5084s [3467/8505] TestRipper::ParserEvents#test_mlhs_add_star = 0.00 s 5084s [3468/8505] TestRipper::ParserEvents#test_alias_error = 0.00 s 5084s [3469/8505] TestRipper::ParserEvents#test_super = 0.00 s 5084s [3470/8505] TestRipper::ParserEvents#test_begin = 0.00 s 5084s [3471/8505] TestRipper::ParserEvents#test_ignored_nl = 0.00 s 5084s [3472/8505] TestRipper::ParserEvents#test_params_mlhs_add_star = 0.00 s 5084s [3473/8505] TestRipper::ParserEvents#test_invalid_instance_variable_name = 0.00 s 5084s [3474/8505] TestRipper::ParserEvents#test_blockarg = 0.01 s 5084s [3475/8505] TestRipper::ParserEvents#test_top_const_ref = 0.00 s 5084s [3476/8505] TestRipper::ParserEvents#test_dot3 = 0.00 s 5084s [3477/8505] TestRipper::ParserEvents#test_binary(||) = 0.00 s 5084s [3478/8505] TestRipper::ParserEvents#test_word_new = 0.00 s 5084s [3479/8505] TestRipper::ParserEvents#test_stmts_new = 0.00 s 5084s [3480/8505] TestRipper::ParserEvents#test_binary(-) = 0.00 s 5084s [3481/8505] TestRipper::ParserEvents#test_case = 0.01 s 5084s [3482/8505] TestRipper::ParserEvents#test_operator_ambiguous = 0.00 s 5084s [3483/8505] TestRipper::ParserEvents#test_symbol = 0.00 s 5084s [3484/8505] TestRipper::ParserEvents#test_parse_error = 0.00 s 5084s [3485/8505] TestRipper::ParserEvents#test_bare_assoc_hash = 0.00 s 5084s [3486/8505] TestRipper::ParserEvents#test_params_mlhs_add = 0.00 s 5084s [3487/8505] TestRipper::ParserEvents#test_args_forward = 0.01 s 5084s [3488/8505] TestRipper::ParserEvents#test_class = 0.00 s 5084s [3489/8505] TestRipper::ParserEvents#test_params_mlhs_new = 0.00 s 5084s [3490/8505] TestRipper::ParserEvents#test_arg_paren = 0.00 s 5084s [3491/8505] TestRipper::ParserEvents#test_string_content = 0.00 s 5084s [3492/8505] TestRipper::ParserEvents#test_stmts_add = 0.00 s 5084s [3493/8505] TestRipper::ParserEvents#test_zsuper = 0.00 s 5084s [3494/8505] TestRipper::ParserEvents#test_word_add = 0.00 s 5084s [3495/8505] TestRipper::ParserEvents#test_alias = 0.00 s 5084s [3496/8505] TestRipper::ParserEvents#test_block_var_add_block = 0.00 s 5084s [3497/8505] TestRipper::ParserEvents#test_sclass = 0.00 s 5084s [3498/8505] TestRipper::ParserEvents#test_break = 0.00 s 5084s [3499/8505] TestRipper::ParserEvents#test_binary(^) = 0.00 s 5084s [3500/8505] TestRipper::ParserEvents#test_block_var = 0.01 s 5084s [3501/8505] TestRipper::ParserEvents#test_binary(<=>) = 0.00 s 5084s [3502/8505] TestRipper::ParserEvents#test_endless_defs = 0.01 s 5084s [3503/8505] TestRipper::ParserEvents#test_heredoc = 0.00 s 5084s [3504/8505] TestRipper::ParserEvents#test_xstring_literal = 0.00 s 5084s [3505/8505] TestRipper::ParserEvents#test_dyna_symbol = 0.00 s 5084s [3506/8505] TestRipper::ParserEvents#test_binary(<) = 0.00 s 5084s [3507/8505] TestRipper::ParserEvents#test_string_add = 0.00 s 5084s [3508/8505] TestRipper::ParserEvents#test_rest_param = 0.00 s 5084s [3509/8505] TestRipper::ParserEvents#test_binary(>>) = 0.00 s 5084s [3510/8505] TestRipper::ParserEvents#test_mlhs_add = 0.00 s 5084s [3511/8505] TestRipper::ParserEvents#test_qwords_add = 0.00 s 5084s [3512/8505] TestRipper::ParserEvents#test_rescue_mod = 0.00 s 5084s [3513/8505] TestRipper::ParserEvents#test_nokw_param = 0.00 s 5084s [3514/8505] TestRipper::ParserEvents#test_args_add = 0.00 s 5084s [3515/8505] TestRipper::ParserEvents#test_unary = 0.00 s 5084s [3516/8505] TestRipper::ParserEvents#test_regexp_add = 0.00 s 5084s [3517/8505] TestRipper::ParserEvents#test_binary(/) = 0.00 s 5084s [3518/8505] TestRipper::ParserEvents#test_when = 0.00 s 5084s [3519/8505] TestRipper::ParserEvents#test_warning_ignored_magic_comment = 0.00 s 5084s [3520/8505] TestRipper::ParserEvents#test_vcall = 0.00 s 5084s [3521/8505] TestRipper::ParserEvents#test_assign_error_const = 0.00 s 5084s [3522/8505] TestRipper::ParserEvents#test_binary(**) = 0.30 s 5084s [3523/8505] TestRipper::ParserEvents#test_qsymbols_add = 0.09 s 5084s [3524/8505] TestRipper::ParserEvents#test_array = 0.00 s 5084s [3525/8505] TestRipper::ParserEvents#test_return0 = 0.00 s 5084s [3526/8505] TestRipper::ParserEvents#test_aref_field = 0.01 s 5084s [3527/8505] TestRipper::ParserEvents#test_binary(&&) = 0.00 s 5084s [3528/8505] TestRipper::ParserEvents#test_retry = 0.00 s 5084s [3529/8505] TestRipper::ParserEvents#test_if = 0.00 s 5084s [3530/8505] TestRipper::ParserEvents#test_assign = 0.00 s 5084s [3531/8505] TestRipper::ParserEvents#test_invalid_class_variable_name = 0.00 s 5084s [3532/8505] TestRipper::ParserEvents#test_aryptn = 0.01 s 5084s [3533/8505] TestRipper::ParserEvents#test_const_path_ref = 0.00 s 5084s [3534/8505] TestRipper::ParserEvents#test_xstring_new = 0.00 s 5084s [3535/8505] TestRipper::ParserEvents#test_top_const_field = 0.00 s 5084s [3536/8505] TestRipper::ParserEvents#test_BEGIN = 0.01 s 5084s [3537/8505] TestRipper::ParserEvents#test_binary(!=) = 0.00 s 5084s [3538/8505] TestRipper::ParserEvents#test_params_mlhs = 0.01 s 5084s [3539/8505] TestRipper::ParserEvents#test_kwrest_param = 0.00 s 5084s [3540/8505] TestRipper::ParserEvents#test_param_error = 0.00 s 5084s [3541/8505] TestRipper::ParserEvents#test_aref = 0.00 s 5084s [3542/8505] TestRipper::ParserEvents#test_binary(|) = 0.00 s 5084s [3543/8505] TestRipper::ParserEvents#test_binary(%) = 0.00 s 5084s [3544/8505] TestRipper::ParserEvents#test_var_field = 0.00 s 5084s [3545/8505] TestRipper::ParserEvents#test_binary(==) = 0.00 s 5084s [3546/8505] TestRipper::ParserEvents#test_symbols_new = 0.00 s 5084s [3547/8505] TestRipper::ParserEvents#test_rescue_class = 0.01 s 5084s [3548/8505] TestRipper::ParserEvents#test_string_embexpr = 0.00 s 5084s [3549/8505] TestRipper::ParserEvents#test_module = 0.00 s 5084s [3550/8505] TestRipper::ParserEvents#test_in = 0.00 s 5084s [3551/8505] TestRipper::ParserEvents#test_next = 0.00 s 5084s [3552/8505] TestRipper::ParserEvents#test_regexp_literal = 0.00 s 5084s [3553/8505] TestRipper::ParserEvents#test_void_stmt = 0.00 s 5084s [3554/8505] TestRipper::ParserEvents#test_undef = 0.00 s 5084s [3555/8505] TestRipper::ParserEvents#test_assoc_splat = 0.00 s 5084s [3556/8505] TestRipper::ParserEvents#test_fndptn = 0.00 s 5084s [3557/8505] TestRipper::ParserEvents#test_mrhs_add = 0.00 s 5084s [3558/8505] TestRipper::ParserEvents#test_magic_comment = 0.01 s 5084s [3559/8505] TestRipper::ParserEvents#test_rescue = 0.01 s 5084s [3560/8505] TestRipper::ParserEvents#test_const_ref = 0.00 s 5084s [3561/8505] TestRipper::ParserEvents#test_invalid_global_variable_name = 0.00 s 5084s [3562/8505] TestRipper::ParserEvents#test_END = 0.00 s 5084s [3563/8505] TestRipper::ParserEvents#test_lambda = 0.00 s 5084s [3564/8505] TestRipper::ParserEvents#test_defs = 0.00 s 5084s [3565/8505] TestRipper::ParserEvents#test_until = 0.00 s 5084s [3566/8505] TestRipper::ParserEvents#test_mrhs_add_star = 0.00 s 5084s [3567/8505] TestRipper::ParserEvents#test_words_new = 0.00 s 5084s [3568/8505] TestRipper::ParserEvents#test_command = 0.00 s 5084s [3569/8505] TestRipper::ParserEvents#test_method_add_block = 0.00 s 5084s [3570/8505] TestRipper::ParserEvents#test_const_path_field = 0.00 s 5084s [3571/8505] TestRipper::ParserEvents#test_arglist = 0.00 s 5084s [3572/8505] TestRipper::ParserEvents#test_binary(=~) = 0.00 s 5084s [3573/8505] TestRipper::ParserEvents#test_redo = 0.00 s 5084s [3574/8505] TestRipper::ParserEvents#test_def = 0.00 s 5084s [3575/8505] TestRipper::ParserEvents#test_assoclist_from_args = 0.00 s 5084s [3576/8505] TestRipper::ParserEvents#test_excessed_comma = 0.00 s 5084s [3577/8505] TestRipper::ParserEvents#test_args_add_block = 0.00 s 5084s [3578/8505] TestRipper::ParserEvents#test_unless = 0.00 s 5084s [3579/8505] TestRipper::ParserEvents#test_binary(!~) = 0.00 s 5084s [3580/8505] TestRipper::ParserEvents#test_binary(and) = 0.00 s 5084s [3581/8505] TestRipper::ParserEvents#test_endless_def = 0.01 s 5084s [3582/8505] TestRipper::ParserEvents#test_words_add = 0.00 s 5084s [3583/8505] TestRipper::ParserEvents#test_assign_error_const_qualified = 0.00 s 5084s [3584/8505] TestRipper::ParserEvents#test_block_var_add_star = 0.00 s 5084s [3585/8505] TestRipper::ParserEvents#test_var_ref = 0.00 s 5084s [3586/8505] TestRipper::ParserEvents#test_elsif = 0.00 s 5084s [3587/8505] TestRipper::ParserEvents#test_binary(<<) = 0.00 s 5084s [3588/8505] TestRipper::ParserEvents#test_assign_error = 0.00 s 5084s [3589/8505] TestRipper::ParserEvents#test_mrhs_new = 0.00 s 5084s [3590/8505] TestRipper::ParserEvents#test_assign_error_backref = 0.00 s 5084s [3591/8505] TestRipper::ParserEvents#test_string_concat = 0.00 s 5084s [3592/8505] TestRipper::ParserEvents#test_binary(+) = 0.00 s 5084s [3593/8505] TestRipper::ParserEvents#test_dot2 = 0.00 s 5084s [3594/8505] TestRipper::ParserEvents#test_return = 0.00 s 5084s [3595/8505] TestRipper::ParserEvents#test_class_name_error = 0.00 s 5084s [3596/8505] TestRipper::ParserEvents#test_for = 0.00 s 5084s [3597/8505] TestRipper::ParserEvents#test_heredoc_dedent = 0.00 s 5084s [3598/8505] TestRipper::ParserEvents#test_string_literal = 0.00 s 5084s [3599/8505] TestRipper::ParserEvents#test_unless_mod = 0.00 s 5084s [3600/8505] TestRipper::ParserEvents#test_opassign_error = 0.00 s 5084s [3601/8505] TestRipper::ParserEvents#test_while = 0.00 s 5085s [3602/8505] TestRipper::ParserEvents#test_symbols_add = 0.00 s 5085s [3603/8505] TestRipper::ParserEvents#test_defined = 0.00 s 5085s [3604/8505] TestRipper::ParserEvents#test_massign = 0.00 s 5085s [3605/8505] TestRipper::ParserEvents#test_mlhs_paren = 0.00 s 5085s [3606/8505] TestRipper::ParserEvents#test_paren = 0.00 s 5085s [3607/8505] TestRipper::ParserEvents#test_command_call = 0.00 s 5085s [3608/8505] TestRipper::ParserEvents#test_unterminated_heredoc = 0.00 s 5085s [3609/8505] TestRipper::ParserEvents#test_until_mod = 0.00 s 5085s [3610/8505] TestRipper::ParserEvents#test_ensure = 0.00 s 5085s [3611/8505] TestRipper::ParserEvents#test_bodystmt = 0.00 s 5085s [3612/8505] TestRipper::ParserEvents#test_binary(>=) = 0.00 s 5085s [3613/8505] TestRipper::ParserEvents#test_call = 0.00 s 5085s [3614/8505] TestRipper::ParserEvents#test_xstring_add = 0.00 s 5085s [3615/8505] TestRipper::ParserEvents#test_var_alias = 0.00 s 5085s [3616/8505] TestRipper::ParserEvents#test_string_dvar = 0.00 s 5085s [3617/8505] TestDateAttr#test__attr = 0.02 s 5085s [3618/8505] TestDateAttr#test__wday_predicate = 0.01 s 5085s [3619/8505] TestBase64#test_urlsafe_decode64_unpadded = 0.01 s 5085s [3620/8505] TestBase64#test_strict_encode64 = 0.00 s 5085s [3621/8505] TestBase64#test_urlsafe_encode64 = 0.00 s 5085s [3622/8505] TestBase64#test_decode64 = 0.00 s 5085s [3623/8505] TestBase64#test_strict_decode64 = 0.01 s 5085s [3624/8505] TestBase64#test_encode64 = 0.00 s 5085s [3625/8505] TestBase64#test_sample = 0.00 s 5085s [3626/8505] TestBase64#test_urlsafe_encode64_unpadded = 0.00 s 5085s [3627/8505] TestBase64#test_urlsafe_decode64 = 0.00 s 5085s [3628/8505] TestOptionParser::Acceptable#test_order = 0.04 s 5085s [3629/8505] TestOptionParser::Acceptable#test_float = 0.02 s 5085s [3630/8505] TestOptionParser::Acceptable#test_regexp = 0.00 s 5085s [3631/8505] TestOptionParser::Acceptable#test_nonopt_pattern = 0.01 s 5085s [3632/8505] TestOptionParser::Acceptable#test_into = 0.00 s 5085s [3633/8505] TestOptionParser::Acceptable#test_decimal_numeric = 0.02 s 5085s [3634/8505] TestOptionParser::Acceptable#test_numeric = 0.01 s 5085s [3635/8505] TestOptionParser::Acceptable#test_permute = 0.01 s 5085s [3636/8505] TestOptionParser::Acceptable#test_integer = 0.01 s 5085s [3637/8505] TestOptionParser::Acceptable#test_decimal_integer = 0.01 s 5085s [3638/8505] TestOptionParser::Acceptable#test_require_exact = 0.02 s 5085s [3639/8505] TestOptionParser::Acceptable#test_octal_integer = 0.01 s 5085s [3640/8505] URI::TestGeneric#test_find_proxy_case_sensitive_env = 0.05 s 5085s [3641/8505] URI::TestGeneric#test_route = 0.03 s 5085s [3642/8505] URI::TestGeneric#test_build = 0.00 s 5085s [3643/8505] URI::TestGeneric#test_find_proxy_no_proxy_cidr = 0.01 s 5085s [3644/8505] URI::TestGeneric#test_find_proxy_bad_uri = 0.00 s 5085s [3645/8505] URI::TestGeneric#test_find_proxy = 0.04 s 5085s [3646/8505] URI::TestGeneric#test_merge = 0.06 s 5085s [3647/8505] URI::TestGeneric#test_build2 = 0.02 s 5085s [3648/8505] URI::TestGeneric#test_parse = 0.01 s 5085s [3649/8505] URI::TestGeneric#test_use_proxy_p = 0.00 s 5085s [3650/8505] URI::TestGeneric#test_bad_password_component = 0.00 s 5085s [3651/8505] URI::TestGeneric#test_rfc3986_examples = 0.08 s 5085s [3652/8505] URI::TestGeneric#test_set_component = 0.02 s 5085s [3653/8505] URI::TestGeneric#test_find_proxy_bad_value = 0.01 s 5085s [3654/8505] URI::TestGeneric#test_find_proxy_no_env = 0.00 s 5085s [3655/8505] URI::TestGeneric#test_find_proxy_get = 0.02 s 5085s [3656/8505] URI::TestGeneric#test_ipv6 = 0.00 s 5085s [3657/8505] URI::TestGeneric#test_to_s = 0.00 s 5085s [3658/8505] URI::TestGeneric#test_set_scheme = 0.00 s 5085s [3659/8505] URI::TestGeneric#test_join = 0.02 s 5085s [3660/8505] URI::TestGeneric#test_find_proxy_no_proxy = 0.05 s 5085s [3661/8505] URI::TestGeneric#test_hierarchical = 0.03 s 5085s [3662/8505] URI::TestGeneric#test_absolute = 0.00 s 5085s [3663/8505] URI::TestGeneric#test_parse_scheme_with_symbols = 0.00 s 5085s [3664/8505] TestCSVParseColumnSeparator#test_comma = 0.00 s 5085s [3665/8505] TestCSVParseColumnSeparator#test_multiple_characters_include_sub_separator = 0.00 s 5085s [3666/8505] TestCSVParseColumnSeparator#test_tab = 0.00 s 5085s [3667/8505] TestCSVParseColumnSeparator#test_space = 0.00 s 5085s [3668/8505] TestCSVParseColumnSeparator#test_multiple_characters_leading_empty_fields = 0.00 s 5085s [3669/8505] JSONFixturesTest#test_failing = 0.02 s 5085s [3670/8505] JSONFixturesTest#test_passing = 0.01 s 5085s [3671/8505] JSONFixturesTest#test_sanity = 0.00 s 5085s [3672/8505] TestIONonblock#test_flush = 0.00 s 5085s [3673/8505] TestIONonblock#test_nonblock = 0.00 s 5085s [3674/8505] TestOptionParser::PlaceArg#test_abbrev = 0.01 s 5085s [3675/8505] TestOptionParser::PlaceArg#test_order = 0.01 s 5085s [3676/8505] TestOptionParser::PlaceArg#test_short = 0.00 s 5085s [3677/8505] TestOptionParser::PlaceArg#test_hyphenize = 0.00 s 5085s [3678/8505] TestOptionParser::PlaceArg#test_regexp = 0.03 s 5085s [3679/8505] TestOptionParser::PlaceArg#test_nonopt_pattern = 0.00 s 5085s [3680/8505] TestOptionParser::PlaceArg#test_into = 0.00 s 5085s [3681/8505] TestOptionParser::PlaceArg#test_conv = 0.00 s 5085s [3682/8505] TestOptionParser::PlaceArg#test_permute = 0.01 s 5085s [3683/8505] TestOptionParser::PlaceArg#test_long = 0.01 s 5085s [3684/8505] TestOptionParser::PlaceArg#test_require_exact = 0.01 s 5085s [3685/8505] OpenSSL::TestFIPS#test_fips_mode_get = 0.00 s 5085s [3686/8505] OpenSSL::TestFIPS#test_fips_mode_is_reentrant = 0.00 s 5086s [3687/8505] TestRDocMarkdown#test_parse_definition_list = 0.13 s 5086s [3688/8505] TestRDocMarkdown#test_parse_list_bullet_nest_continue = 0.17 s 5086s [3689/8505] TestRDocMarkdown#test_parse_entity_hex = 0.03 s 5086s [3690/8505] TestRDocMarkdown#test_parse_paragraph_indent_two = 0.01 s 5086s [3691/8505] TestRDocMarkdown#test_parse_strong_emphasis_star = 0.05 s 5086s [3692/8505] TestRDocMarkdown#test_parse_note = 0.06 s 5086s [3693/8505] TestRDocMarkdown#test_parse_link_reference_implicit = 0.07 s 5086s [3694/8505] TestRDocMarkdown#test_parse_emphasis_star = 0.04 s 5086s [3695/8505] TestRDocMarkdown#test_parse_code_github = 0.17 s 5086s [3696/8505] TestRDocMarkdown#test_parse_link_reference_id = 0.07 s 5086s [3697/8505] TestRDocMarkdown#test_parse_link_reference_id_adjacent = 0.03 s 5086s [3698/8505] TestRDocMarkdown#test_parse_auto_link_url = 0.03 s 5086s [3699/8505] TestRDocMarkdown#test_parse_strong_star = 0.01 s 5086s [3700/8505] TestRDocMarkdown#test_parse_note_inline = 0.02 s 5086s [3701/8505] TestRDocMarkdown#test_parse_heading_atx = 0.04 s 5086s [3702/8505] TestRDocMarkdown#test_parse_emphasis_underscore_embedded = 0.03 s 5086s [3703/8505] TestRDocMarkdown#test_parse_style = 0.08 s 5087s [3704/8505] TestRDocMarkdown#test_parse_verbatim_eof = 0.04 s 5087s [3705/8505] TestRDocMarkdown#test_parse_paragraph_multiline = 0.04 s 5087s [3706/8505] TestRDocMarkdown#test_parse_block_quote_separate = 0.04 s 5087s [3707/8505] TestRDocMarkdown#test_parse_list_bullet_nest = 0.13 s 5087s [3708/8505] TestRDocMarkdown#test_parse_entity_named = 0.04 s 5087s [3709/8505] TestRDocMarkdown#test_parse_plain = 0.05 s 5087s [3710/8505] TestRDocMarkdown#test_gfm_table = 0.02 s 5087s [3711/8505] TestRDocMarkdown#test_parse_strong_emphasis_underscore = 0.04 s 5087s [3712/8505] TestRDocMarkdown#test_parse_style_disabled = 0.02 s 5087s [3713/8505] TestRDocMarkdown#test_parse_block_quote = 0.01 s 5087s [3714/8505] TestRDocMarkdown#test_parse_paragraph_two = 0.03 s 5087s [3715/8505] TestRDocMarkdown#test_parse_paragraph_html = 0.03 s 5087s [3716/8505] TestRDocMarkdown#test_parse_code_github_format = 0.05 s 5087s [3717/8505] TestRDocMarkdown#test_parse_html_hr = 0.01 s 5087s [3718/8505] TestRDocMarkdown#test_parse_list_bullet_continue = 0.08 s 5087s [3719/8505] TestRDocMarkdown#test_parse_link_reference_id_many = 0.08 s 5087s [3720/8505] TestRDocMarkdown#test_code_fence_with_unintended_array = 0.02 s 5087s [3721/8505] TestRDocMarkdown#test_parse_rule_star = 0.02 s 5087s [3722/8505] TestRDocMarkdown#test_parse_block_quote_list = 0.04 s 5087s [3723/8505] TestRDocMarkdown#test_parse_strike_tilde = 0.05 s 5087s [3724/8505] TestRDocMarkdown#test_parse_definition_list_no = 0.05 s 5087s [3725/8505] TestRDocMarkdown#test_parse_note_multiple = 0.06 s 5088s [3726/8505] TestRDocMarkdown#test_parse_strike_words_tilde = 0.03 s 5088s [3727/8505] TestRDocMarkdown#test_parse_block_quote_continue = 0.06 s 5088s [3728/8505] TestRDocMarkdown#test_parse_heading_setext_dash = 0.03 s 5088s [3729/8505] TestRDocMarkdown#test_parse_reference_link_embedded_bracket = 0.01 s 5088s [3730/8505] TestRDocMarkdown#test_parse_image = 0.01 s 5088s [3731/8505] TestRDocMarkdown#test_parse_list_bullet = 0.02 s 5088s [3732/8505] TestRDocMarkdown#test_parse_definition_list_indents = 0.03 s 5088s [3733/8505] TestRDocMarkdown#test_parse_strike_tilde_no = 0.03 s 5088s [3734/8505] TestRDocMarkdown#test_parse_escape = 0.09 s 5088s [3735/8505] TestRDocMarkdown#test_emphasis = 0.00 s 5088s [3736/8505] TestRDocMarkdown#test_parse_list_bullet_auto_link = 0.03 s 5088s [3737/8505] TestRDocMarkdown#test_parse_paragraph_stars = 0.01 s 5088s [3738/8505] TestRDocMarkdown#test_parse_paragraph_indent_one = 0.01 s 5088s [3739/8505] TestRDocMarkdown#test_parse_note_no_notes = 0.02 s 5088s [3740/8505] TestRDocMarkdown#test_parse_paragraph_indent_three = 0.01 s 5088s [3741/8505] TestRDocMarkdown#test_parse_list_number_continue = 0.02 s 5088s [3742/8505] TestRDocMarkdown#test_parse_note_indent = 0.03 s 5088s [3743/8505] TestRDocMarkdown#test_strong = 0.00 s 5088s [3744/8505] TestRDocMarkdown#test_class_parse = 0.01 s 5088s [3745/8505] TestRDocMarkdown#test_parse_auto_link_email = 0.02 s 5088s [3746/8505] TestRDocMarkdown#test_parse_image_link = 0.01 s 5088s [3747/8505] TestRDocMarkdown#test_parse_html_no_html = 0.02 s 5088s [3748/8505] TestRDocMarkdown#test_parse_list_bullet_multiline = 0.01 s 5088s [3749/8505] TestRDocMarkdown#test_parse_paragraph = 0.02 s 5088s [3750/8505] TestRDocMarkdown#test_parse_heading_setext_equals = 0.03 s 5088s [3751/8505] TestRDocMarkdown#test_parse_entity_dec = 0.02 s 5088s [3752/8505] TestRDocMarkdown#test_parse_emphasis_underscore_in_word = 0.03 s 5088s [3753/8505] TestRDocMarkdown#test_parse_line_break = 0.01 s 5088s [3754/8505] TestRDocMarkdown#test_parse_definition_list_multi_description = 0.04 s 5088s [3755/8505] TestRDocMarkdown#test_parse_verbatim = 0.03 s 5088s [3756/8505] TestRDocMarkdown#test_parse_html = 0.01 s 5088s [3757/8505] TestRDocMarkdown#test_parse_emphasis_underscore = 0.02 s 5088s [3758/8505] TestRDocMarkdown#test_parse_definition_list_multi_label = 0.10 s 5088s [3759/8505] TestRDocMarkdown#test_parse_definition_list_multi_line = 0.05 s 5088s [3760/8505] TestRDocMarkdown#test_parse_block_quote_newline = 0.03 s 5088s [3761/8505] TestRDocMarkdown#test_parse_char_entity = 0.01 s 5088s [3762/8505] TestRDocMarkdown#test_parse_rule_dash = 0.01 s 5089s [3763/8505] TestRDocMarkdown#test_parse_list_number = 0.03 s 5089s [3764/8505] TestRDocMarkdown#test_parse_link_reference_id_eof = 0.03 s 5089s [3765/8505] TestRDocMarkdown#test_parse_strong_underscore = 0.02 s 5089s [3766/8505] TestRDocMarkdown#test_parse_paragraph_break_on_newline = 0.08 s 5089s [3767/8505] TestRDocMarkdown#test_parse_paragraph_html_no_html = 0.03 s 5089s [3768/8505] TestRDocMarkdown#test_parse_code = 0.01 s 5089s [3769/8505] TestRDocMarkdown#test_parse_list_bullet_nest_loose = 0.03 s 5089s [3770/8505] TestRDocMarkdown#test_parse_rule_underscore = 0.01 s 5089s [3771/8505] PPTestModule::PPFileStatTest#test_nothing_raised = 0.01 s 5089s [3772/8505] TestDigest::TestSHA256#test_s_hexdigest = 0.00 s 5089s [3773/8505] TestDigest::TestSHA256#test_bubblebabble_class = 0.00 s 5089s [3774/8505] TestDigest::TestSHA256#test_instance_eval = 0.00 s 5089s [3775/8505] TestDigest::TestSHA256#test_update = 0.00 s 5089s [3776/8505] TestDigest::TestSHA256#test_bubblebabble = 0.00 s 5089s [3777/8505] TestDigest::TestSHA256#test_s_base64digest = 0.00 s 5089s [3778/8505] TestDigest::TestSHA256#test_eq = 0.00 s 5089s [3779/8505] TestDigest::TestSHA256#test_alignment = 0.00 s 5089s [3780/8505] TestDigest::TestSHA256#test_s_new = 0.00 s 5089s [3781/8505] TestDigest::TestSHA256#test_s_digest = 0.00 s 5089s [3782/8505] TestDigest::TestSHA256#test_bubblebabble_instance = 0.00 s 5089s [3783/8505] TestDigest::TestSHA256#test_s_file = 0.00 s 5089s [3784/8505] TestRDocStore#test_find_class_named = 0.11 s 5089s [3785/8505] TestRDocStore#test_load_class = 0.11 s 5089s [3786/8505] TestRDocStore#test_dry_run = 0.04 s 5089s [3787/8505] TestRDocStore#test_load_cache = 0.04 s 5089s [3788/8505] TestRDocStore#test_find_text_page = 0.04 s 5089s [3789/8505] TestRDocStore#test_save_class_dry_run = 0.11 s 5089s [3790/8505] TestRDocStore#test_load_all = 0.08 s 5089s [3791/8505] TestRDocStore#test_save_class_nested = 0.04 s 5089s [3792/8505] TestRDocStore#test_instance_methods = 0.04 s 5089s [3793/8505] TestRDocStore#test_class_path = 0.04 s 5089s [3794/8505] TestRDocStore#test_save_method = 0.04 s 5089s [3795/8505] TestRDocStore#test_attributes = 0.04 s 5090s [3796/8505] TestRDocStore#test_page_with_extension = 0.04 s 5090s [3797/8505] TestRDocStore#test_page = 0.04 s 5090s [3798/8505] TestRDocStore#test_save_method_nested = 0.04 s 5090s [3799/8505] TestRDocStore#test_add_c_variables = 0.05 s 5090s [3800/8505] TestRDocStore#test_save_class_merge_constant = 0.05 s 5090s [3801/8505] TestRDocStore#test_find_c_enclosure_from_cache_legacy = 0.04 s 5090s [3802/8505] TestRDocStore#test_save_cache_duplicate_methods = 0.04 s 5090s [3803/8505] TestRDocStore#test_add_file_relative = 0.04 s 5090s [3804/8505] TestRDocStore#test_find_c_enclosure_from_cache = 0.04 s 5090s [3805/8505] TestRDocStore#test_module_names = 0.04 s 5090s [3806/8505] TestRDocStore#test_load_method = 0.04 s 5090s [3807/8505] TestRDocStore#test_load_cache_legacy = 0.04 s 5090s [3808/8505] TestRDocStore#test_main = 0.04 s 5090s [3809/8505] TestRDocStore#test_class_methods = 0.04 s 5090s [3810/8505] TestRDocStore#test_load_method_legacy = 0.04 s 5090s [3811/8505] TestRDocStore#test_load_single_class = 0.04 s 5090s [3812/8505] TestRDocStore#test_save_cache_duplicate_pages = 0.04 s 5090s [3813/8505] TestRDocStore#test_find_c_enclosure = 0.04 s 5090s [3814/8505] TestRDocStore#test_find_module_named = 0.04 s 5090s [3815/8505] TestRDocStore#test_all_classes_and_modules = 0.04 s 5090s [3816/8505] TestRDocStore#test_load_cache_no_cache = 0.04 s 5090s [3817/8505] TestRDocStore#test_find_class_or_module = 0.04 s 5090s [3818/8505] TestRDocStore#test_save_method_dry_run = 0.03 s 5090s [3819/8505] TestRDocStore#test_save_class_basic_object = 0.04 s 5090s [3820/8505] TestRDocStore#test_add_c_enclosure = 0.04 s 5091s [3821/8505] TestRDocStore#test_all_modules = 0.04 s 5091s [3822/8505] TestRDocStore#test_save_class_loaded = 0.07 s 5091s [3823/8505] TestRDocStore#test_find_file_named = 0.04 s 5091s [3824/8505] TestRDocStore#test_save_class_merge = 0.05 s 5091s [3825/8505] TestRDocStore#test_all_files = 0.04 s 5091s [3826/8505] TestRDocStore#test_source = 0.04 s 5093s [3827/8505] TestRDocStore#test_complete = 0.04 s 5093s [3828/8505] TestRDocStore#test_friendly_path = 0.04 s 5093s [3829/8505] TestRDocStore#test_complete_nodoc = 0.05 s 5093s [3830/8505] TestRDocStore#test_classes = 0.04 s 5093s [3831/8505] TestRDocStore#test_class_file = 0.03 s 5093s [3832/8505] TestRDocStore#test_save_class = 0.04 s 5093s [3833/8505] TestRDocStore#test_load_page = 0.04 s 5093s [3834/8505] TestRDocStore#test_save_cache = 0.04 s 5093s [3835/8505] TestRDocStore#test_title = 0.03 s 5093s [3836/8505] TestRDocStore#test_load_cache_encoding_differs = 0.04 s 5093s [3837/8505] TestRDocStore#test_method_file = 0.03 s 5093s [3838/8505] TestRDocStore#test_save_cache_dry_run = 0.05 s 5093s [3839/8505] TestRDocStore#test_find_class_named_from = 0.05 s 5093s [3840/8505] TestRDocStore#test_save_page = 0.04 s 5093s [3841/8505] TestRDocStore#test_save_class_methods = 0.04 s 5093s [3842/8505] TestRDocStore#test_save_class_delete = 0.05 s 5093s [3843/8505] TestRDocStore#test_add_file = 0.03 s 5093s [3844/8505] TestRDocStore#test_save_page_file = 0.03 s 5093s [3845/8505] TestRDocStore#test_save = 0.05 s 5093s [3846/8505] TestRDocInclude#test_module_extended = 0.03 s 5093s [3847/8505] TestRDocInclude#test_module = 0.03 s 5093s [3848/8505] TestRDocInclude#test_store_equals = 0.03 s 5093s [3849/8505] Psych::TestCoder#test_coder_style_scalar_literal = 0.00 s 5093s [3850/8505] Psych::TestCoder#test_represent_map = 0.01 s 5093s [3851/8505] Psych::TestCoder#test_represent! = 0.01 s 5093s [3852/8505] Psych::TestCoder#test_dump_with_tag = 0.01 s 5093s [3853/8505] Psych::TestCoder#test_represent_with_init = 0.00 s 5093s [3854/8505] Psych::TestCoder#test_coder_style_seq_flow = 0.00 s 5093s [3855/8505] Psych::TestCoder#test_map_with_tag_and_style = 0.00 s 5093s [3856/8505] Psych::TestCoder#test_dump_encode_with = 0.00 s 5093s [3857/8505] Psych::TestCoder#test_coder_style_scalar_folded = 0.00 s 5093s [3858/8505] Psych::TestCoder#test_coder_style_scalar_any = 0.00 s 5093s [3859/8505] Psych::TestCoder#test_coder_style_map_default = 0.00 s 5093s [3860/8505] Psych::TestCoder#test_coder_style_scalar_double_quoted = 0.00 s 5093s [3861/8505] Psych::TestCoder#test_represent_sequence = 0.00 s 5093s [3862/8505] Psych::TestCoder#test_self_referential = 0.00 s 5093s [3863/8505] Psych::TestCoder#test_coder_style_seq_block = 0.00 s 5093s [3864/8505] Psych::TestCoder#test_coder_style_scalar_single_quoted = 0.00 s 5093s [3865/8505] Psych::TestCoder#test_map_with_tag = 0.00 s 5093s [3866/8505] Psych::TestCoder#test_coder_style_seq_default = 0.00 s 5093s [3867/8505] Psych::TestCoder#test_load_dumped_tagging = 0.00 s 5093s [3868/8505] Psych::TestCoder#test_json_dump_exclude_tag = 0.00 s 5093s [3869/8505] Psych::TestCoder#test_coder_style_seq_any = 0.00 s 5093s [3870/8505] Psych::TestCoder#test_represent_with_object = 0.00 s 5093s [3871/8505] Psych::TestCoder#test_dump_init_with = 0.01 s 5093s [3872/8505] Psych::TestCoder#test_coder_style_scalar_plain = 0.00 s 5093s [3873/8505] Psych::TestCoder#test_coder_style_scalar_default = 0.00 s 5093s [3874/8505] Psych::TestCoder#test_map_takes_block = 0.00 s 5093s [3875/8505] Psych::TestCoder#test_scalar_coder = 0.00 s 5093s [3876/8505] Psych::JSON::TestStream#test_explicit_documents = 0.00 s 5093s [3877/8505] Psych::JSON::TestStream#test_json_list_dump_exclude_tag = 0.00 s 5093s [3878/8505] Psych::JSON::TestStream#test_json_dump_exclude_tag = 0.00 s 5093s [3879/8505] JSONGeneratorTest#test_generate_custom = 0.00 s 5093s [3880/8505] JSONGeneratorTest#test_string_subclass = 0.00 s 5093s [3881/8505] JSONGeneratorTest#test_hash_likeness_set_symbol = 0.00 s 5093s [3882/8505] JSONGeneratorTest#test_gc = 0.00 s 5093s [3883/8505] JSONGeneratorTest#test_own_state = 0.00 s 5093s [3884/8505] JSONGeneratorTest#test_hash_likeness_set_string = 0.00 s 5093s [3885/8505] JSONGeneratorTest#test_backslash = 0.00 s 5093s [3886/8505] JSONGeneratorTest#test_nonutf8_encoding = 0.00 s 5093s [3887/8505] JSONGeneratorTest#test_generate = 0.00 s 5093s [3888/8505] JSONGeneratorTest#test_generate_pretty = 0.01 s 5093s [3889/8505] JSONGeneratorTest#test_configure_hash_conversion = 0.00 s 5093s [3890/8505] JSONGeneratorTest#test_nesting = 0.00 s 5093s [3891/8505] JSONGeneratorTest#test_allow_nan = 0.06 s 5093s [3892/8505] JSONGeneratorTest#test_broken_bignum = 0.00 s 5093s [3893/8505] JSONGeneratorTest#test_depth = 0.00 s 5093s [3894/8505] JSONGeneratorTest#test_states = 0.00 s 5093s [3895/8505] JSONGeneratorTest#test_json_generate = 0.00 s 5093s [3896/8505] JSONGeneratorTest#test_buffer_initial_length = 0.00 s 5093s [3897/8505] JSONGeneratorTest#test_configure_using_configure_and_merge = 0.00 s 5093s [3898/8505] JSONGeneratorTest#test_fast_generate = 0.00 s 5093s [3899/8505] OpenSSL::TestPKey#test_to_text = 0.00 s 5093s [3900/8505] TestCSVRow::DifferentOFS#test_has_key? = 0.00 s 5093s [3901/8505] TestCSVRow::DifferentOFS#test_field = 0.00 s 5093s [3902/8505] TestCSVRow::DifferentOFS#test_append = 0.01 s 5093s [3903/8505] TestCSVRow::DifferentOFS#test_delete_if = 0.00 s 5093s [3904/8505] TestCSVRow::DifferentOFS#test_each_pair = 0.00 s 5093s [3905/8505] TestCSVRow::DifferentOFS#test_dig_by_header = 0.00 s 5093s [3906/8505] TestCSVRow::DifferentOFS#test_dig_cell_no_dig = 0.00 s 5093s [3907/8505] TestCSVRow::DifferentOFS#test_dup = 0.00 s 5093s [3908/8505] TestCSVRow::DifferentOFS#test_headers = 0.00 s 5093s [3909/8505] TestCSVRow::DifferentOFS#test_set_field = 0.00 s 5093s [3910/8505] TestCSVRow::DifferentOFS#test_inspect_shows_header_field_pairs = 0.00 s 5093s [3911/8505] TestCSVRow::DifferentOFS#test_to_csv = 0.00 s 5093s [3912/8505] TestCSVRow::DifferentOFS#test_array_delegation = 0.00 s 5093s [3913/8505] TestCSVRow::DifferentOFS#test_delete_if_without_block = 0.00 s 5093s [3914/8505] TestCSVRow::DifferentOFS#test_fields = 0.00 s 5093s [3915/8505] TestCSVRow::DifferentOFS#test_delete = 0.00 s 5093s [3916/8505] TestCSVRow::DifferentOFS#test_to_hash = 0.00 s 5093s [3917/8505] TestCSVRow::DifferentOFS#test_inspect_shows_symbol_headers_as_bare_attributes = 0.00 s 5093s [3918/8505] TestCSVRow::DifferentOFS#test_initialize = 0.00 s 5093s [3919/8505] TestCSVRow::DifferentOFS#test_dig_by_index = 0.00 s 5093s [3920/8505] TestCSVRow::DifferentOFS#test_to_a = 0.00 s 5093s [3921/8505] TestCSVRow::DifferentOFS#test_can_be_compared_with_other_classes = 0.00 s 5093s [3922/8505] TestCSVRow::DifferentOFS#test_fetch = 0.00 s 5093s [3923/8505] TestCSVRow::DifferentOFS#test_queries = 0.00 s 5093s [3924/8505] TestCSVRow::DifferentOFS#test_each = 0.00 s 5093s [3925/8505] TestCSVRow::DifferentOFS#test_row_type = 0.00 s 5093s [3926/8505] TestCSVRow::DifferentOFS#test_index = 0.00 s 5093s [3927/8505] TestCSVRow::DifferentOFS#test_inspect_encoding_is_ascii_compatible = 0.00 s 5093s [3928/8505] TestCSVRow::DifferentOFS#test_can_be_compared_when_not_a_row = 0.00 s 5093s [3929/8505] TestCSVRow::DifferentOFS#test_enumerable = 0.00 s 5093s [3930/8505] TestCSVRow::DifferentOFS#test_dig_cell = 0.00 s 5093s [3931/8505] OpenSSL::TestPair#test_write_nonblock_retry = 0.29 s 5093s [3932/8505] OpenSSL::TestPair#test_multibyte_read_write = 0.15 s 5093s [3933/8505] OpenSSL::TestPair#test_write_nonblock_with_buffered_data_no_exceptions = 0.15 s 5093s [3934/8505] OpenSSL::TestPair#test_write_nonblock_with_buffered_data = 0.19 s 5094s [3935/8505] OpenSSL::TestPair#test_readall = 0.14 s 5094s [3936/8505] OpenSSL::TestPair#test_connect_accept_nonblock = 0.50 s 5094s [3937/8505] OpenSSL::TestPair#test_write_zero = 0.11 s 5094s [3938/8505] OpenSSL::TestPair#test_readline = 0.10 s 5094s [3939/8505] OpenSSL::TestPair#test_write_multiple_arguments = 0.14 s 5094s [3940/8505] OpenSSL::TestPair#test_puts_empty = 0.15 s 5094s [3941/8505] OpenSSL::TestPair#test_read_nonblock = 0.14 s 5094s [3942/8505] OpenSSL::TestPair#test_getc = 0.10 s 5094s [3943/8505] OpenSSL::TestPair#test_read_nonblock_no_exception = 0.14 s 5094s [3944/8505] OpenSSL::TestPair#test_partial_tls_record_read_nonblock = 0.10 s 5095s [3945/8505] OpenSSL::TestPair#test_gets_eof_limit = 0.14 s 5095s [3946/8505] OpenSSL::TestPair#test_readpartial = 0.15 s 5095s [3947/8505] OpenSSL::TestPair#test_gets = 0.14 s 5095s [3948/8505] TestCSVEncodings::DifferentOFS#test_parses_latin1_encoding = 0.02 s 5095s [3949/8505] TestCSVEncodings::DifferentOFS#test_csv_chars_are_transcoded = 0.02 s 5095s [3950/8505] TestCSVEncodings::DifferentOFS#test_row_separator_detection_with_invalid_encoding = 0.00 s 5095s [3951/8505] TestCSVEncodings::DifferentOFS#test_encoding_is_upgraded_for_ascii_content_during_writing_as_needed = 0.00 s 5095s [3952/8505] TestCSVEncodings::DifferentOFS#test_auto_line_ending_detection = 0.02 s 5095s [3953/8505] TestCSVEncodings::DifferentOFS#test_encoding_is_upgraded_during_writing_as_needed = 0.00 s 5095s [3954/8505] TestCSVEncodings::DifferentOFS#test_explicit_encoding = 0.00 s 5095s [3955/8505] TestCSVEncodings::DifferentOFS#test_parses_shift_jis_encoding = 0.02 s 5095s [3956/8505] TestCSVEncodings::DifferentOFS#test_parser_works_with_encoded_headers = 0.02 s 5096s [3957/8505] TestCSVEncodings::DifferentOFS#test_regular_expression_escaping = 0.77 s 5096s [3958/8505] TestCSVEncodings::DifferentOFS#test_read_allows_you_to_set_encodings = 0.02 s 5096s [3959/8505] TestCSVEncodings::DifferentOFS#test_invalid_encoding_row_error = 0.00 s 5096s [3960/8505] TestCSVEncodings::DifferentOFS#test_parses_utf8_encoding = 0.01 s 5096s [3961/8505] TestCSVEncodings::DifferentOFS#test_built_in_converters_transcode_to_utf_8_then_convert = 0.06 s 5096s [3962/8505] TestCSVEncodings::DifferentOFS#test_parses_utf16be_encoding = 0.01 s 5096s [3963/8505] TestCSVEncodings::DifferentOFS#test_reading_with_most_encodings = 0.64 s 5096s [3964/8505] TestCSVEncodings::DifferentOFS#test_encoding_with_default_internal = 0.00 s 5096s [3965/8505] TestCSVEncodings::DifferentOFS#test_encoding_is_not_upgraded_for_non_ascii_content_during_writing_as_needed = 0.00 s 5097s [3966/8505] TestCSVEncodings::DifferentOFS#test_open_allows_you_to_set_encodings = 0.10 s 5097s [3967/8505] TestCSVEncodings::DifferentOFS#test_can_write_csv_in_any_encoding = 0.35 s 5097s [3968/8505] TestCSVEncodings::DifferentOFS#test_foreach_allows_you_to_set_encodings = 0.02 s 5097s [3969/8505] TestCSVEncodings::DifferentOFS#test_read_with_default_encoding = 0.11 s 5097s [3970/8505] TestCSVEncodings::DifferentOFS#test_built_in_header_converters_transcode_to_utf_8_then_convert = 0.01 s 5097s [3971/8505] TestRDocRdBlockParser#test_parse_methodlist_paragraph_verbatim = 0.00 s 5097s [3972/8505] TestRDocRdBlockParser#test_parse_heading = 0.01 s 5097s [3973/8505] TestRDocRdBlockParser#test_parse_footnote = 0.01 s 5097s [3974/8505] TestRDocRdBlockParser#test_add_footnote = 0.00 s 5097s [3975/8505] TestRDocRdBlockParser#test_parse_verbatim_multi = 0.00 s 5097s [3976/8505] TestRDocRdBlockParser#test_parse_methodlist_empty = 0.01 s 5097s [3977/8505] TestRDocRdBlockParser#test_parse_include = 0.00 s 5097s [3978/8505] TestRDocRdBlockParser#test_parse_lists = 0.01 s 5097s [3979/8505] TestRDocRdBlockParser#test_parse_itemlist_nest = 0.01 s 5097s [3980/8505] TestRDocRdBlockParser#test_parse_desclist = 0.01 s 5097s [3981/8505] TestRDocRdBlockParser#test_parse_lists_nest = 0.00 s 5097s [3982/8505] TestRDocRdBlockParser#test_parse_textblock_multi = 0.00 s 5097s [3983/8505] TestRDocRdBlockParser#test_parse_methodlist = 0.01 s 5097s [3984/8505] TestRDocRdBlockParser#test_parse_enumlist = 0.00 s 5097s [3985/8505] TestRDocRdBlockParser#test_parse_itemlist_verbatim = 0.00 s 5097s [3986/8505] TestRDocRdBlockParser#test_parse_enumlist_paragraphs = 0.00 s 5097s [3987/8505] TestRDocRdBlockParser#test_parse_enumlist_verbatim = 0.00 s 5097s [3988/8505] TestRDocRdBlockParser#test_parse_itemlist_paragraphs = 0.00 s 5097s [3989/8505] TestRDocRdBlockParser#test_parse_verbatim_indent = 0.00 s 5097s [3990/8505] TestRDocRdBlockParser#test_parse_itemlist_verbatim_continue = 0.00 s 5097s [3991/8505] TestRDocRdBlockParser#test_parse_enumlist_verbatim_continue = 0.00 s 5097s [3992/8505] TestRDocRdBlockParser#test_parse_itemlist_multiline = 0.00 s 5097s [3993/8505] TestRDocRdBlockParser#test_parse_lists_nest_verbatim = 0.01 s 5097s [3994/8505] TestRDocRdBlockParser#test_parse_itemlist = 0.00 s 5097s [3995/8505] TestRDocRdBlockParser#test_parse_enumlist_multiline = 0.00 s 5097s [3996/8505] TestRDocRdBlockParser#test_parse_verbatim_blankline = 0.00 s 5097s [3997/8505] TestRDocRdBlockParser#test_parse_methodlist_paragraph2 = 0.00 s 5097s [3998/8505] TestRDocRdBlockParser#test_parse_methodlist_paragraph = 0.01 s 5097s [3999/8505] TestRDocRdBlockParser#test_parse_textblock = 0.00 s 5097s [4000/8505] TestRDocRdBlockParser#test_parse_lists_nest_verbatim2 = 0.00 s 5097s [4001/8505] TestRDocRdBlockParser#test_parse_verbatim = 0.00 s 5097s [4002/8505] TestRDocRdBlockParser#test_parse_include_subtree = 0.00 s 5097s [4003/8505] TestStringIOInRactor#test_ractor = 0.00 s 5097s [4004/8505] Reline::KeyStroke::Test#test_oneshot_key_bindings = 0.02 s 5097s [4005/8505] Reline::KeyStroke::Test#test_match_status = 0.02 s 5097s [4006/8505] Reline::KeyStroke::Test#test_expand = 0.00 s 5097s [4007/8505] Reline::KeyStroke::Test#test_with_reline_key = 0.01 s 5097s [4008/8505] TestDateMarshal#test_marshal = 0.00 s 5103s [4009/8505] TestIRB::TestRaiseNoBacktraceException#test_raise_exception = 5.42 s 5103s [4010/8505] TestBigDecimal#test_BigMath_log_with_negative_infinite = 0.00 s 5103s [4011/8505] TestBigDecimal#test_exp_with_zero_precision = 0.01 s 5103s [4012/8505] TestBigDecimal#test_scale_special = 0.00 s 5103s [4013/8505] TestBigDecimal#test_power_with_Bignum = 0.01 s 5103s [4014/8505] TestBigDecimal#test_llong_min_gh_200 = 0.00 s 5103s [4015/8505] TestBigDecimal#test_BigMath_log_with_non_integer_precision = 0.00 s 5103s [4016/8505] TestBigDecimal#test_BigMath_exp_with_rational = 0.02 s 5103s [4017/8505] TestBigDecimal#test_sub_with_float = 0.00 s 5103s [4018/8505] TestBigDecimal#test_div_with_complex = 0.00 s 5103s [4019/8505] TestBigDecimal#test_BigMath_log_with_1 = 0.00 s 5103s [4020/8505] TestBigDecimal#test_marshal = 0.00 s 5103s [4021/8505] TestBigDecimal#test_fix = 0.00 s 5103s [4022/8505] TestBigDecimal#test_sub = 0.00 s 5103s [4023/8505] TestBigDecimal#test_precision_special = 0.00 s 5103s [4024/8505] TestBigDecimal#test_zero_p = 0.00 s 5106s [4025/8505] TestBigDecimal#test_BigMath_exp_under_gc_stress = 2.88 s 5106s [4026/8505] TestBigDecimal#test_cmp_failing_coercion = 0.00 s 5108s [4027/8505] TestBigDecimal#test_split_under_gc_stress = 2.83 s 5108s [4028/8505] TestBigDecimal#test_to_special_string = 0.00 s 5109s [4029/8505] TestBigDecimal#test_cmp = 0.00 s 5109s [4030/8505] TestBigDecimal#test_hash = 0.00 s 5109s [4031/8505] TestBigDecimal#test_scale_only_integer = 0.00 s 5109s [4032/8505] TestBigDecimal#test_quo_without_prec = 0.00 s 5109s [4033/8505] TestBigDecimal#test_finite_infinite_nan = 0.00 s 5109s [4034/8505] TestBigDecimal#test_BigMath_log_with_zero_arg = 0.00 s 5109s [4035/8505] TestBigDecimal#test_n_significant_digits_special = 0.00 s 5109s [4036/8505] TestBigDecimal#test_exception_nan = 0.00 s 5109s [4037/8505] TestBigDecimal#test_precs_deprecated = 0.00 s 5109s [4038/8505] TestBigDecimal#test_sub_bigdecimal = 0.00 s 5109s [4039/8505] TestBigDecimal#test_mod_with_float = 0.00 s 5109s [4040/8505] TestBigDecimal#test_BigDecimal_with_rational = 0.00 s 5109s [4041/8505] TestBigDecimal#test_remainder_with_rational = 0.00 s 5109s [4042/8505] TestBigDecimal#test_sqrt_bigdecimal = 0.02 s 5109s [4043/8505] TestBigDecimal#test_BigDecimal_with_exception_keyword = 0.00 s 5109s [4044/8505] TestBigDecimal#test_round_half_invalid_option = 0.00 s 5109s [4045/8505] TestBigDecimal#test_save_limit = 0.00 s 5109s [4046/8505] TestBigDecimal#test_BigMath_log_with_exp_1 = 0.00 s 5112s [4047/8505] TestBigDecimal#test_bug6406 = 2.99 s 5112s [4048/8505] TestBigDecimal#test_BigMath_exp_with_float = 0.03 s 5112s [4049/8505] TestBigDecimal#test_round_half_down = 0.00 s 5112s [4050/8505] TestBigDecimal#test_split = 0.00 s 5112s [4051/8505] TestBigDecimal#test_round_half_up = 0.01 s 5112s [4052/8505] TestBigDecimal#test_mult = 0.00 s 5112s [4053/8505] TestBigDecimal#test_div_precision = 0.00 s 5112s [4054/8505] TestBigDecimal#test_BigMath_log_with_high_precision_case = 0.02 s 5112s [4055/8505] TestBigDecimal#test_BigMath_log_with_string = 0.00 s 5112s [4056/8505] TestBigDecimal#test_exp_with_negative = 0.01 s 5112s [4057/8505] TestBigDecimal#test_coerce = 0.00 s 5112s [4058/8505] TestBigDecimal#test_dup = 0.00 s 5112s [4059/8505] TestBigDecimal#test_BigMath_log_with_square_of_E = 0.01 s 5112s [4060/8505] TestBigDecimal#test_inspect = 0.00 s 5112s [4061/8505] TestBigDecimal#test_cmp_data = 0.00 s 5112s [4062/8505] TestBigDecimal#test_s_ver = 0.03 s 5112s [4063/8505] TestBigDecimal#test_mult_bigdecimal = 0.00 s 5112s [4064/8505] TestBigDecimal#test_BigMath_log_with_complex = 0.00 s 5112s [4065/8505] TestBigDecimal#test_frozen_p = 0.00 s 5112s [4066/8505] TestBigDecimal#test_BigMath_log_with_nil_precision = 0.00 s 5112s [4067/8505] TestBigDecimal#test_div_bigdecimal = 0.00 s 5112s [4068/8505] TestBigDecimal#test_to_r = 0.00 s 5112s [4069/8505] TestBigDecimal#test_n_significant_digits_only_integer = 0.00 s 5112s [4070/8505] TestBigDecimal#test_nonzero_p = 0.00 s 5112s [4071/8505] TestBigDecimal#test_BigMath_log_with_nan = 0.01 s 5112s [4072/8505] TestBigDecimal#test_precision_full = 0.00 s 5112s [4073/8505] TestBigDecimal#test_power_with_prec = 0.00 s 5112s [4074/8505] TestBigDecimal#test_initialize_copy_dup_clone_frozen_error = 0.00 s 5112s [4075/8505] TestBigDecimal#test_power_of_nan = 0.00 s 5112s [4076/8505] TestBigDecimal#test_power_of_three = 0.00 s 5112s [4077/8505] TestBigDecimal#test_NAN = 0.00 s 5112s [4078/8505] TestBigDecimal#test_cmp_nan = 0.00 s 5112s [4079/8505] TestBigDecimal#test_remainder = 0.00 s 5112s [4080/8505] TestBigDecimal#test_s_interpret_loosely = 0.00 s 5112s [4081/8505] TestBigDecimal#test_truncate = 0.00 s 5112s [4082/8505] TestBigDecimal#test_precision_only_integer = 0.00 s 5112s [4083/8505] TestBigDecimal#test_floor = 0.00 s 5112s [4084/8505] TestBigDecimal#test_mult_with_float = 0.00 s 5112s [4085/8505] TestBigDecimal#test_BigMath_log_with_positive_infinite = 0.00 s 5112s [4086/8505] TestBigDecimal#test_sub_with_rational = 0.00 s 5112s [4087/8505] TestBigDecimal#test_exp_with_negative_precision = 0.00 s 5112s [4088/8505] TestBigDecimal#test_BigDecimal_bug7522 = 0.00 s 5112s [4089/8505] TestBigDecimal#test_exponent = 0.00 s 5112s [4090/8505] TestBigDecimal#test_sign = 0.00 s 5112s [4091/8505] TestBigDecimal#test_remainder_with_float = 0.00 s 5112s [4092/8505] TestBigDecimal#test_BigDecimal_with_big_decimal = 0.00 s 5112s [4093/8505] TestBigDecimal#test_INFINITY = 0.00 s 5112s [4094/8505] TestBigDecimal#test_div_error = 0.00 s 5112s [4095/8505] TestBigDecimal#test_div_with_float = 0.00 s 5112s [4096/8505] TestBigDecimal#test_exception_zerodivide = 0.01 s 5112s [4097/8505] TestBigDecimal#test_to_string = 0.00 s 5112s [4098/8505] TestBigDecimal#test_to_f = 0.13 s 5112s [4099/8505] TestBigDecimal#test_inf = 0.00 s 5112s [4100/8505] TestBigDecimal#test_div_with_rational = 0.00 s 5112s [4101/8505] TestBigDecimal#test_power_of_negative_infinity = 0.00 s 5112s [4102/8505] TestBigDecimal#test_round_half_even = 0.00 s 5112s [4103/8505] TestBigDecimal#test_s_allocate = 0.00 s 5112s [4104/8505] TestBigDecimal#test_uplus = 0.00 s 5112s [4105/8505] TestBigDecimal#test_ceil = 0.00 s 5112s [4106/8505] TestBigDecimal#test_power_without_prec = 0.03 s 5112s [4107/8505] TestBigDecimal#test_div_bigdecimal_with_float_and_precision = 0.00 s 5112s [4108/8505] TestBigDecimal#test_BigMath_exp = 0.01 s 5112s [4109/8505] TestBigDecimal#test_to_i = 0.00 s 5112s [4110/8505] TestBigDecimal#test_cmp_issue9192 = 0.01 s 5112s [4111/8505] TestBigDecimal#test_add_bigdecimal = 0.00 s 5112s [4112/8505] TestBigDecimal#test_n_significant_digits_full = 0.00 s 5112s [4113/8505] TestBigDecimal#test_quo_with_prec = 0.00 s 5112s [4114/8505] TestBigDecimal#test_BigDecimal = 0.00 s 5112s [4115/8505] TestBigDecimal#test_precision_scale = 0.00 s 5112s [4116/8505] TestBigDecimal#test_add = 0.00 s 5112s [4117/8505] TestBigDecimal#test_BigDecimal_with_complex = 0.00 s 5112s [4118/8505] TestBigDecimal#test_cmp_coerce = 0.00 s 5112s [4119/8505] TestBigDecimal#test_BigMath_log_with_negative_arg = 0.00 s 5112s [4120/8505] TestBigDecimal#test_exp_with_complex = 0.00 s 5112s [4121/8505] TestBigDecimal#test_mult_with_nil = 0.00 s 5112s [4122/8505] TestBigDecimal#test_frac = 0.00 s 5112s [4123/8505] TestBigDecimal#test_round = 0.01 s 5112s [4124/8505] TestBigDecimal#test_divmod_precision = 0.00 s 5116s [4125/8505] TestBigDecimal#test_power = 3.99 s 5116s [4126/8505] TestBigDecimal#test_mode = 0.01 s 5116s [4127/8505] TestBigDecimal#test_double_fig = 0.00 s 5119s [4128/8505] TestBigDecimal#test_coerce_under_gc_stress = 2.88 s 5119s [4129/8505] TestBigDecimal#test_exp_with_nan = 0.00 s 5119s [4130/8505] TestBigDecimal#test_divmod = 0.00 s 5124s [4131/8505] TestBigDecimal#test_precs = 4.77 s 5124s [4132/8505] TestBigDecimal#test_mod = 0.00 s 5124s [4133/8505] TestBigDecimal#test_save_exception_mode = 0.00 s 5124s [4134/8505] TestBigDecimal#test_exp_with_negative_infinite = 0.00 s 5124s [4135/8505] TestBigDecimal#test_power_with_nil = 0.00 s 5124s [4136/8505] TestBigDecimal#test_to_s = 0.00 s 5124s [4137/8505] TestBigDecimal#test_BigDecimal_issue_192 = 0.00 s 5124s [4138/8505] TestBigDecimal#test_BigMath_log_with_float_nan = 0.00 s 5124s [4139/8505] TestBigDecimal#test_BigMath_log_with_reciprocal_of_42 = 0.00 s 5124s [4140/8505] TestBigDecimal#test_abs_bigdecimal = 0.00 s 5124s [4141/8505] TestBigDecimal#test_neg = 0.00 s 5124s [4142/8505] TestBigDecimal#test_exception_infinity = 0.00 s 5124s [4143/8505] TestBigDecimal#test_ctov = 0.00 s 5124s [4144/8505] TestBigDecimal#test_exception_underflow = 0.00 s 5124s [4145/8505] TestBigDecimal#test_power_of_zero = 0.00 s 5124s [4146/8505] TestBigDecimal#test_divmod_error = 0.00 s 5124s [4147/8505] TestBigDecimal#test_scale_full = 0.00 s 5124s [4148/8505] TestBigDecimal#test_exp_with_positive_infinite = 0.00 s 5124s [4149/8505] TestBigDecimal#test_BigDecimal_with_float = 0.00 s 5124s [4150/8505] TestBigDecimal#test_sqrt_5266 = 0.09 s 5124s [4151/8505] TestBigDecimal#test_BigDecimal_with_integer = 0.00 s 5124s [4152/8505] TestBigDecimal#test_power_with_BigDecimal = 0.00 s 5124s [4153/8505] TestBigDecimal#test_save_rounding_mode = 0.00 s 5124s [4154/8505] TestBigDecimal#test_power_of_finite_with_zero = 0.00 s 5124s [4155/8505] TestBigDecimal#test_exp_with_1 = 0.00 s 5124s [4156/8505] TestBigDecimal#test_cmp_bignum = 0.00 s 5124s [4157/8505] TestBigDecimal#test_BigMath_exp_with_fixnum = 0.00 s 5124s [4158/8505] TestBigDecimal#test_n_significant_digits_only_fraction = 0.00 s 5124s [4159/8505] TestBigDecimal#test_BigDecimal_with_invalid_string = 0.03 s 5124s [4160/8505] TestBigDecimal#test_reminder_infinity_gh_187 = 0.00 s 5124s [4161/8505] TestBigDecimal#test_scale_only_fraction = 0.00 s 5124s [4162/8505] TestBigDecimal#test_not_equal = 0.00 s 5124s [4163/8505] TestBigDecimal#test_clone = 0.01 s 5124s [4164/8505] TestBigDecimal#test_BigMath_log_with_101 = 0.00 s 5124s [4165/8505] TestBigDecimal#test_BigMath_log_with_42 = 0.00 s 5124s [4166/8505] TestBigDecimal#test_BigMath_log_with_nil = 0.00 s 5124s [4167/8505] TestBigDecimal#test_power_of_positive_infinity = 0.00 s 5124s [4168/8505] TestBigDecimal#test_round_half_nil = 0.00 s 5131s [4169/8505] TestBigDecimal#test_BigMath_log_under_gc_stress = 6.60 s 5132s [4170/8505] TestBigDecimal#test_div = 0.85 s 5132s [4171/8505] TestBigDecimal#test_BigMath_log_with_zero_precision = 0.06 s 5132s [4172/8505] TestBigDecimal#test_mult_with_rational = 0.00 s 5132s [4173/8505] TestBigDecimal#test_BigMath_log_with_negative_precision = 0.01 s 5132s [4174/8505] TestBigDecimal#test_precision_only_fraction = 0.00 s 5132s [4175/8505] TestBigDecimal#test_BigMath_log_with_2 = 0.02 s 5132s [4176/8505] TestBigDecimal#test_mod_with_rational = 0.00 s 5132s [4177/8505] Psych::Visitors::TestDepthFirst#test_alias = 0.39 s 5132s [4178/8505] Psych::Visitors::TestDepthFirst#test_scalar = 0.03 s 5132s [4179/8505] Psych::Visitors::TestDepthFirst#test_sequence = 0.00 s 5132s [4180/8505] Psych::Visitors::TestDepthFirst#test_mapping = 0.00 s 5132s [4181/8505] TestRDocParserRuby#test_parse_method_no_parens = 0.13 s 5133s [4182/8505] TestRDocParserRuby#test_parse_meta_attr_reader = 0.08 s 5133s [4183/8505] TestRDocParserRuby#test_parse_mutable_heredocbeg = 0.02 s 5133s [4184/8505] TestRDocParserRuby#test_look_for_directives_in_unhandled = 0.01 s 5133s [4185/8505] TestRDocParserRuby#test_scan_method_semi_method = 0.01 s 5133s [4186/8505] TestRDocParserRuby#test_parse_method_parameters_with_paren_comment_continue = 0.02 s 5133s [4187/8505] TestRDocParserRuby#test_parse_class_ghost_method_yields = 0.01 s 5133s [4188/8505] TestRDocParserRuby#test_parse_statements_class_if = 0.01 s 5133s [4189/8505] TestRDocParserRuby#test_parse_method_internal_ivar = 0.07 s 5133s [4190/8505] TestRDocParserRuby#test_parse_attr_stopdoc = 0.01 s 5133s [4191/8505] TestRDocParserRuby#test_read_documentation_modifiers = 0.02 s 5133s [4192/8505] TestRDocParserRuby#test_parse_statements_identifier_yields = 0.01 s 5133s [4193/8505] TestRDocParserRuby#test_parse_method_internal_lvar = 0.01 s 5133s [4194/8505] TestRDocParserRuby#test_parse_meta_method = 0.03 s 5133s [4195/8505] TestRDocParserRuby#test_parse_extend_or_include_extend = 0.00 s 5133s [4196/8505] TestRDocParserRuby#test_get_symbol_or_name = 0.00 s 5133s [4197/8505] TestRDocParserRuby#test_parse_require_dynamic_string = 0.01 s 5133s [4198/8505] TestRDocParserRuby#test_parse_alias_singleton = 0.00 s 5133s [4199/8505] TestRDocParserRuby#test_scan_visibility = 0.02 s 5133s [4200/8505] TestRDocParserRuby#test_parse_statements_postfix_if_after_heredocbeg = 0.01 s 5133s [4201/8505] TestRDocParserRuby#test_read_documentation_modifiers_not_dash_new = 0.00 s 5133s [4202/8505] TestRDocParserRuby#test_parse_method_stopdoc = 0.00 s 5133s [4203/8505] TestRDocParserRuby#test_parse_meta_method_name = 0.00 s 5133s [4204/8505] TestRDocParserRuby#test_parse_method_gvar = 0.00 s 5133s [4205/8505] TestRDocParserRuby#test_read_directive_allow = 0.00 s 5133s [4206/8505] TestRDocParserRuby#test_scan_constant_nodoc = 0.00 s 5133s [4207/8505] TestRDocParserRuby#test_parse_statements_postfix_if_unless = 0.01 s 5133s [4208/8505] TestRDocParserRuby#test_look_for_directives_in_section = 0.00 s 5133s [4209/8505] TestRDocParserRuby#test_parse_statements_stopdoc_identifier_metaprogrammed = 0.07 s 5133s [4210/8505] TestRDocParserRuby#test_parse_syntax_error_code = 0.02 s 5133s [4211/8505] TestRDocParserRuby#test_parse_include_by_dynamic_definition_without_paren = 0.02 s 5133s [4212/8505] TestRDocParserRuby#test_parse_meta_method_define_method = 0.00 s 5133s [4213/8505] TestRDocParserRuby#test_parse_statements_identifier_include = 0.00 s 5133s [4214/8505] TestRDocParserRuby#test_parse_meta_method_stopdoc = 0.00 s 5133s [4215/8505] TestRDocParserRuby#test_suppress_parents_documented = 0.01 s 5133s [4216/8505] TestRDocParserRuby#test_parse_const_alias_defined_far_away = 0.01 s 5133s [4217/8505] TestRDocParserRuby#test_parse_statements_super = 0.00 s 5133s [4218/8505] TestRDocParserRuby#test_collect_first_comment_rd_hash = 0.00 s 5133s [4219/8505] TestRDocParserRuby#test_parse_statements_stopdoc_def = 0.01 s 5133s [4220/8505] TestRDocParserRuby#test_parse_comment_attr_attr_reader = 0.01 s 5133s [4221/8505] TestRDocParserRuby#test_scan_block_comment_notflush = 0.01 s 5133s [4222/8505] TestRDocParserRuby#test_parse_module_relative_to_top_level_namespace = 0.01 s 5133s [4223/8505] TestRDocParserRuby#test_parse_method_funky = 0.01 s 5133s [4224/8505] TestRDocParserRuby#test_read_documentation_modifiers_not_new = 0.00 s 5133s [4225/8505] TestRDocParserRuby#test_parse_statements_identifier_attr_accessor = 0.02 s 5133s [4226/8505] TestRDocParserRuby#test_parse_statements_identifier_alias_method = 0.01 s 5133s [4227/8505] TestRDocParserRuby#test_parse_top_level_statements_constant_nodoc_integration = 0.01 s 5133s [4228/8505] TestRDocParserRuby#test_parse_statements_embdoc_in_document = 0.08 s 5133s [4229/8505] TestRDocParserRuby#test_parse_class_the_same_of_outside = 0.01 s 5133s [4230/8505] TestRDocParserRuby#test_parse_comment_method = 0.01 s 5133s [4231/8505] TestRDocParserRuby#test_parse_statements_encoding = 0.01 s 5133s [4232/8505] TestRDocParserRuby#test_parse_include_by_dynamic_definition = 0.01 s 5133s [4233/8505] TestRDocParserRuby#test_scan_block_comment_nested = 0.01 s 5133s [4234/8505] TestRDocParserRuby#test_read_directive = 0.00 s 5133s [4235/8505] TestRDocParserRuby#test_parse_method = 0.01 s 5133s [4236/8505] TestRDocParserRuby#test_read_directive_empty = 0.00 s 5133s [4237/8505] TestRDocParserRuby#test_singleton_method_via_eigenclass = 0.01 s 5133s [4238/8505] TestRDocParserRuby#test_parse_statements_identifier_define_method = 0.01 s 5133s [4239/8505] TestRDocParserRuby#test_scan_class_nested_nodoc = 0.01 s 5133s [4240/8505] TestRDocParserRuby#test_parse_statements_identifier_constant = 0.01 s 5133s [4241/8505] TestRDocParserRuby#test_parse_method_toplevel = 0.00 s 5133s [4242/8505] TestRDocParserRuby#test_parse_method_dummy = 0.00 s 5133s [4243/8505] TestRDocParserRuby#test_parse_statements_stopdoc_constant = 0.00 s 5133s [4244/8505] TestRDocParserRuby#test_parse_attr_accessor_with_newline = 0.01 s 5133s [4245/8505] TestRDocParserRuby#test_parse_call_syntax_sugar_for_constant = 0.01 s 5133s [4246/8505] TestRDocParserRuby#test_parse_class_stopdoc = 0.00 s 5133s [4247/8505] TestRDocParserRuby#test_parse_method_parameters_comment = 0.00 s 5133s [4248/8505] TestRDocParserRuby#test_parse_comment_attr = 0.01 s 5133s [4249/8505] TestRDocParserRuby#test_parse_statements_identifier_args = 0.01 s 5133s [4250/8505] TestRDocParserRuby#test_sanity_interpolation_format = 0.00 s 5133s [4251/8505] TestRDocParserRuby#test_parse_statements_complex_condition_in_for = 0.02 s 5133s [4252/8505] TestRDocParserRuby#test_parse_class_colon3_self_reference = 0.01 s 5133s [4253/8505] TestRDocParserRuby#test_parse_class_definition_encountered_after_class_reference = 0.01 s 5133s [4254/8505] TestRDocParserRuby#test_scan_constant_in_rescue = 0.01 s 5133s [4255/8505] TestRDocParserRuby#test_parse_meta_attr_writer = 0.01 s 5133s [4256/8505] TestRDocParserRuby#test_scan_constant_visibility = 0.01 s 5133s [4257/8505] TestRDocParserRuby#test_end_that_doesnt_belong_to_class_doesnt_change_visibility = 0.01 s 5133s [4258/8505] TestRDocParserRuby#test_parse_meta_attr_accessor = 0.01 s 5133s [4259/8505] TestRDocParserRuby#test_parse_statements_identifier_attr = 0.00 s 5133s [4260/8505] TestRDocParserRuby#test_parse_attr_accessor_nodoc = 0.00 s 5133s [4261/8505] TestRDocParserRuby#test_get_class_specification = 0.01 s 5134s [4262/8505] TestRDocParserRuby#test_scan_struct_self_brackets = 0.02 s 5134s [4263/8505] TestRDocParserRuby#test_parse_for_in = 0.01 s 5134s [4264/8505] TestRDocParserRuby#test_scan_stopdoc_nested = 0.01 s 5134s [4265/8505] TestRDocParserRuby#test_parse_constant_with_bracket = 0.06 s 5134s [4266/8505] TestRDocParserRuby#test_parse_class_multi_ghost_methods = 0.02 s 5134s [4267/8505] TestRDocParserRuby#test_parse_constant_alias_same_name = 0.01 s 5134s [4268/8505] TestRDocParserRuby#test_parse_alias_meta = 0.01 s 5134s [4269/8505] TestRDocParserRuby#test_document_after_rescue_inside_paren = 0.02 s 5134s [4270/8505] TestRDocParserRuby#test_parse_method_nodoc_track = 0.01 s 5134s [4271/8505] TestRDocParserRuby#test_parse_meta_method_singleton = 0.00 s 5134s [4272/8505] TestRDocParserRuby#test_parse_constant_alias = 0.03 s 5134s [4273/8505] TestRDocParserRuby#test_parse_const_alias_defined_elsewhere = 0.01 s 5134s [4274/8505] TestRDocParserRuby#test_parse_include_by_dynamic_definition_directly = 0.01 s 5134s [4275/8505] TestRDocParserRuby#test_parse_alias_stopdoc = 0.00 s 5134s [4276/8505] TestRDocParserRuby#test_parse_module_nodoc = 0.00 s 5134s [4277/8505] TestRDocParserRuby#test_parse_symbol_in_arg = 0.00 s 5134s [4278/8505] TestRDocParserRuby#test_parse_method_toplevel_class = 0.01 s 5134s [4279/8505] TestRDocParserRuby#test_stopdoc_after_comment = 0.01 s 5134s [4280/8505] TestRDocParserRuby#test_parse_method_false = 0.01 s 5134s [4281/8505] TestRDocParserRuby#test_read_directive_no_comment = 0.00 s 5134s [4282/8505] TestRDocParserRuby#test_parse_method_utf8 = 0.02 s 5134s [4283/8505] TestRDocParserRuby#test_parse_statements_postfix_if_unless_with_expr_mid = 0.01 s 5134s [4284/8505] TestRDocParserRuby#test_parse_method_star = 0.01 s 5134s [4285/8505] TestRDocParserRuby#test_parse_statements_alias_method = 0.01 s 5134s [4286/8505] TestRDocParserRuby#test_parse_constant_attrasgn = 0.00 s 5134s [4287/8505] TestRDocParserRuby#test_get_class_or_module = 0.01 s 5134s [4288/8505] TestRDocParserRuby#test_parse_postfix_nodoc = 0.01 s 5134s [4289/8505] TestRDocParserRuby#test_parse_attr = 0.01 s 5134s [4290/8505] TestRDocParserRuby#test_parse_class_single_gvar = 0.01 s 5134s [4291/8505] TestRDocParserRuby#test_parse_statements_identifier_module_function = 0.01 s 5134s [4292/8505] TestRDocParserRuby#test_parse_statements_method_oneliner_with_regexp = 0.04 s 5134s [4293/8505] TestRDocParserRuby#test_scan_tomdoc_meta = 0.01 s 5134s [4294/8505] TestRDocParserRuby#test_parse_class_single = 0.04 s 5134s [4295/8505] TestRDocParserRuby#test_parse_attr_accessor_writer = 0.00 s 5134s [4296/8505] TestRDocParserRuby#test_get_class_or_module_ignore_constants = 0.01 s 5134s [4297/8505] TestRDocParserRuby#test_parse_top_level_statements_enddoc = 0.02 s 5134s [4298/8505] TestRDocParserRuby#test_scan_visibility_count = 0.08 s 5134s [4299/8505] TestRDocParserRuby#test_scan_markup_override = 0.01 s 5134s [4300/8505] TestRDocParserRuby#test_sanity_symbol_interpolation = 0.01 s 5134s [4301/8505] TestRDocParserRuby#test_parse_statements_enddoc = 0.01 s 5134s [4302/8505] TestRDocParserRuby#test_scan_constant_nodoc_block = 0.01 s 5134s [4303/8505] TestRDocParserRuby#test_parse_attr_accessor_nodoc_track = 0.01 s 5134s [4304/8505] TestRDocParserRuby#test_parse_class_in_a_file_repeatedly = 0.01 s 5134s [4305/8505] TestRDocParserRuby#test_scan_cr = 0.01 s 5134s [4306/8505] TestRDocParserRuby#test_read_documentation_modifiers_notnew = 0.00 s 5134s [4307/8505] TestRDocParserRuby#test_parse_meta_method_unknown = 0.01 s 5134s [4308/8505] TestRDocParserRuby#test_parse_yield_in_braces_with_parens = 0.01 s 5134s [4309/8505] TestRDocParserRuby#test_parse_class_nested_superclass = 0.00 s 5134s [4310/8505] TestRDocParserRuby#test_scan_stopdoc_class_alias = 0.00 s 5134s [4311/8505] TestRDocParserRuby#test_parse_comment_method_args = 0.00 s 5134s [4312/8505] TestRDocParserRuby#test_get_class_or_module_document_children = 0.01 s 5134s [4313/8505] TestRDocParserRuby#test_scan_block_comment = 0.01 s 5134s [4314/8505] TestRDocParserRuby#test_scan_markup_first_comment = 0.01 s 5134s [4315/8505] TestRDocParserRuby#test_parse_class_lower_name_warning = 0.01 s 5134s [4316/8505] TestRDocParserRuby#test_scan_duplicate_module = 0.01 s 5134s [4317/8505] TestRDocParserRuby#test_parse_method_gvar_insane = 0.00 s 5134s [4318/8505] TestRDocParserRuby#test_parse_alias = 0.00 s 5134s [4319/8505] TestRDocParserRuby#test_sanity_interpolation_curly = 0.00 s 5134s [4320/8505] TestRDocParserRuby#test_parse_statements_identifier_public_class_method = 0.01 s 5134s [4321/8505] TestRDocParserRuby#test_parse_meta_method_singleton_name = 0.00 s 5134s [4322/8505] TestRDocParserRuby#test_parse_comment_attr_stopdoc = 0.00 s 5134s [4323/8505] TestRDocParserRuby#test_parse_statements_while_begin = 0.01 s 5134s [4324/8505] TestRDocParserRuby#test_parse_redefined_op_with_constant = 0.02 s 5134s [4325/8505] TestRDocParserRuby#test_sanity_interpolation = 0.01 s 5134s [4326/8505] TestRDocParserRuby#test_parse_heredoc_end = 0.01 s 5134s [4327/8505] TestRDocParserRuby#test_parse_meta_attr = 0.00 s 5134s [4328/8505] TestRDocParserRuby#test_parse_class_object = 0.01 s 5134s [4329/8505] TestRDocParserRuby#test_parse_method_or_yield_parameters_hash = 0.00 s 5134s [4330/8505] TestRDocParserRuby#test_parse_multi_ghost_methods = 0.01 s 5134s [4331/8505] TestRDocParserRuby#test_parse_constant_rescue = 0.00 s 5134s [4332/8505] TestRDocParserRuby#test_parse_class_colon3 = 0.00 s 5134s [4333/8505] TestRDocParserRuby#test_parse_comment_nested = 0.01 s 5134s [4334/8505] TestRDocParserRuby#test_parse_class = 0.00 s 5134s [4335/8505] TestRDocParserRuby#test_scan_rails_routes = 0.00 s 5134s [4336/8505] TestRDocParserRuby#test_parse_constant_stopdoc = 0.00 s 5134s [4337/8505] TestRDocParserRuby#test_parse_include_by_dynamic_definition_with_brace = 0.01 s 5134s [4338/8505] TestRDocParserRuby#test_parse_statements_identifier_require = 0.00 s 5134s [4339/8505] TestRDocParserRuby#test_parse_top_level_statements_stopdoc_integration = 0.00 s 5134s [4340/8505] TestRDocParserRuby#test_parse_module = 0.01 s 5134s [4341/8505] TestRDocParserRuby#test_parse_statements_def_percent_string_pound = 0.01 s 5134s [4342/8505] TestRDocParserRuby#test_collect_first_comment_encoding = 0.00 s 5134s [4343/8505] TestRDocParserRuby#test_parse_method_with_args_directive = 0.01 s 5134s [4344/8505] TestRDocParserRuby#test_parse_statements_identifier_private_class_method = 0.01 s 5134s [4345/8505] TestRDocParserRuby#test_parse_include_by_dynamic_definition_via_variable = 0.01 s 5134s [4346/8505] TestRDocParserRuby#test_parse_constant = 0.00 s 5134s [4347/8505] TestRDocParserRuby#test_parse_statements_class_nested = 0.01 s 5134s [4348/8505] TestRDocParserRuby#test_parse_method_parameters_comment_continue = 0.00 s 5134s [4349/8505] TestRDocParserRuby#test_scan_meta_method_block = 0.01 s 5134s [4350/8505] TestRDocParserRuby#test_parse_statements_super_no_method = 0.00 s 5134s [4351/8505] TestRDocParserRuby#test_parse_method_ampersand = 0.00 s 5134s [4352/8505] TestRDocParserRuby#test_parse_const_third_party = 0.01 s 5134s [4353/8505] TestRDocParserRuby#test_parse_meta_method_string_name = 0.00 s 5134s [4354/8505] TestRDocParserRuby#test_parse_statements_enddoc_top_level = 0.01 s 5134s [4355/8505] TestRDocParserRuby#test_parse_const_fail_w_meta = 0.01 s 5134s [4356/8505] TestRDocParserRuby#test_parse_on_ignored_nl_with_nil_text = 0.01 s 5134s [4357/8505] TestRDocParserRuby#test_parse_method_true = 0.00 s 5134s [4358/8505] TestRDocParserRuby#test_parse_constant_in_method = 0.00 s 5134s [4359/8505] TestRDocParserRuby#test_parse_meta_attr_stopdoc = 0.00 s 5134s [4360/8505] TestRDocParserRuby#test_collect_first_comment = 0.00 s 5134s [4361/8505] TestRDocParserRuby#test_parse_method_nil = 0.01 s 5134s [4362/8505] TestRDocParserRuby#test_parse_class_singleton = 0.00 s 5135s [4363/8505] TestRDocParserRuby#test_parse_statements_identifier_alias_method_before_original_method = 0.01 s 5135s [4364/8505] TestRDocParserRuby#test_parse_top_level_statements_stopdoc = 0.01 s 5135s [4365/8505] TestRDocParserRuby#test_parse_attr_accessor = 0.00 s 5135s [4366/8505] TestRDocParserRuby#test_parse_included = 0.01 s 5135s [4367/8505] TestRDocParserRuby#test_parse_module_stopdoc = 0.00 s 5135s [4368/8505] TestRDocParserRuby#test_parse_meta_method_block = 0.00 s 5135s [4369/8505] TestRDocParserRuby#test_scan_constant_in_method = 0.00 s 5135s [4370/8505] TestRDocParserRuby#test_parse_extend_or_include_include = 0.00 s 5135s [4371/8505] TestRDocParserRuby#test_sanity_integer = 0.00 s 5135s [4372/8505] TestRDocParserRuby#test_parse_statements_identifier_private = 0.00 s 5135s [4373/8505] TestRDocParserRuby#test_scan_stopdoc = 0.00 s 5135s [4374/8505] TestRDocParserRuby#test_parse_method_constant = 0.03 s 5135s [4375/8505] TestRDocParserRuby#test_parse_class_mistaken_for_module = 0.01 s 5135s [4376/8505] TestRDocParserRuby#test_read_directive_one_liner = 0.00 s 5135s [4377/8505] TestRDocParserRuby#test_parse_statements_stopdoc_identifier_alias_method = 0.01 s 5135s [4378/8505] TestRDocParserRuby#test_look_for_directives_in_commented = 0.00 s 5135s [4379/8505] TestRDocParserRuby#test_parse_method_bracket = 0.01 s 5135s [4380/8505] TestRDocParserRuby#test_parse_comment_method_stopdoc = 0.00 s 5135s [4381/8505] TestRDocParserRuby#test_look_for_directives_in_attr = 0.01 s 5135s [4382/8505] TestRDocParserRuby#test_parse_method_alias = 0.01 s 5135s [4383/8505] TestRDocParserRuby#test_parse_method_nodoc = 0.01 s 5135s [4384/8505] TestRDocParserRuby#test_parse_symbol_in_paren_arg = 0.00 s 5135s [4385/8505] TestRDocParserRuby#test_parse_class_single_root = 0.00 s 5135s [4386/8505] TestRDocParserRuby#test_sanity_interpolation_crazy = 0.00 s 5135s [4387/8505] TestRDocParserRuby#test_parse_meta_attr_named = 0.01 s 5135s [4388/8505] TestRDocParserRuby#test_parse_instance_operation_method = 0.01 s 5135s [4389/8505] TestRDocParserRuby#test_parse_statements_stopdoc_alias = 0.00 s 5135s [4390/8505] TestRDocParserRuby#test_parse_method_internal_gvar = 0.00 s 5135s [4391/8505] TestRDocParserRuby#test_parse_class_nodoc = 0.00 s 5135s [4392/8505] TestRDocParserRuby#test_parse_attr_accessor_stopdoc = 0.00 s 5135s [4393/8505] TestRDocParserRuby#test_suppress_parents = 0.00 s 5135s [4394/8505] TestRDocParserRuby#test_parse_class_ghost_method = 0.01 s 5135s [4395/8505] TestRDocParserRuby#test_parse_statements_identifier_meta_method = 0.01 s 5135s [4396/8505] TestRDocParserRuby#test_look_for_directives_in_method = 0.00 s 5135s [4397/8505] TestRDocParserRuby#test_parse_constant_the_same_of_outside = 0.01 s 5135s [4398/8505] Reline::MacroTest#test_alias = 0.02 s 5135s [4399/8505] Reline::MacroTest#test_simple_input = 0.01 s 5135s [4400/8505] TestRDocParserRd#test_file = 0.00 s 5135s [4401/8505] TestRDocParserRd#test_class_can_parse = 0.02 s 5135s [4402/8505] TestRDocParserRd#test_scan = 0.01 s 5135s [4403/8505] TestRDocMarkupToLabel#test_accept_heading_1 = 0.00 s 5135s [4404/8505] TestRDocMarkupToLabel#test_accept_heading_3 = 0.00 s 5135s [4405/8505] TestRDocMarkupToLabel#test_accept_heading_suppressed_crossref = 0.00 s 5135s [4406/8505] TestRDocMarkupToLabel#test_accept_list_start_ualpha = 0.00 s 5135s [4407/8505] TestRDocMarkupToLabel#test_accept_paragraph_break = 0.00 s 5135s [4408/8505] TestRDocMarkupToLabel#test_accept_block_quote = 0.00 s 5135s [4409/8505] TestRDocMarkupToLabel#test_accept_list_item_start_label = 0.00 s 5135s [4410/8505] TestRDocMarkupToLabel#test_accept_list_end_bullet = 0.00 s 5135s [4411/8505] TestRDocMarkupToLabel#test_accept_rule = 0.00 s 5135s [4412/8505] TestRDocMarkupToLabel#test_accept_list_item_end_bullet = 0.00 s 5135s [4413/8505] TestRDocMarkupToLabel#test_accept_paragraph_underscore = 0.00 s 5135s [4414/8505] TestRDocMarkupToLabel#test_accept_list_item_start_bullet = 0.00 s 5135s [4415/8505] TestRDocMarkupToLabel#test_convert_tidylink = 0.01 s 5135s [4416/8505] TestRDocMarkupToLabel#test_accept_list_end_label = 0.00 s 5135s [4417/8505] TestRDocMarkupToLabel#test_accept_heading = 0.00 s 5135s [4418/8505] TestRDocMarkupToLabel#test_accept_list_start_lalpha = 0.05 s 5135s [4419/8505] TestRDocMarkupToLabel#test_list_nested = 0.00 s 5135s [4420/8505] TestRDocMarkupToLabel#test_accept_heading_b = 0.00 s 5135s [4421/8505] TestRDocMarkupToLabel#test_accept_list_item_start_number = 0.00 s 5135s [4422/8505] TestRDocMarkupToLabel#test_accept_document = 0.00 s 5135s [4423/8505] TestRDocMarkupToLabel#test_accept_list_item_end_number = 0.00 s 5135s [4424/8505] TestRDocMarkupToLabel#test_accept_list_end_number = 0.00 s 5135s [4425/8505] TestRDocMarkupToLabel#test_accept_paragraph_i = 0.00 s 5135s [4426/8505] TestRDocMarkupToLabel#test_accept_verbatim = 0.00 s 5135s [4427/8505] TestRDocMarkupToLabel#test_convert_escape = 0.00 s 5135s [4428/8505] TestRDocMarkupToLabel#test_convert_tt = 0.00 s 5135s [4429/8505] TestRDocMarkupToLabel#test_list_verbatim = 0.00 s 5135s [4430/8505] TestRDocMarkupToLabel#test_accept_list_end_ualpha = 0.00 s 5135s [4431/8505] TestRDocMarkupToLabel#test_accept_list_item_end_ualpha = 0.00 s 5135s [4432/8505] TestRDocMarkupToLabel#test_convert_crossref = 0.01 s 5135s [4433/8505] TestRDocMarkupToLabel#test_accept_list_item_start_ualpha = 0.00 s 5135s [4434/8505] TestRDocMarkupToLabel#test_accept_paragraph_b = 0.00 s 5135s [4435/8505] TestRDocMarkupToLabel#test_accept_paragraph_plus = 0.00 s 5135s [4436/8505] TestRDocMarkupToLabel#test_accept_list_item_end_label = 0.00 s 5135s [4437/8505] TestRDocMarkupToLabel#test_accept_list_start_bullet = 0.00 s 5135s [4438/8505] TestRDocMarkupToLabel#test_accept_list_start_note = 0.00 s 5135s [4439/8505] TestRDocMarkupToLabel#test_accept_list_end_lalpha = 0.00 s 5135s [4440/8505] TestRDocMarkupToLabel#test_accept_raw = 0.00 s 5135s [4441/8505] TestRDocMarkupToLabel#test_accept_list_item_start_note = 0.00 s 5135s [4442/8505] TestRDocMarkupToLabel#test_accept_list_item_end_lalpha = 0.00 s 5135s [4443/8505] TestRDocMarkupToLabel#test_accept_list_item_start_lalpha = 0.00 s 5135s [4444/8505] TestRDocMarkupToLabel#test_end_accepting = 0.00 s 5135s [4445/8505] TestRDocMarkupToLabel#test_accept_list_item_start_note_multi_label = 0.00 s 5135s [4446/8505] TestRDocMarkupToLabel#test_accept_list_item_start_note_multi_description = 0.00 s 5135s [4447/8505] TestRDocMarkupToLabel#test_accept_list_start_number = 0.00 s 5135s [4448/8505] TestRDocMarkupToLabel#test_convert_bold = 0.00 s 5135s [4449/8505] TestRDocMarkupToLabel#test_accept_list_end_note = 0.00 s 5135s [4450/8505] TestRDocMarkupToLabel#test_convert_em = 0.01 s 5135s [4451/8505] TestRDocMarkupToLabel#test_accept_heading_4 = 0.00 s 5135s [4452/8505] TestRDocMarkupToLabel#test_accept_list_start_label = 0.00 s 5135s [4453/8505] TestRDocMarkupToLabel#test_convert_em_dash = 0.01 s 5135s [4454/8505] TestRDocMarkupToLabel#test_accept_heading_2 = 0.00 s 5135s [4455/8505] TestRDocMarkupToLabel#test_accept_paragraph_star = 0.00 s 5135s [4456/8505] TestRDocMarkupToLabel#test_accept_blank_line = 0.00 s 5135s [4457/8505] TestRDocMarkupToLabel#test_accept_paragraph = 0.00 s 5135s [4458/8505] TestRDocMarkupToLabel#test_accept_paragraph_br = 0.00 s 5135s [4459/8505] TestRDocMarkupToLabel#test_accept_list_item_start_note_2 = 0.00 s 5135s [4460/8505] TestRDocMarkupToLabel#test_start_accepting = 0.00 s 5135s [4461/8505] TestRDocMarkupToLabel#test_accept_list_item_end_note = 0.00 s 5135s [4462/8505] TestRelineAsReadline#test_modify_text_in_pre_input_hook = 0.18 s 5135s [4463/8505] TestRelineAsReadline#test_output= = 0.03 s 5135s [4464/8505] TestRelineAsReadline#test_completion_append_character = 0.01 s 5135s [4465/8505] TestRelineAsReadline#test_delete_text = 0.01 s 5135s [4466/8505] TestRelineAsReadline#test_completion_with_completion_append_character = 0.06 s 5135s [4467/8505] TestRelineAsReadline#test_some_characters_methods = 0.00 s 5135s [4468/8505] TestRelineAsReadline#test_input= = 0.00 s 5135s [4469/8505] TestRelineAsReadline#test_refresh_line = 0.00 s 5135s [4470/8505] TestRelineAsReadline#test_insert_text = 0.01 s 5135s [4471/8505] TestRelineAsReadline#test_point = 0.00 s 5135s [4472/8505] TestRelineAsReadline#test_completion_case_fold = 0.02 s 5135s [4473/8505] TestRelineAsReadline#test_pre_input_hook = 0.00 s 5135s [4474/8505] TestRelineAsReadline#test_get_screen_size = 0.00 s 5135s [4475/8505] TestRelineAsReadline#test_using_quoting_detection_proc = 0.00 s 5135s [4476/8505] TestRelineAsReadline#test_input_metachar_multibyte = 0.08 s 5135s [4477/8505] TestRelineAsReadline#test_readline = 0.04 s 5136s [4478/8505] TestRelineAsReadline#test_editing_mode = 0.02 s 5136s [4479/8505] TestRelineAsReadline#test_completion_proc = 0.01 s 5136s [4480/8505] TestRelineAsReadline#test_completion_encoding = 0.03 s 5136s [4481/8505] TestRelineAsReadline#test_simple_completion = 0.02 s 5136s [4482/8505] TestRelineAsReadline#test_using_quoting_detection_proc_with_multibyte_input = 0.00 s 5136s [4483/8505] TestRelineAsReadline#test_closed_outstream = 0.00 s 5136s [4484/8505] TestRelineAsReadline#test_setting_quoting_detection_proc = 0.00 s 5136s [4485/8505] TestRelineAsReadline#test_line_buffer__point = 0.00 s 5136s [4486/8505] TestRelineAsReadline#test_input_metachar = 0.04 s 5136s [4487/8505] TestRDocGeneratorJsonIndex#test_search_string = 0.01 s 5137s [4488/8505] TestRDocGeneratorJsonIndex#test_generate_gzipped = 0.88 s 5137s [4489/8505] TestRDocGeneratorJsonIndex#test_build_index = 0.02 s 5137s [4490/8505] TestRDocGeneratorJsonIndex#test_index_methods = 0.01 s 5137s [4491/8505] TestRDocGeneratorJsonIndex#test_index_pages = 0.01 s 5137s [4492/8505] TestRDocGeneratorJsonIndex#test_index_classes = 0.02 s 5137s [4493/8505] TestRDocGeneratorJsonIndex#test_generate_utf_8 = 0.07 s 5137s [4494/8505] TestRDocGeneratorJsonIndex#test_file_dir = 0.01 s 5137s [4495/8505] TestRDocGeneratorJsonIndex#test_class_dir = 0.00 s 5137s [4496/8505] TestRDocGeneratorJsonIndex#test_index_classes_nodoc = 0.01 s 5137s [4497/8505] TestRDocGeneratorJsonIndex#test_generate_search_index_with_reproducible_builds = 0.01 s 5137s [4498/8505] OpenSSL::TestPKeyDH#test_new_empty = 0.00 s 5137s [4499/8505] TestFiberIO#test_tcp_connect = 0.02 s 5137s [4500/8505] TestFiberIO#test_tcp_accept = 0.00 s 5137s [4501/8505] TestFiberIO#test_read = 0.00 s 5137s [4502/8505] TestFiberIO#test_epipe_on_read = 0.00 s 5137s [4503/8505] Reline::Test#test_add_dialog_proc_with_context = 0.01 s 5137s [4504/8505] Reline::Test#test_read_io = 0.01 s 5137s [4505/8505] Reline::Test#test_prompt_proc = 0.00 s 5137s [4506/8505] Reline::Test#test_may_req_ambiguous_char_width = 0.00 s 5137s [4507/8505] Reline::Test#test_dig_perfect_match_proc = 0.00 s 5137s [4508/8505] Reline::Test#test_completion_append_character = 0.00 s 5137s [4509/8505] Reline::Test#test_delete_text = 0.00 s 5137s [4510/8505] Reline::Test#test_emacs_editing_mode = 0.00 s 5137s [4511/8505] Reline::Test#test_add_dialog_proc = 0.00 s 5137s [4512/8505] Reline::Test#test_basic_word_break_characters = 0.00 s 5137s [4513/8505] Reline::Test#test_insert_text = 0.00 s 5137s [4514/8505] Reline::Test#test_readmultiline = 0.00 s 5137s [4515/8505] Reline::Test#test_basic_quote_characters = 0.00 s 5137s [4516/8505] Reline::Test#test_completion_case_fold = 0.00 s 5137s [4517/8505] Reline::Test#test_pre_input_hook = 0.00 s 5137s [4518/8505] Reline::Test#test_auto_indent_proc = 0.00 s 5137s [4519/8505] Reline::Test#test_completer_word_break_characters = 0.00 s 5137s [4520/8505] Reline::Test#test_filename_quote_characters = 0.00 s 5137s [4521/8505] Reline::Test#test_readline = 0.00 s 5137s [4522/8505] Reline::Test#test_completion_proc = 0.02 s 5137s [4523/8505] Reline::Test#test_inner_readline = 0.01 s 5137s [4524/8505] Reline::Test#test_special_prefixes = 0.00 s 5137s [4525/8505] Reline::Test#test_set_input_and_output = 0.02 s 5137s [4526/8505] Reline::Test#test_read_escaped_key = 0.00 s 5137s [4527/8505] Reline::Test#test_output_modifier_proc = 0.00 s 5137s [4528/8505] Reline::Test#test_vi_editing_mode = 0.00 s 5137s [4529/8505] Reline::Test#test_completer_quote_characters = 0.00 s 5137s [4530/8505] TestRDocMarkupToHtmlSnippet#test_accept_heading_1 = 0.00 s 5137s [4531/8505] TestRDocMarkupToHtmlSnippet#test_convert_limit_verbatim = 0.04 s 5137s [4532/8505] TestRDocMarkupToHtmlSnippet#test_convert_limit_2 = 0.01 s 5137s [4533/8505] TestRDocMarkupToHtmlSnippet#test_accept_heading_3 = 0.00 s 5137s [4534/8505] TestRDocMarkupToHtmlSnippet#test_accept_heading_suppressed_crossref = 0.00 s 5137s [4535/8505] TestRDocMarkupToHtmlSnippet#test_accept_list_start_ualpha = 0.00 s 5137s [4536/8505] TestRDocMarkupToHtmlSnippet#test_accept_heading_7 = 0.00 s 5137s [4537/8505] TestRDocMarkupToHtmlSnippet#test_accept_paragraph_break = 0.01 s 5137s [4538/8505] TestRDocMarkupToHtmlSnippet#test_accept_block_quote = 0.00 s 5137s [4539/8505] TestRDocMarkupToHtmlSnippet#test_accept_list_item_start_label = 0.01 s 5137s [4540/8505] TestRDocMarkupToHtmlSnippet#test_accept_list_end_bullet = 0.00 s 5137s [4541/8505] TestRDocMarkupToHtmlSnippet#test_accept_rule = 0.00 s 5137s [4542/8505] TestRDocMarkupToHtmlSnippet#test_accept_list_item_end_bullet = 0.01 s 5137s [4543/8505] TestRDocMarkupToHtmlSnippet#test_accept_paragraph_underscore = 0.00 s 5137s [4544/8505] TestRDocMarkupToHtmlSnippet#test_accept_list_item_start_bullet = 0.00 s 5137s [4545/8505] TestRDocMarkupToHtmlSnippet#test_convert_TIDYLINK_rdoc_label = 0.01 s 5137s [4546/8505] TestRDocMarkupToHtmlSnippet#test_accept_list_end_label = 0.00 s 5137s [4547/8505] TestRDocMarkupToHtmlSnippet#test_accept_heading = 0.00 s 5137s [4548/8505] TestRDocMarkupToHtmlSnippet#test_accept_list_start_lalpha = 0.00 s 5137s [4549/8505] TestRDocMarkupToHtmlSnippet#test_convert_limit_verbatim_multiline = 0.02 s 5137s [4550/8505] TestRDocMarkupToHtmlSnippet#test_list_nested = 0.01 s 5137s [4551/8505] TestRDocMarkupToHtmlSnippet#test_off_tags = 0.00 s 5137s [4552/8505] TestRDocMarkupToHtmlSnippet#test_accept_heading_b = 0.00 s 5137s [4553/8505] TestRDocMarkupToHtmlSnippet#test_accept_list_item_start_number = 0.00 s 5137s [4554/8505] TestRDocMarkupToHtmlSnippet#test_accept_document = 0.00 s 5137s [4555/8505] TestRDocMarkupToHtmlSnippet#test_accept_list_item_end_number = 0.00 s 5137s [4556/8505] TestRDocMarkupToHtmlSnippet#test_accept_list_end_number = 0.00 s 5137s [4557/8505] TestRDocMarkupToHtmlSnippet#test_add_paragraph = 0.00 s 5137s [4558/8505] TestRDocMarkupToHtmlSnippet#test_accept_paragraph_i = 0.00 s 5137s [4559/8505] TestRDocMarkupToHtmlSnippet#test_accept_heading_aref_class = 0.00 s 5137s [4560/8505] TestRDocMarkupToHtmlSnippet#test_accept_verbatim = 0.00 s 5137s [4561/8505] TestRDocMarkupToHtmlSnippet#test_on_tags = 0.00 s 5137s [4562/8505] TestRDocMarkupToHtmlSnippet#test_convert_limit_paragraphs = 0.01 s 5137s [4563/8505] TestRDocMarkupToHtmlSnippet#test_list_verbatim = 0.01 s 5137s [4564/8505] TestRDocMarkupToHtmlSnippet#test_accept_list_end_ualpha = 0.00 s 5137s [4565/8505] TestRDocMarkupToHtmlSnippet#test_accept_list_item_end_ualpha = 0.00 s 5137s [4566/8505] TestRDocMarkupToHtmlSnippet#test_convert_limit = 0.01 s 5137s [4567/8505] TestRDocMarkupToHtmlSnippet#test_accept_list_item_start_ualpha = 0.00 s 5137s [4568/8505] TestRDocMarkupToHtmlSnippet#test_convert_RDOCLINK_ref = 0.01 s 5137s [4569/8505] TestRDocMarkupToHtmlSnippet#test_accept_paragraph_b = 0.00 s 5137s [4570/8505] TestRDocMarkupToHtmlSnippet#test_convert_limit_over = 0.00 s 5137s [4571/8505] TestRDocMarkupToHtmlSnippet#test_convert_RDOCLINK_label_label = 0.01 s 5137s [4572/8505] TestRDocMarkupToHtmlSnippet#test_accept_paragraph_plus = 0.00 s 5137s [4573/8505] TestRDocMarkupToHtmlSnippet#test_accept_list_item_end_label = 0.00 s 5137s [4574/8505] TestRDocMarkupToHtmlSnippet#test_accept_list_start_bullet = 0.00 s 5137s [4575/8505] TestRDocMarkupToHtmlSnippet#test_convert_limit_in_tag = 0.01 s 5137s [4576/8505] TestRDocMarkupToHtmlSnippet#test_convert_limit_verbatim_2 = 0.03 s 5137s [4577/8505] TestRDocMarkupToHtmlSnippet#test_accept_list_start_note = 0.00 s 5137s [4578/8505] TestRDocMarkupToHtmlSnippet#test_accept_list_end_lalpha = 0.00 s 5137s [4579/8505] TestRDocMarkupToHtmlSnippet#test_accept_raw = 0.00 s 5137s [4580/8505] TestRDocMarkupToHtmlSnippet#test_accept_list_item_start_note = 0.01 s 5137s [4581/8505] TestRDocMarkupToHtmlSnippet#test_accept_list_item_end_lalpha = 0.00 s 5137s [4582/8505] TestRDocMarkupToHtmlSnippet#test_list_verbatim_2 = 0.00 s 5137s [4583/8505] TestRDocMarkupToHtmlSnippet#test_accept_list_item_start_lalpha = 0.00 s 5137s [4584/8505] TestRDocMarkupToHtmlSnippet#test_end_accepting = 0.00 s 5137s [4585/8505] TestRDocMarkupToHtmlSnippet#test_accept_list_item_start_note_multi_label = 0.00 s 5137s [4586/8505] TestRDocMarkupToHtmlSnippet#test_accept_verbatim_ruby_error = 0.01 s 5137s [4587/8505] TestRDocMarkupToHtmlSnippet#test_accept_list_item_start_note_multi_description = 0.00 s 5137s [4588/8505] TestRDocMarkupToHtmlSnippet#test_accept_list_start_number = 0.00 s 5137s [4589/8505] TestRDocMarkupToHtmlSnippet#test_accept_heading_aref_method = 0.00 s 5137s [4590/8505] TestRDocMarkupToHtmlSnippet#test_convert_RDOCLINK_label_footmark = 0.00 s 5137s [4591/8505] TestRDocMarkupToHtmlSnippet#test_accept_list_end_note = 0.00 s 5137s [4592/8505] TestRDocMarkupToHtmlSnippet#test_convert_RDOCLINK_label_foottext = 0.00 s 5137s [4593/8505] TestRDocMarkupToHtmlSnippet#test_accept_heading_4 = 0.00 s 5137s [4594/8505] TestRDocMarkupToHtmlSnippet#test_accept_list_start_label = 0.00 s 5137s [4595/8505] TestRDocMarkupToHtmlSnippet#test_to_html = 0.00 s 5137s [4596/8505] TestRDocMarkupToHtmlSnippet#test_handle_regexp_HYPERLINK_link = 0.00 s 5137s [4597/8505] TestRDocMarkupToHtmlSnippet#test_accept_heading_2 = 0.00 s 5137s [4598/8505] TestRDocMarkupToHtmlSnippet#test_accept_paragraph_star = 0.00 s 5137s [4599/8505] TestRDocMarkupToHtmlSnippet#test_accept_blank_line = 0.00 s 5137s [4600/8505] TestRDocMarkupToHtmlSnippet#test_accept_paragraph = 0.00 s 5137s [4601/8505] TestRDocMarkupToHtmlSnippet#test_convert_string = 0.04 s 5137s [4602/8505] TestRDocMarkupToHtmlSnippet#test_accept_paragraph_br = 0.01 s 5137s [4603/8505] TestRDocMarkupToHtmlSnippet#test_accept_list_item_start_note_2 = 0.00 s 5137s [4604/8505] TestRDocMarkupToHtmlSnippet#test_start_accepting = 0.00 s 5137s [4605/8505] TestRDocMarkupToHtmlSnippet#test_accept_verbatim_ruby = 0.00 s 5137s [4606/8505] TestRDocMarkupToHtmlSnippet#test_accept_list_item_end_note = 0.00 s 5144s [4607/8505] TestDigest::TestDigestParen#test_race_mixed = 6.81 s 5154s [4608/8505] TestDigest::TestDigestParen#test_no_lib = 9.27 s 5160s [4609/8505] TestDigest::TestDigestParen#test_sha2 = 5.87 s 5165s [4610/8505] TestDigest::TestDigestParen#test_no_lib_no_def = 4.46 s 5171s [4611/8505] TestDigest::TestDigestParen#test_race = 6.29 s 5171s [4612/8505] TestRDocTomDoc#test_class_add_post_processor = 0.16 s 5171s [4613/8505] TestRDocTomDoc#test_class_signature_no_space = 0.04 s 5171s [4614/8505] TestRDocTomDoc#test_parse_arguments = 0.02 s 5171s [4615/8505] TestRDocTomDoc#test_parse_examples = 0.00 s 5171s [4616/8505] TestRDocTomDoc#test_tokenize_multiline_paragraph = 0.00 s 5171s [4617/8505] TestRDocTomDoc#test_parse_examples_signature = 0.01 s 5171s [4618/8505] TestRDocTomDoc#test_tokenize_arguments_multiline = 0.00 s 5171s [4619/8505] TestRDocTomDoc#test_parse_raises_without_returns = 0.00 s 5171s [4620/8505] TestRDocTomDoc#test_class_signature_two_space = 0.00 s 5171s [4621/8505] TestRDocTomDoc#test_parse_multiline_paragraph = 0.00 s 5171s [4622/8505] TestRDocTomDoc#test_tokenize_arguments = 0.00 s 5171s [4623/8505] TestRDocTomDoc#test_tokenize_arguments_nested = 0.00 s 5171s [4624/8505] TestRDocTomDoc#test_parse_arguments_multiline = 0.00 s 5171s [4625/8505] TestRDocTomDoc#test_tokenize_returns_multiline = 0.00 s 5171s [4626/8505] TestRDocTomDoc#test_parse_arguments_nested = 0.00 s 5171s [4627/8505] TestRDocTomDoc#test_tokenize_returns = 0.00 s 5171s [4628/8505] TestRDocTomDoc#test_parse_returns_multiline = 0.00 s 5171s [4629/8505] TestRDocTomDoc#test_tokenize_paragraph = 0.00 s 5171s [4630/8505] TestRDocTomDoc#test_tokenize_arguments_array = 0.00 s 5171s [4631/8505] TestRDocTomDoc#test_class_rdoc = 0.01 s 5171s [4632/8505] TestRDocTomDoc#test_tokenize_examples = 0.00 s 5171s [4633/8505] TestRDocTomDoc#test_class_signature = 0.00 s 5171s [4634/8505] TestRDocTomDoc#test_parse_returns_multiline_and_raises = 0.00 s 5171s [4635/8505] TestRDocTomDoc#test_parse_returns = 0.00 s 5171s [4636/8505] TestRDocTomDoc#test_parse_paragraph = 0.00 s 5171s [4637/8505] TestRDocTomDoc#test_parse_returns_with_raises = 0.00 s 5171s [4638/8505] TestRDocTomDoc#test_parse_arguments_array = 0.00 s 5171s [4639/8505] TestRDocTomDoc#test_parse_signature = 0.00 s 5171s [4640/8505] TestRDocTomDoc#test_class_signature_none = 0.00 s 5171s [4641/8505] CGIHeaderTest#test_cgi_http_header_complex = 0.01 s 5171s [4642/8505] CGIHeaderTest#test_cgi_http_header_cookie = 0.02 s 5171s [4643/8505] CGIHeaderTest#test_cgi_http_header_output_cookies = 0.00 s 5171s [4644/8505] CGIHeaderTest#test_cgi_http_header_argerr = 0.00 s 5171s [4645/8505] CGIHeaderTest#test_cgi_http_header_simple = 0.00 s 5171s [4646/8505] CGIHeaderTest#test_cgi_http_header_nph = 0.01 s 5171s [4647/8505] OpenSSL::TestPairLowlevelSocket#test_write_nonblock_retry = 0.17 s 5172s [4648/8505] OpenSSL::TestPairLowlevelSocket#test_multibyte_read_write = 0.15 s 5172s [4649/8505] OpenSSL::TestPairLowlevelSocket#test_write_nonblock_with_buffered_data_no_exceptions = 0.15 s 5172s [4650/8505] OpenSSL::TestPairLowlevelSocket#test_write_nonblock_with_buffered_data = 0.15 s 5172s [4651/8505] OpenSSL::TestPairLowlevelSocket#test_readall = 0.11 s 5173s [4652/8505] OpenSSL::TestPairLowlevelSocket#test_connect_accept_nonblock = 0.67 s 5173s [4653/8505] OpenSSL::TestPairLowlevelSocket#test_write_zero = 0.11 s 5173s [4654/8505] OpenSSL::TestPairLowlevelSocket#test_readline = 0.10 s 5173s [4655/8505] OpenSSL::TestPairLowlevelSocket#test_write_multiple_arguments = 0.15 s 5173s [4656/8505] OpenSSL::TestPairLowlevelSocket#test_puts_empty = 0.15 s 5173s [4657/8505] OpenSSL::TestPairLowlevelSocket#test_read_nonblock = 0.15 s 5173s [4658/8505] OpenSSL::TestPairLowlevelSocket#test_getc = 0.11 s 5174s [4659/8505] OpenSSL::TestPairLowlevelSocket#test_read_nonblock_no_exception = 0.14 s 5174s [4660/8505] OpenSSL::TestPairLowlevelSocket#test_partial_tls_record_read_nonblock = 0.11 s 5174s [4661/8505] OpenSSL::TestPairLowlevelSocket#test_gets_eof_limit = 0.15 s 5174s [4662/8505] OpenSSL::TestPairLowlevelSocket#test_readpartial = 0.15 s 5174s [4663/8505] OpenSSL::TestPairLowlevelSocket#test_gets = 0.15 s 5174s [4664/8505] TestZlibGzipReader#test_corrupted_header = 0.01 s 5174s [4665/8505] TestZlibGzipReader#test_ungetc = 0.00 s 5174s [4666/8505] TestZlibGzipReader#test_ungetc_at_start_of_file = 0.00 s 5174s [4667/8505] TestZlibGzipReader#test_readlines = 0.00 s 5174s [4668/8505] TestZlibGzipReader#test_gets2 = 0.00 s 5174s [4669/8505] TestZlibGzipReader#test_getbyte = 0.00 s 5174s [4670/8505] TestZlibGzipReader#test_readchar = 0.00 s 5174s [4671/8505] TestZlibGzipReader#test_each_byte = 0.00 s 5174s [4672/8505] TestZlibGzipReader#test_read = 0.00 s 5174s [4673/8505] TestZlibGzipReader#test_ungetc_paragraph = 0.00 s 5174s [4674/8505] TestZlibGzipReader#test_open = 0.00 s 5174s [4675/8505] TestZlibGzipReader#test_unused = 0.00 s 5174s [4676/8505] TestZlibGzipReader#test_double_close = 0.00 s 5174s [4677/8505] TestZlibGzipReader#test_readline = 0.00 s 5174s [4678/8505] TestZlibGzipReader#test_reader_wrap = 0.00 s 5174s [4679/8505] TestZlibGzipReader#test_each = 0.00 s 5174s [4680/8505] TestZlibGzipReader#test_read0 = 0.00 s 5174s [4681/8505] TestZlibGzipReader#test_getc = 0.00 s 5174s [4682/8505] TestZlibGzipReader#test_rewind = 0.00 s 5174s [4683/8505] TestZlibGzipReader#test_readpartial = 0.00 s 5174s [4684/8505] TestZlibGzipReader#test_unused2 = 0.00 s 5174s [4685/8505] TestZlibGzipReader#test_gets = 0.00 s 5174s [4686/8505] OpenSSL::TestX509Extension#test_marshal = 0.00 s 5174s [4687/8505] OpenSSL::TestX509Extension#test_dup = 0.00 s 5174s [4688/8505] OpenSSL::TestX509Extension#test_eq = 0.00 s 5174s [4689/8505] OpenSSL::TestX509Extension#test_new = 0.00 s 5174s [4690/8505] TestRDocMarkupToRDoc#test_accept_heading_1 = 0.00 s 5174s [4691/8505] TestRDocMarkupToRDoc#test_accept_heading_3 = 0.00 s 5174s [4692/8505] TestRDocMarkupToRDoc#test_accept_heading_suppressed_crossref = 0.00 s 5174s [4693/8505] TestRDocMarkupToRDoc#test_accept_list_start_ualpha = 0.00 s 5174s [4694/8505] TestRDocMarkupToRDoc#test_accept_paragraph_break = 0.00 s 5174s [4695/8505] TestRDocMarkupToRDoc#test_accept_block_quote = 0.00 s 5174s [4696/8505] TestRDocMarkupToRDoc#test_accept_list_item_start_label = 0.00 s 5174s [4697/8505] TestRDocMarkupToRDoc#test_accept_list_end_bullet = 0.00 s 5174s [4698/8505] TestRDocMarkupToRDoc#test_accept_rule = 0.00 s 5174s [4699/8505] TestRDocMarkupToRDoc#test_attributes = 0.00 s 5174s [4700/8505] TestRDocMarkupToRDoc#test_accept_list_item_end_bullet = 0.00 s 5174s [4701/8505] TestRDocMarkupToRDoc#test_accept_paragraph_underscore = 0.00 s 5174s [4702/8505] TestRDocMarkupToRDoc#test_accept_list_item_start_bullet = 0.00 s 5174s [4703/8505] TestRDocMarkupToRDoc#test_accept_list_end_label = 0.00 s 5174s [4704/8505] TestRDocMarkupToRDoc#test_accept_heading = 0.00 s 5174s [4705/8505] TestRDocMarkupToRDoc#test_accept_list_start_lalpha = 0.00 s 5174s [4706/8505] TestRDocMarkupToRDoc#test_list_nested = 0.00 s 5174s [4707/8505] TestRDocMarkupToRDoc#test_accept_verbatim_indent = 0.00 s 5174s [4708/8505] TestRDocMarkupToRDoc#test_accept_heading_b = 0.00 s 5174s [4709/8505] TestRDocMarkupToRDoc#test_accept_list_item_start_number = 0.00 s 5174s [4710/8505] TestRDocMarkupToRDoc#test_accept_document = 0.00 s 5174s [4711/8505] TestRDocMarkupToRDoc#test_accept_list_item_end_number = 0.00 s 5174s [4712/8505] TestRDocMarkupToRDoc#test_accept_verbatim_big_indent = 0.00 s 5174s [4713/8505] TestRDocMarkupToRDoc#test_accept_list_end_number = 0.00 s 5174s [4714/8505] TestRDocMarkupToRDoc#test_accept_paragraph_i = 0.00 s 5174s [4715/8505] TestRDocMarkupToRDoc#test_accept_verbatim = 0.00 s 5174s [4716/8505] TestRDocMarkupToRDoc#test_list_verbatim = 0.00 s 5174s [4717/8505] TestRDocMarkupToRDoc#test_accept_heading_indent = 0.00 s 5174s [4718/8505] TestRDocMarkupToRDoc#test_accept_list_end_ualpha = 0.00 s 5174s [4719/8505] TestRDocMarkupToRDoc#test_accept_list_item_end_ualpha = 0.00 s 5174s [4720/8505] TestRDocMarkupToRDoc#test_convert_list_note = 0.00 s 5174s [4721/8505] TestRDocMarkupToRDoc#test_accept_rule_indent = 0.00 s 5174s [4722/8505] TestRDocMarkupToRDoc#test_accept_list_item_start_ualpha = 0.00 s 5174s [4723/8505] TestRDocMarkupToRDoc#test_accept_paragraph_b = 0.00 s 5174s [4724/8505] TestRDocMarkupToRDoc#test_accept_paragraph_indent = 0.00 s 5174s [4725/8505] TestRDocMarkupToRDoc#test_accept_paragraph_plus = 0.00 s 5174s [4726/8505] TestRDocMarkupToRDoc#test_accept_list_item_end_label = 0.00 s 5174s [4727/8505] TestRDocMarkupToRDoc#test_accept_list_start_bullet = 0.00 s 5174s [4728/8505] TestRDocMarkupToRDoc#test_accept_list_start_note = 0.00 s 5174s [4729/8505] TestRDocMarkupToRDoc#test_accept_list_end_lalpha = 0.00 s 5174s [4730/8505] TestRDocMarkupToRDoc#test_accept_raw = 0.00 s 5174s [4731/8505] TestRDocMarkupToRDoc#test_accept_list_item_start_note = 0.00 s 5174s [4732/8505] TestRDocMarkupToRDoc#test_accept_list_item_end_lalpha = 0.00 s 5174s [4733/8505] TestRDocMarkupToRDoc#test_accept_list_item_start_lalpha = 0.00 s 5174s [4734/8505] TestRDocMarkupToRDoc#test_end_accepting = 0.00 s 5174s [4735/8505] TestRDocMarkupToRDoc#test_accept_indented_paragraph = 0.01 s 5174s [4736/8505] TestRDocMarkupToRDoc#test_accept_paragraph_wrap = 0.00 s 5174s [4737/8505] TestRDocMarkupToRDoc#test_accept_list_item_start_note_multi_label = 0.00 s 5174s [4738/8505] TestRDocMarkupToRDoc#test_accept_list_item_start_note_multi_description = 0.00 s 5174s [4739/8505] TestRDocMarkupToRDoc#test_accept_list_start_number = 0.00 s 5174s [4740/8505] TestRDocMarkupToRDoc#test_accept_list_end_note = 0.00 s 5174s [4741/8505] TestRDocMarkupToRDoc#test_accept_heading_4 = 0.00 s 5174s [4742/8505] TestRDocMarkupToRDoc#test_accept_list_start_label = 0.00 s 5174s [4743/8505] TestRDocMarkupToRDoc#test_accept_heading_2 = 0.00 s 5174s [4744/8505] TestRDocMarkupToRDoc#test_accept_paragraph_star = 0.00 s 5174s [4745/8505] TestRDocMarkupToRDoc#test_accept_blank_line = 0.00 s 5174s [4746/8505] TestRDocMarkupToRDoc#test_accept_paragraph = 0.00 s 5174s [4747/8505] TestRDocMarkupToRDoc#test_accept_paragraph_br = 0.00 s 5174s [4748/8505] TestRDocMarkupToRDoc#test_accept_list_item_start_note_2 = 0.00 s 5174s [4749/8505] TestRDocMarkupToRDoc#test_start_accepting = 0.00 s 5174s [4750/8505] TestRDocMarkupToRDoc#test_accept_list_item_end_note = 0.00 s 5174s [4751/8505] TestSocket_TCPSocket#test_initialize_connect_timeout = 0.00 s 5174s [4752/8505] TestSocket_TCPSocket#test_encoding = 0.01 s 5174s [4753/8505] TestSocket_TCPSocket#test_accept_nonblock = 0.00 s 5174s [4754/8505] TestSocket_TCPSocket#test_accept_multithread = 0.08 s 5174s [4755/8505] URI::TestMailTo#test_check_to = 0.01 s 5174s [4756/8505] URI::TestMailTo#test_initializer = 0.00 s 5175s [4757/8505] URI::TestMailTo#test_build = 0.04 s 5175s [4758/8505] URI::TestMailTo#test_to_s = 0.00 s 5175s [4759/8505] URI::TestMailTo#test_to_mailtext = 0.01 s 5175s [4760/8505] URI::TestMailTo#test_select = 0.00 s 5175s [4761/8505] TestFileUtilsVerbose#test_visibility_fu_default_blksize = 0.00 s 5175s [4762/8505] TestFileUtilsVerbose#test_visibility_chmod = 0.00 s 5175s [4763/8505] TestFileUtilsVerbose#test_singleton_visibility_mkdir_p = 0.00 s 5175s [4764/8505] TestFileUtilsVerbose#test_visibility_mv = 0.00 s 5175s [4765/8505] TestFileUtilsVerbose#test_singleton_visibility_copy = 0.00 s 5175s [4766/8505] TestFileUtilsVerbose#test_visibility_makedirs = 0.00 s 5175s [4767/8505] TestFileUtilsVerbose#test_visibility_uptodate? = 0.00 s 5175s [4768/8505] TestFileUtilsVerbose#test_visibility_copy_entry = 0.00 s 5175s [4769/8505] TestFileUtilsVerbose#test_visibility_rm_r = 0.00 s 5175s [4770/8505] TestFileUtilsVerbose#test_singleton_visibility_copy_file = 0.00 s 5175s [4771/8505] TestFileUtilsVerbose#test_singleton_visibility_link = 0.00 s 5175s [4772/8505] TestFileUtilsVerbose#test_singleton_visibility_rmdir = 0.00 s 5175s [4773/8505] TestFileUtilsVerbose#test_visibility_remove_dir = 0.00 s 5175s [4774/8505] TestFileUtilsVerbose#test_singleton_visibility_remove = 0.00 s 5175s [4775/8505] TestFileUtilsVerbose#test_singleton_visibility_move = 0.00 s 5175s [4776/8505] TestFileUtilsVerbose#test_visibility_mkdir = 0.00 s 5175s [4777/8505] TestFileUtilsVerbose#test_visibility_compare_file = 0.00 s 5175s [4778/8505] TestFileUtilsVerbose#test_visibility_chmod_R = 0.00 s 5175s [4779/8505] TestFileUtilsVerbose#test_visibility_rm_f = 0.00 s 5175s [4780/8505] TestFileUtilsVerbose#test_singleton_visibility_ln_sf = 0.00 s 5175s [4781/8505] TestFileUtilsVerbose#test_singleton_visibility_cp_lr = 0.00 s 5175s [4782/8505] TestFileUtilsVerbose#test_visibility_remove = 0.00 s 5175s [4783/8505] TestFileUtilsVerbose#test_singleton_visibility_mv = 0.00 s 5175s [4784/8505] TestFileUtilsVerbose#test_visibility_install = 0.00 s 5175s [4785/8505] TestFileUtilsVerbose#test_visibility_safe_unlink = 0.00 s 5175s [4786/8505] TestFileUtilsVerbose#test_singleton_visibility_getwd = 0.00 s 5175s [4787/8505] TestFileUtilsVerbose#test_singleton_visibility_fu_blksize = 0.00 s 5175s [4788/8505] TestFileUtilsVerbose#test_singleton_visibility_mkpath = 0.00 s 5175s [4789/8505] TestFileUtilsVerbose#test_visibility_fu_stream_blksize = 0.00 s 5175s [4790/8505] TestFileUtilsVerbose#test_singleton_visibility_rm_f = 0.00 s 5175s [4791/8505] TestFileUtilsVerbose#test_singleton_visibility_cd = 0.00 s 5175s [4792/8505] TestFileUtilsVerbose#test_visibility_mkpath = 0.00 s 5175s [4793/8505] TestFileUtilsVerbose#test_visibility_cp = 0.00 s 5175s [4794/8505] TestFileUtilsVerbose#test_visibility_move = 0.00 s 5175s [4795/8505] TestFileUtilsVerbose#test_visibility_fu_windows? = 0.00 s 5175s [4796/8505] TestFileUtilsVerbose#test_visibility_chdir = 0.00 s 5175s [4797/8505] TestFileUtilsVerbose#test_singleton_visibility_identical? = 0.00 s 5175s [4798/8505] TestFileUtilsVerbose#test_singleton_visibility_cp = 0.00 s 5175s [4799/8505] TestFileUtilsVerbose#test_visibility_link_entry = 0.00 s 5175s [4800/8505] TestFileUtilsVerbose#test_singleton_visibility_rm_r = 0.00 s 5175s [4801/8505] TestFileUtilsVerbose#test_singleton_visibility_makedirs = 0.00 s 5175s [4802/8505] TestFileUtilsVerbose#test_visibility_link = 0.00 s 5175s [4803/8505] TestFileUtilsVerbose#test_singleton_visibility_compare_file = 0.00 s 5175s [4804/8505] TestFileUtilsVerbose#test_visibility_touch = 0.00 s 5175s [4805/8505] TestFileUtilsVerbose#test_singleton_visibility_remove_file = 0.00 s 5175s [4806/8505] TestFileUtilsVerbose#test_visibility_symlink = 0.00 s 5175s [4807/8505] TestFileUtilsVerbose#test_singleton_visibility_chown_R = 0.00 s 5175s [4808/8505] TestFileUtilsVerbose#test_visibility_copy = 0.00 s 5175s [4809/8505] TestFileUtilsVerbose#test_singleton_visibility_chown = 0.00 s 5175s [4810/8505] TestFileUtilsVerbose#test_singleton_visibility_fu_default_blksize = 0.00 s 5175s [4811/8505] TestFileUtilsVerbose#test_visibility_cd = 0.00 s 5175s [4812/8505] TestFileUtilsVerbose#test_visibility_rm_rf = 0.00 s 5175s [4813/8505] TestFileUtilsVerbose#test_singleton_visibility_copy_stream = 0.00 s 5175s [4814/8505] TestFileUtilsVerbose#test_visibility_remove_entry_secure = 0.00 s 5175s [4815/8505] TestFileUtilsVerbose#test_singleton_visibility_rmtree = 0.00 s 5175s [4816/8505] TestFileUtilsVerbose#test_singleton_visibility_uptodate? = 0.00 s 5175s [4817/8505] TestFileUtilsVerbose#test_visibility_copy_file = 0.00 s 5175s [4818/8505] TestFileUtilsVerbose#test_singleton_visibility_chmod_R = 0.00 s 5175s [4819/8505] TestFileUtilsVerbose#test_singleton_visibility_chmod = 0.00 s 5175s [4820/8505] TestFileUtilsVerbose#test_visibility_rmtree = 0.00 s 5175s [4821/8505] TestFileUtilsVerbose#test_singleton_visibility_cp_r = 0.00 s 5175s [4822/8505] TestFileUtilsVerbose#test_visibility_remove_entry = 0.00 s 5175s [4823/8505] TestFileUtilsVerbose#test_singleton_visibility_link_entry = 0.00 s 5175s [4824/8505] TestFileUtilsVerbose#test_visibility_identical? = 0.00 s 5175s [4825/8505] TestFileUtilsVerbose#test_visibility_mkdir_p = 0.00 s 5175s [4826/8505] TestFileUtilsVerbose#test_visibility_fu_copy_stream0 = 0.00 s 5175s [4827/8505] TestFileUtilsVerbose#test_visibility_cp_lr = 0.00 s 5175s [4828/8505] TestFileUtilsVerbose#test_visibility_ln_sf = 0.00 s 5175s [4829/8505] TestFileUtilsVerbose#test_singleton_visibility_mkdir = 0.00 s 5175s [4830/8505] TestFileUtilsVerbose#test_singleton_visibility_fu_stream_blksize = 0.00 s 5175s [4831/8505] TestFileUtilsVerbose#test_visibility_compare_stream = 0.00 s 5175s [4832/8505] TestFileUtilsVerbose#test_singleton_visibility_ln_s = 0.00 s 5175s [4833/8505] TestFileUtilsVerbose#test_visibility_rmdir = 0.00 s 5175s [4834/8505] TestFileUtilsVerbose#test_visibility_fu_blksize = 0.00 s 5175s [4835/8505] TestFileUtilsVerbose#test_singleton_visibility_fu_copy_stream0 = 0.00 s 5175s [4836/8505] TestFileUtilsVerbose#test_visibility_cmp = 0.00 s 5175s [4837/8505] TestFileUtilsVerbose#test_visibility_remove_file = 0.00 s 5175s [4838/8505] TestFileUtilsVerbose#test_singleton_visibility_remove_entry_secure = 0.00 s 5175s [4839/8505] TestFileUtilsVerbose#test_singleton_visibility_chdir = 0.00 s 5175s [4840/8505] TestFileUtilsVerbose#test_singleton_visibility_remove_entry = 0.00 s 5175s [4841/8505] TestFileUtilsVerbose#test_singleton_visibility_ln = 0.00 s 5175s [4842/8505] TestFileUtilsVerbose#test_visibility_ln_s = 0.00 s 5175s [4843/8505] TestFileUtilsVerbose#test_singleton_visibility_pwd = 0.00 s 5175s [4844/8505] TestFileUtilsVerbose#test_visibility_chown_R = 0.00 s 5175s [4845/8505] TestFileUtilsVerbose#test_singleton_visibility_symlink = 0.00 s 5175s [4846/8505] TestFileUtilsVerbose#test_singleton_visibility_cmp = 0.00 s 5175s [4847/8505] TestFileUtilsVerbose#test_visibility_copy_stream = 0.00 s 5175s [4848/8505] TestFileUtilsVerbose#test_visibility_pwd = 0.00 s 5175s [4849/8505] TestFileUtilsVerbose#test_visibility_getwd = 0.00 s 5175s [4850/8505] TestFileUtilsVerbose#test_singleton_visibility_compare_stream = 0.00 s 5175s [4851/8505] TestFileUtilsVerbose#test_singleton_visibility_rm = 0.00 s 5175s [4852/8505] TestFileUtilsVerbose#test_singleton_visibility_remove_dir = 0.00 s 5175s [4853/8505] TestFileUtilsVerbose#test_visibility_cp_r = 0.00 s 5175s [4854/8505] TestFileUtilsVerbose#test_singleton_visibility_install = 0.00 s 5175s [4855/8505] TestFileUtilsVerbose#test_singleton_visibility_copy_entry = 0.00 s 5175s [4856/8505] TestFileUtilsVerbose#test_singleton_visibility_rm_rf = 0.00 s 5175s [4857/8505] TestFileUtilsVerbose#test_visibility_rm = 0.00 s 5175s [4858/8505] TestFileUtilsVerbose#test_singleton_visibility_safe_unlink = 0.00 s 5175s [4859/8505] TestFileUtilsVerbose#test_visibility_chown = 0.00 s 5175s [4860/8505] TestFileUtilsVerbose#test_singleton_visibility_fu_windows? = 0.00 s 5175s [4861/8505] TestFileUtilsVerbose#test_singleton_visibility_touch = 0.00 s 5175s [4862/8505] TestFileUtilsVerbose#test_visibility_ln = 0.00 s 5175s [4863/8505] TestRDocTopLevel#test_display_eh = 0.06 s 5175s [4864/8505] TestRDocTopLevel#test_page_name_trim_extension = 0.12 s 5175s [4865/8505] TestRDocTopLevel#test_search_record_page = 0.13 s 5175s [4866/8505] TestRDocTopLevel#test_add_method = 0.11 s 5175s [4867/8505] TestRDocTopLevel#test_add_constant_nodoc = 0.03 s 5175s [4868/8505] TestRDocTopLevel#test_http_url = 0.03 s 5175s [4869/8505] TestRDocTopLevel#test_hash = 0.06 s 5175s [4870/8505] TestRDocTopLevel#test_add_include_nodoc = 0.05 s 5175s [4871/8505] TestRDocTopLevel#test_last_modified = 0.05 s 5175s [4872/8505] TestRDocTopLevel#test_add_method_stopdoc = 0.04 s 5175s [4873/8505] TestRDocTopLevel#test_add_alias_nodoc = 0.04 s 5175s [4874/8505] TestRDocTopLevel#test_add_alias = 0.03 s 5175s [4875/8505] TestRDocTopLevel#test_name = 0.03 s 5175s [4876/8505] TestRDocTopLevel#test_full_name = 0.03 s 5175s [4877/8505] TestRDocTopLevel#test_initialize = 0.03 s 5175s [4878/8505] TestRDocTopLevel#test_find_class_or_module = 0.03 s 5176s [4879/8505] TestRDocTopLevel#test_marshal_load_version_0 = 0.03 s 5176s [4880/8505] TestRDocTopLevel#test_search_record = 0.04 s 5176s [4881/8505] TestRDocTopLevel#test_text_eh_no_parser = 0.04 s 5176s [4882/8505] TestRDocTopLevel#test_initialize_relative = 0.03 s 5176s [4883/8505] TestRDocTopLevel#test_equals2 = 0.03 s 5176s [4884/8505] TestRDocTopLevel#test_add_constant = 0.03 s 5176s [4885/8505] TestRDocTopLevel#test_eql_eh = 0.03 s 5176s [4886/8505] TestRDocTopLevel#test_text_eh = 0.03 s 5176s [4887/8505] TestRDocTopLevel#test_page_name = 0.04 s 5176s [4888/8505] TestRDocTopLevel#test_add_include = 0.04 s 5176s [4889/8505] TestRDocTopLevel#test_marshal_dump = 0.03 s 5176s [4890/8505] TestRDocTopLevel#test_base_name = 0.05 s 5176s [4891/8505] TestNKF#test_ruby_dev_36909 = 0.02 s 5176s [4892/8505] TestNKF#test_guess = 0.00 s 5176s [4893/8505] IMAPResponseParserTest#test_msg_delivery_status = 0.01 s 5176s [4894/8505] IMAPResponseParserTest#test_search_response_of_yahoo = 0.01 s 5176s [4895/8505] IMAPResponseParserTest#test_search_modseq = 0.00 s 5176s [4896/8505] IMAPResponseParserTest#test_status = 0.01 s 5176s [4897/8505] IMAPResponseParserTest#test_capability = 0.01 s 5176s [4898/8505] IMAPResponseParserTest#test_msg_att_extra_space = 0.01 s 5176s [4899/8505] IMAPResponseParserTest#test_body_type_attachment = 0.03 s 5176s [4900/8505] IMAPResponseParserTest#test_msg_delivery_status_with_extra_data = 0.02 s 5176s [4901/8505] IMAPResponseParserTest#test_flag_xlist_inbox = 0.00 s 5176s [4902/8505] IMAPResponseParserTest#test_msg_att_rfc822_text = 0.00 s 5176s [4903/8505] IMAPResponseParserTest#test_msg_att_parse_error = 0.00 s 5176s [4904/8505] IMAPResponseParserTest#test_search_response = 0.00 s 5176s [4905/8505] IMAPResponseParserTest#test_acl = 0.01 s 5176s [4906/8505] IMAPResponseParserTest#test_flag_list_too_many_flags = 0.02 s 5176s [4907/8505] IMAPResponseParserTest#test_continuation_request_without_response_text = 0.00 s 5176s [4908/8505] IMAPResponseParserTest#test_msg_att_modseq_data = 0.01 s 5176s [4909/8505] IMAPResponseParserTest#test_mixed_boundary = 0.02 s 5176s [4910/8505] IMAPResponseParserTest#test_body_ext_mpart_without_lang = 0.01 s 5176s [4911/8505] IMAPResponseParserTest#test_msg_body_mixed = 0.01 s 5176s [4912/8505] IMAPResponseParserTest#test_msg_with_message_rfc822_attachment = 0.01 s 5176s [4913/8505] IMAPResponseParserTest#test_flag_list_many_same_flags = 0.03 s 5176s [4914/8505] IMAPResponseParserTest#test_resp_text_code = 0.00 s 5176s [4915/8505] Psych::TestString#test_float_with_no_fractional_before_exponent = 0.01 s 5176s [4916/8505] Psych::TestString#test_empty_subclass = 0.01 s 5176s [4917/8505] Psych::TestString#test_plain_when_shorten_than_line_width_and_no_final_line_break = 0.00 s 5176s [4918/8505] Psych::TestString#test_string_with_ivars = 0.00 s 5176s [4919/8505] Psych::TestString#test_folded_when_longer_than_line_width_and_with_final_line_break = 0.00 s 5176s [4920/8505] Psych::TestString#test_cycle_x = 0.00 s 5176s [4921/8505] Psych::TestString#test_dash_dot = 0.08 s 5176s [4922/8505] Psych::TestString#test_no_quotes_when_start_with_non_ascii_character = 0.00 s 5176s [4923/8505] Psych::TestString#test_binary_string = 0.08 s 5176s [4924/8505] Psych::TestString#test_plain_when_shorten_than_line_width_and_with_final_line_break = 0.00 s 5176s [4925/8505] Psych::TestString#test_nonascii_string_as_binary = 0.00 s 5176s [4926/8505] Psych::TestString#test_string_with_base_60 = 0.00 s 5176s [4927/8505] Psych::TestString#test_ascii_only_8bit_string = 0.00 s 5176s [4928/8505] Psych::TestString#test_n_is_quoted = 0.00 s 5176s [4929/8505] Psych::TestString#test_y_is_quoted = 0.00 s 5176s [4930/8505] Psych::TestString#test_ascii_only_binary_string = 0.00 s 5176s [4931/8505] Psych::TestString#test_literal_when_inner_and_final_line_break = 0.01 s 5176s [4932/8505] Psych::TestString#test_string_with_newline = 0.00 s 5176s [4933/8505] Psych::TestString#test_empty_character_subclass = 0.00 s 5176s [4934/8505] Psych::TestString#test_string_subclass_with_anchor = 0.00 s 5176s [4935/8505] Psych::TestString#test_self_referential_string = 0.00 s 5176s [4936/8505] Psych::TestString#test_binary_string_null = 0.00 s 5176s [4937/8505] Psych::TestString#test_backwards_with_syck = 0.00 s 5176s [4938/8505] Psych::TestString#test_subclass_with_attributes = 0.01 s 5176s [4939/8505] Psych::TestString#test_binary = 0.00 s 5176s [4940/8505] Psych::TestString#test_literal_strip_when_inner_line_break_and_no_final_line_break = 0.00 s 5176s [4941/8505] Psych::TestString#test_float_confusion = 0.00 s 5176s [4942/8505] Psych::TestString#test_folded_strip_when_longer_than_line_width_and_no_newlines = 0.00 s 5176s [4943/8505] Psych::TestString#test_doublequotes_when_there_is_a_single = 0.00 s 5176s [4944/8505] Psych::TestString#test_no_doublequotes_with_special_characters = 0.00 s 5176s [4945/8505] Psych::TestString#test_another_subclass_with_attributes = 0.00 s 5176s [4946/8505] TestNetHTTP#test_failure_message_includes_failed_domain_and_port = 0.01 s 5176s [4947/8505] TestNetHTTP#test_class_Proxy_from_ENV = 0.00 s 5176s [4948/8505] TestNetHTTP#test_newobj = 0.00 s 5176s [4949/8505] TestNetHTTP#test_proxy_eh_ENV_none_set = 0.00 s 5176s [4950/8505] TestNetHTTP#test_proxy_eh_no_proxy = 0.00 s 5176s [4951/8505] TestNetHTTP#test_proxy_address = 0.00 s 5176s [4952/8505] TestNetHTTP#test_edit_path = 0.00 s 5176s [4953/8505] TestNetHTTP#test_addr_port = 0.00 s 5177s [4954/8505] TestNetHTTP#test_proxy_eh_ENV_with_user = 0.15 s 5177s [4955/8505] TestNetHTTP#test_proxy_address_ENV = 0.00 s 5177s [4956/8505] TestNetHTTP#test_proxy_eh_ENV_with_urlencoded_user = 0.00 s 5177s [4957/8505] TestNetHTTP#test_proxy_address_no_proxy = 0.00 s 5177s [4958/8505] TestNetHTTP#test_edit_path_proxy = 0.00 s 5177s [4959/8505] TestNetHTTP#test_proxy_eh_ENV = 0.00 s 5177s [4960/8505] TestNetHTTP#test_proxy_port_ENV = 0.00 s 5177s [4961/8505] TestNetHTTP#test_proxy_eh_ENV_no_proxy = 0.00 s 5177s [4962/8505] TestNetHTTP#test_proxy_from_env_ENV = 0.00 s 5177s [4963/8505] TestNetHTTP#test_proxy_port = 0.00 s 5177s [4964/8505] TestNetHTTP#test_class_Proxy = 0.00 s 5177s [4965/8505] TestRDocRDoc#test_remove_unparseable_tags_vim = 0.00 s 5177s [4966/8505] TestRDocRDoc#test_parse_file_forbidden = 0.01 s 5177s [4967/8505] TestRDocRDoc#test_remove_unparseable_tags_emacs = 0.00 s 5177s [4968/8505] TestRDocRDoc#test_setup_output_dir_exists_empty_created_rid = 0.00 s 5177s [4969/8505] TestRDocRDoc#test_setup_output_dir_dry_run = 0.00 s 5177s [4970/8505] TestRDocRDoc#test_update_output_dir_dry_run = 0.00 s 5177s [4971/8505] TestRDocRDoc#test_remove_unparseable_CVE_2021_31799 = 0.00 s 5177s [4972/8505] TestRDocRDoc#test_handle_pipe_rd = 0.01 s 5177s [4973/8505] TestRDocRDoc#test_normalized_file_list_with_dot_doc_overridden_by_exclude_option = 0.01 s 5177s [4974/8505] TestRDocRDoc#test_setup_output_dir_exists = 0.01 s 5177s [4975/8505] TestRDocRDoc#test_parse_file_page_dir = 0.01 s 5177s [4976/8505] TestRDocRDoc#test_parse_file_binary = 0.00 s 5177s [4977/8505] TestRDocRDoc#test_setup_output_dir_exists_not_rdoc = 0.00 s 5177s [4978/8505] TestRDocRDoc#test_parse_file_include_root = 0.03 s 5177s [4979/8505] TestRDocRDoc#test_normalized_file_list = 0.00 s 5177s [4980/8505] TestRDocRDoc#test_document_with_dry_run = 0.12 s 5177s [4981/8505] TestRDocRDoc#test_setup_output_dir = 0.01 s 5177s [4982/8505] TestRDocRDoc#test_normalized_file_list_non_file_directory = 0.00 s 5177s [4983/8505] TestRDocRDoc#test_update_output_dir = 0.01 s 5177s [4984/8505] TestRDocRDoc#test_parse_file_relative = 0.00 s 5177s [4985/8505] TestRDocRDoc#test_normalized_file_list_not_modified = 0.00 s 5177s [4986/8505] TestRDocRDoc#test_document = 0.07 s 5177s [4987/8505] TestRDocRDoc#test_handle_pipe = 0.01 s 5177s [4988/8505] TestRDocRDoc#test_parse_file = 0.00 s 5177s [4989/8505] TestRDocRDoc#test_remove_unparseable = 0.00 s 5177s [4990/8505] TestRDocRDoc#test_update_output_dir_dont = 0.00 s 5177s [4991/8505] TestRDocRDoc#test_setup_output_dir_exists_file = 0.00 s 5177s [4992/8505] TestRDocRDoc#test_normalized_file_list_removes_created_rid_dir = 0.00 s 5177s [4993/8505] TestRDocRDoc#test_normalized_file_list_with_dot_doc = 0.01 s 5177s [4994/8505] TestRDocRDoc#test_parse_file_encoding = 0.00 s 5177s [4995/8505] TestRDocRDoc#test_update_output_dir_with_reproducible_time = 0.00 s 5177s [4996/8505] TestRDocRDoc#test_gather_files = 0.00 s 5177s [4997/8505] TestNetHTTP_v1_2#test_s_get_response = 0.05 s 5177s [4998/8505] TestNetHTTP_v1_2#test_post = 0.09 s 5178s [4999/8505] TestNetHTTP_v1_2#test_send_request = 0.34 s 5178s [5000/8505] TestNetHTTP_v1_2#test_get__crlf = 0.01 s 5178s [5001/8505] TestNetHTTP_v1_2#test_timeout_during_HTTP_session = 0.41 s 5178s [5002/8505] TestNetHTTP_v1_2#test_timeout_during_HTTP_session_write = 0.31 s 5178s [5003/8505] TestNetHTTP_v1_2#test_timeout_during_non_chunked_streamed_HTTP_session_write = 0.08 s 5178s [5004/8505] TestNetHTTP_v1_2#test_set_form_with_file = 0.15 s 5179s [5005/8505] TestNetHTTP_v1_2#test_request = 0.40 s 5179s [5006/8505] TestNetHTTP_v1_2#test_s_post_form = 0.08 s 5179s [5007/8505] TestNetHTTP_v1_2#test_s_start = 0.02 s 5179s [5008/8505] TestNetHTTP_v1_2#test_get2 = 0.03 s 5179s [5009/8505] TestNetHTTP_v1_2#test_get = 0.17 s 5179s [5010/8505] TestNetHTTP_v1_2#test_head = 0.01 s 5179s [5011/8505] TestNetHTTP_v1_2#test_get__implicit_start = 0.02 s 5179s [5012/8505] TestNetHTTP_v1_2#test_s_get = 0.06 s 5179s [5013/8505] TestNetHTTP_v1_2#test_set_form = 0.14 s 5179s [5014/8505] TestNetHTTP_v1_2#test_s_post = 0.04 s 5180s [5015/8505] TestNetHTTP_v1_2#test_patch = 0.01 s 5180s [5016/8505] TestNetHTTP_v1_2#test_send_large_POST_request = 0.30 s 5180s [5017/8505] TestRDocMarkupDocument#test_lt2 = 0.00 s 5180s [5018/8505] TestRDocMarkupDocument#test_append = 0.00 s 5180s [5019/8505] TestRDocMarkupDocument#test_table_of_contents_omit_headings_below = 0.00 s 5180s [5020/8505] TestRDocMarkupDocument#test_merge = 0.00 s 5180s [5021/8505] TestRDocMarkupDocument#test_equals2_file = 0.00 s 5180s [5022/8505] TestRDocMarkupDocument#test_merge_add = 0.00 s 5180s [5023/8505] TestRDocMarkupDocument#test_append_document = 0.00 s 5180s [5024/8505] TestRDocMarkupDocument#test_file_equals = 0.00 s 5180s [5025/8505] TestRDocMarkupDocument#test_empty_eh_document = 0.00 s 5180s [5026/8505] TestRDocMarkupDocument#test_concat = 0.00 s 5180s [5027/8505] TestRDocMarkupDocument#test_append_string = 0.00 s 5180s [5028/8505] TestRDocMarkupDocument#test_each = 0.00 s 5180s [5029/8505] TestRDocMarkupDocument#test_push = 0.00 s 5180s [5030/8505] TestRDocMarkupDocument#test_equals2 = 0.00 s 5180s [5031/8505] TestRDocMarkupDocument#test_merge_empty = 0.00 s 5180s [5032/8505] TestRDocMarkupDocument#test_file_equals_top_level = 0.00 s 5180s [5033/8505] TestRDocMarkupDocument#test_empty_eh = 0.00 s 5180s [5034/8505] TestRDocMarkupDocument#test_table_of_contents = 0.00 s 5180s [5035/8505] Psych::Visitors::TestEmitter#test_document_implicit_end = 0.01 s 5180s [5036/8505] Psych::Visitors::TestEmitter#test_options = 0.00 s 5180s [5037/8505] Psych::Visitors::TestEmitter#test_alias = 0.00 s 5180s [5038/8505] Psych::Visitors::TestEmitter#test_scalar = 0.00 s 5180s [5039/8505] Psych::Visitors::TestEmitter#test_sequence = 0.00 s 5180s [5040/8505] Psych::Visitors::TestEmitter#test_document = 0.00 s 5180s [5041/8505] Psych::Visitors::TestEmitter#test_mapping = 0.00 s 5180s [5042/8505] Psych::Visitors::TestEmitter#test_scalar_with_tag = 0.00 s 5180s [5043/8505] Psych::Visitors::TestEmitter#test_stream = 0.00 s 5180s [5044/8505] OpenSSL::TestBN#test_exp = 0.00 s 5180s [5045/8505] OpenSSL::TestBN#test_zero_p = 0.00 s 5180s [5046/8505] OpenSSL::TestBN#test_mod_exp = 0.00 s 5180s [5047/8505] OpenSSL::TestBN#test_mod_sub = 0.00 s 5180s [5048/8505] OpenSSL::TestBN#test_coerce = 0.00 s 5180s [5049/8505] OpenSSL::TestBN#test_gcd = 0.00 s 5180s [5050/8505] OpenSSL::TestBN#test_random = 0.01 s 5180s [5051/8505] OpenSSL::TestBN#test_one_p = 0.00 s 5180s [5052/8505] OpenSSL::TestBN#test_sqr = 0.00 s 5180s [5053/8505] OpenSSL::TestBN#test_mod_sqr = 0.00 s 5180s [5054/8505] OpenSSL::TestBN#test_comparison = 0.00 s 5180s [5055/8505] OpenSSL::TestBN#test_mod_add = 0.00 s 5180s [5056/8505] OpenSSL::TestBN#test_mod_mul = 0.00 s 5180s [5057/8505] OpenSSL::TestBN#test_num_bits_bytes = 0.00 s 5180s [5058/8505] OpenSSL::TestBN#test_odd_p = 0.00 s 5181s [5059/8505] OpenSSL::TestSSL#test_options_disable_versions = 0.98 s 5181s [5060/8505] OpenSSL::TestSSL#test_copy_stream = 0.16 s 5181s [5061/8505] OpenSSL::TestSSL#test_socket_open_with_local_address_port_context = 0.15 s 5182s [5062/8505] OpenSSL::TestSSL#test_parallel = 0.79 s 5182s [5063/8505] OpenSSL::TestSSL#test_unset_OP_ALL = 0.20 s 5183s [5064/8505] OpenSSL::TestSSL#test_post_connection_check_wildcard_cn = 1.18 s 5185s [5065/8505] OpenSSL::TestSSL#test_bad_socket = 1.35 s 5189s [5066/8505] OpenSSL::TestSSL#test_minmax_version = 3.55 s 5189s [5067/8505] OpenSSL::TestSSL#test_sysread_and_syswrite = 0.21 s 5189s [5068/8505] OpenSSL::TestSSL#test_verify_hostname = 0.09 s 5189s [5069/8505] OpenSSL::TestSSL#test_close_after_socket_close = 0.19 s 5189s [5070/8505] OpenSSL::TestSSL#test_sync_close = 0.20 s 5190s [5071/8505] OpenSSL::TestSSL#test_client_auth_success = 0.32 s 5190s [5072/8505] OpenSSL::TestSSL#test_fileno = 0.09 s 5190s [5073/8505] OpenSSL::TestSSL#test_fallback_scsv = 0.42 s 5190s [5074/8505] OpenSSL::TestSSL#test_ctx_options = 0.08 s 5191s [5075/8505] OpenSSL::TestSSL#test_post_connection_check = 0.44 s 5191s [5076/8505] OpenSSL::TestSSL#test_socket_open_with_context = 0.16 s 5191s [5077/8505] OpenSSL::TestSSL#test_ssl_methods_constant = 0.09 s 5191s [5078/8505] OpenSSL::TestSSL#test_socket_open = 0.19 s 5191s [5079/8505] OpenSSL::TestSSL#test_sync_close_without_connect = 0.09 s 5192s [5080/8505] OpenSSL::TestSSL#test_verify_mode_server_cert = 0.34 s 5192s [5081/8505] OpenSSL::TestSSL#test_set_params_min_version = 0.33 s 5192s [5082/8505] OpenSSL::TestSSL#test_verify_wildcard = 0.08 s 5192s [5083/8505] OpenSSL::TestSSL#test_post_connection_check_wildcard_san = 0.09 s 5192s [5084/8505] TC_OpenStruct#test_overridden_public_methods = 0.00 s 5192s [5085/8505] TC_OpenStruct#test_access_undefined = 0.00 s 5192s [5086/8505] TC_OpenStruct#test_overridden_private_methods = 0.00 s 5192s [5087/8505] TC_OpenStruct#test_respond_to_with_lazy_getter = 0.00 s 5192s [5088/8505] TC_OpenStruct#test_initialize_subclass = 0.00 s 5192s [5089/8505] TC_OpenStruct#test_marshal = 0.00 s 5192s [5090/8505] TC_OpenStruct#test_dig = 0.00 s 5192s [5091/8505] TC_OpenStruct#test_super = 0.00 s 5192s [5092/8505] TC_OpenStruct#test_respond_to_allocated = 0.00 s 5192s [5093/8505] TC_OpenStruct#test_each_pair = 0.02 s 5192s [5094/8505] TC_OpenStruct#test_class = 0.00 s 5192s [5095/8505] TC_OpenStruct#test_inspect = 0.00 s 5192s [5096/8505] TC_OpenStruct#test_override_subclass = 0.00 s 5192s [5097/8505] TC_OpenStruct#test_to_h_with_block = 0.00 s 5192s [5098/8505] TC_OpenStruct#test_to_h = 0.00 s 5192s [5099/8505] TC_OpenStruct#test_override_submodule = 0.01 s 5192s [5100/8505] TC_OpenStruct#test_mistaken_subclass = 0.00 s 5192s [5101/8505] TC_OpenStruct#test_allocate_subclass = 0.00 s 5192s [5102/8505] TC_OpenStruct#test_setter = 0.00 s 5192s [5103/8505] TC_OpenStruct#test_private_method = 0.04 s 5192s [5104/8505] TC_OpenStruct#test_protected_method = 0.01 s 5192s [5105/8505] TC_OpenStruct#test_frozen = 0.02 s 5192s [5106/8505] TC_OpenStruct#test_delete_field = 0.01 s 5192s [5107/8505] TC_OpenStruct#test_eql_and_hash = 0.00 s 5192s [5108/8505] TC_OpenStruct#test_initialize = 0.00 s 5192s [5109/8505] TC_OpenStruct#test_does_not_redefine = 0.00 s 5192s [5110/8505] TC_OpenStruct#test_legacy_yaml = 0.06 s 5192s [5111/8505] TC_OpenStruct#test_equality = 0.00 s 5192s [5112/8505] TC_OpenStruct#test_respond_to = 0.00 s 5192s [5113/8505] TC_OpenStruct#test_getter = 0.00 s 5192s [5114/8505] TC_OpenStruct#test_yaml = 0.02 s 5192s [5115/8505] TC_OpenStruct#test_method_missing = 0.00 s 5192s [5116/8505] TC_OpenStruct#test_access_original_methods = 0.00 s 5192s [5117/8505] TC_OpenStruct#test_accessor_defines_method = 0.00 s 5192s [5118/8505] TestIRB::ExtendCommand#test_irb_info_singleline = 0.12 s 5193s [5119/8505] TestIRB::ExtendCommand#test_ls = 0.32 s 5193s [5120/8505] TestIRB::ExtendCommand#test_irb_source = 0.06 s 5193s [5121/8505] TestIRB::ExtendCommand#test_whereami = 0.01 s 5193s [5122/8505] TestIRB::ExtendCommand#test_show_source = 0.04 s 5193s [5123/8505] TestIRB::ExtendCommand#test_ls_with_no_singleton_class = 0.13 s 5193s [5124/8505] TestIRB::ExtendCommand#test_irb_load = 0.08 s 5193s [5125/8505] TestIRB::ExtendCommand#test_measure_with_proc = 0.10 s 5193s [5126/8505] TestIRB::ExtendCommand#test_measure_enabled_by_rc = 0.01 s 5193s [5127/8505] TestIRB::ExtendCommand#test_irb_info_multiline = 0.03 s 5193s [5128/8505] TestIRB::ExtendCommand#test_irb_info_multiline_without_rc_files = 0.01 s 5193s [5129/8505] TestIRB::ExtendCommand#test_measure_with_custom = 0.02 s 5193s [5130/8505] TestIRB::ExtendCommand#test_irb_info_lang = 0.02 s 5193s [5131/8505] TestIRB::ExtendCommand#test_measure = 0.02 s 5193s [5132/8505] TestIRB::ExtendCommand#test_measure_enabled_by_rc_with_custom = 0.02 s 5193s [5133/8505] TestIRB::ExtendCommand#test_irb_info_singleline_without_rc_files = 0.01 s 5193s [5134/8505] Random::Formatter::TestInstanceMethods#test_base64 = 0.00 s 5193s [5135/8505] Random::Formatter::TestInstanceMethods#test_hex_encoding = 0.00 s 5193s [5136/8505] Random::Formatter::TestInstanceMethods#test_random_number_float_by_zero = 0.01 s 5193s [5137/8505] Random::Formatter::TestInstanceMethods#test_random_number_not_default = 0.00 s 5193s [5138/8505] Random::Formatter::TestInstanceMethods#test_urlsafe_base64 = 0.01 s 5193s [5139/8505] Random::Formatter::TestInstanceMethods#test_uuid = 0.00 s 5193s [5140/8505] Random::Formatter::TestInstanceMethods#test_alphanumeric = 0.03 s 5193s [5141/8505] Random::Formatter::TestInstanceMethods#test_random_number_float = 0.01 s 5193s [5142/8505] Random::Formatter::TestInstanceMethods#test_random_bytes = 0.00 s 5193s [5143/8505] Random::Formatter::TestInstanceMethods#test_random_number_int = 0.00 s 5193s [5144/8505] Random::Formatter::TestInstanceMethods#test_hex = 0.01 s 5193s [5145/8505] TestDateParse#test_parse__time = 0.02 s 5193s [5146/8505] TestDateParse#test_rfc2822 = 0.01 s 5193s [5147/8505] TestDateParse#test__rfc2822 = 0.00 s 5193s [5148/8505] TestDateParse#test_parse__2 = 0.00 s 5193s [5149/8505] TestDateParse#test_parse__d_to_s = 0.00 s 5193s [5150/8505] TestDateParse#test_parse = 0.00 s 5193s [5151/8505] TestDateParse#test__parse_slash_exp = 0.00 s 5194s [5152/8505] TestDateParse#test_length_limit = 1.03 s 5194s [5153/8505] TestDateParse#test__xmlschema = 0.00 s 5194s [5154/8505] TestDateParse#test__httpdate = 0.01 s 5195s [5155/8505] TestDateParse#test_xmlschema = 0.00 s 5195s [5156/8505] TestDateParse#test__parse__2 = 0.01 s 5195s [5157/8505] TestDateParse#test_parse_utf8 = 0.00 s 5195s [5158/8505] TestDateParse#test_iso8601 = 0.01 s 5195s [5159/8505] TestDateParse#test__rfc3339 = 0.00 s 5195s [5160/8505] TestDateParse#test_rfc3339 = 0.00 s 5195s [5161/8505] TestDateParse#test__parse_odd_offset = 0.00 s 5195s [5162/8505] TestDateParse#test_given_string = 0.00 s 5195s [5163/8505] TestDateParse#test_date_ractor = 0.01 s 5195s [5164/8505] TestDateParse#test_httpdate = 0.00 s 5195s [5165/8505] TestDateParse#test_parse__comp = 0.03 s 5195s [5166/8505] TestOptionParser::CClass#test_order = 0.01 s 5195s [5167/8505] TestOptionParser::CClass#test_required_argument = 0.00 s 5195s [5168/8505] TestOptionParser::CClass#test_regexp = 0.00 s 5195s [5169/8505] TestOptionParser::CClass#test_nonopt_pattern = 0.00 s 5195s [5170/8505] TestOptionParser::CClass#test_into = 0.00 s 5195s [5171/8505] TestOptionParser::CClass#test_no_argument = 0.00 s 5195s [5172/8505] TestOptionParser::CClass#test_permute = 0.00 s 5195s [5173/8505] TestOptionParser::CClass#test_require_exact = 0.01 s 5195s [5174/8505] TestUnicodeNormalize#test_singleton_with_accents = 0.00 s 5195s [5175/8505] TestUnicodeNormalize#test_raise_exception_for_non_unicode_encoding = 0.00 s 5195s [5176/8505] TestUnicodeNormalize#test_non_UTF_8 = 0.02 s 5195s [5177/8505] TestUnicodeNormalize#test_partial_jamo_compose = 0.00 s 5195s [5178/8505] TestUnicodeNormalize#test_reiwa = 0.00 s 5195s [5179/8505] TestUnicodeNormalize#test_no_trailing_jamo = 0.00 s 5195s [5180/8505] TestUnicodeNormalize#test_hangul_plus_accents = 0.00 s 5195s [5181/8505] TestUnicodeNormalize#test_us_ascii = 0.00 s 5195s [5182/8505] TestUnicodeNormalize#test_partial_jamo_decompose = 0.00 s 5195s [5183/8505] TestOptionParser::SummaryTest#test_banner_from_progname = 0.00 s 5195s [5184/8505] TestOptionParser::SummaryTest#test_summary = 0.00 s 5195s [5185/8505] TestOptionParser::SummaryTest#test_short_clash = 0.00 s 5195s [5186/8505] TestOptionParser::SummaryTest#test_ver = 0.01 s 5195s [5187/8505] TestOptionParser::SummaryTest#test_order = 0.00 s 5195s [5188/8505] TestOptionParser::SummaryTest#test_summary_containing_space = 0.00 s 5195s [5189/8505] TestOptionParser::SummaryTest#test_regexp = 0.00 s 5195s [5190/8505] TestOptionParser::SummaryTest#test_nonopt_pattern = 0.00 s 5195s [5191/8505] TestOptionParser::SummaryTest#test_into = 0.00 s 5195s [5192/8505] TestOptionParser::SummaryTest#test_permute = 0.00 s 5195s [5193/8505] TestOptionParser::SummaryTest#test_require_exact = 0.05 s 5195s [5194/8505] TestOptionParser::SummaryTest#test_banner = 0.00 s 5195s [5195/8505] TestRelineAsReadlineHistory#test_pop = 0.01 s 5195s [5196/8505] TestRelineAsReadlineHistory#test_get__out_of_range = 0.02 s 5195s [5197/8505] TestRelineAsReadlineHistory#test_get__negative = 0.00 s 5195s [5198/8505] TestRelineAsReadlineHistory#test_each__enumerator = 0.00 s 5195s [5199/8505] TestRelineAsReadlineHistory#test_empty_p = 0.01 s 5195s [5200/8505] TestRelineAsReadlineHistory#test_push__operator = 0.00 s 5195s [5201/8505] TestRelineAsReadlineHistory#test_push__plural = 0.01 s 5195s [5202/8505] TestRelineAsReadlineHistory#test_get = 0.01 s 5195s [5203/8505] TestRelineAsReadlineHistory#test_set = 0.01 s 5195s [5204/8505] TestRelineAsReadlineHistory#test_delete_at__out_of_range = 0.01 s 5195s [5205/8505] TestRelineAsReadlineHistory#test_delete_at = 0.01 s 5195s [5206/8505] TestRelineAsReadlineHistory#test_to_s = 0.00 s 5195s [5207/8505] TestRelineAsReadlineHistory#test_each = 0.00 s 5195s [5208/8505] TestRelineAsReadlineHistory#test_length = 0.00 s 5195s [5209/8505] TestRelineAsReadlineHistory#test_set__out_of_range = 0.01 s 5195s [5210/8505] TestRelineAsReadlineHistory#test_push = 0.01 s 5195s [5211/8505] TestRelineAsReadlineHistory#test_shift = 0.00 s 5195s [5212/8505] TestCSVDataConverters::DifferentOFS#test_builtin_integer_converter = 0.00 s 5195s [5213/8505] TestCSVDataConverters::DifferentOFS#test_builtin_date_converter = 0.00 s 5195s [5214/8505] TestCSVDataConverters::DifferentOFS#test_builtin_date_time_converter_iso8601_under_second_offset = 0.00 s 5195s [5215/8505] TestCSVDataConverters::DifferentOFS#test_builtin_date_time_converter_iso8601_minute = 0.00 s 5195s [5216/8505] TestCSVDataConverters::DifferentOFS#test_builtin_date_time_converter_iso8601_offset = 0.00 s 5195s [5217/8505] TestCSVDataConverters::DifferentOFS#test_builtin_date_time_converter_iso8601_under_second = 0.00 s 5195s [5218/8505] TestCSVDataConverters::DifferentOFS#test_builtin_float_converter = 0.00 s 5195s [5219/8505] TestCSVDataConverters::DifferentOFS#test_builtin_date_time_converter = 0.00 s 5195s [5220/8505] TestCSVDataConverters::DifferentOFS#test_builtin_date_time_converter_iso8601_date = 0.00 s 5195s [5221/8505] TestCSVDataConverters::DifferentOFS#test_builtin_date_time_converter_iso8601_utc = 0.00 s 5195s [5222/8505] TestCSVDataConverters::DifferentOFS#test_builtin_date_time_converter_iso8601_second = 0.00 s 5195s [5223/8505] JSONParserTest#test_parse_simple_objects = 0.00 s 5195s [5224/8505] JSONParserTest#test_parsing = 0.00 s 5195s [5225/8505] JSONParserTest#test_freeze = 0.00 s 5195s [5226/8505] JSONParserTest#test_parse_numbers = 0.01 s 5195s [5227/8505] JSONParserTest#test_generate_of_core_subclasses = 0.00 s 5195s [5228/8505] JSONParserTest#test_symbolize_names = 0.00 s 5195s [5229/8505] JSONParserTest#test_generate_core_subclasses_with_default_to_json = 0.00 s 5195s [5230/8505] JSONParserTest#test_argument_encoding = 0.00 s 5195s [5231/8505] JSONParserTest#test_error_message_encoding = 0.00 s 5195s [5232/8505] JSONParserTest#test_parse_simple_arrays = 0.00 s 5195s [5233/8505] JSONParserTest#test_parse_array_custom_non_array_derived_class = 0.00 s 5195s [5234/8505] JSONParserTest#test_parse_object_custom_hash_derived_class = 0.00 s 5195s [5235/8505] JSONParserTest#test_parsing_frozen_ascii8bit_string = 0.00 s 5195s [5236/8505] JSONParserTest#test_parse_object = 0.00 s 5195s [5237/8505] JSONParserTest#test_some_wrong_inputs = 0.00 s 5195s [5238/8505] JSONParserTest#test_backslash = 0.00 s 5195s [5239/8505] JSONParserTest#test_parse_bigdecimals = 0.00 s 5195s [5240/8505] JSONParserTest#test_parse_big_integers = 0.00 s 5195s [5241/8505] JSONParserTest#test_parse_values = 0.00 s 5195s [5242/8505] JSONParserTest#test_parse_json_primitive_values = 0.00 s 5195s [5243/8505] JSONParserTest#test_nesting = 0.02 s 5195s [5244/8505] JSONParserTest#test_parse_arrays = 0.00 s 5195s [5245/8505] JSONParserTest#test_parse_array_custom_array_derived_class = 0.00 s 5195s [5246/8505] JSONParserTest#test_generate_core_subclasses_with_new_to_json = 0.00 s 5195s [5247/8505] JSONParserTest#test_parse_more_complex_arrays = 0.11 s 5195s [5248/8505] JSONParserTest#test_parse_complex_objects = 0.08 s 5195s [5249/8505] JSONParserTest#test_parse_comments = 0.00 s 5195s [5250/8505] JSONParserTest#test_parser_reset = 0.00 s 5195s [5251/8505] JSONParserTest#test_construction = 0.00 s 5195s [5252/8505] JSONParserTest#test_parse_object_custom_non_hash_derived_class = 0.00 s 5195s [5253/8505] JSONParserTest#test_parse_generic_object = 0.00 s 5195s [5254/8505] JSONParserTest#test_parse_some_strings = 0.00 s 5195s [5255/8505] TestTimeout#test_yield_param = 0.00 s 5195s [5256/8505] TestTimeout#test_rescue_exit = 0.02 s 5195s [5257/8505] TestTimeout#test_queue = 0.02 s 5195s [5258/8505] TestTimeout#test_timeout = 0.10 s 5195s [5259/8505] TestTimeout#test_raise_with_message = 0.00 s 5195s [5260/8505] TestTimeout#test_exit_exception = 0.00 s 5195s [5261/8505] TestTimeout#test_non_timing_out_code_is_successful = 0.00 s 5196s [5262/8505] TestTimeout#test_custom_exception = 0.03 s 5196s [5263/8505] TestSecureRandom#test_base64 = 0.00 s 5196s [5264/8505] TestSecureRandom#test_random_number_float_by_zero = 0.00 s 5196s [5265/8505] TestSecureRandom#test_urlsafe_base64 = 0.02 s 5196s [5266/8505] TestSecureRandom#test_uuid = 0.00 s 5196s [5267/8505] TestSecureRandom#test_alphanumeric = 0.04 s 5196s [5268/8505] TestSecureRandom#test_random_number_float = 0.01 s 5196s [5269/8505] TestSecureRandom#test_random_bytes = 0.00 s 5196s [5270/8505] TestSecureRandom#test_repeated_gen_random = 0.00 s 5196s [5271/8505] TestSecureRandom#test_random_number_int = 0.00 s 5196s [5272/8505] TestSecureRandom#test_hex = 0.00 s 5196s [5273/8505] TestNetHTTP_v1_2_chunked#test_s_get_response = 0.64 s 5196s [5274/8505] TestNetHTTP_v1_2_chunked#test_post = 0.23 s 5197s [5275/8505] TestNetHTTP_v1_2_chunked#test_chunked_break = 0.19 s 5197s [5276/8505] TestNetHTTP_v1_2_chunked#test_send_request = 0.35 s 5197s [5277/8505] TestNetHTTP_v1_2_chunked#test_get__crlf = 0.04 s 5197s [5278/8505] TestNetHTTP_v1_2_chunked#test_timeout_during_HTTP_session = 0.55 s 5198s [5279/8505] TestNetHTTP_v1_2_chunked#test_timeout_during_HTTP_session_write = 0.27 s 5198s [5280/8505] TestNetHTTP_v1_2_chunked#test_timeout_during_non_chunked_streamed_HTTP_session_write = 0.09 s 5198s [5281/8505] TestNetHTTP_v1_2_chunked#test_set_form_with_file = 0.32 s 5199s [5282/8505] TestNetHTTP_v1_2_chunked#test_request = 0.59 s 5199s [5283/8505] TestNetHTTP_v1_2_chunked#test_s_post_form = 0.35 s 5199s [5284/8505] TestNetHTTP_v1_2_chunked#test_s_start = 0.02 s 5199s [5285/8505] TestNetHTTP_v1_2_chunked#test_get2 = 0.08 s 5200s [5286/8505] TestNetHTTP_v1_2_chunked#test_get = 0.49 s 5200s [5287/8505] TestNetHTTP_v1_2_chunked#test_head = 0.03 s 5200s [5288/8505] TestNetHTTP_v1_2_chunked#test_get__implicit_start = 0.09 s 5200s [5289/8505] TestNetHTTP_v1_2_chunked#test_s_get = 0.19 s 5200s [5290/8505] TestNetHTTP_v1_2_chunked#test_set_form = 0.15 s 5200s [5291/8505] TestNetHTTP_v1_2_chunked#test_get__break = 0.03 s 5200s [5292/8505] TestNetHTTP_v1_2_chunked#test_s_post = 0.04 s 5200s [5293/8505] TestNetHTTP_v1_2_chunked#test_patch = 0.03 s 5200s [5294/8505] Psych::TestStruct#test_roundtrip = 0.00 s 5200s [5295/8505] Psych::TestStruct#test_self_referential_struct = 0.01 s 5200s [5296/8505] Psych::TestStruct#test_load = 0.00 s 5200s [5297/8505] TestRDocTokenStream#test_class_to_html_empty = 0.01 s 5200s [5298/8505] TestRDocTokenStream#test_class_to_html = 0.00 s 5200s [5299/8505] TestRDocTokenStream#test_tokens_to_s = 0.00 s 5200s [5300/8505] TestOptionParser::NoArg::Def2#test_abbrev = 0.03 s 5200s [5301/8505] TestOptionParser::NoArg::Def2#test_order = 0.01 s 5200s [5302/8505] TestOptionParser::NoArg::Def2#test_short = 0.02 s 5200s [5303/8505] TestOptionParser::NoArg::Def2#test_hyphenize = 0.01 s 5200s [5304/8505] TestOptionParser::NoArg::Def2#test_regexp = 0.00 s 5200s [5305/8505] TestOptionParser::NoArg::Def2#test_nonopt_pattern = 0.01 s 5200s [5306/8505] TestOptionParser::NoArg::Def2#test_into = 0.00 s 5200s [5307/8505] TestOptionParser::NoArg::Def2#test_permute = 0.01 s 5200s [5308/8505] TestOptionParser::NoArg::Def2#test_long = 0.01 s 5200s [5309/8505] TestOptionParser::NoArg::Def2#test_ambiguous = 0.02 s 5200s [5310/8505] TestOptionParser::NoArg::Def2#test_require_exact = 0.02 s 5200s [5311/8505] TestCSVParseRowSeparator#test_multiple_characters = 0.00 s 5200s [5312/8505] TestCSVInterfaceDelegation::TestStringIO#test_stat = 0.00 s 5200s [5313/8505] TestCSVInterfaceDelegation::TestStringIO#test_ioctl = 0.00 s 5200s [5314/8505] TestCSVInterfaceDelegation::TestStringIO#test_binmode? = 0.00 s 5200s [5315/8505] TestCSVInterfaceDelegation::TestStringIO#test_to_io = 0.00 s 5200s [5316/8505] TestCSVInterfaceDelegation::TestStringIO#test_to_i = 0.00 s 5200s [5317/8505] TestCSVInterfaceDelegation::TestStringIO#test_flock = 0.00 s 5200s [5318/8505] TestCSVInterfaceDelegation::TestStringIO#test_path = 0.00 s 5200s [5319/8505] TestCSVEncodings#test_parses_latin1_encoding = 0.01 s 5200s [5320/8505] TestCSVEncodings#test_csv_chars_are_transcoded = 0.01 s 5200s [5321/8505] TestCSVEncodings#test_row_separator_detection_with_invalid_encoding = 0.01 s 5200s [5322/8505] TestCSVEncodings#test_encoding_is_upgraded_for_ascii_content_during_writing_as_needed = 0.05 s 5201s [5323/8505] TestCSVEncodings#test_auto_line_ending_detection = 0.03 s 5201s [5324/8505] TestCSVEncodings#test_encoding_is_upgraded_during_writing_as_needed = 0.01 s 5201s [5325/8505] TestCSVEncodings#test_explicit_encoding = 0.02 s 5201s [5326/8505] TestCSVEncodings#test_parses_shift_jis_encoding = 0.02 s 5201s [5327/8505] TestCSVEncodings#test_parser_works_with_encoded_headers = 0.02 s 5201s [5328/8505] TestCSVEncodings#test_regular_expression_escaping = 0.84 s 5201s [5329/8505] TestCSVEncodings#test_read_allows_you_to_set_encodings = 0.01 s 5201s [5330/8505] TestCSVEncodings#test_invalid_encoding_row_error = 0.02 s 5202s [5331/8505] TestCSVEncodings#test_parses_utf8_encoding = 0.01 s 5202s [5332/8505] TestCSVEncodings#test_built_in_converters_transcode_to_utf_8_then_convert = 0.08 s 5202s [5333/8505] TestCSVEncodings#test_parses_utf16be_encoding = 0.02 s 5203s [5334/8505] TestCSVEncodings#test_reading_with_most_encodings = 0.99 s 5203s [5335/8505] TestCSVEncodings#test_encoding_with_default_internal = 0.03 s 5203s [5336/8505] TestCSVEncodings#test_encoding_is_not_upgraded_for_non_ascii_content_during_writing_as_needed = 0.00 s 5203s [5337/8505] TestCSVEncodings#test_open_allows_you_to_set_encodings = 0.01 s 5204s [5338/8505] TestCSVEncodings#test_can_write_csv_in_any_encoding = 0.90 s 5204s [5339/8505] TestCSVEncodings#test_foreach_allows_you_to_set_encodings = 0.06 s 5204s [5340/8505] TestCSVEncodings#test_read_with_default_encoding = 0.08 s 5204s [5341/8505] TestCSVEncodings#test_built_in_header_converters_transcode_to_utf_8_then_convert = 0.01 s 5204s [5342/8505] TC_Operator#test_loopback? = 0.01 s 5204s [5343/8505] TC_Operator#test_compare = 0.02 s 5204s [5344/8505] TC_Operator#test_hash = 0.01 s 5204s [5345/8505] TC_Operator#test_link_local? = 0.00 s 5204s [5346/8505] TC_Operator#test_shift_left = 0.05 s 5204s [5347/8505] TC_Operator#test_or = 0.01 s 5204s [5348/8505] TC_Operator#test_equal = 0.00 s 5204s [5349/8505] TC_Operator#test_private? = 0.01 s 5204s [5350/8505] TC_Operator#test_and = 0.00 s 5204s [5351/8505] TC_Operator#test_carrot = 0.00 s 5204s [5352/8505] TC_Operator#test_shift_right = 0.00 s 5204s [5353/8505] TC_Operator#test_mask = 0.01 s 5204s [5354/8505] TC_Operator#test_include? = 0.00 s 5204s [5355/8505] TestDate#test_freeze = 0.00 s 5204s [5356/8505] TestDate#test_sub = 0.01 s 5204s [5357/8505] TestDate#test_hash = 0.01 s 5204s [5358/8505] TestDate#test_infinity_comparison = 0.01 s 5204s [5359/8505] TestDate#test_submillisecond_comparison = 0.01 s 5204s [5360/8505] TestDate#test__const = 0.00 s 5204s [5361/8505] TestDate#test_eql_p = 0.00 s 5204s [5362/8505] TestDate#test_range_infinite_float = 0.00 s 5204s [5363/8505] Reline::KeyActor::ViInsert::Test#test_vi_end_word_with_operator = 0.04 s 5204s [5364/8505] Reline::KeyActor::ViInsert::Test#test_vi_delete_prev_char = 0.01 s 5204s [5365/8505] Reline::KeyActor::ViInsert::Test#test_vi_command_mode_with_input = 0.01 s 5204s [5366/8505] Reline::KeyActor::ViInsert::Test#test_completion_journey = 0.02 s 5204s [5367/8505] Reline::KeyActor::ViInsert::Test#test_vi_delete_next_char_for_mbchar_by_plural_code_points = 0.01 s 5204s [5368/8505] Reline::KeyActor::ViInsert::Test#test_vi_change_meta_with_vi_next_word = 0.01 s 5204s [5369/8505] Reline::KeyActor::ViInsert::Test#test_ed_delete_prev_word_for_mbchar_by_plural_code_points = 0.01 s 5204s [5370/8505] Reline::KeyActor::ViInsert::Test#test_vi_delete_meta_with_arg = 0.01 s 5204s [5371/8505] Reline::KeyActor::ViInsert::Test#test_vi_delete_meta_with_vi_next_word_at_eol = 0.00 s 5204s [5372/8505] Reline::KeyActor::ViInsert::Test#test_vi_next_char_with_operator = 0.01 s 5204s [5373/8505] Reline::KeyActor::ViInsert::Test#test_vi_paste_prev = 0.06 s 5204s [5374/8505] Reline::KeyActor::ViInsert::Test#test_vi_first_print = 0.01 s 5204s [5375/8505] Reline::KeyActor::ViInsert::Test#test_ed_prev_char = 0.00 s 5205s [5376/8505] Reline::KeyActor::ViInsert::Test#test_vi_replace_char = 0.01 s 5205s [5377/8505] Reline::KeyActor::ViInsert::Test#test_vi_paste_prev_for_mbchar_by_plural_code_points = 0.01 s 5205s [5378/8505] Reline::KeyActor::ViInsert::Test#test_completion_journey_in_middle_of_line = 0.01 s 5205s [5379/8505] Reline::KeyActor::ViInsert::Test#test_vi_delete_next_char = 0.00 s 5205s [5380/8505] Reline::KeyActor::ViInsert::Test#test_vi_list_or_eof_with_non_empty_line = 0.01 s 5205s [5381/8505] Reline::KeyActor::ViInsert::Test#test_vi_add_at_eol = 0.08 s 5205s [5382/8505] Reline::KeyActor::ViInsert::Test#test_vi_add = 0.02 s 5205s [5383/8505] Reline::KeyActor::ViInsert::Test#test_ed_quoted_insert_with_vi_arg = 0.02 s 5205s [5384/8505] Reline::KeyActor::ViInsert::Test#test_completion = 0.01 s 5205s [5385/8505] Reline::KeyActor::ViInsert::Test#test_vi_end_big_word = 0.04 s 5205s [5386/8505] Reline::KeyActor::ViInsert::Test#test_ed_insert_mbchar_one = 0.01 s 5205s [5387/8505] Reline::KeyActor::ViInsert::Test#test_vi_end_word = 0.02 s 5205s [5388/8505] Reline::KeyActor::ViInsert::Test#test_ed_insert_for_plural_mbchar_by_plural_code_points = 0.00 s 5205s [5389/8505] Reline::KeyActor::ViInsert::Test#test_vi_prev_next_big_word = 0.04 s 5205s [5390/8505] Reline::KeyActor::ViInsert::Test#test_completion_with_disable_completion = 0.00 s 5205s [5391/8505] Reline::KeyActor::ViInsert::Test#test_ed_newline_with_cr = 0.01 s 5205s [5392/8505] Reline::KeyActor::ViInsert::Test#test_ed_insert_two = 0.00 s 5205s [5393/8505] Reline::KeyActor::ViInsert::Test#test_ed_delete_prev_word_for_mbchar = 0.01 s 5205s [5394/8505] Reline::KeyActor::ViInsert::Test#test_ed_delete_next_char_at_eol = 0.01 s 5205s [5395/8505] Reline::KeyActor::ViInsert::Test#test_ed_next_char = 0.00 s 5205s [5396/8505] Reline::KeyActor::ViInsert::Test#test_vi_paste_prev_for_mbchar = 0.01 s 5205s [5397/8505] Reline::KeyActor::ViInsert::Test#test_vi_kill_line_prev = 0.01 s 5205s [5398/8505] Reline::KeyActor::ViInsert::Test#test_vi_paste_next = 0.01 s 5205s [5399/8505] Reline::KeyActor::ViInsert::Test#test_ed_insert_for_mbchar_by_plural_code_points = 0.01 s 5205s [5400/8505] Reline::KeyActor::ViInsert::Test#test_vi_delete_next_char_for_mbchar = 0.00 s 5205s [5401/8505] Reline::KeyActor::ViInsert::Test#test_vi_to_prev_char = 0.02 s 5205s [5402/8505] Reline::KeyActor::ViInsert::Test#test_pasting_fullwidth = 0.00 s 5205s [5403/8505] Reline::KeyActor::ViInsert::Test#test_vi_paste_next_for_mbchar_by_plural_code_points = 0.01 s 5205s [5404/8505] Reline::KeyActor::ViInsert::Test#test_vi_delete_prev_char_for_mbchar_by_plural_code_points = 0.01 s 5205s [5405/8505] Reline::KeyActor::ViInsert::Test#test_vi_delete_prev_char_for_mbchar = 0.00 s 5205s [5406/8505] Reline::KeyActor::ViInsert::Test#test_vi_paste_next_for_mbchar = 0.00 s 5205s [5407/8505] Reline::KeyActor::ViInsert::Test#test_vi_delete_meta = 0.01 s 5205s [5408/8505] Reline::KeyActor::ViInsert::Test#test_vi_end_big_word_with_operator = 0.01 s 5205s [5409/8505] Reline::KeyActor::ViInsert::Test#test_vi_prev_char = 0.01 s 5205s [5410/8505] Reline::KeyActor::ViInsert::Test#test_vi_replace_char_with_mbchar = 0.01 s 5205s [5411/8505] Reline::KeyActor::ViInsert::Test#test_vi_prev_next_word = 0.03 s 5205s [5412/8505] Reline::KeyActor::ViInsert::Test#test_vi_yank = 0.01 s 5205s [5413/8505] Reline::KeyActor::ViInsert::Test#test_vi_list_or_eof = 0.00 s 5205s [5414/8505] Reline::KeyActor::ViInsert::Test#test_vi_to_next_char = 0.01 s 5205s [5415/8505] Reline::KeyActor::ViInsert::Test#test_ed_delete_prev_word = 0.01 s 5205s [5416/8505] Reline::KeyActor::ViInsert::Test#test_history = 0.01 s 5205s [5417/8505] Reline::KeyActor::ViInsert::Test#test_ed_delete_prev_char = 0.01 s 5205s [5418/8505] Reline::KeyActor::ViInsert::Test#test_ed_newline_with_lf = 0.00 s 5205s [5419/8505] Reline::KeyActor::ViInsert::Test#test_completion_journey_reverse = 0.01 s 5205s [5420/8505] Reline::KeyActor::ViInsert::Test#test_ed_insert_one = 0.00 s 5205s [5421/8505] Reline::KeyActor::ViInsert::Test#test_ed_insert_mbchar_two = 0.00 s 5205s [5422/8505] Reline::KeyActor::ViInsert::Test#test_pasting = 0.01 s 5205s [5423/8505] Reline::KeyActor::ViInsert::Test#test_unimplemented_vi_command_should_be_no_op = 0.00 s 5205s [5424/8505] Reline::KeyActor::ViInsert::Test#test_vi_insert_at_bol = 0.06 s 5205s [5425/8505] Reline::KeyActor::ViInsert::Test#test_vi_delete_meta_with_vi_next_char = 0.02 s 5205s [5426/8505] Reline::KeyActor::ViInsert::Test#test_vi_change_meta = 0.01 s 5205s [5427/8505] Reline::KeyActor::ViInsert::Test#test_vi_next_char = 0.00 s 5205s [5428/8505] Reline::KeyActor::ViInsert::Test#test_vi_command_mode = 0.00 s 5205s [5429/8505] Reline::KeyActor::ViInsert::Test#test_ed_quoted_insert = 0.01 s 5205s [5430/8505] Reline::KeyActor::ViInsert::Test#test_ed_move_to_beg = 0.01 s 5205s [5431/8505] Reline::KeyActor::ViInsert::Test#test_vi_insert = 0.00 s 5205s [5432/8505] Psych::TestBoolean#test_TRUE = 0.00 s 5205s [5433/8505] Psych::TestBoolean#test_n = 0.00 s 5205s [5434/8505] Psych::TestBoolean#test_off = 0.00 s 5205s [5435/8505] Psych::TestBoolean#test_Off = 0.00 s 5205s [5436/8505] Psych::TestBoolean#test_false = 0.00 s 5205s [5437/8505] Psych::TestBoolean#test_YES = 0.00 s 5205s [5438/8505] Psych::TestBoolean#test_no = 0.00 s 5205s [5439/8505] Psych::TestBoolean#test_true = 0.00 s 5205s [5440/8505] Psych::TestBoolean#test_on = 0.00 s 5205s [5441/8505] Psych::TestBoolean#test_Yes = 0.00 s 5205s [5442/8505] Psych::TestBoolean#test_yes = 0.00 s 5205s [5443/8505] Psych::TestBoolean#test_FALSE = 0.00 s 5205s [5444/8505] Psych::TestBoolean#test_NO = 0.00 s 5205s [5445/8505] Psych::TestBoolean#test_ON = 0.00 s 5205s [5446/8505] Psych::TestBoolean#test_y = 0.00 s 5205s [5447/8505] Psych::TestBoolean#test_True = 0.00 s 5205s [5448/8505] Psych::TestBoolean#test_No = 0.00 s 5205s [5449/8505] Psych::TestBoolean#test_OFF = 0.00 s 5205s [5450/8505] Psych::TestBoolean#test_False = 0.00 s 5205s [5451/8505] Psych::TestBoolean#test_On = 0.00 s 5205s [5452/8505] TestRDocI18nText#test_multiple_paragraphs = 0.02 s 5205s [5453/8505] TestRDocI18nText#test_translate_not_translated_message = 0.01 s 5205s [5454/8505] TestRDocI18nText#test_translate_multiple_paragraphs = 0.01 s 5205s [5455/8505] TestRDocI18nText#test_translate_keep_empty_lines = 0.00 s 5205s [5456/8505] TestRDocMarkupVerbatim#test_ruby_eh = 0.00 s 5205s [5457/8505] TestRDocMarkupVerbatim#test_equals2 = 0.00 s 5205s [5458/8505] TestDigest::TestSHA2#test_s_file = 0.00 s 5205s [5459/8505] TestIRB::TestContext#test_evaluate_with_exception = 0.00 s 5205s [5460/8505] TestIRB::TestContext#test_echo_on_assignment = 0.07 s 5205s [5461/8505] TestIRB::TestContext#test_omit_multiline_on_assignment = 0.12 s 5205s [5462/8505] TestIRB::TestContext#test_default_return_format = 0.02 s 5205s [5463/8505] TestIRB::TestContext#test_eval_input_with_long_exception = 0.04 s 5206s [5464/8505] TestIRB::TestContext#test_omit_on_assignment = 0.33 s 5206s [5465/8505] TestIRB::TestContext#test_multiline_output_on_default_inspector = 0.02 s 5206s [5466/8505] TestIRB::TestContext#test_echo_on_assignment_conf = 0.01 s 5206s [5467/8505] TestIRB::TestContext#test_lineno = 0.01 s 5206s [5468/8505] TestIRB::TestContext#test_last_value = 0.01 s 5206s [5469/8505] TestIRB::TestContext#test_eval_object_without_inspect_method = 0.10 s 5206s [5470/8505] TestIRB::TestContext#test_assignment_expression = 0.01 s 5206s [5471/8505] TestIRB::TestColor#test_inspect_colorable = 0.01 s 5206s [5472/8505] TestRDocGeneratorDarkfish#test_generate_dry_run = 0.18 s 5206s [5473/8505] TestRDocGeneratorDarkfish#test_setup = 0.01 s 5206s [5474/8505] TestRDocGeneratorDarkfish#test_generate_static_dry_run = 0.21 s 5206s [5475/8505] TestRDocGeneratorDarkfish#test_generated_method_with_html_tag_yield = 0.22 s 5206s [5476/8505] TestRDocGeneratorDarkfish#test_install_rdoc_static_file = 0.01 s 5206s [5477/8505] TestRDocGeneratorDarkfish#test_template_for_partial = 0.01 s 5207s [5478/8505] TestRDocGeneratorDarkfish#test_generate = 0.19 s 5207s [5479/8505] TestRDocGeneratorDarkfish#test_template_for_dry_run = 0.11 s 5207s [5480/8505] TestRDocGeneratorDarkfish#test_template_for = 0.02 s 5207s [5481/8505] TestRDocGeneratorDarkfish#test_install_rdoc_static_file_missing = 0.01 s 5207s [5482/8505] TestRDocGeneratorDarkfish#test_template_stylesheets = 0.16 s 5207s [5483/8505] TestRDocGeneratorDarkfish#test_generate_static = 0.13 s 5207s [5484/8505] TestCSVParseSkipLines::DifferentOFS#test_multibyte_data = 0.01 s 5207s [5485/8505] TestCSVParseSkipLines::DifferentOFS#test_regexp = 0.00 s 5207s [5486/8505] TestCSVParseSkipLines::DifferentOFS#test_regexp_quoted = 0.00 s 5207s [5487/8505] TestCSVParseSkipLines::DifferentOFS#test_string = 0.00 s 5207s [5488/8505] TestCSVParseSkipLines::DifferentOFS#test_not_matchable = 0.00 s 5207s [5489/8505] TestCSVParseSkipLines::DifferentOFS#test_empty_line_and_liberal_parsing = 0.00 s 5207s [5490/8505] TestCSVParseSkipLines::DifferentOFS#test_default = 0.00 s 5207s [5491/8505] TestCSVParseSkipLines::DifferentOFS#test_matchable = 0.00 s 5207s [5492/8505] TestCSVParseSkipLines::DifferentOFS#test_crlf = 0.00 s 5207s [5493/8505] OpenSSL::OSSL#test_secure_compare = 0.08 s 5215s [5494/8505] OpenSSL::OSSL#test_memcmp_timing = 7.25 s 5215s [5495/8505] OpenSSL::OSSL#test_fixed_length_secure_compare = 0.78 s 5216s [5496/8505] TestCSVInterfaceRead#test_eof? = 0.33 s 5216s [5497/8505] TestCSVInterfaceRead#test_open_readlines = 0.01 s 5216s [5498/8505] TestCSVInterfaceRead#test_open_with_invalid_replace = 0.01 s 5216s [5499/8505] TestCSVInterfaceRead#test_foreach_mode = 0.01 s 5216s [5500/8505] TestCSVInterfaceRead#test_open_encoding_nonexistent = 0.03 s 5216s [5501/8505] TestCSVInterfaceRead#test_open_closed = 0.00 s 5216s [5502/8505] TestCSVInterfaceRead#test_open_encoding_invalid = 0.02 s 5216s [5503/8505] TestCSVInterfaceRead#test_open_with_invalid_replace_and_replace_string = 0.01 s 5216s [5504/8505] TestCSVInterfaceRead#test_readlines = 0.00 s 5216s [5505/8505] TestCSVInterfaceRead#test_open_read = 0.00 s 5216s [5506/8505] TestCSVInterfaceRead#test_new_nil = 0.01 s 5216s [5507/8505] TestCSVInterfaceRead#test_open_with_undef_replace_and_replace_string = 0.01 s 5216s [5508/8505] TestCSVInterfaceRead#test_parse_line_empty = 0.00 s 5216s [5509/8505] TestCSVInterfaceRead#test_enumerator = 0.01 s 5216s [5510/8505] TestCSVInterfaceRead#test_read = 0.00 s 5216s [5511/8505] TestCSVInterfaceRead#test_parse_line_empty_line = 0.00 s 5216s [5512/8505] TestCSVInterfaceRead#test_parse = 0.00 s 5216s [5513/8505] TestCSVInterfaceRead#test_parse_block = 0.01 s 5216s [5514/8505] TestCSVInterfaceRead#test_each_twice = 0.01 s 5216s [5515/8505] TestCSVInterfaceRead#test_shift_and_each = 0.01 s 5216s [5516/8505] TestCSVInterfaceRead#test_open_invalid_byte_sequence_in_utf_8 = 0.01 s 5216s [5517/8505] TestCSVInterfaceRead#test_table = 0.01 s 5216s [5518/8505] TestCSVInterfaceRead#test_parse_headers_only = 0.00 s 5216s [5519/8505] TestCSVInterfaceRead#test_open_block_return_value = 0.00 s 5216s [5520/8505] TestCSVInterfaceRead#test_foreach = 0.00 s 5216s [5521/8505] TestCSVInterfaceRead#test_open_with_invalid_nil = 0.07 s 5216s [5522/8505] TestCSVInterfaceRead#test_open_with_undef_replace = 0.01 s 5216s [5523/8505] TestCSVInterfaceRead#test_options_not_modified = 0.01 s 5216s [5524/8505] TestCSVInterfaceRead#test_closed? = 0.00 s 5216s [5525/8505] TestCSVInterfaceRead#test_open_encoding_utf_8_with_bom = 0.01 s 5216s [5526/8505] TestCSVInterfaceRead#test_parse_line_shortcut = 0.01 s 5216s [5527/8505] TestCSVInterfaceRead#test_parse_line = 0.00 s 5216s [5528/8505] TestCSVInterfaceRead#test_shift = 0.01 s 5216s [5529/8505] TestCSVInterfaceRead#test_foreach_enumurator = 0.00 s 5216s [5530/8505] TestCSVInterfaceRead#test_parse_enumerator = 0.00 s 5216s [5531/8505] TestCSVInterfaceRead#test_open_auto_close = 0.00 s 5216s [5532/8505] TestCSVInterfaceRead#test_open_encoding_valid = 0.01 s 5216s [5533/8505] TSortTest#test_cycle = 0.00 s 5216s [5534/8505] TSortTest#test_s_each_strongly_connected_component = 0.01 s 5216s [5535/8505] TSortTest#test_s_tsort = 0.00 s 5216s [5536/8505] TSortTest#test_array = 0.01 s 5216s [5537/8505] TSortTest#test_s_strongly_connected_components = 0.00 s 5216s [5538/8505] TSortTest#test_dag = 0.00 s 5216s [5539/8505] TSortTest#test_s_each_strongly_connected_component_from = 0.00 s 5216s [5540/8505] TSortTest#test_s_tsort_each = 0.00 s 5217s [5541/8505] TestFileUtils#test_chown_dir_group_ownership_not_recursive = 0.38 s 5217s [5542/8505] TestFileUtils#test_cd_result = 0.04 s 5217s [5543/8505] TestFileUtils#test_copy_entry_symlink = 0.04 s 5217s [5544/8505] TestFileUtils#test_cp_r_symlink = 0.03 s 5217s [5545/8505] TestFileUtils#test_ln_s_pathname = 0.01 s 5217s [5546/8505] TestFileUtils#test_chown = 0.02 s 5217s [5547/8505] TestFileUtils#test_remove_file = 0.01 s 5217s [5548/8505] TestFileUtils#test_cp_preserve_permissions = 0.01 s 5217s [5549/8505] TestFileUtils#test_mkdir_p_file_perm = 0.01 s 5217s [5550/8505] TestFileUtils#test_rm_f_2 = 0.04 s 5217s [5551/8505] TestFileUtils#test_mkpath = 0.01 s 5217s [5552/8505] TestFileUtils#test_install_pathname = 0.04 s 5217s [5553/8505] TestFileUtils#test_mv = 0.06 s 5217s [5554/8505] TestFileUtils#test_rm_pathname = 0.01 s 5217s [5555/8505] TestFileUtils#test_chown_noop = 0.02 s 5217s [5556/8505] TestFileUtils#test_rm_r = 0.03 s 5217s [5557/8505] TestFileUtils#test_chdir_verbose = 0.01 s 5217s [5558/8505] TestFileUtils#test_copy_stream = 0.02 s 5217s [5559/8505] TestFileUtils#test_symlink = 0.01 s 5217s [5560/8505] TestFileUtils#test_options = 0.01 s 5217s [5561/8505] TestFileUtils#test_cmp = 0.01 s 5217s [5562/8505] TestFileUtils#test_chown_R_noop = 0.03 s 5217s [5563/8505] TestFileUtils#test_mkdir_pathname = 0.02 s 5217s [5564/8505] TestFileUtils#test_chmod_symbol_mode_R = 0.04 s 5217s [5565/8505] TestFileUtils#test_install = 0.01 s 5217s [5566/8505] TestFileUtils#test_rm_f = 0.01 s 5217s [5567/8505] TestFileUtils#test_compare_file = 0.01 s 5217s [5568/8505] TestFileUtils#test_mv_pathname = 0.01 s 5217s [5569/8505] TestFileUtils#test_remove_entry_secure_pathname = 0.01 s 5217s [5570/8505] TestFileUtils#test_ln_sf_pathname = 0.01 s 5217s [5571/8505] TestFileUtils#test_mv_broken_symlink = 0.01 s 5217s [5572/8505] TestFileUtils#test_ln_sf_broken_symlink = 0.01 s 5217s [5573/8505] TestFileUtils#test_getwd = 0.01 s 5217s [5574/8505] TestFileUtils#test_pwd = 0.02 s 5217s [5575/8505] TestFileUtils#test_cp_lr = 0.03 s 5217s [5576/8505] TestFileUtils#test_assert_output_lines = 0.02 s 5217s [5577/8505] TestFileUtils#test_install_mode_option = 0.02 s 5217s [5578/8505] TestFileUtils#test_cp = 0.04 s 5217s [5579/8505] TestFileUtils#test_ln_sf = 0.01 s 5217s [5580/8505] TestFileUtils#test_ln_pathname = 0.01 s 5217s [5581/8505] TestFileUtils#test_chown_without_permission = 0.01 s 5217s [5582/8505] TestFileUtils#test_chdir_verbose_frozen = 0.01 s 5217s [5583/8505] TestFileUtils#test_mv_symlink = 0.01 s 5217s [5584/8505] TestFileUtils#test_identical? = 0.01 s 5217s [5585/8505] TestFileUtils#test_chown_error = 0.02 s 5217s [5586/8505] TestFileUtils#test_move = 0.01 s 5217s [5587/8505] TestFileUtils#test_have_option? = 0.01 s 5218s [5588/8505] TestFileUtils#test_remove_entry_cjk_path = 0.01 s 5218s [5589/8505] TestFileUtils#test_chmod_R = 0.02 s 5218s [5590/8505] TestFileUtils#test_chmod_verbose = 0.02 s 5218s [5591/8505] TestFileUtils#test_rmdir = 0.02 s 5218s [5592/8505] TestFileUtils#test_link = 0.01 s 5218s [5593/8505] TestFileUtils#test_cp_r_symlink_preserve = 0.02 s 5218s [5594/8505] TestFileUtils#test_cd = 0.01 s 5218s [5595/8505] TestFileUtils#test_with_big_file = 0.04 s 5218s [5596/8505] TestFileUtils#test_remove_entry_secure = 0.03 s 5218s [5597/8505] TestFileUtils#test_remove_entry_multibyte_path = 0.01 s 5218s [5598/8505] TestFileUtils#test_chmod_symbol_mode = 0.02 s 5218s [5599/8505] TestFileUtils#test_uptodate? = 0.01 s 5218s [5600/8505] TestFileUtils#test_remove_dir_file_perm = 0.01 s 5218s [5601/8505] TestFileUtils#test_touch = 0.01 s 5218s [5602/8505] TestFileUtils#test_makedirs = 0.01 s 5218s [5603/8505] TestFileUtils#test_cp_r_fifo = 0.01 s 5218s [5604/8505] TestFileUtils#test_rm_r_symlink = 0.01 s 5218s [5605/8505] TestFileUtils#test_safe_unlink = 0.01 s 5218s [5606/8505] TestFileUtils#test_cp_r_socket = 0.01 s 5218s [5607/8505] TestFileUtils#test_remove_file_file_perm = 0.01 s 5218s [5608/8505] TestFileUtils#test_rm_rf = 0.01 s 5218s [5609/8505] TestFileUtils#test_cp_r_pathname = 0.01 s 5218s [5610/8505] TestFileUtils#test_collect_methods = 0.01 s 5218s [5611/8505] TestFileUtils#test_ln_broken_symlink = 0.01 s 5218s [5612/8505] TestFileUtils#test_install_broken_symlink = 0.01 s 5218s [5613/8505] TestFileUtils#test_s_chmod_verbose = 0.01 s 5218s [5614/8505] TestFileUtils#test_cp_pathname = 0.01 s 5218s [5615/8505] TestFileUtils#test_chdir = 0.01 s 5218s [5616/8505] TestFileUtils#test_mkdir_p_pathname = 0.01 s 5218s [5617/8505] TestFileUtils#test_ln_symlink = 0.01 s 5218s [5618/8505] TestFileUtils#test_chown_R_without_permission = 0.01 s 5218s [5619/8505] TestFileUtils#test_chown_R = 0.01 s 5218s [5620/8505] TestFileUtils#test_rm_r_pathname = 0.01 s 5218s [5621/8505] TestFileUtils#test_cp_symlink = 0.01 s 5218s [5622/8505] TestFileUtils#test_ln_s = 0.01 s 5218s [5623/8505] TestFileUtils#test_mkdir = 0.01 s 5218s [5624/8505] TestFileUtils#test_mkdir_p = 0.06 s 5218s [5625/8505] TestFileUtils#test_cp_r_symlink_remove_destination = 0.01 s 5218s [5626/8505] TestFileUtils#test_cp_r_dev = 0.01 s 5218s [5627/8505] TestFileUtils#test_rm_symlink = 0.01 s 5218s [5628/8505] TestFileUtils#test_install_symlink = 0.01 s 5218s [5629/8505] TestFileUtils#test_install_owner_option = 0.01 s 5218s [5630/8505] TestFileUtils#test_mkdir_lf_in_path = 0.01 s 5218s [5631/8505] TestFileUtils#test_rmtree = 0.01 s 5218s [5632/8505] TestFileUtils#test_remove_dir = 0.01 s 5218s [5633/8505] TestFileUtils#test_commands = 0.01 s 5218s [5634/8505] TestFileUtils#test_copy_file = 0.01 s 5218s [5635/8505] TestFileUtils#test_copy_entry = 0.01 s 5218s [5636/8505] TestFileUtils#test_copy_entry_symlink_remove_destination = 0.01 s 5218s [5637/8505] TestFileUtils#test_ln = 0.01 s 5218s [5638/8505] TestFileUtils#test_chmod = 0.01 s 5218s [5639/8505] TestFileUtils#test_cp_r = 0.03 s 5218s [5640/8505] TestFileUtils#test_options_of = 0.01 s 5218s [5641/8505] TestFileUtils#test_copy_stream_duck = 0.02 s 5218s [5642/8505] TestFileUtils#test_ln_s_broken_symlink = 0.01 s 5218s [5643/8505] TestFileUtils#test_rm = 0.01 s 5218s [5644/8505] TestFileUtils#test_compare_stream = 0.01 s 5218s [5645/8505] TestFileUtils#test_install_group_option = 0.01 s 5218s [5646/8505] TestFileUtils#test_mkdir_file_perm = 0.01 s 5218s [5647/8505] TestFileUtils#test_cp_preserve_permissions_dir = 0.01 s 5218s [5648/8505] TestFileUtils#test_remove_entry_secure_symlink = 0.01 s 5218s [5649/8505] TestIOWait#test_wait_readable_eof = 0.00 s 5218s [5650/8505] TestIOWait#test_wait_readable_forever = 0.01 s 5218s [5651/8505] TestIOWait#test_wait_buffered = 0.00 s 5218s [5652/8505] TestIOWait#test_buffered_ready? = 0.00 s 5218s [5653/8505] TestIOWait#test_wait_readwrite = 0.00 s 5218s [5654/8505] TestIOWait#test_wait_readwrite_timeout = 0.01 s 5220s [5655/8505] TestIOWait#test_nread = 2.00 s 5220s [5656/8505] TestIOWait#test_wait_readable = 0.00 s 5222s [5657/8505] TestIOWait#test_ready? = 2.01 s 5222s [5658/8505] TestIOWait#test_wait_writable_timeout = 0.01 s 5222s [5659/8505] TestIOWait#test_wait_forever = 0.00 s 5222s [5660/8505] TestIOWait#test_nread_buffered = 0.00 s 5224s [5661/8505] TestIOWait#test_wait = 2.00 s 5224s [5662/8505] TestIOWait#test_wait_writable = 0.00 s 5224s [5663/8505] TestIOWait#test_wait_writable_closed = 0.00 s 5224s [5664/8505] TestIOWait#test_wait_readable_buffered = 0.00 s 5224s [5665/8505] PrettyPrintTest::Fill#test_19_22 = 0.01 s 5224s [5666/8505] PrettyPrintTest::Fill#test_15_18 = 0.00 s 5224s [5667/8505] PrettyPrintTest::Fill#test_00_06 = 0.00 s 5224s [5668/8505] PrettyPrintTest::Fill#test_23_26 = 0.00 s 5224s [5669/8505] PrettyPrintTest::Fill#test_27 = 0.00 s 5224s [5670/8505] PrettyPrintTest::Fill#test_11_14 = 0.00 s 5224s [5671/8505] PrettyPrintTest::Fill#test_07_10 = 0.00 s 5224s [5672/8505] JSONGenericObjectTest#test_attributes = 0.00 s 5224s [5673/8505] JSONGenericObjectTest#test_json_generic_object_load = 0.02 s 5224s [5674/8505] JSONGenericObjectTest#test_from_hash = 0.00 s 5224s [5675/8505] JSONGenericObjectTest#test_parse_json = 0.00 s 5224s [5676/8505] JSONGenericObjectTest#test_generate_json = 0.01 s 5224s [5677/8505] TestMutexM#test_initialize_with_keyword_arg = 0.00 s 5224s [5678/8505] TestMutexM#test_cv_wait = 0.00 s 5224s [5679/8505] TestMutexM#test_initialize_no_args = 0.00 s 5224s [5680/8505] TestRDocCrossReference#test_resolve_method = 0.10 s 5225s [5681/8505] TestRDocCrossReference#test_METHOD_REGEXP_STR = 0.03 s 5225s [5682/8505] TestRDocCrossReference#test_resolve_C2 = 0.03 s 5225s [5683/8505] TestRDocCrossReference#test_resolve_page = 0.03 s 5225s [5684/8505] TestRDocCrossReference#test_resolve_C4 = 0.03 s 5225s [5685/8505] TestRDocCrossReference#test_resolve_file = 0.04 s 5225s [5686/8505] TestRDocCrossReference#test_resolve_C2_C3 = 0.03 s 5225s [5687/8505] TestRDocCrossReference#test_resolve_class = 0.03 s 5225s [5688/8505] TestRDocCrossReference#test_resolve_class_and_method_of_the_same_name = 0.03 s 5225s [5689/8505] TestRDocCrossReference#test_resolve_the_same_name_in_instance_and_class_method = 0.03 s 5225s [5690/8505] TestRDocCrossReference#test_resolve_C4_C4 = 0.03 s 5225s [5691/8505] TestRDocCrossReference#test_resolve_percent = 0.03 s 5225s [5692/8505] TestRDocCrossReference#test_resolve_no_ref = 0.03 s 5225s [5693/8505] TestRDocCrossReference#test_resolve_method_equals3 = 0.03 s 5225s [5694/8505] TestRDocCrossReference#test_resolve_C3 = 0.03 s 5225s [5695/8505] TestERBCore#test_prohibited_marshal_dump = 0.00 s 5225s [5696/8505] TestERBCore#test_core = 0.17 s 5225s [5697/8505] TestERBCore#test_def_erb_method = 0.01 s 5225s [5698/8505] TestERBCore#test_def_method_with_fname = 0.00 s 5225s [5699/8505] TestERBCore#test_keep_lineno = 0.02 s 5225s [5700/8505] TestERBCore#test_result_with_hash = 0.00 s 5225s [5701/8505] TestERBCore#test_invalid_trim_mode = 0.01 s 5225s [5702/8505] TestERBCore#test_def_method_without_filename = 0.00 s 5225s [5703/8505] TestERBCore#test_def_class = 0.00 s 5225s [5704/8505] TestERBCore#test_prohibited_marshal_load = 0.00 s 5225s [5705/8505] TestERBCore#test_result_with_hash_does_not_use_caller_local_variables = 0.00 s 5225s [5706/8505] TestERBCore#test_trim_line1_with_carriage_return = 0.01 s 5225s [5707/8505] TestERBCore#test_def_module = 0.00 s 5225s [5708/8505] TestERBCore#test_run = 0.00 s 5225s [5709/8505] TestERBCore#test_trim_line2_with_carriage_return = 0.00 s 5225s [5710/8505] TestERBCore#test_frozen_string_literal = 0.01 s 5225s [5711/8505] TestERBCore#test_explicit = 0.01 s 5225s [5712/8505] TestERBCore#test_escape = 0.00 s 5225s [5713/8505] TestERBCore#test_percent_after_etag = 0.00 s 5225s [5714/8505] TestERBCore#test_explicit_trim_line_with_carriage_return = 0.00 s 5225s [5715/8505] TestERBCore#test_url_encode = 0.00 s 5225s [5716/8505] TestERBCore#test_result_with_hash_with_invalid_keys_raises_type_error = 0.00 s 5225s [5717/8505] TestERBCore#test_version = 0.00 s 5225s [5718/8505] TestERBCore#test_result_with_hash_does_not_modify_toplevel_binding = 0.00 s 5225s [5719/8505] TestERBCore#test_token_extension = 0.01 s 5225s [5720/8505] TestERBCore#test_half_working_comment_backward_compatibility = 0.00 s 5225s [5721/8505] TestERBCore#test_result_with_hash_does_not_modify_caller_binding = 0.00 s 5225s [5722/8505] TestERBCore#test_deprecated_interface_warnings = 0.03 s 5225s [5723/8505] TestERBCore#test_percent = 0.00 s 5225s [5724/8505] TestSocketAddrinfo#test_listen = 0.00 s 5225s [5725/8505] TestSocketAddrinfo#test_addrinfo_unix_path = 0.00 s 5225s [5726/8505] TestSocketAddrinfo#test_addrinfo_inspect_sockaddr = 0.00 s 5225s [5727/8505] TestSocketAddrinfo#test_addrinfo_ip = 0.00 s 5225s [5728/8505] TestSocketAddrinfo#test_addrinfo_new_inet6 = 0.00 s 5225s [5729/8505] TestSocketAddrinfo#test_addrinfo_inspect_sockaddr_inet6 = 0.00 s 5225s [5730/8505] TestSocketAddrinfo#test_addrinfo_timeout = 0.02 s 5225s [5731/8505] TestSocketAddrinfo#test_addrinfo_new_inet = 0.00 s 5225s [5732/8505] TestSocketAddrinfo#test_addrinfo_tcp = 0.00 s 5225s [5733/8505] TestSocketAddrinfo#test_bind = 0.00 s 5225s [5734/8505] TestSocketAddrinfo#test_ipv4_address_predicates = 0.01 s 5225s [5735/8505] TestSocketAddrinfo#test_addrinfo_ip_unpack = 0.00 s 5225s [5736/8505] TestSocketAddrinfo#test_basicsocket_local_address = 0.00 s 5225s [5737/8505] TestSocketAddrinfo#test_addrinfo_unix_dgram = 0.00 s 5225s [5738/8505] TestSocketAddrinfo#test_s_foreach = 0.00 s 5225s [5739/8505] TestSocketAddrinfo#test_addrinfo_inspect_sockaddr_unix = 0.00 s 5225s [5740/8505] TestSocketAddrinfo#test_addrinfo_ip_unpack_inet6 = 0.00 s 5225s [5741/8505] TestSocketAddrinfo#test_addrinfo_udp = 0.00 s 5225s [5742/8505] TestSocketAddrinfo#test_basicsocket_remote_address = 0.00 s 5225s [5743/8505] TestSocketAddrinfo#test_addrinfo_unix = 0.00 s 5225s [5744/8505] TestSocketAddrinfo#test_addrinfo_predicates = 0.00 s 5225s [5745/8505] TestFormatter#test_format_datetime = 0.00 s 5225s [5746/8505] TestFormatter#test_call = 0.00 s 5225s [5747/8505] TestRipper::Lexer#test_lex_with_syntax_error = 0.01 s 5225s [5748/8505] TestRipper::Lexer#test_tokenize_with_syntax_error = 0.01 s 5225s [5749/8505] TestRipper::Lexer#test_space_after_expr_in_heredoc = 0.01 s 5225s [5750/8505] TestRipper::Lexer#test_state_after_ivar = 0.00 s 5225s [5751/8505] TestRipper::Lexer#test_state_after_cvar = 0.00 s 5225s [5752/8505] TestRipper::Lexer#test_lex_with_syntax_error_and_heredoc = 0.00 s 5225s [5753/8505] TestRipper::Lexer#test_trailing_on_embexpr_end = 0.00 s 5225s [5754/8505] TestRipper::Lexer#test_nested_dedent_heredoc = 0.00 s 5225s [5755/8505] TestRipper::Lexer#test_stack_at_on_heredoc_beg = 0.00 s 5225s [5756/8505] TestRipper::Lexer#test_slice = 0.01 s 5225s [5757/8505] TestRipper::Lexer#test_expr_at_beginning_in_heredoc = 0.00 s 5225s [5758/8505] TestRipper::Lexer#test_embedded_expr_in_heredoc = 0.00 s 5225s [5759/8505] TestIRB::TestWorkSpace#test_code_around_binding_on_irb = 0.00 s 5225s [5760/8505] TestIRB::TestWorkSpace#test_code_around_binding_with_script_lines__ = 0.01 s 5225s [5761/8505] TestIRB::TestWorkSpace#test_code_around_binding = 0.00 s 5225s [5762/8505] TestIRB::TestWorkSpace#test_toplevel_binding_local_variables = 0.00 s 5225s [5763/8505] TestIRB::TestWorkSpace#test_code_around_binding_with_existing_unreadable_file = 0.00 s 5225s [5764/8505] TestSyslogRootLogger#test_debug = 0.01 s 5225s [5765/8505] TestSyslogRootLogger#test_info_eh = 0.00 s 5225s [5766/8505] TestSyslogRootLogger#test_custom_formatter = 0.00 s 5225s [5767/8505] TestSyslogRootLogger#test_warn_eh = 0.00 s 5225s [5768/8505] TestSyslogRootLogger#test_add_level_unknown = 0.01 s 5225s [5769/8505] TestSyslogRootLogger#test_fatal = 0.01 s 5225s [5770/8505] TestSyslogRootLogger#test_debug_eh = 0.00 s 5225s [5771/8505] TestSyslogRootLogger#test_add_level_info = 0.00 s 5225s [5772/8505] TestSyslogRootLogger#test_add_level_error = 0.00 s 5225s [5773/8505] TestSyslogRootLogger#test_warn = 0.01 s 5225s [5774/8505] TestSyslogRootLogger#test_initialize = 0.00 s 5225s [5775/8505] TestSyslogRootLogger#test_add_level_fatal = 0.00 s 5225s [5776/8505] TestSyslogRootLogger#test_add = 0.00 s 5225s [5777/8505] TestSyslogRootLogger#test_add_level_warn = 0.00 s 5225s [5778/8505] TestSyslogRootLogger#test_info = 0.00 s 5225s [5779/8505] TestSyslogRootLogger#test_add_level_debug = 0.00 s 5225s [5780/8505] TestSyslogRootLogger#test_fatal_eh = 0.00 s 5225s [5781/8505] TestSyslogRootLogger#test_error = 0.00 s 5225s [5782/8505] TestSyslogRootLogger#test_unknown = 0.01 s 5225s [5783/8505] TestSyslogRootLogger#test_error_eh = 0.00 s 5225s [5784/8505] TestCSVWriteConvertersGenerate::DifferentOFS#test_nil_value = 0.00 s 5225s [5785/8505] TestCSVWriteConvertersGenerate::DifferentOFS#test_empty_value = 0.00 s 5225s [5786/8505] TestCSVWriteConvertersGenerate::DifferentOFS#test_one = 0.00 s 5225s [5787/8505] TestCSVWriteConvertersGenerate::DifferentOFS#test_multiple = 0.00 s 5225s [5788/8505] TestDigest::TestSHA512#test_s_hexdigest = 0.00 s 5225s [5789/8505] TestDigest::TestSHA512#test_bubblebabble_class = 0.00 s 5225s [5790/8505] TestDigest::TestSHA512#test_instance_eval = 0.00 s 5225s [5791/8505] TestDigest::TestSHA512#test_update = 0.00 s 5225s [5792/8505] TestDigest::TestSHA512#test_bubblebabble = 0.00 s 5225s [5793/8505] TestDigest::TestSHA512#test_s_base64digest = 0.00 s 5225s [5794/8505] TestDigest::TestSHA512#test_eq = 0.00 s 5225s [5795/8505] TestDigest::TestSHA512#test_alignment = 0.00 s 5225s [5796/8505] TestDigest::TestSHA512#test_s_new = 0.00 s 5225s [5797/8505] TestDigest::TestSHA512#test_s_digest = 0.00 s 5225s [5798/8505] TestDigest::TestSHA512#test_bubblebabble_instance = 0.00 s 5225s [5799/8505] TestDigest::TestSHA512#test_s_file = 0.00 s 5225s [5800/8505] TestCSVTable#test_delete_if_row = 0.01 s 5225s [5801/8505] TestCSVTable#test_set_by_col_with_header_row = 0.00 s 5225s [5802/8505] TestCSVTable#test_headers_only = 0.00 s 5225s [5803/8505] TestCSVTable#test_append = 0.00 s 5225s [5804/8505] TestCSVTable#test_dig_cell_no_dig = 0.01 s 5226s [5805/8505] TestCSVTable#test_headers_empty = 0.00 s 5226s [5806/8505] TestCSVTable#test_values_at = 0.01 s 5226s [5807/8505] TestCSVTable#test_headers = 0.00 s 5226s [5808/8505] TestCSVTable#test_to_csv = 0.01 s 5226s [5809/8505] TestCSVTable#test_array_delegation = 0.00 s 5226s [5810/8505] TestCSVTable#test_delete_row = 0.01 s 5226s [5811/8505] TestCSVTable#test_dig_by_column = 0.00 s 5226s [5812/8505] TestCSVTable#test_dig_mixed = 0.01 s 5226s [5813/8505] TestCSVTable#test_delete_if_row_without_block = 0.01 s 5226s [5814/8505] TestCSVTable#test_delete_column = 0.00 s 5226s [5815/8505] TestCSVTable#test_initialize = 0.00 s 5226s [5816/8505] TestCSVTable#test_to_a = 0.00 s 5226s [5817/8505] TestCSVTable#test_delete_with_blank_rows = 0.01 s 5226s [5818/8505] TestCSVTable#test_delete_mixed_multiple = 0.00 s 5226s [5819/8505] TestCSVTable#test_headers_modified_by_row = 0.00 s 5226s [5820/8505] TestCSVTable#test_delete_if_column = 0.00 s 5226s [5821/8505] TestCSVTable#test_delete_headers_only = 0.00 s 5226s [5822/8505] TestCSVTable#test_each = 0.02 s 5226s [5823/8505] TestCSVTable#test_each_split = 0.00 s 5226s [5824/8505] TestCSVTable#test_delete_mixed_one = 0.01 s 5226s [5825/8505] TestCSVTable#test_index = 0.01 s 5226s [5826/8505] TestCSVTable#test_set_row_or_column = 0.01 s 5226s [5827/8505] TestCSVTable#test_inspect_encoding_is_ascii_compatible = 0.01 s 5226s [5828/8505] TestCSVTable#test_dig_by_row = 0.00 s 5226s [5829/8505] TestCSVTable#test_modes = 0.00 s 5226s [5830/8505] TestCSVTable#test_inspect_shows_current_mode = 0.01 s 5226s [5831/8505] TestCSVTable#test_delete_if_column_without_block = 0.00 s 5226s [5832/8505] TestCSVTable#test_enumerable = 0.00 s 5226s [5833/8505] TestCSVTable#test_dig_cell = 0.00 s 5226s [5834/8505] TestZlibDeflate#test_params = 0.00 s 5226s [5835/8505] TestZlibDeflate#test_flush = 0.00 s 5226s [5836/8505] TestZlibDeflate#test_deflate = 0.05 s 5226s [5837/8505] TestZlibDeflate#test_closed_p = 0.00 s 5226s [5838/8505] TestZlibDeflate#test_finished_p = 0.00 s 5226s [5839/8505] TestZlibDeflate#test_dup = 0.00 s 5226s [5840/8505] TestZlibDeflate#test_total = 0.01 s 5226s [5841/8505] TestZlibDeflate#test_data_type = 0.00 s 5226s [5842/8505] TestZlibDeflate#test_reset = 0.00 s 5226s [5843/8505] TestZlibDeflate#test_close = 0.00 s 5226s [5844/8505] TestZlibDeflate#test_initialize = 0.00 s 5226s [5845/8505] TestZlibDeflate#test_addstr = 0.00 s 5226s [5846/8505] TestZlibDeflate#test_avail = 0.00 s 5226s [5847/8505] TestZlibDeflate#test_adler = 0.00 s 5226s [5848/8505] TestZlibDeflate#test_set_dictionary = 0.00 s 5226s [5849/8505] TestZlibDeflate#test_expand_buffer = 0.00 s 5226s [5850/8505] Psych::TestMarshalable#test_objects_defining_marshal_dump_and_marshal_load_can_be_dumped = 0.00 s 5226s [5851/8505] Psych::TestMarshalable#test_init_symbolize_names = 0.01 s 5226s [5852/8505] Psych::TestMarshalable#test_init_with_takes_priority_over_marshal_methods = 0.01 s 5226s [5853/8505] TestRDocOptions#test_parse_dash_p_files = 0.03 s 5226s [5854/8505] TestRDocOptions#test_parse_encoding = 0.02 s 5226s [5855/8505] TestRDocOptions#test_parse_template = 0.02 s 5226s [5856/8505] TestRDocOptions#test_parse_template_load_path = 0.04 s 5226s [5857/8505] TestRDocOptions#test_parse_ignore_invalid = 0.05 s 5226s [5858/8505] TestRDocOptions#test_parse_encoding_invalid = 0.02 s 5226s [5859/8505] TestRDocOptions#test_parse_extension_alias = 0.03 s 5226s [5860/8505] TestRDocOptions#test_generator_descriptions = 0.00 s 5226s [5861/8505] TestRDocOptions#test_parse_h = 0.02 s 5226s [5862/8505] TestRDocOptions#test_parse_tab_width = 0.08 s 5226s [5863/8505] TestRDocOptions#test_load_options_empty_file = 0.00 s 5226s [5864/8505] TestRDocOptions#test_parse_ignore_invalid_no = 0.02 s 5226s [5865/8505] TestRDocOptions#test_parse_copy_files_directory_relative = 0.02 s 5226s [5866/8505] TestRDocOptions#test_encode_with_trim_paths = 0.03 s 5226s [5867/8505] TestRDocOptions#test_parse_default = 0.02 s 5226s [5868/8505] TestRDocOptions#test_ignore_needless_arg = 0.02 s 5226s [5869/8505] TestRDocOptions#test_ignore_missing_arg = 0.02 s 5226s [5870/8505] TestRDocOptions#test_parse_dash_p = 0.02 s 5226s [5871/8505] TestRDocOptions#test_encode_with = 0.01 s 5226s [5872/8505] TestRDocOptions#test_check_files_warn = 0.00 s 5226s [5873/8505] TestRDocOptions#test_parse_deprecated = 0.03 s 5226s [5874/8505] TestRDocOptions#test_parse_copy_files_file_absolute = 0.02 s 5226s [5875/8505] TestRDocOptions#test_visibility = 0.00 s 5226s [5876/8505] TestRDocOptions#test_warn = 0.00 s 5226s [5877/8505] TestRDocOptions#test_parse_root = 0.02 s 5226s [5878/8505] TestRDocOptions#test_parse_ignore_invalid_no_quiet = 0.03 s 5226s [5879/8505] TestRDocOptions#test_load_options_invalid = 0.01 s 5226s [5880/8505] TestRDocOptions#test_parse_help = 0.02 s 5226s [5881/8505] TestRDocOptions#test_parse_coverage_no = 0.02 s 5226s [5882/8505] TestRDocOptions#test_load_options_partial_override = 0.00 s 5226s [5883/8505] TestRDocOptions#test_parse_formatter_ri_site = 0.03 s 5226s [5884/8505] TestRDocOptions#test_parse_template_stylesheets = 0.02 s 5226s [5885/8505] TestRDocOptions#test_check_files = 0.00 s 5226s [5886/8505] TestRDocOptions#test_update_output_dir = 0.00 s 5226s [5887/8505] TestRDocOptions#test_init_with_encoding = 0.01 s 5226s [5888/8505] TestRDocOptions#test_parse_page_dir = 0.02 s 5226s [5889/8505] TestRDocOptions#test_dry_run_default = 0.00 s 5227s [5890/8505] TestRDocOptions#test_parse_force_update = 0.04 s 5227s [5891/8505] TestRDocOptions#test_parse_copy_files_file_relative = 0.02 s 5227s [5892/8505] TestRDocOptions#test_parse_ri_site = 0.02 s 5227s [5893/8505] TestRDocOptions#test_parse_ignore_invalid_default = 0.02 s 5227s [5894/8505] TestRDocOptions#test_parse_coverage = 0.02 s 5227s [5895/8505] TestRDocOptions#test_parse_dry_run = 0.08 s 5227s [5896/8505] TestRDocOptions#test_init_with_trim_paths = 0.38 s 5227s [5897/8505] TestRDocOptions#test_parse_formatter = 0.11 s 5227s [5898/8505] TestRDocOptions#test_parse_formatter_ri = 0.13 s 5227s [5899/8505] TestRDocOptions#test_setup_generator_no_option_parser = 0.00 s 5227s [5900/8505] TestRDocOptions#test_setup_generator = 0.04 s 5227s [5901/8505] TestRDocOptions#test_parse_main = 0.02 s 5227s [5902/8505] TestRDocOptions#test_parse_visibility = 0.08 s 5227s [5903/8505] TestRDocOptions#test_encoding_default = 0.00 s 5228s [5904/8505] TestRDocOptions#test_version = 0.04 s 5228s [5905/8505] TestRDocOptions#test_parse_page_dir_root = 0.03 s 5228s [5906/8505] TestRDocOptions#test_parse_coverage_level_1 = 0.02 s 5228s [5907/8505] TestRDocOptions#test_parse_markup = 0.01 s 5228s [5908/8505] TestRDocOptions#test_parse_copy_files_directory_absolute = 0.01 s 5228s [5909/8505] TestRDocOptions#test_parse_template_nonexistent = 0.01 s 5228s [5910/8505] TestRDocOptions#test_parse_help_extra_generator = 0.02 s 5228s [5911/8505] TestRDocOptions#test_parse_format_for_extra_generator = 0.00 s 5228s [5912/8505] TestERBCoreWOStrScan#test_prohibited_marshal_dump = 0.00 s 5228s [5913/8505] TestERBCoreWOStrScan#test_core = 0.13 s 5228s [5914/8505] TestERBCoreWOStrScan#test_def_erb_method = 0.02 s 5228s [5915/8505] TestERBCoreWOStrScan#test_def_method_with_fname = 0.01 s 5228s [5916/8505] TestERBCoreWOStrScan#test_keep_lineno = 0.04 s 5228s [5917/8505] TestERBCoreWOStrScan#test_result_with_hash = 0.00 s 5228s [5918/8505] TestERBCoreWOStrScan#test_invalid_trim_mode = 0.01 s 5228s [5919/8505] TestERBCoreWOStrScan#test_def_method_without_filename = 0.01 s 5228s [5920/8505] TestERBCoreWOStrScan#test_def_class = 0.00 s 5228s [5921/8505] TestERBCoreWOStrScan#test_prohibited_marshal_load = 0.00 s 5228s [5922/8505] TestERBCoreWOStrScan#test_result_with_hash_does_not_use_caller_local_variables = 0.00 s 5228s [5923/8505] TestERBCoreWOStrScan#test_trim_line1_with_carriage_return = 0.00 s 5228s [5924/8505] TestERBCoreWOStrScan#test_def_module = 0.00 s 5228s [5925/8505] TestERBCoreWOStrScan#test_run = 0.00 s 5228s [5926/8505] TestERBCoreWOStrScan#test_trim_line2_with_carriage_return = 0.01 s 5228s [5927/8505] TestERBCoreWOStrScan#test_frozen_string_literal = 0.01 s 5228s [5928/8505] TestERBCoreWOStrScan#test_explicit = 0.01 s 5228s [5929/8505] TestERBCoreWOStrScan#test_escape = 0.00 s 5228s [5930/8505] TestERBCoreWOStrScan#test_percent_after_etag = 0.00 s 5228s [5931/8505] TestERBCoreWOStrScan#test_explicit_trim_line_with_carriage_return = 0.00 s 5228s [5932/8505] TestERBCoreWOStrScan#test_url_encode = 0.00 s 5228s [5933/8505] TestERBCoreWOStrScan#test_result_with_hash_with_invalid_keys_raises_type_error = 0.00 s 5228s [5934/8505] TestERBCoreWOStrScan#test_version = 0.01 s 5228s [5935/8505] TestERBCoreWOStrScan#test_result_with_hash_does_not_modify_toplevel_binding = 0.00 s 5228s [5936/8505] TestERBCoreWOStrScan#test_token_extension = 0.01 s 5228s [5937/8505] TestERBCoreWOStrScan#test_half_working_comment_backward_compatibility = 0.00 s 5228s [5938/8505] TestERBCoreWOStrScan#test_result_with_hash_does_not_modify_caller_binding = 0.00 s 5228s [5939/8505] TestERBCoreWOStrScan#test_deprecated_interface_warnings = 0.02 s 5228s [5940/8505] TestERBCoreWOStrScan#test_percent = 0.01 s 5228s [5941/8505] TestPathname#test_cleanpath_aggressive_52 = 0.00 s 5228s [5942/8505] TestPathname#test_del_trailing_separator_189 = 0.00 s 5228s [5943/8505] TestPathname#test_parent_244 = 0.00 s 5228s [5944/8505] TestPathname#test_lstat = 0.01 s 5228s [5945/8505] TestPathname#test_cleanpath_aggressive_50 = 0.00 s 5228s [5946/8505] TestPathname#test_root?_588 = 0.00 s 5228s [5947/8505] TestPathname#test_sticky? = 0.00 s 5228s [5948/8505] TestPathname#test_parent_246 = 0.00 s 5228s [5949/8505] TestPathname#test_cleanpath_conservative_138 = 0.00 s 5228s [5950/8505] TestPathname#test_birthtime = 0.02 s 5228s [5951/8505] TestPathname#test_freeze = 0.00 s 5228s [5952/8505] TestPathname#test_cleanpath_aggressive_56 = 0.00 s 5228s [5953/8505] TestPathname#test_chown = 0.00 s 5228s [5954/8505] TestPathname#test_lchown = 0.00 s 5228s [5955/8505] TestPathname#test_relative_path_from_329 = 0.00 s 5228s [5956/8505] TestPathname#test_parent_240 = 0.00 s 5228s [5957/8505] TestPathname#test_cleanpath_aggressive_54 = 0.00 s 5228s [5958/8505] TestPathname#test_plus_207 = 0.00 s 5228s [5959/8505] TestPathname#test_readable? = 0.00 s 5228s [5960/8505] TestPathname#test_parent_242 = 0.00 s 5228s [5961/8505] TestPathname#test_relative_path_from_325 = 0.00 s 5228s [5962/8505] TestPathname#test_plus_209 = 0.00 s 5228s [5963/8505] TestPathname#test_mkpath = 0.01 s 5228s [5964/8505] TestPathname#test_pipe? = 0.00 s 5228s [5965/8505] TestPathname#test_fnmatch? = 0.00 s 5228s [5966/8505] TestPathname#test_comparison_string = 0.00 s 5228s [5967/8505] TestPathname#test_cleanpath_aggressive_58 = 0.00 s 5228s [5968/8505] TestPathname#test_opendir = 0.00 s 5228s [5969/8505] TestPathname#test_root?_586 = 0.00 s 5228s [5970/8505] TestPathname#test_relative_path_from_323 = 0.00 s 5228s [5971/8505] TestPathname#test_binwrite_opts = 0.00 s 5228s [5972/8505] TestPathname#test_kernel_pathname = 0.00 s 5228s [5973/8505] TestPathname#test_empty? = 0.00 s 5228s [5974/8505] TestPathname#test_blockdev? = 0.00 s 5228s [5975/8505] TestPathname#test_glob = 0.02 s 5228s [5976/8505] TestPathname#test_plus_216 = 0.00 s 5228s [5977/8505] TestPathname#test_stat = 0.00 s 5228s [5978/8505] TestPathname#test_relative?_272 = 0.00 s 5228s [5979/8505] TestPathname#test_plus_214 = 0.00 s 5228s [5980/8505] TestPathname#test_relative?_274 = 0.00 s 5228s [5981/8505] TestPathname#test_cleanpath_conservative_129 = 0.01 s 5228s [5982/8505] TestPathname#test_cleanpath_aggressive_85 = 0.00 s 5228s [5983/8505] TestPathname#test_has_trailing_separator?_149 = 0.00 s 5228s [5984/8505] TestPathname#test_relative?_276 = 0.00 s 5228s [5985/8505] TestPathname#test_cleanpath_aggressive_87 = 0.00 s 5228s [5986/8505] TestPathname#test_plus_210 = 0.00 s 5228s [5987/8505] TestPathname#test_children = 0.01 s 5228s [5988/8505] TestPathname#test_writable_real? = 0.00 s 5228s [5989/8505] TestPathname#test_parent_238 = 0.00 s 5228s [5990/8505] TestPathname#test_relative_path_from_332 = 0.00 s 5228s [5991/8505] TestPathname#test_cleanpath_conservative_125 = 0.00 s 5228s [5992/8505] TestPathname#test_has_trailing_separator?_147 = 0.00 s 5228s [5993/8505] TestPathname#test_socket? = 0.00 s 5228s [5994/8505] TestPathname#test_readlines_opts = 0.01 s 5228s [5995/8505] TestPathname#test_readlines = 0.00 s 5228s [5996/8505] TestPathname#test_descend_461 = 0.00 s 5228s [5997/8505] TestPathname#test_cleanpath_conservative_127 = 0.00 s 5228s [5998/8505] TestPathname#test_matchop = 0.00 s 5234s [5999/8505] TestPathname#test_split = 5.38 s 5234s [6000/8505] TestPathname#test_cleanpath_aggressive_49 = 0.05 s 5234s [6001/8505] TestPathname#test_extname = 0.01 s 5234s [6002/8505] TestPathname#test_cleanpath_conservative_121 = 0.04 s 5234s [6003/8505] TestPathname#test_plus_218 = 0.01 s 5234s [6004/8505] TestPathname#test_grpowned? = 0.14 s 5234s [6005/8505] TestPathname#test_relative_path_from_334 = 0.00 s 5234s [6006/8505] TestPathname#test_cleanpath_conservative_123 = 0.01 s 5234s [6007/8505] TestPathname#test_relative_path_from_mock = 0.01 s 5234s [6008/8505] TestPathname#test_del_trailing_separator_161 = 0.02 s 5234s [6009/8505] TestPathname#test_cleanpath_conservative_116 = 0.00 s 5234s [6010/8505] TestPathname#test_relative_path_from_301 = 0.00 s 5234s [6011/8505] TestPathname#test_blockless_descend_is_enumerator = 0.01 s 5234s [6012/8505] TestPathname#test_pathsubext_571 = 0.00 s 5234s [6013/8505] TestPathname#test_each_line_opts = 0.04 s 5234s [6014/8505] TestPathname#test_relative_path_from_303 = 0.00 s 5234s [6015/8505] TestPathname#test_cleanpath_conservative_114 = 0.00 s 5234s [6016/8505] TestPathname#test_del_trailing_separator_163 = 0.00 s 5234s [6017/8505] TestPathname#test_binread = 0.00 s 5234s [6018/8505] TestPathname#test_ascend_467 = 0.00 s 5234s [6019/8505] TestPathname#test_relative_path_from_305 = 0.00 s 5234s [6020/8505] TestPathname#test_cleanpath_conservative_112 = 0.00 s 5234s [6021/8505] TestPathname#test_del_trailing_separator_165 = 0.00 s 5234s [6022/8505] TestPathname#test_read = 0.00 s 5234s [6023/8505] TestPathname#test_file_dirname = 0.00 s 5234s [6024/8505] TestPathname#test_write_opts = 0.00 s 5234s [6025/8505] TestPathname#test_chardev? = 0.00 s 5234s [6026/8505] TestPathname#test_cleanpath_conservative_110 = 0.00 s 5234s [6027/8505] TestPathname#test_relative_path_from_307 = 0.00 s 5234s [6028/8505] TestPathname#test_world_writable? = 0.00 s 5234s [6029/8505] TestPathname#test_make_symlink = 0.01 s 5234s [6030/8505] TestPathname#test_exist? = 0.00 s 5234s [6031/8505] TestPathname#test_owned? = 0.00 s 5234s [6032/8505] TestPathname#test_cleanpath_aggressive_78 = 0.00 s 5234s [6033/8505] TestPathname#test_cleanpath_aggressive_76 = 0.00 s 5234s [6034/8505] TestPathname#test_global_constructor = 0.00 s 5234s [6035/8505] TestPathname#test_descend_458 = 0.00 s 5234s [6036/8505] TestPathname#test_binwrite = 0.00 s 5234s [6037/8505] TestPathname#test_zero? = 0.00 s 5234s [6038/8505] TestPathname#test_cleanpath_aggressive_74 = 0.00 s 5234s [6039/8505] TestPathname#test_s_getwd = 0.00 s 5234s [6040/8505] TestPathname#test_cleanpath_aggressive_72 = 0.00 s 5234s [6041/8505] TestPathname#test_ascend_469 = 0.00 s 5234s [6042/8505] TestPathname#test_sysopen = 0.00 s 5234s [6043/8505] TestPathname#test_rmdir = 0.00 s 5234s [6044/8505] TestPathname#test_cleanpath_aggressive_70 = 0.00 s 5234s [6045/8505] TestPathname#test_relative?_281 = 0.00 s 5234s [6046/8505] TestPathname#test_relative_path_from_298 = 0.00 s 5234s [6047/8505] TestPathname#test_cleanpath_conservative_118 = 0.00 s 5234s [6048/8505] TestPathname#test_pathsubext_566 = 0.00 s 5234s [6049/8505] TestPathname#test_cleanpath_aggressive_69 = 0.00 s 5234s [6050/8505] TestPathname#test_cleanpath_conservative_101 = 0.00 s 5234s [6051/8505] TestPathname#test_setgid? = 0.00 s 5234s [6052/8505] TestPathname#test_truncate = 0.00 s 5234s [6053/8505] TestPathname#test_ascend_470 = 0.00 s 5234s [6054/8505] TestPathname#test_pathsubext_564 = 0.00 s 5234s [6055/8505] TestPathname#test_cleanpath_conservative_103 = 0.00 s 5234s [6056/8505] TestPathname#test_relative_path_from_314 = 0.00 s 5234s [6057/8505] TestPathname#test_kernel_open = 0.01 s 5234s [6058/8505] TestPathname#test_each_entry = 0.00 s 5234s [6059/8505] TestPathname#test_pathsubext_562 = 0.00 s 5234s [6060/8505] TestPathname#test_expand_path = 0.00 s 5234s [6061/8505] TestPathname#test_cleanpath_conservative_105 = 0.00 s 5234s [6062/8505] TestPathname#test_parent = 0.01 s 5234s [6063/8505] TestPathname#test_s_glob_3args = 0.00 s 5234s [6064/8505] TestPathname#test_destructive_update = 0.00 s 5234s [6065/8505] TestPathname#test_plus = 0.00 s 5234s [6066/8505] TestPathname#test_relative_path_from_310 = 0.00 s 5234s [6067/8505] TestPathname#test_cleanpath_conservative_107 = 0.00 s 5234s [6068/8505] TestPathname#test_cleanpath_conservative_109 = 0.00 s 5234s [6069/8505] TestPathname#test_cleanpath_aggressive_61 = 0.00 s 5234s [6070/8505] TestPathname#test_file_fnmatch = 0.00 s 5234s [6071/8505] TestPathname#test_write = 0.00 s 5234s [6072/8505] TestPathname#test_cleanpath_aggressive_63 = 0.00 s 5234s [6073/8505] TestPathname#test_make_link = 0.00 s 5234s [6074/8505] TestPathname#test_cleanpath_aggressive_65 = 0.00 s 5234s [6075/8505] TestPathname#test_relative_path_from_318 = 0.00 s 5234s [6076/8505] TestPathname#test_pathsubext_568 = 0.00 s 5234s [6077/8505] TestPathname#test_s_pwd = 0.00 s 5234s [6078/8505] TestPathname#test_ctime = 0.00 s 5234s [6079/8505] TestPathname#test_cleanpath_aggressive_67 = 0.00 s 5234s [6080/8505] TestPathname#test_cleanpath_conservative_99 = 0.00 s 5234s [6081/8505] TestPathname#test_relative_path_from_311 = 0.00 s 5234s [6082/8505] TestPathname#test_cleanpath_conservative_106 = 0.00 s 5234s [6083/8505] TestPathname#test_each_filename = 0.01 s 5234s [6084/8505] TestPathname#test_cleanpath_conservative_104 = 0.00 s 5234s [6085/8505] TestPathname#test_relative_path_from_313 = 0.00 s 5234s [6086/8505] TestPathname#test_file? = 0.00 s 5234s [6087/8505] TestPathname#test_executable_real? = 0.00 s 5234s [6088/8505] TestPathname#test_size? = 0.00 s 5234s [6089/8505] TestPathname#test_pathsubext_563 = 0.00 s 5234s [6090/8505] TestPathname#test_open = 0.00 s 5234s [6091/8505] TestPathname#test_cleanpath_conservative_102 = 0.00 s 5234s [6092/8505] TestPathname#test_relative_path_from_315 = 0.00 s 5234s [6093/8505] TestPathname#test_blockless_ascend_is_enumerator = 0.00 s 5234s [6094/8505] TestPathname#test_pathsubext_565 = 0.00 s 5234s [6095/8505] TestPathname#test_each_child = 0.01 s 5234s [6096/8505] TestPathname#test_relative_path_from_317 = 0.00 s 5234s [6097/8505] TestPathname#test_cleanpath_conservative_100 = 0.00 s 5234s [6098/8505] TestPathname#test_cleanpath_aggressive_68 = 0.00 s 5234s [6099/8505] TestPathname#test_initialize = 0.00 s 5234s [6100/8505] TestPathname#test_pathsubext_567 = 0.00 s 5234s [6101/8505] TestPathname#test_cleanpath_aggressive_66 = 0.00 s 5234s [6102/8505] TestPathname#test_pathsubext_569 = 0.00 s 5234s [6103/8505] TestPathname#test_dirname = 0.00 s 5234s [6104/8505] TestPathname#test_executable? = 0.00 s 5234s [6105/8505] TestPathname#test_ftype = 0.00 s 5234s [6106/8505] TestPathname#test_relative_path_from_319 = 0.00 s 5234s [6107/8505] TestPathname#test_unlink = 0.00 s 5234s [6108/8505] TestPathname#test_cleanpath_aggressive_64 = 0.00 s 5234s [6109/8505] TestPathname#test_equality = 0.00 s 5234s [6110/8505] TestPathname#test_cleanpath_aggressive_62 = 0.00 s 5234s [6111/8505] TestPathname#test_null_character = 0.00 s 5234s [6112/8505] TestPathname#test_cleanpath_aggressive_60 = 0.00 s 5234s [6113/8505] TestPathname#test_atime = 0.00 s 5234s [6114/8505] TestPathname#test_cleanpath_conservative_108 = 0.00 s 5234s [6115/8505] TestPathname#test_cleanpath_aggressive_79 = 0.00 s 5234s [6116/8505] TestPathname#test_sub_matchdata = 0.00 s 5234s [6117/8505] TestPathname#test_readable_real? = 0.00 s 5234s [6118/8505] TestPathname#test_cleanpath_conservative_111 = 0.00 s 5234s [6119/8505] TestPathname#test_initialize_nul = 0.00 s 5234s [6120/8505] TestPathname#test_rename = 0.00 s 5234s [6121/8505] TestPathname#test_del_trailing_separator_164 = 0.00 s 5234s [6122/8505] TestPathname#test_relative_path_from_304 = 0.00 s 5234s [6123/8505] TestPathname#test_cleanpath_conservative_113 = 0.00 s 5234s [6124/8505] TestPathname#test_hashkey = 0.00 s 5234s [6125/8505] TestPathname#test_fnmatch = 0.00 s 5234s [6126/8505] TestPathname#test_world_readable? = 0.00 s 5234s [6127/8505] TestPathname#test_del_trailing_separator_162 = 0.00 s 5234s [6128/8505] TestPathname#test_relative_path_from_302 = 0.00 s 5234s [6129/8505] TestPathname#test_cleanpath_conservative_115 = 0.00 s 5234s [6130/8505] TestPathname#test_relative_path_from_297 = 0.00 s 5234s [6131/8505] TestPathname#test_pathsubext_570 = 0.00 s 5234s [6132/8505] TestPathname#test_cleanpath_conservative_117 = 0.00 s 5234s [6133/8505] TestPathname#test_relative_path_from_300 = 0.00 s 5234s [6134/8505] TestPathname#test_del_trailing_separator_160 = 0.00 s 5234s [6135/8505] TestPathname#test_symlink? = 0.00 s 5234s [6136/8505] TestPathname#test_cleanpath_conservative_119 = 0.00 s 5234s [6137/8505] TestPathname#test_file_split = 0.00 s 5234s [6138/8505] TestPathname#test_relative?_280 = 0.00 s 5234s [6139/8505] TestPathname#test_relative_path_from_299 = 0.00 s 5234s [6140/8505] TestPathname#test_comparison = 0.00 s 5234s [6141/8505] TestPathname#test_plus_222 = 0.00 s 5234s [6142/8505] TestPathname#test_cleanpath_aggressive_71 = 0.00 s 5234s [6143/8505] TestPathname#test_mtime = 0.01 s 5234s [6144/8505] TestPathname#test_relative?_282 = 0.00 s 5234s [6145/8505] TestPathname#test_ascend_468 = 0.00 s 5234s [6146/8505] TestPathname#test_cleanpath_aggressive_73 = 0.00 s 5234s [6147/8505] TestPathname#test_setuid? = 0.00 s 5234s [6148/8505] TestPathname#test_readlink = 0.00 s 5234s [6149/8505] TestPathname#test_plus_220 = 0.00 s 5234s [6150/8505] TestPathname#test_cleanpath_aggressive_75 = 0.00 s 5234s [6151/8505] TestPathname#test_to_s = 0.00 s 5234s [6152/8505] TestPathname#test_descend_459 = 0.00 s 5234s [6153/8505] TestPathname#test_relative_path_from_308 = 0.00 s 5234s [6154/8505] TestPathname#test_plus_224 = 0.00 s 5234s [6155/8505] TestPathname#test_cleanpath_aggressive_77 = 0.00 s 5234s [6156/8505] TestPathname#test_plus_211 = 0.00 s 5234s [6157/8505] TestPathname#test_directory? = 0.00 s 5234s [6158/8505] TestPathname#test_cleanpath_aggressive_86 = 0.00 s 5234s [6159/8505] TestPathname#test_file_basename = 0.00 s 5234s [6160/8505] TestPathname#test_relative?_277 = 0.00 s 5234s [6161/8505] TestPathname#test_s_glob = 0.00 s 5234s [6162/8505] TestPathname#test_has_trailing_separator?_148 = 0.00 s 5234s [6163/8505] TestPathname#test_plus_213 = 0.00 s 5234s [6164/8505] TestPathname#test_cleanpath_aggressive_84 = 0.00 s 5234s [6165/8505] TestPathname#test_cleanpath_conservative_128 = 0.00 s 5234s [6166/8505] TestPathname#test_relative?_275 = 0.00 s 5234s [6167/8505] TestPathname#test_plus_215 = 0.00 s 5234s [6168/8505] TestPathname#test_relative?_273 = 0.00 s 5234s [6169/8505] TestPathname#test_del_trailing_separator_159 = 0.00 s 5234s [6170/8505] TestPathname#test_plus_217 = 0.00 s 5234s [6171/8505] TestPathname#test_mkdir = 0.00 s 5234s [6172/8505] TestPathname#test_cleanpath_conservative_122 = 0.00 s 5234s [6173/8505] TestPathname#test_plus_219 = 0.00 s 5234s [6174/8505] TestPathname#test_cleanpath_conservative_120 = 0.00 s 5234s [6175/8505] TestPathname#test_cleanpath_aggressive_48 = 0.00 s 5234s [6176/8505] TestPathname#test_root?_590 = 0.00 s 5234s [6177/8505] TestPathname#test_cleanpath_conservative_126 = 0.00 s 5234s [6178/8505] TestPathname#test_relative_path_from_331 = 0.00 s 5234s [6179/8505] TestPathname#test_descend_460 = 0.00 s 5234s [6180/8505] TestPathname#test_rmtree = 0.01 s 5234s [6181/8505] TestPathname#test_has_trailing_separator?_146 = 0.00 s 5234s [6182/8505] TestPathname#test_cleanpath_aggressive_88 = 0.00 s 5234s [6183/8505] TestPathname#test_relative_path_from_333 = 0.00 s 5234s [6184/8505] TestPathname#test_cleanpath_conservative_124 = 0.00 s 5234s [6185/8505] TestPathname#test_relative?_279 = 0.00 s 5234s [6186/8505] TestPathname#test_parent_239 = 0.00 s 5234s [6187/8505] TestPathname#test_parent_243 = 0.00 s 5234s [6188/8505] TestPathname#test_join = 0.01 s 5234s [6189/8505] TestPathname#test_file_extname = 0.00 s 5234s [6190/8505] TestPathname#test_utime = 0.00 s 5234s [6191/8505] TestPathname#test_mountpoint? = 0.00 s 5234s [6192/8505] TestPathname#test_plus_206 = 0.00 s 5234s [6193/8505] TestPathname#test_cleanpath_aggressive_55 = 0.00 s 5234s [6194/8505] TestPathname#test_pathsub_559 = 0.00 s 5234s [6195/8505] TestPathname#test_entries = 0.00 s 5234s [6196/8505] TestPathname#test_parent_241 = 0.00 s 5234s [6197/8505] TestPathname#test_basename = 0.00 s 5234s [6198/8505] TestPathname#test_chmod = 0.00 s 5234s [6199/8505] TestPathname#test_relative_path_from_328 = 0.00 s 5234s [6200/8505] TestPathname#test_cleanpath_aggressive_57 = 0.00 s 5234s [6201/8505] TestPathname#test_writable? = 0.00 s 5234s [6202/8505] TestPathname#test_cleanpath_aggressive_51 = 0.00 s 5234s [6203/8505] TestPathname#test_root?_589 = 0.00 s 5234s [6204/8505] TestPathname#test_parent_245 = 0.00 s 5234s [6205/8505] TestPathname#test_del_trailing_separator_188 = 0.00 s 5234s [6206/8505] TestPathname#test_cleanpath_aggressive_53 = 0.00 s 5234s [6207/8505] TestPathname#test_mountpoint_enoent = 0.04 s 5234s [6208/8505] TestPathname#test_size = 0.00 s 5234s [6209/8505] TestPathname#test_relative_path_from_322 = 0.00 s 5234s [6210/8505] TestPathname#test_root?_587 = 0.00 s 5234s [6211/8505] TestPathname#test_absolute = 0.00 s 5234s [6212/8505] TestPathname#test_relative_path_from_320 = 0.00 s 5234s [6213/8505] TestPathname#test_cleanpath_aggressive_59 = 0.00 s 5234s [6214/8505] TestPathname#test_slash = 0.00 s 5234s [6215/8505] TestPathname#test_relative_path_from_326 = 0.00 s 5234s [6216/8505] TestPathname#test_plus_208 = 0.00 s 5234s [6217/8505] TestPathname#test_relative_path_from_324 = 0.00 s 5234s [6218/8505] TestPathname#test_each_line = 0.02 s 5234s [6219/8505] TestNetHTTPLocalBind#test_bind_to_local_host = 0.05 s 5235s [6220/8505] TestNetHTTPLocalBind#test_bind_to_local_port = 0.22 s 5235s [6221/8505] HTTPHeaderTest#test_get_fields = 0.00 s 5235s [6222/8505] HTTPHeaderTest#test_add_field = 0.01 s 5235s [6223/8505] HTTPHeaderTest#test_each_capitalized_with_symbol = 0.00 s 5235s [6224/8505] HTTPHeaderTest#test_chunked? = 0.00 s 5235s [6225/8505] HTTPHeaderTest#test_proxy_basic_auth = 0.00 s 5235s [6226/8505] HTTPHeaderTest#test_main_type = 0.00 s 5235s [6227/8505] HTTPHeaderTest#test_content_length= = 0.00 s 5235s [6228/8505] HTTPHeaderTest#test_form_data= = 0.00 s 5235s [6229/8505] HTTPHeaderTest#test_sub_type = 0.00 s 5235s [6230/8505] HTTPHeaderTest#test_duplicated_variable_header = 0.00 s 5235s [6231/8505] HTTPHeaderTest#test_content_type = 0.00 s 5235s [6232/8505] HTTPHeaderTest#test_key? = 0.00 s 5235s [6233/8505] HTTPHeaderTest#test_range= = 0.00 s 5235s [6234/8505] HTTPHeaderTest#test_set_form_data = 0.00 s 5235s [6235/8505] HTTPHeaderTest#test_each_value = 0.00 s 5235s [6236/8505] HTTPHeaderTest#test_each_capitalized = 0.00 s 5235s [6237/8505] HTTPHeaderTest#test_ASET = 0.00 s 5235s [6238/8505] HTTPHeaderTest#test_content_range = 0.01 s 5235s [6239/8505] HTTPHeaderTest#test_delete = 0.00 s 5235s [6240/8505] HTTPHeaderTest#test_each_key = 0.00 s 5235s [6241/8505] HTTPHeaderTest#test_each_capitalized_name = 0.00 s 5235s [6242/8505] HTTPHeaderTest#test_to_hash = 0.00 s 5235s [6243/8505] HTTPHeaderTest#test_initialize = 0.00 s 5235s [6244/8505] HTTPHeaderTest#test_content_length = 0.00 s 5235s [6245/8505] HTTPHeaderTest#test_range_length = 0.00 s 5235s [6246/8505] HTTPHeaderTest#test_range = 0.01 s 5235s [6247/8505] HTTPHeaderTest#test_each = 0.00 s 5235s [6248/8505] HTTPHeaderTest#test_type_params = 0.00 s 5235s [6249/8505] HTTPHeaderTest#test_canonical_each = 0.00 s 5235s [6250/8505] HTTPHeaderTest#test_set_content_type = 0.00 s 5235s [6251/8505] HTTPHeaderTest#test_initialize_with_symbol = 0.00 s 5235s [6252/8505] HTTPHeaderTest#test_AREF = 0.00 s 5235s [6253/8505] HTTPHeaderTest#test_nil_variable_header = 0.00 s 5235s [6254/8505] HTTPHeaderTest#test_size = 0.00 s 5235s [6255/8505] HTTPHeaderTest#test_basic_auth = 0.00 s 5235s [6256/8505] TestLogger#test_initialize_with_formatter = 0.01 s 5235s [6257/8505] TestLogger#test_initialize_with_datetime_format = 0.01 s 5235s [6258/8505] TestLogger#test_progname = 0.00 s 5235s [6259/8505] TestLogger#test_level_log = 0.01 s 5235s [6260/8505] TestLogger#test_string_level = 0.00 s 5235s [6261/8505] TestLogger#test_format = 0.00 s 5235s [6262/8505] TestLogger#test_datetime_format = 0.00 s 5235s [6263/8505] TestLogger#test_level = 0.00 s 5235s [6264/8505] TestLogger#test_close = 0.00 s 5235s [6265/8505] TestLogger#test_initialize_with_level = 0.00 s 5235s [6266/8505] TestLogger#test_does_not_instantiate_log_device_for_File_NULL = 0.00 s 5235s [6267/8505] TestLogger#test_symbol_level = 0.00 s 5235s [6268/8505] TestLogger#test_initialize = 0.00 s 5235s [6269/8505] TestLogger#test_add = 0.00 s 5235s [6270/8505] TestLogger#test_add_binary_data_with_binmode_logdev = 0.00 s 5235s [6271/8505] TestLogger#test_reopen = 0.00 s 5235s [6272/8505] TestLogger#test_overriding_level = 0.00 s 5235s [6273/8505] TestLogger#test_initialize_with_progname = 0.00 s 5235s [6274/8505] TestLogger#test_formatter = 0.00 s 5235s [6275/8505] TestLogger#test_lshift = 0.00 s 5235s [6276/8505] TestLogger#test_reopen_nil_logdevice = 0.00 s 5235s [6277/8505] OpenSSL::TestEOF1#test_eof_3 = 0.11 s 5236s [6278/8505] OpenSSL::TestEOF1#test_eof_1 = 0.63 s 5236s [6279/8505] OpenSSL::TestEOF1#test_eof_0 = 0.86 s 5236s [6280/8505] OpenSSL::TestEOF1#test_eof_2 = 0.12 s 5237s [6281/8505] OpenSSL::TestEOF1#test_eof_0_rw = 0.03 s 5237s [6282/8505] TestRbConfig#test_vendordirs = 0.02 s 5237s [6283/8505] TestRbConfig#test_archdirs = 0.00 s 5237s [6284/8505] TestRbConfig#test_sitedirs = 0.01 s 5237s [6285/8505] TestRbConfig#test_vendorarchdirs = 0.00 s 5237s [6286/8505] TestCSVFeatures#test_col_sep_empty = 0.01 s 5237s [6287/8505] TestCSVFeatures#test_csv_char_readers = 0.00 s 5237s [6288/8505] TestCSVFeatures#test_unknown_options = 0.01 s 5237s [6289/8505] TestCSVFeatures#test_gzip_writer = 0.01 s 5237s [6290/8505] TestCSVFeatures#test_quote_char_special_regexp_char = 0.02 s 5237s [6291/8505] TestCSVFeatures#test_line_separator_autodetection_for_non_seekable_input_cr = 0.00 s 5237s [6292/8505] TestCSVFeatures#test_quote_char = 0.02 s 5237s [6293/8505] TestCSVFeatures#test_failing_to_reset_headers_in_rewind = 0.01 s 5237s [6294/8505] TestCSVFeatures#test_inspect_shows_headers_when_available = 0.01 s 5237s [6295/8505] TestCSVFeatures#test_quote_char_special_regexp_char_liberal_parsing = 0.01 s 5237s [6296/8505] TestCSVFeatures#test_line_separator_autodetection_for_non_seekable_input_cr_lf = 0.00 s 5237s [6297/8505] TestCSVFeatures#test_failing_to_escape_col_sep = 0.00 s 5237s [6298/8505] TestCSVFeatures#test_line = 0.01 s 5237s [6299/8505] TestCSVFeatures#test_line_separator_autodetection_for_non_seekable_input_1024_over_lf = 0.01 s 5237s [6300/8505] TestCSVFeatures#test_row_sep_auto_discovery = 0.01 s 5237s [6301/8505] TestCSVFeatures#test_line_separator_autodetection_for_non_seekable_input_lf = 0.00 s 5237s [6302/8505] TestCSVFeatures#test_col_sep = 0.06 s 5237s [6303/8505] TestCSVFeatures#test_csv_behavior_readers = 0.01 s 5237s [6304/8505] TestCSVFeatures#test_lineno = 0.00 s 5237s [6305/8505] TestCSVFeatures#test_readline = 0.01 s 5237s [6306/8505] TestCSVFeatures#test_skip_blanks = 0.01 s 5237s [6307/8505] TestCSVFeatures#test_line_separator_autodetection_for_non_seekable_input_many_cr_only = 0.26 s 5237s [6308/8505] TestCSVFeatures#test_line_separator_autodetection_for_non_seekable_input_1024_over_cr_lf = 0.01 s 5237s [6309/8505] TestCSVFeatures#test_col_sep_nil = 0.00 s 5237s [6310/8505] TestCSVFeatures#test_row_sep = 0.01 s 5237s [6311/8505] TestCSVFeatures#test_converters_reader = 0.01 s 5237s [6312/8505] TestCSVFeatures#test_inspect_shows_key_attributes = 0.00 s 5237s [6313/8505] TestCSVFeatures#test_inspect_is_smart_about_io_types = 0.01 s 5237s [6314/8505] TestCSVFeatures#test_version = 0.00 s 5237s [6315/8505] TestCSVFeatures#test_inspect_encoding_is_ascii_compatible = 0.00 s 5237s [6316/8505] TestCSVFeatures#test_header_converters_reader = 0.00 s 5237s [6317/8505] TestCSVFeatures#test_table_nil_equality = 0.00 s 5237s [6318/8505] TestDateNew#test_now = 0.00 s 5237s [6319/8505] TestDateNew#test_jd = 0.00 s 5237s [6320/8505] TestDateNew#test_ordinal = 0.01 s 5237s [6321/8505] TestDateNew#test_commercial = 0.00 s 5237s [6322/8505] TestDateNew#test_invalid_types = 0.01 s 5237s [6323/8505] TestDateNew#test_today = 0.00 s 5237s [6324/8505] TestDateNew#test_civil__neg = 0.00 s 5237s [6325/8505] TestDateNew#test_civil__reform = 0.00 s 5237s [6326/8505] TestDateNew#test_ordinal__neg = 0.00 s 5237s [6327/8505] TestDateNew#test_civil = 0.00 s 5237s [6328/8505] TestDateNew#test_commercial__neg = 0.00 s 5237s [6329/8505] Psych::TestEncoding#test_io_utf8_read_as_binary = 0.00 s 5237s [6330/8505] Psych::TestEncoding#test_doc_tag = 0.01 s 5237s [6331/8505] Psych::TestEncoding#test_map_tag = 0.01 s 5237s [6332/8505] Psych::TestEncoding#test_to_yaml_is_valid = 0.01 s 5237s [6333/8505] Psych::TestEncoding#test_list_anchor = 0.00 s 5237s [6334/8505] Psych::TestEncoding#test_default_internal = 0.01 s 5237s [6335/8505] Psych::TestEncoding#test_alias = 0.01 s 5237s [6336/8505] Psych::TestEncoding#test_io_utf8 = 0.00 s 5237s [6337/8505] Psych::TestEncoding#test_transcode_shiftjis = 0.00 s 5237s [6338/8505] Psych::TestEncoding#test_transcode_utf16be = 0.00 s 5237s [6339/8505] Psych::TestEncoding#test_scalar = 0.00 s 5237s [6340/8505] Psych::TestEncoding#test_map_anchor = 0.01 s 5237s [6341/8505] Psych::TestEncoding#test_io_utf16be = 0.00 s 5237s [6342/8505] Psych::TestEncoding#test_emitter_encoding = 0.00 s 5237s [6343/8505] Psych::TestEncoding#test_io_utf16le = 0.00 s 5237s [6344/8505] Psych::TestEncoding#test_dump_load_encoding_object = 0.04 s 5237s [6345/8505] Psych::TestEncoding#test_transcode_utf16le = 0.00 s 5237s [6346/8505] TestRDocGeneratorPOT#test_generate = 0.02 s 5237s [6347/8505] OpenSSL::TestX509Attribute#test_dup = 0.00 s 5237s [6348/8505] OpenSSL::TestX509Attribute#test_eq = 0.00 s 5237s [6349/8505] OpenSSL::TestX509Attribute#test_to_der = 0.00 s 5237s [6350/8505] TestRDocMarkupToHtml#test_accept_heading_1 = 0.01 s 5237s [6351/8505] TestRDocMarkupToHtml#test_gen_url_ssl_image_url = 0.01 s 5237s [6352/8505] TestRDocMarkupToHtml#test_accept_heading_3 = 0.00 s 5237s [6353/8505] TestRDocMarkupToHtml#test_accept_heading_suppressed_crossref = 0.00 s 5237s [6354/8505] TestRDocMarkupToHtml#test_accept_heading_output_decoration = 0.00 s 5237s [6355/8505] TestRDocMarkupToHtml#test_accept_list_start_ualpha = 0.00 s 5237s [6356/8505] TestRDocMarkupToHtml#test_accept_heading_7 = 0.00 s 5237s [6357/8505] TestRDocMarkupToHtml#test_accept_paragraph_break = 0.00 s 5237s [6358/8505] TestRDocMarkupToHtml#test_convert_with_exclude_tag = 0.01 s 5237s [6359/8505] TestRDocMarkupToHtml#test_accept_block_quote = 0.01 s 5237s [6360/8505] TestRDocMarkupToHtml#test_accept_heading_pipe = 0.01 s 5237s [6361/8505] TestRDocMarkupToHtml#test_accept_list_item_start_label = 0.01 s 5237s [6362/8505] TestRDocMarkupToHtml#test_accept_list_end_bullet = 0.00 s 5237s [6363/8505] TestRDocMarkupToHtml#test_accept_rule = 0.00 s 5237s [6364/8505] TestRDocMarkupToHtml#test_accept_list_item_end_bullet = 0.01 s 5237s [6365/8505] TestRDocMarkupToHtml#test_accept_paragraph_underscore = 0.00 s 5237s [6366/8505] TestRDocMarkupToHtml#test_accept_list_item_start_bullet = 0.00 s 5237s [6367/8505] TestRDocMarkupToHtml#test_accept_verbatim_escape_in_backtick = 0.01 s 5237s [6368/8505] TestRDocMarkupToHtml#test_gen_url_md_file = 0.00 s 5237s [6369/8505] TestRDocMarkupToHtml#test_convert_TIDYLINK_rdoc_label = 0.00 s 5237s [6370/8505] TestRDocMarkupToHtml#test_accept_list_end_label = 0.00 s 5237s [6371/8505] TestRDocMarkupToHtml#test_accept_heading = 0.00 s 5237s [6372/8505] TestRDocMarkupToHtml#test_accept_list_start_lalpha = 0.00 s 5237s [6373/8505] TestRDocMarkupToHtml#test_handle_regexp_HYPERLINK_irc = 0.00 s 5237s [6374/8505] TestRDocMarkupToHtml#test_list_nested = 0.01 s 5237s [6375/8505] TestRDocMarkupToHtml#test_accept_verbatim_nl_after_backslash = 0.00 s 5237s [6376/8505] TestRDocMarkupToHtml#test_gen_url_rdoc_file = 0.00 s 5237s [6377/8505] TestRDocMarkupToHtml#test_accept_verbatim_parseable_error = 0.00 s 5237s [6378/8505] TestRDocMarkupToHtml#test_accept_heading_b = 0.00 s 5237s [6379/8505] TestRDocMarkupToHtml#test_accept_list_item_start_number = 0.00 s 5237s [6380/8505] TestRDocMarkupToHtml#test_accept_document = 0.00 s 5237s [6381/8505] TestRDocMarkupToHtml#test_gen_url_rdoc_label_id = 0.00 s 5237s [6382/8505] TestRDocMarkupToHtml#test_convert_TIDYLINK_irc = 0.00 s 5237s [6383/8505] TestRDocMarkupToHtml#test_accept_list_item_end_number = 0.00 s 5237s [6384/8505] TestRDocMarkupToHtml#test_gen_url_rdoc_label = 0.00 s 5237s [6385/8505] TestRDocMarkupToHtml#test_accept_list_end_number = 0.00 s 5237s [6386/8505] TestRDocMarkupToHtml#test_accept_verbatim_pipe = 0.00 s 5237s [6387/8505] TestRDocMarkupToHtml#test_accept_paragraph_i = 0.00 s 5237s [6388/8505] TestRDocMarkupToHtml#test_accept_heading_aref_class = 0.00 s 5237s [6389/8505] TestRDocMarkupToHtml#test_accept_verbatim = 0.01 s 5237s [6390/8505] TestRDocMarkupToHtml#test_accept_heading_output_decoration_with_pipe = 0.01 s 5237s [6391/8505] TestRDocMarkupToHtml#test_list_verbatim = 0.00 s 5237s [6392/8505] TestRDocMarkupToHtml#test_gen_url_rb_file = 0.00 s 5237s [6393/8505] TestRDocMarkupToHtml#test_convert_HYPERLINK_irc = 0.01 s 5238s [6394/8505] TestRDocMarkupToHtml#test_convert_TIDYLINK_multiple = 0.00 s 5238s [6395/8505] TestRDocMarkupToHtml#test_accept_list_end_ualpha = 0.00 s 5238s [6396/8505] TestRDocMarkupToHtml#test_accept_list_item_end_ualpha = 0.00 s 5238s [6397/8505] TestRDocMarkupToHtml#test_accept_list_item_start_ualpha = 0.00 s 5238s [6398/8505] TestRDocMarkupToHtml#test_convert_RDOCLINK_ref = 0.00 s 5238s [6399/8505] TestRDocMarkupToHtml#test_accept_paragraph_b = 0.00 s 5238s [6400/8505] TestRDocMarkupToHtml#test_parseable_eh = 0.01 s 5238s [6401/8505] TestRDocMarkupToHtml#test_gen_url = 0.00 s 5238s [6402/8505] TestRDocMarkupToHtml#test_convert_RDOCLINK_label_label = 0.00 s 5238s [6403/8505] TestRDocMarkupToHtml#test_accept_paragraph_plus = 0.00 s 5238s [6404/8505] TestRDocMarkupToHtml#test_accept_list_item_end_label = 0.00 s 5238s [6405/8505] TestRDocMarkupToHtml#test_accept_list_start_bullet = 0.00 s 5238s [6406/8505] TestRDocMarkupToHtml#test_gen_url_image_url = 0.00 s 5238s [6407/8505] TestRDocMarkupToHtml#test_accept_list_start_note = 0.00 s 5238s [6408/8505] TestRDocMarkupToHtml#test_accept_list_end_lalpha = 0.00 s 5238s [6409/8505] TestRDocMarkupToHtml#test_accept_verbatim_parseable = 0.00 s 5238s [6410/8505] TestRDocMarkupToHtml#test_convert_underscore_adjacent_to_code = 0.00 s 5238s [6411/8505] TestRDocMarkupToHtml#test_accept_raw = 0.00 s 5238s [6412/8505] TestRDocMarkupToHtml#test_accept_list_item_start_note = 0.00 s 5238s [6413/8505] TestRDocMarkupToHtml#test_accept_list_item_end_lalpha = 0.00 s 5238s [6414/8505] TestRDocMarkupToHtml#test_accept_paragraph_newline = 0.00 s 5238s [6415/8505] TestRDocMarkupToHtml#test_list_verbatim_2 = 0.00 s 5238s [6416/8505] TestRDocMarkupToHtml#test_accept_list_item_start_lalpha = 0.00 s 5238s [6417/8505] TestRDocMarkupToHtml#test_end_accepting = 0.00 s 5238s [6418/8505] TestRDocMarkupToHtml#test_accept_verbatim_escape_in_string = 0.01 s 5238s [6419/8505] TestRDocMarkupToHtml#test_accept_list_item_start_note_multi_label = 0.00 s 5238s [6420/8505] TestRDocMarkupToHtml#test_accept_list_item_start_note_multi_description = 0.01 s 5238s [6421/8505] TestRDocMarkupToHtml#test_accept_list_start_number = 0.01 s 5238s [6422/8505] TestRDocMarkupToHtml#test_accept_heading_aref_method = 0.00 s 5238s [6423/8505] TestRDocMarkupToHtml#test_convert_TIDYLINK_image = 0.00 s 5238s [6424/8505] TestRDocMarkupToHtml#test_convert_TIDYLINK_footnote = 0.00 s 5238s [6425/8505] TestRDocMarkupToHtml#test_convert_RDOCLINK_label_footmark = 0.00 s 5238s [6426/8505] TestRDocMarkupToHtml#test_accept_list_end_note = 0.00 s 5238s [6427/8505] TestRDocMarkupToHtml#test_convert_RDOCLINK_label_foottext = 0.00 s 5238s [6428/8505] TestRDocMarkupToHtml#test_accept_heading_4 = 0.01 s 5238s [6429/8505] TestRDocMarkupToHtml#test_accept_list_start_label = 0.00 s 5238s [6430/8505] TestRDocMarkupToHtml#test_to_html = 0.01 s 5238s [6431/8505] TestRDocMarkupToHtml#test_handle_regexp_HYPERLINK_link = 0.00 s 5238s [6432/8505] TestRDocMarkupToHtml#test_accept_heading_2 = 0.00 s 5238s [6433/8505] TestRDocMarkupToHtml#test_accept_paragraph_star = 0.00 s 5238s [6434/8505] TestRDocMarkupToHtml#test_accept_blank_line = 0.00 s 5238s [6435/8505] TestRDocMarkupToHtml#test_accept_paragraph = 0.00 s 5238s [6436/8505] TestRDocMarkupToHtml#test_convert_string = 0.42 s 5238s [6437/8505] TestRDocMarkupToHtml#test_accept_paragraph_br = 0.10 s 5238s [6438/8505] TestRDocMarkupToHtml#test_accept_list_item_start_note_2 = 0.00 s 5238s [6439/8505] TestRDocMarkupToHtml#test_start_accepting = 0.00 s 5238s [6440/8505] TestRDocMarkupToHtml#test_accept_verbatim_ruby = 0.02 s 5238s [6441/8505] TestRDocMarkupToHtml#test_accept_list_item_end_note = 0.00 s 5238s [6442/8505] CGICookieTest#test_cgi_cookie_new_simple = 0.00 s 5238s [6443/8505] CGICookieTest#test_cgi_cookie_scriptname = 0.01 s 5238s [6444/8505] CGICookieTest#test_cgi_cookie_parse = 0.01 s 5238s [6445/8505] CGICookieTest#test_cgi_cookie_arrayinterface = 0.00 s 5238s [6446/8505] CGICookieTest#test_cgi_cookie_new_complex = 0.01 s 5238s [6447/8505] CGICookieTest#test_cgi_cookie_parse_not_decode_name = 0.00 s 5238s [6448/8505] OpenSSL::TestBuffering#test_flush = 0.00 s 5238s [6449/8505] OpenSSL::TestBuffering#test_each_byte = 0.02 s 5238s [6450/8505] OpenSSL::TestBuffering#test_encoding = 0.00 s 5238s [6451/8505] OpenSSL::TestBuffering#test_flush_error = 0.00 s 5238s [6452/8505] OpenSSL::TestBuffering#test_getc = 0.00 s 5238s [6453/8505] CGIModrubyTest#test_cgi_modruby_simple = 0.00 s 5238s [6454/8505] CGIModrubyTest#test_cgi_modruby_requestparams = 0.01 s 5238s [6455/8505] CGIModrubyTest#test_cgi_modruby_location = 0.01 s 5238s [6456/8505] CGIModrubyTest#test_cgi_modruby_complex = 0.00 s 5238s [6457/8505] TestCSVParseStrip::DifferentOFS#test_col_sep_incompatible_true = 0.02 s 5238s [6458/8505] TestCSVParseStrip::DifferentOFS#test_left = 0.00 s 5238s [6459/8505] TestCSVParseStrip::DifferentOFS#test_right = 0.00 s 5238s [6460/8505] TestCSVParseStrip::DifferentOFS#test_liberal_parsing = 0.00 s 5238s [6461/8505] TestCSVParseStrip::DifferentOFS#test_do_not_strip_cr = 0.00 s 5238s [6462/8505] TestCSVParseStrip::DifferentOFS#test_string = 0.01 s 5238s [6463/8505] TestCSVParseStrip::DifferentOFS#test_no_quote = 0.00 s 5238s [6464/8505] TestCSVParseStrip::DifferentOFS#test_col_sep_incompatible_string = 0.00 s 5238s [6465/8505] TestCSVParseStrip::DifferentOFS#test_col_sep_compatible_string = 0.00 s 5238s [6466/8505] TestCSVParseStrip::DifferentOFS#test_quoted = 0.00 s 5238s [6467/8505] TestCSVParseStrip::DifferentOFS#test_both = 0.00 s 5238s [6468/8505] TestCSVParseStrip::DifferentOFS#test_do_not_strip_lf = 0.00 s 5238s [6469/8505] TestCSVParseStrip::DifferentOFS#test_do_not_strip_crlf = 0.00 s 5238s [6470/8505] TestCSVParseStrip::DifferentOFS#test_middle = 0.00 s 5238s [6471/8505] TestRipper::Sexp#test_pattern_matching_383 = 0.00 s 5238s [6472/8505] TestRipper::Sexp#test_pattern_matching_476 = 0.00 s 5238s [6473/8505] TestRipper::Sexp#test_hshptn = 0.00 s 5238s [6474/8505] TestRipper::Sexp#test_pattern_matching_415 = 0.00 s 5238s [6475/8505] TestRipper::Sexp#test_pattern_matching_216 = 0.00 s 5238s [6476/8505] TestRipper::Sexp#test_pattern_matching_470 = 0.00 s 5238s [6477/8505] TestRipper::Sexp#test_defs_fname = 0.01 s 5238s [6478/8505] TestRipper::Sexp#test_squiggly_heredoc = 0.00 s 5238s [6479/8505] TestRipper::Sexp#test_pattern_matching_402 = 0.00 s 5238s [6480/8505] TestRipper::Sexp#test_pattern_matching_394 = 0.00 s 5238s [6481/8505] TestRipper::Sexp#test_pattern_matching_352 = 0.00 s 5238s [6482/8505] TestRipper::Sexp#test_pattern_matching_465 = 0.00 s 5238s [6483/8505] TestRipper::Sexp#test_regexp_content = 0.00 s 5238s [6484/8505] TestRipper::Sexp#test_pattern_matching_439 = 0.00 s 5238s [6485/8505] TestRipper::Sexp#test_pattern_matching_452 = 0.00 s 5238s [6486/8505] TestRipper::Sexp#test_pattern_matching_363 = 0.00 s 5238s [6487/8505] TestRipper::Sexp#test_dsym = 0.01 s 5238s [6488/8505] TestRipper::Sexp#test_pattern_matching_166 = 0.00 s 5238s [6489/8505] TestRipper::Sexp#test_pattern_matching_257 = 0.00 s 5238s [6490/8505] TestRipper::Sexp#test_pattern_matching_234 = 0.00 s 5238s [6491/8505] TestRipper::Sexp#test_hash_value_omission = 0.01 s 5238s [6492/8505] TestRipper::Sexp#test_pattern_matching_229 = 0.00 s 5238s [6493/8505] TestRipper::Sexp#test_pattern_matching_246 = 0.00 s 5238s [6494/8505] TestRipper::Sexp#test_pattern_matching_171 = 0.00 s 5238s [6495/8505] TestRipper::Sexp#test_pattern_matching_286 = 0.00 s 5238s [6496/8505] TestRipper::Sexp#test_params_mlhs = 0.00 s 5238s [6497/8505] TestRipper::Sexp#test_pattern_matching_371 = 0.00 s 5238s [6498/8505] TestRipper::Sexp#test_pattern_matching_482 = 0.00 s 5238s [6499/8505] TestRipper::Sexp#test_pattern_matching_427 = 0.00 s 5238s [6500/8505] TestRipper::Sexp#test_pattern_matching_298 = 0.00 s 5238s [6501/8505] TestRipper::Sexp#test_pattern_matching_309 = 0.00 s 5238s [6502/8505] TestRipper::Sexp#test_def_fname = 0.00 s 5239s [6503/8505] TestRipper::Sexp#test_raise_errors_keyword = 0.00 s 5239s [6504/8505] TestRipper::Sexp#test_pattern_matching_204 = 0.00 s 5239s [6505/8505] TestRipper::Sexp#test_pattern_matching_265 = 0.00 s 5239s [6506/8505] TestRipper::Sexp#test_pattern_matching_196 = 0.00 s 5239s [6507/8505] TestRipper::Sexp#test_pattern_matching_150 = 0.00 s 5239s [6508/8505] TestRipper::Sexp#test_pattern_matching_332 = 0.00 s 5239s [6509/8505] TestRipper::Sexp#test_pattern_matching_460 = 0.00 s 5239s [6510/8505] TestRipper::Sexp#test_compile_error = 0.00 s 5239s [6511/8505] TestRipper::Sexp#test_pattern_matching_158 = 0.00 s 5239s [6512/8505] TestRipper::Sexp#test_pattern_matching_340 = 0.00 s 5239s [6513/8505] TestRipper::Sexp#test_named_with_default = 0.00 s 5239s [6514/8505] TestRipper::Sexp#test_pattern_matching_270 = 0.00 s 5239s [6515/8505] TestRipper::Sexp#test_pattern_matching_410 = 0.00 s 5239s [6516/8505] TestRipper::Sexp#test_pattern_matching_321 = 0.00 s 5239s [6517/8505] TestRipper::Sexp#test_pattern_matching_473 = 0.00 s 5239s [6518/8505] TestRipper::Sexp#test_pattern_matching_145 = 0.00 s 5239s [6519/8505] TestRipper::Sexp#test_pattern_matching_183 = 0.00 s 5239s [6520/8505] TestRipper::Sexp#test_pattern_matching_479 = 0.00 s 5239s [6521/8505] TestRipper::Sexp#test_pattern_matching_278 = 0.00 s 5241s [6522/8505] TestFiberSleep#test_sleep_returns_seconds_slept = 2.01 s 5241s [6523/8505] TestOptionParser::Getopts#test_long_noarg = 0.02 s 5241s [6524/8505] TestOptionParser::Getopts#test_short_noarg = 0.01 s 5241s [6525/8505] TestOptionParser::Getopts#test_long_arg = 0.00 s 5241s [6526/8505] TestOptionParser::Getopts#test_short_arg = 0.00 s 5241s [6527/8505] TestFiberBacktrace#test_backtrace_locations = 0.00 s 5241s [6528/8505] TestFiberBacktrace#test_backtrace = 0.00 s 5241s [6529/8505] TestFiberBacktrace#test_local_backtrace = 0.00 s 5241s [6530/8505] CGIUtilPureRubyTest#test_cgi_unescapeHTML_with_invalid_byte_sequence = 0.00 s 5241s [6531/8505] CGIUtilPureRubyTest#test_cgi_escapeHTML_with_invalid_byte_sequence = 0.01 s 5241s [6532/8505] TestCSVWriteForceQuotesGenerateLine::DifferentOFS#test_false = 0.00 s 5241s [6533/8505] TestCSVWriteForceQuotesGenerateLine::DifferentOFS#test_field_name = 0.00 s 5241s [6534/8505] TestCSVWriteForceQuotesGenerateLine::DifferentOFS#test_field_unknown = 0.00 s 5241s [6535/8505] TestCSVWriteForceQuotesGenerateLine::DifferentOFS#test_true = 0.00 s 5241s [6536/8505] TestCSVWriteForceQuotesGenerateLine::DifferentOFS#test_field_name_without_headers = 0.00 s 5241s [6537/8505] TestCSVWriteForceQuotesGenerateLine::DifferentOFS#test_default = 0.00 s 5241s [6538/8505] TestCSVWriteForceQuotesGenerateLine::DifferentOFS#test_field_index = 0.00 s 5241s [6539/8505] Psych::TestArray#test_cycle = 0.01 s 5241s [6540/8505] Psych::TestArray#test_enumerator = 0.01 s 5241s [6541/8505] Psych::TestArray#test_recursive_array = 0.00 s 5241s [6542/8505] Psych::TestArray#test_self_referential = 0.01 s 5241s [6543/8505] Psych::TestArray#test_recursive_array_uses_alias = 0.01 s 5241s [6544/8505] Psych::TestArray#test_backwards_with_syck = 0.00 s 5241s [6545/8505] Psych::TestArray#test_subclass_with_attributes = 0.00 s 5241s [6546/8505] Psych::TestArray#test_subclass = 0.00 s 5241s [6547/8505] Psych::TestArray#test_another_subclass_with_attributes = 0.01 s 5241s [6548/8505] TestRDocMarkupToAnsi#test_accept_heading_1 = 0.02 s 5241s [6549/8505] TestRDocMarkupToAnsi#test_accept_heading_3 = 0.01 s 5241s [6550/8505] TestRDocMarkupToAnsi#test_accept_heading_suppressed_crossref = 0.00 s 5241s [6551/8505] TestRDocMarkupToAnsi#test_accept_list_start_ualpha = 0.00 s 5241s [6552/8505] TestRDocMarkupToAnsi#test_accept_paragraph_break = 0.00 s 5241s [6553/8505] TestRDocMarkupToAnsi#test_accept_block_quote = 0.00 s 5241s [6554/8505] TestRDocMarkupToAnsi#test_accept_list_item_start_label = 0.00 s 5241s [6555/8505] TestRDocMarkupToAnsi#test_accept_list_end_bullet = 0.00 s 5241s [6556/8505] TestRDocMarkupToAnsi#test_accept_rule = 0.00 s 5241s [6557/8505] TestRDocMarkupToAnsi#test_attributes = 0.00 s 5241s [6558/8505] TestRDocMarkupToAnsi#test_accept_list_item_end_bullet = 0.01 s 5241s [6559/8505] TestRDocMarkupToAnsi#test_accept_paragraph_underscore = 0.00 s 5241s [6560/8505] TestRDocMarkupToAnsi#test_accept_list_item_start_bullet = 0.00 s 5241s [6561/8505] TestRDocMarkupToAnsi#test_accept_list_end_label = 0.00 s 5241s [6562/8505] TestRDocMarkupToAnsi#test_accept_heading = 0.00 s 5241s [6563/8505] TestRDocMarkupToAnsi#test_accept_list_start_lalpha = 0.00 s 5241s [6564/8505] TestRDocMarkupToAnsi#test_list_nested = 0.00 s 5241s [6565/8505] TestRDocMarkupToAnsi#test_accept_verbatim_indent = 0.00 s 5241s [6566/8505] TestRDocMarkupToAnsi#test_accept_heading_b = 0.00 s 5241s [6567/8505] TestRDocMarkupToAnsi#test_accept_list_item_start_number = 0.00 s 5241s [6568/8505] TestRDocMarkupToAnsi#test_accept_document = 0.00 s 5241s [6569/8505] TestRDocMarkupToAnsi#test_accept_list_item_end_number = 0.00 s 5241s [6570/8505] TestRDocMarkupToAnsi#test_accept_verbatim_big_indent = 0.00 s 5241s [6571/8505] TestRDocMarkupToAnsi#test_accept_list_end_number = 0.00 s 5241s [6572/8505] TestRDocMarkupToAnsi#test_accept_paragraph_i = 0.00 s 5241s [6573/8505] TestRDocMarkupToAnsi#test_accept_verbatim = 0.00 s 5241s [6574/8505] TestRDocMarkupToAnsi#test_list_verbatim = 0.00 s 5241s [6575/8505] TestRDocMarkupToAnsi#test_accept_heading_indent = 0.00 s 5241s [6576/8505] TestRDocMarkupToAnsi#test_accept_list_end_ualpha = 0.00 s 5241s [6577/8505] TestRDocMarkupToAnsi#test_accept_list_item_end_ualpha = 0.00 s 5241s [6578/8505] TestRDocMarkupToAnsi#test_convert_list_note = 0.00 s 5241s [6579/8505] TestRDocMarkupToAnsi#test_accept_rule_indent = 0.00 s 5241s [6580/8505] TestRDocMarkupToAnsi#test_accept_list_item_start_ualpha = 0.00 s 5241s [6581/8505] TestRDocMarkupToAnsi#test_accept_paragraph_b = 0.00 s 5241s [6582/8505] TestRDocMarkupToAnsi#test_accept_paragraph_indent = 0.00 s 5241s [6583/8505] TestRDocMarkupToAnsi#test_accept_paragraph_plus = 0.00 s 5241s [6584/8505] TestRDocMarkupToAnsi#test_accept_list_item_end_label = 0.01 s 5241s [6585/8505] TestRDocMarkupToAnsi#test_accept_list_start_bullet = 0.00 s 5241s [6586/8505] TestRDocMarkupToAnsi#test_accept_list_start_note = 0.00 s 5241s [6587/8505] TestRDocMarkupToAnsi#test_accept_list_end_lalpha = 0.00 s 5241s [6588/8505] TestRDocMarkupToAnsi#test_accept_raw = 0.00 s 5241s [6589/8505] TestRDocMarkupToAnsi#test_accept_list_item_start_note = 0.00 s 5241s [6590/8505] TestRDocMarkupToAnsi#test_accept_list_item_end_lalpha = 0.00 s 5241s [6591/8505] TestRDocMarkupToAnsi#test_accept_list_item_start_lalpha = 0.00 s 5241s [6592/8505] TestRDocMarkupToAnsi#test_end_accepting = 0.00 s 5241s [6593/8505] TestRDocMarkupToAnsi#test_accept_paragraph_wrap = 0.00 s 5241s [6594/8505] TestRDocMarkupToAnsi#test_accept_list_item_start_note_multi_label = 0.00 s 5241s [6595/8505] TestRDocMarkupToAnsi#test_accept_list_item_start_note_multi_description = 0.00 s 5241s [6596/8505] TestRDocMarkupToAnsi#test_accept_list_start_number = 0.00 s 5241s [6597/8505] TestRDocMarkupToAnsi#test_accept_list_end_note = 0.00 s 5241s [6598/8505] TestRDocMarkupToAnsi#test_accept_heading_4 = 0.00 s 5241s [6599/8505] TestRDocMarkupToAnsi#test_accept_list_start_label = 0.00 s 5241s [6600/8505] TestRDocMarkupToAnsi#test_accept_heading_2 = 0.00 s 5241s [6601/8505] TestRDocMarkupToAnsi#test_accept_paragraph_star = 0.00 s 5241s [6602/8505] TestRDocMarkupToAnsi#test_accept_blank_line = 0.00 s 5241s [6603/8505] TestRDocMarkupToAnsi#test_accept_paragraph = 0.00 s 5241s [6604/8505] TestRDocMarkupToAnsi#test_accept_paragraph_br = 0.00 s 5241s [6605/8505] TestRDocMarkupToAnsi#test_accept_list_item_start_note_2 = 0.00 s 5241s [6606/8505] TestRDocMarkupToAnsi#test_start_accepting = 0.00 s 5241s [6607/8505] TestRDocMarkupToAnsi#test_accept_list_item_end_note = 0.00 s 5241s [6608/8505] TestResolvResource#test_coord = 0.00 s 5241s [6609/8505] TestResolvResource#test_hash = 0.01 s 5241s [6610/8505] TestResolvResource#test_equality = 0.00 s 5241s [6611/8505] TestRDocCodeObject#test_ignore_eh = 0.05 s 5241s [6612/8505] TestRDocCodeObject#test_ignore = 0.03 s 5241s [6613/8505] TestRDocCodeObject#test_start_doc_ignored = 0.06 s 5241s [6614/8505] TestRDocCodeObject#test_section = 0.03 s 5241s [6615/8505] TestRDocCodeObject#test_stop_doc = 0.03 s 5241s [6616/8505] TestRDocCodeObject#test_record_location_suppressed = 0.03 s 5241s [6617/8505] TestRDocCodeObject#test_options = 0.03 s 5241s [6618/8505] TestRDocCodeObject#test_comment_equals_encoding_blank = 0.03 s 5241s [6619/8505] TestRDocCodeObject#test_parent_name = 0.03 s 5241s [6620/8505] TestRDocCodeObject#test_display_eh_document_self = 0.03 s 5241s [6621/8505] TestRDocCodeObject#test_comment_equals_comment = 0.03 s 5241s [6622/8505] TestRDocCodeObject#test_suppress = 0.03 s 5241s [6623/8505] TestRDocCodeObject#test_document_self_equals = 0.03 s 5241s [6624/8505] TestRDocCodeObject#test_full_name_equals = 0.03 s 5241s [6625/8505] TestRDocCodeObject#test_comment_equals_document = 0.03 s 5241s [6626/8505] TestRDocCodeObject#test_parent_file_name = 0.03 s 5241s [6627/8505] TestRDocCodeObject#test_document_children_equals = 0.03 s 5241s [6628/8505] TestRDocCodeObject#test_file_name = 0.03 s 5241s [6629/8505] TestRDocCodeObject#test_line = 0.03 s 5241s [6630/8505] TestRDocCodeObject#test_comment_equals = 0.03 s 5242s [6631/8505] TestRDocCodeObject#test_initialize = 0.46 s 5242s [6632/8505] TestRDocCodeObject#test_metadata = 0.16 s 5242s [6633/8505] TestRDocCodeObject#test_record_location_ignored = 0.03 s 5242s [6634/8505] TestRDocCodeObject#test_store_equals = 0.03 s 5242s [6635/8505] TestRDocCodeObject#test_suppress_eh = 0.03 s 5242s [6636/8505] TestRDocCodeObject#test_start_doc_suppressed = 0.03 s 5242s [6637/8505] TestRDocCodeObject#test_display_eh_ignore = 0.03 s 5242s [6638/8505] TestRDocCodeObject#test_comment_equals_encoding = 0.03 s 5242s [6639/8505] TestRDocCodeObject#test_documented_eh = 0.03 s 5242s [6640/8505] TestRDocCodeObject#test_done_documenting = 0.03 s 5242s [6641/8505] TestRDocCodeObject#test_received_ndoc = 0.03 s 5242s [6642/8505] TestRDocCodeObject#test_record_location = 0.03 s 5242s [6643/8505] TestRDocCodeObject#test_each_parent = 0.03 s 5242s [6644/8505] TestRDocCodeObject#test_display_eh_suppress = 0.03 s 5242s [6645/8505] TestRDocCodeObject#test_start_doc = 0.03 s 5242s [6646/8505] TestCSVParseSkipLines#test_multibyte_data = 0.01 s 5242s [6647/8505] TestCSVParseSkipLines#test_regexp = 0.00 s 5242s [6648/8505] TestCSVParseSkipLines#test_regexp_quoted = 0.00 s 5242s [6649/8505] TestCSVParseSkipLines#test_string = 0.01 s 5242s [6650/8505] TestCSVParseSkipLines#test_not_matchable = 0.00 s 5242s [6651/8505] TestCSVParseSkipLines#test_empty_line_and_liberal_parsing = 0.00 s 5242s [6652/8505] TestCSVParseSkipLines#test_default = 0.00 s 5242s [6653/8505] TestCSVParseSkipLines#test_matchable = 0.00 s 5242s [6654/8505] TestCSVParseSkipLines#test_crlf = 0.00 s 5243s [6655/8505] TestOptionParser::ZshCompletion#test_compsys = 0.02 s 5243s [6656/8505] Reline::WithinPipeTest#test_unknown_macro = 0.05 s 5243s [6657/8505] Reline::WithinPipeTest#test_macro_commands_for_editing = 0.17 s 5243s [6658/8505] Reline::WithinPipeTest#test_macro_commands_for_moving = 0.06 s 5243s [6659/8505] Reline::WithinPipeTest#test_simple_input = 0.01 s 5243s [6660/8505] Reline::WithinPipeTest#test_delete_text_in_multiline = 0.11 s 5243s [6661/8505] OpenSSL::TestHMAC#test_dup = 0.00 s 5243s [6662/8505] OpenSSL::TestHMAC#test_eq = 0.01 s 5243s [6663/8505] OpenSSL::TestHMAC#test_binary_update = 0.00 s 5243s [6664/8505] OpenSSL::TestHMAC#test_reset_keep_key = 0.00 s 5243s [6665/8505] TestFiberScheduler#test_closed_at_thread_exit = 0.00 s 5243s [6666/8505] TestFiberScheduler#test_fiber_new = 0.00 s 5243s [6667/8505] TestFiberScheduler#test_current_scheduler = 0.00 s 5243s [6668/8505] TestFiberScheduler#test_deadlock = 0.15 s 5243s [6669/8505] TestFiberScheduler#test_fiber_new_with_options = 0.00 s 5243s [6670/8505] TestFiberScheduler#test_closed_when_set_to_nil = 0.00 s 5246s [6671/8505] TestFiberScheduler#test_close_at_exit = 3.03 s 5246s [6672/8505] TestFiberScheduler#test_minimal_interface = 0.00 s 5246s [6673/8505] TestFiberScheduler#test_autoload = 0.26 s 5246s [6674/8505] TestFiberScheduler#test_fiber_without_scheduler = 0.00 s 5246s [6675/8505] TestFiberScheduler#test_fiber_blocking = 0.00 s 5246s [6676/8505] TestDateArith#test_next_month = 0.00 s 5246s [6677/8505] TestDateArith#test__compare = 0.00 s 5246s [6678/8505] TestDateArith#test_step__noblock = 0.00 s 5246s [6679/8505] TestDateArith#test_next_year = 0.00 s 5246s [6680/8505] TestDateArith#test__plus__ex = 0.01 s 5246s [6681/8505] TestDateArith#test_prev_year = 0.00 s 5246s [6682/8505] TestDateArith#test_upto = 0.00 s 5246s [6683/8505] TestDateArith#test_downto = 0.00 s 5246s [6684/8505] TestDateArith#test_next = 0.00 s 5246s [6685/8505] TestDateArith#test_prev_month__2 = 0.00 s 5246s [6686/8505] TestDateArith#test__plus = 0.00 s 5246s [6687/8505] TestDateArith#test_step = 0.00 s 5246s [6688/8505] TestDateArith#test_upto__noblock = 0.00 s 5246s [6689/8505] TestDateArith#test_downto__noblock = 0.00 s 5246s [6690/8505] TestDateArith#test_prev = 0.00 s 5246s [6691/8505] TestDateArith#test_prev_month = 0.00 s 5246s [6692/8505] TestDateArith#test__minus = 0.00 s 5246s [6693/8505] TestDateArith#test_prev_day = 0.00 s 5246s [6694/8505] TestDateArith#test_next_month__2 = 0.00 s 5246s [6695/8505] TestDateArith#test_next_day = 0.00 s 5246s [6696/8505] TestDateArith#test__minus__ex = 0.00 s 5246s [6697/8505] TestDateArith#test_step__compare = 0.00 s 5246s [6698/8505] TestRDocAttr#test_definition = 0.00 s 5246s [6699/8505] TestRDocAttr#test_marshal_dump_singleton = 0.02 s 5246s [6700/8505] TestRDocAttr#test_params = 0.00 s 5246s [6701/8505] TestRDocAttr#test_block_params = 0.00 s 5246s [6702/8505] TestRDocAttr#test_type = 0.00 s 5246s [6703/8505] TestRDocAttr#test_marshal_load_version_1 = 0.00 s 5246s [6704/8505] TestRDocAttr#test_call_seq = 0.00 s 5246s [6705/8505] TestRDocAttr#test_arglists = 0.00 s 5246s [6706/8505] TestRDocAttr#test_full_name = 0.00 s 5246s [6707/8505] TestRDocAttr#test_aref = 0.01 s 5246s [6708/8505] TestRDocAttr#test_marshal_load_version_2 = 0.01 s 5246s [6709/8505] TestRDocAttr#test_singleton = 0.00 s 5246s [6710/8505] TestRDocAttr#test_marshal_dump = 0.00 s 5246s [6711/8505] OpenSSL::TestASN1#test_utctime = 0.01 s 5246s [6712/8505] OpenSSL::TestASN1#test_decode_all = 0.00 s 5247s [6713/8505] OpenSSL::TestASN1#test_integer = 0.00 s 5247s [6714/8505] OpenSSL::TestASN1#test_enumerated = 0.00 s 5247s [6715/8505] OpenSSL::TestASN1#test_boolean = 0.00 s 5247s [6716/8505] OpenSSL::TestASN1#test_object_id_register = 0.00 s 5247s [6717/8505] OpenSSL::TestASN1#test_generalizedtime = 0.00 s 5247s [6718/8505] OpenSSL::TestASN1#test_constructive_each = 0.00 s 5247s [6719/8505] TestRDocI18nLocale#test_load_existent_po = 0.01 s 5247s [6720/8505] TestRDocI18nLocale#test_translate_existent_message = 0.02 s 5247s [6721/8505] TestRDocI18nLocale#test_translate_nonexistent_message = 0.00 s 5247s [6722/8505] TestRDocI18nLocale#test_name = 0.00 s 5247s [6723/8505] TestRDocI18nLocale#test_load_nonexistent_po = 0.01 s 5247s [6724/8505] TestCSVWriteGeneralGenerateLine#test_quote_lf_last = 0.00 s 5247s [6725/8505] TestCSVWriteGeneralGenerateLine#test_with_default_internal = 0.00 s 5247s [6726/8505] TestCSVWriteGeneralGenerateLine#test_cr_lf = 0.00 s 5247s [6727/8505] TestCSVWriteGeneralGenerateLine#test_quote = 0.00 s 5247s [6728/8505] TestCSVWriteGeneralGenerateLine#test_comma = 0.00 s 5247s [6729/8505] TestCSVWriteGeneralGenerateLine#test_nil_values_only = 0.00 s 5247s [6730/8505] TestCSVWriteGeneralGenerateLine#test_encoding_utf8 = 0.00 s 5247s [6731/8505] TestCSVWriteGeneralGenerateLine#test_cr_lf_lf = 0.00 s 5247s [6732/8505] TestCSVWriteGeneralGenerateLine#test_cr_lf_comma_nil = 0.00 s 5247s [6733/8505] TestCSVWriteGeneralGenerateLine#test_encoding_euc_jp = 0.00 s 5247s [6734/8505] TestCSVWriteGeneralGenerateLine#test_cr = 0.00 s 5247s [6735/8505] TestCSVWriteGeneralGenerateLine#test_quote_lf = 0.00 s 5247s [6736/8505] TestCSVWriteGeneralGenerateLine#test_one_element = 0.00 s 5247s [6737/8505] TestCSVWriteGeneralGenerateLine#test_quote_last = 0.00 s 5247s [6738/8505] TestCSVWriteGeneralGenerateLine#test_cr_lf_comma = 0.00 s 5247s [6739/8505] TestCSVWriteGeneralGenerateLine#test_tab = 0.00 s 5247s [6740/8505] TestCSVWriteGeneralGenerateLine#test_quote_character_double = 0.00 s 5247s [6741/8505] TestCSVWriteGeneralGenerateLine#test_nil_empty = 0.00 s 5247s [6742/8505] TestCSVWriteGeneralGenerateLine#test_nil_value_last = 0.00 s 5247s [6743/8505] TestCSVWriteGeneralGenerateLine#test_nil_value_first = 0.00 s 5247s [6744/8505] TestCSVWriteGeneralGenerateLine#test_nil_cr = 0.00 s 5247s [6745/8505] TestCSVWriteGeneralGenerateLine#test_semi_colon = 0.00 s 5247s [6746/8505] TestCSVWriteGeneralGenerateLine#test_nil_values = 0.00 s 5247s [6747/8505] TestCSVWriteGeneralGenerateLine#test_comma_double = 0.00 s 5247s [6748/8505] TestCSVWriteGeneralGenerateLine#test_col_sep = 0.00 s 5247s [6749/8505] TestCSVWriteGeneralGenerateLine#test_quote_lf_value_lf = 0.00 s 5247s [6750/8505] TestCSVWriteGeneralGenerateLine#test_tab_values = 0.00 s 5247s [6751/8505] TestCSVWriteGeneralGenerateLine#test_cr_dot_lf = 0.00 s 5247s [6752/8505] TestCSVWriteGeneralGenerateLine#test_quote_character = 0.00 s 5247s [6753/8505] TestCSVWriteGeneralGenerateLine#test_nil_value_middle = 0.00 s 5247s [6754/8505] TestCSVWriteGeneralGenerateLine#test_encoding_with_default_internal = 0.00 s 5247s [6755/8505] TestCSVWriteGeneralGenerateLine#test_row_sep = 0.00 s 5247s [6756/8505] TestCSVWriteGeneralGenerateLine#test_nil_double_only = 0.00 s 5247s [6757/8505] TestCSVWriteGeneralGenerateLine#test_values = 0.00 s 5247s [6758/8505] TestCSVWriteGeneralGenerateLine#test_force_quotes = 0.00 s 5247s [6759/8505] TestCSVWriteGeneralGenerateLine#test_quote_lf_value_lf_nil = 0.00 s 5247s [6760/8505] TestCSVWriteGeneralGenerateLine#test_comma_and_value = 0.00 s 5247s [6761/8505] TestCSVWriteGeneralGenerateLine#test_quote_cr = 0.00 s 5247s [6762/8505] TestCSVWriteGeneralGenerateLine#test_semi_colon_values = 0.00 s 5247s [6763/8505] TestCSVWriteGeneralGenerateLine#test_lf = 0.00 s 5247s [6764/8505] TestCSVWriteGeneralGenerateLine#test_cr_lf_cr = 0.00 s 5247s [6765/8505] Rinda::TestRingFinger#test_make_socket_unicast = 0.00 s 5247s [6766/8505] TestOptionParser::DidYouMean#test_order = 0.00 s 5247s [6767/8505] TestOptionParser::DidYouMean#test_regexp = 0.00 s 5247s [6768/8505] TestOptionParser::DidYouMean#test_nonopt_pattern = 0.00 s 5247s [6769/8505] TestOptionParser::DidYouMean#test_into = 0.00 s 5247s [6770/8505] TestOptionParser::DidYouMean#test_no_suggestion = 0.01 s 5247s [6771/8505] TestOptionParser::DidYouMean#test_permute = 0.00 s 5247s [6772/8505] TestOptionParser::DidYouMean#test_ambiguous = 0.02 s 5247s [6773/8505] TestOptionParser::DidYouMean#test_require_exact = 0.01 s 5247s [6774/8505] TestOptionParser::DidYouMean#test_plain = 0.00 s 5247s [6775/8505] TestRDocMarkupRaw#test_pretty_print = 0.00 s 5247s [6776/8505] TestRDocMarkupRaw#test_push = 0.00 s 5247s [6777/8505] CGISessionTest#test_cgi_session_pstore = 0.03 s 5247s [6778/8505] CGISessionTest#test_cgi_session_specify_session_key = 0.02 s 5247s [6779/8505] CGISessionTest#test_cgi_session_filestore = 0.00 s 5247s [6780/8505] CGISessionTest#test_cgi_session_specify_session_id = 0.01 s 5247s [6781/8505] TestNetHTTPS#test_fail_if_verify_hostname_is_true = 0.23 s 5247s [6782/8505] TestNetHTTPS#test_get_SNI_proxy = 0.02 s 5248s [6783/8505] TestNetHTTPS#test_certificate_verify_failure = 0.58 s 5248s [6784/8505] TestNetHTTPS#test_verify_none = 0.10 s 5248s [6785/8505] TestNetHTTPS#test_timeout_during_SSL_handshake = 0.02 s 5248s [6786/8505] Psych_Unit_Tests#test_ambiguous_comments = 0.03 s 5248s [6787/8505] Psych_Unit_Tests#test_spec_type_int = 0.01 s 5248s [6788/8505] Psych_Unit_Tests#test_spec_span_single_quote = 0.01 s 5248s [6789/8505] Psych_Unit_Tests#test_string_dump_starting_with_star = 0.00 s 5248s [6790/8505] Psych_Unit_Tests#test_spec_preserve_indent = 0.00 s 5248s [6791/8505] Psych_Unit_Tests#test_spec_builtin_map = 0.02 s 5248s [6792/8505] Psych_Unit_Tests#test_spec_multiline_scalars = 0.01 s 5248s [6793/8505] Psych_Unit_Tests#test_basic_map = 0.00 s 5248s [6794/8505] Psych_Unit_Tests#test_spec_anchors_and_aliases = 0.08 s 5248s [6795/8505] Psych_Unit_Tests#test_numeric_cycle = 0.04 s 5248s [6796/8505] Psych_Unit_Tests#test_ruby_regexp = 0.02 s 5248s [6797/8505] Psych_Unit_Tests#test_spec_builtin_time = 0.02 s 5248s [6798/8505] Psych_Unit_Tests#test_spec_root_fold = 0.00 s 5248s [6799/8505] Psych_Unit_Tests#test_akira = 0.02 s 5248s [6800/8505] Psych_Unit_Tests#test_spec_float_explicit = 0.01 s 5248s [6801/8505] Psych_Unit_Tests#test_spec_sequence_in_sequence_shortcut = 0.00 s 5248s [6802/8505] Psych_Unit_Tests#test_spec_nested_comments = 0.00 s 5248s [6803/8505] Psych_Unit_Tests#test_spec_application_family = 0.03 s 5248s [6804/8505] Psych_Unit_Tests#test_spec_simple_implicit_sequence = 0.01 s 5248s [6805/8505] Psych_Unit_Tests#test_ruby_struct = 0.05 s 5248s [6806/8505] Psych_Unit_Tests#test_spec_single_literal = 0.00 s 5248s [6807/8505] Psych_Unit_Tests#test_spec_domain_prefix = 0.01 s 5248s [6808/8505] Psych_Unit_Tests#test_spec_complex_invoice = 0.01 s 5248s [6809/8505] Psych_Unit_Tests#test_ruby_rational = 0.04 s 5248s [6810/8505] Psych_Unit_Tests#test_spec_mapping_between_sequences = 0.02 s 5248s [6811/8505] Psych_Unit_Tests#test_string_starting_with_non_word_character_uses_double_quotes_without_exclamation_mark = 0.00 s 5248s [6812/8505] Psych_Unit_Tests#test_spec_simple_implicit_map = 0.01 s 5248s [6813/8505] Psych_Unit_Tests#test_spec_override_anchor = 0.00 s 5248s [6814/8505] Psych_Unit_Tests#test_spec_mapping_of_mappings = 0.00 s 5248s [6815/8505] Psych_Unit_Tests#test_range_cycle = 0.07 s 5248s [6816/8505] Psych_Unit_Tests#test_empty_map_key = 0.01 s 5248s [6817/8505] Psych_Unit_Tests#test_string_dump_with_colon = 0.00 s 5248s [6818/8505] Psych_Unit_Tests#test_spec_builtin_literal_blocks = 0.01 s 5248s [6819/8505] Psych_Unit_Tests#test_spec_simple_sequence_with_nested_map = 0.01 s 5249s [6820/8505] Psych_Unit_Tests#test_object_id_collision = 0.44 s 5249s [6821/8505] Psych_Unit_Tests#test_spec_type_float = 0.00 s 5249s [6822/8505] Psych_Unit_Tests#test_spec_sequence_key_shortcut = 0.01 s 5249s [6823/8505] Psych_Unit_Tests#test_y_method = 0.00 s 5249s [6824/8505] Psych_Unit_Tests#test_spec_builtin_seq = 0.00 s 5249s [6825/8505] Psych_Unit_Tests#test_circular_references = 0.01 s 5249s [6826/8505] Psych_Unit_Tests#test_spec_sequence_shortcuts = 0.00 s 5249s [6827/8505] Psych_Unit_Tests#test_date_out_of_range = 0.00 s 5249s [6828/8505] Psych_Unit_Tests#test_regexp_with_n = 0.01 s 5249s [6829/8505] Psych_Unit_Tests#test_spec_oneline_docs = 0.00 s 5249s [6830/8505] Psych_Unit_Tests#test_normal_exit = 0.00 s 5249s [6831/8505] Psych_Unit_Tests#test_spec_root_mapping = 0.00 s 5249s [6832/8505] Psych_Unit_Tests#test_spec_sequence_of_sequences = 0.00 s 5249s [6833/8505] Psych_Unit_Tests#test_basic_strings = 0.01 s 5249s [6834/8505] Psych_Unit_Tests#test_emitting_indicators = 0.00 s 5249s [6835/8505] Psych_Unit_Tests#test_ranges = 0.03 s 5249s [6836/8505] Psych_Unit_Tests#test_multiline_string_uses_literal_style = 0.00 s 5249s [6837/8505] Psych_Unit_Tests#test_spec_type_misc = 0.00 s 5249s [6838/8505] Psych_Unit_Tests#test_syck_compat = 0.00 s 5249s [6839/8505] Psych_Unit_Tests#test_multiline_regexp = 0.01 s 5249s [6840/8505] Psych_Unit_Tests#test_ruby_complex = 0.05 s 5249s [6841/8505] Psych_Unit_Tests#test_spec_indentation_determines_scope = 0.00 s 5249s [6842/8505] Psych_Unit_Tests#test_spec_builtin_binary = 0.00 s 5249s [6843/8505] Psych_Unit_Tests#test_symbol_cycle = 0.00 s 5249s [6844/8505] Psych_Unit_Tests#test_spec_span_double_quote = 0.00 s 5249s [6845/8505] Psych_Unit_Tests#test_spec_force_implicit = 0.00 s 5249s [6846/8505] Psych_Unit_Tests#test_spec_single_folded = 0.00 s 5249s [6847/8505] Psych_Unit_Tests#test_spec_explicit_families = 0.00 s 5249s [6848/8505] Psych_Unit_Tests#test_spec_throwaway = 0.00 s 5249s [6849/8505] Psych_Unit_Tests#test_spec_simple_map_with_nested_sequences = 0.01 s 5249s [6850/8505] Psych_Unit_Tests#test_spec_log_file = 0.01 s 5249s [6851/8505] OpenSSL::TestX509Certificate#test_public_key = 0.08 s 5249s [6852/8505] OpenSSL::TestX509Certificate#test_sign_and_verify_rsa_md5 = 0.02 s 5249s [6853/8505] OpenSSL::TestX509Certificate#test_sign_and_verify_rsa_sha1 = 0.01 s 5249s [6854/8505] OpenSSL::TestX509Certificate#test_marshal = 0.00 s 5249s [6855/8505] OpenSSL::TestX509Certificate#test_dsa_with_sha2 = 0.00 s 5249s [6856/8505] OpenSSL::TestX509Certificate#test_check_private_key = 0.00 s 5249s [6857/8505] OpenSSL::TestX509Certificate#test_sign_and_verify_rsa_dss1 = 0.00 s 5249s [6858/8505] OpenSSL::TestX509Certificate#test_validity = 0.02 s 5249s [6859/8505] OpenSSL::TestX509Certificate#test_read_from_file = 0.01 s 5249s [6860/8505] OpenSSL::TestX509Certificate#test_sign_and_verify_dsa_md5 = 0.00 s 5249s [6861/8505] OpenSSL::TestX509Certificate#test_serial = 0.11 s 5249s [6862/8505] OpenSSL::TestX509Certificate#test_sign_and_verify_dsa = 0.01 s 5249s [6863/8505] PPTestModule::PPInspectTest#test_hasboth = 0.00 s 5249s [6864/8505] PPTestModule::PPInspectTest#test_hasprettyprint = 0.00 s 5249s [6865/8505] PPTestModule::PPInspectTest#test_hasinspect = 0.00 s 5249s [6866/8505] PPTestModule::PPInspectTest#test_pretty_print_inspect = 0.01 s 5249s [6867/8505] Psych::TestScalarScanner#test_scan_symbol = 0.00 s 5249s [6868/8505] Psych::TestScalarScanner#test_scan_nan = 0.00 s 5249s [6869/8505] Psych::TestScalarScanner#test_scan_sexagesimal_float = 0.00 s 5249s [6870/8505] Psych::TestScalarScanner#test_scan_strings_starting_with_underscores = 0.00 s 5249s [6871/8505] Psych::TestScalarScanner#test_scan_plus_inf = 0.00 s 5249s [6872/8505] Psych::TestScalarScanner#test_scan_bad_dates = 0.00 s 5249s [6873/8505] Psych::TestScalarScanner#test_scan_unicode_matches_quickly = 0.00 s 5249s [6874/8505] Psych::TestScalarScanner#test_scan_float_with_exponent_but_no_fraction = 0.00 s 5249s [6875/8505] Psych::TestScalarScanner#test_scan_plus_dot = 0.00 s 5249s [6876/8505] Psych::TestScalarScanner#test_scan_strict_int_commas_and_underscores = 0.00 s 5249s [6877/8505] Psych::TestScalarScanner#test_scan_int_commas_and_underscores = 0.00 s 5249s [6878/8505] Psych::TestScalarScanner#test_scan_strings_starting_with_number = 0.00 s 5249s [6879/8505] Psych::TestScalarScanner#test_scan_null = 0.00 s 5249s [6880/8505] Psych::TestScalarScanner#test_scan_sexagesimal_int = 0.00 s 5249s [6881/8505] Psych::TestScalarScanner#test_scan_dot = 0.00 s 5249s [6882/8505] Psych::TestScalarScanner#test_scan_ascii_matches_quickly = 0.00 s 5249s [6883/8505] Psych::TestScalarScanner#test_scan_bad_edge_date = 0.01 s 5249s [6884/8505] Psych::TestScalarScanner#test_scan_good_edge_date = 0.00 s 5249s [6885/8505] Psych::TestScalarScanner#test_scan_true = 0.00 s 5249s [6886/8505] Psych::TestScalarScanner#test_scan_minus_inf = 0.00 s 5249s [6887/8505] Psych::TestScalarScanner#test_scan_date = 0.00 s 5249s [6888/8505] Psych::TestScalarScanner#test_scan_not_sexagesimal = 0.00 s 5249s [6889/8505] Psych::TestScalarScanner#test_scan_float = 0.00 s 5249s [6890/8505] Psych::TestScalarScanner#test_scan_bad_time = 0.01 s 5249s [6891/8505] Psych::TestScalarScanner#test_scan_strings_ending_with_underscores = 0.00 s 5249s [6892/8505] Psych::TestScalarScanner#test_scan_time = 0.00 s 5249s [6893/8505] Psych::TestScalarScanner#test_scan_inf = 0.00 s 5249s [6894/8505] TestRipper::ScannerEvents#test_imaginary = 0.00 s 5249s [6895/8505] TestRipper::ScannerEvents#test_tlambda_arg = 0.01 s 5249s [6896/8505] TestRipper::ScannerEvents#test_kw = 0.01 s 5249s [6897/8505] TestRipper::ScannerEvents#test_lbrace = 0.00 s 5249s [6898/8505] TestRipper::ScannerEvents#test_rational = 0.00 s 5249s [6899/8505] TestRipper::ScannerEvents#test_embdoc = 0.00 s 5249s [6900/8505] TestRipper::ScannerEvents#test_comma = 0.00 s 5249s [6901/8505] TestRipper::ScannerEvents#test_symbeg = 0.00 s 5249s [6902/8505] TestRipper::ScannerEvents#test_qsymbols_beg = 0.00 s 5249s [6903/8505] TestRipper::ScannerEvents#test_tlambeg = 0.00 s 5249s [6904/8505] TestRipper::ScannerEvents#test_ignored_nl = 0.00 s 5249s [6905/8505] TestRipper::ScannerEvents#test_regexp_beg = 0.00 s 5249s [6906/8505] TestRipper::ScannerEvents#test_float = 0.00 s 5249s [6907/8505] TestRipper::ScannerEvents#test_qwords_beg = 0.00 s 5249s [6908/8505] TestRipper::ScannerEvents#test___end__ = 0.00 s 5249s [6909/8505] TestRipper::ScannerEvents#test_op = 0.01 s 5249s [6910/8505] TestRipper::ScannerEvents#test_ivar = 0.00 s 5249s [6911/8505] TestRipper::ScannerEvents#test_tstring_content = 0.02 s 5249s [6912/8505] TestRipper::ScannerEvents#test_ident = 0.00 s 5249s [6913/8505] TestRipper::ScannerEvents#test_heredoc_beg = 0.00 s 5249s [6914/8505] TestRipper::ScannerEvents#test_rparen = 0.00 s 5249s [6915/8505] TestRipper::ScannerEvents#test_embdoc_end = 0.00 s 5249s [6916/8505] TestRipper::ScannerEvents#test_int = 0.00 s 5249s [6917/8505] TestRipper::ScannerEvents#test_embexpr_beg = 0.00 s 5249s [6918/8505] TestRipper::ScannerEvents#test_embvar = 0.00 s 5249s [6919/8505] TestRipper::ScannerEvents#test_const = 0.01 s 5249s [6920/8505] TestRipper::ScannerEvents#test_cvar = 0.00 s 5249s [6921/8505] TestRipper::ScannerEvents#test_ignored_sp = 0.00 s 5249s [6922/8505] TestRipper::ScannerEvents#test_tstring_beg = 0.00 s 5249s [6923/8505] TestRipper::ScannerEvents#test_tokenize = 0.01 s 5249s [6924/8505] TestRipper::ScannerEvents#test_regexp_end = 0.00 s 5249s [6925/8505] TestRipper::ScannerEvents#test_comment = 0.00 s 5249s [6926/8505] TestRipper::ScannerEvents#test_period = 0.00 s 5249s [6927/8505] TestRipper::ScannerEvents#test_words_beg = 0.00 s 5249s [6928/8505] TestRipper::ScannerEvents#test_tstring_content_HEREDOC = 0.00 s 5249s [6929/8505] TestRipper::ScannerEvents#test_rbracket = 0.00 s 5249s [6930/8505] TestRipper::ScannerEvents#test_semicolon = 0.00 s 5249s [6931/8505] TestRipper::ScannerEvents#test_symbols_beg = 0.00 s 5249s [6932/8505] TestRipper::ScannerEvents#test_backtick = 0.00 s 5249s [6933/8505] TestRipper::ScannerEvents#test_gvar = 0.00 s 5249s [6934/8505] TestRipper::ScannerEvents#test_label = 0.00 s 5249s [6935/8505] TestRipper::ScannerEvents#test_rbrace = 0.00 s 5249s [6936/8505] TestRipper::ScannerEvents#test_nl = 0.00 s 5249s [6937/8505] TestRipper::ScannerEvents#test_backref = 0.00 s 5249s [6938/8505] TestRipper::ScannerEvents#test_words_sep = 0.00 s 5249s [6939/8505] TestRipper::ScannerEvents#test_tstring_end = 0.00 s 5249s [6940/8505] TestRipper::ScannerEvents#test_invalid_hex_escape = 0.00 s 5249s [6941/8505] TestRipper::ScannerEvents#test_label_end = 0.00 s 5249s [6942/8505] TestRipper::ScannerEvents#test_embexpr_end = 0.00 s 5249s [6943/8505] TestRipper::ScannerEvents#test_heredoc_end = 0.00 s 5249s [6944/8505] TestRipper::ScannerEvents#test_tlambda = 0.00 s 5249s [6945/8505] TestRipper::ScannerEvents#test_sp = 0.00 s 5249s [6946/8505] TestRipper::ScannerEvents#test_embdoc_beg = 0.00 s 5249s [6947/8505] TestRipper::ScannerEvents#test_location = 0.01 s 5249s [6948/8505] TestRipper::ScannerEvents#test_lparen = 0.00 s 5249s [6949/8505] TestRipper::ScannerEvents#test_lbracket = 0.00 s 5249s [6950/8505] TestRipper::ScannerEvents#test_lex = 0.01 s 5249s [6951/8505] TestDigestExtend::DifferentOFS#test_digest_length = 0.00 s 5249s [6952/8505] TestDigestExtend::DifferentOFS#test_digest = 0.00 s 5249s [6953/8505] TestDigestExtend::DifferentOFS#test_digest_s_hexencode = 0.00 s 5249s [6954/8505] TestDigestExtend::DifferentOFS#test_digest_hexdigest = 0.00 s 5249s [6955/8505] TestDigestExtend::DifferentOFS#test_class_reset = 0.00 s 5249s [6956/8505] TestDigestExtend::DifferentOFS#test_context = 0.01 s 5249s [6957/8505] TestDigestExtend::DifferentOFS#test_hexdigest = 0.00 s 5249s [6958/8505] TestDigestExtend::DifferentOFS#test_digest_hexdigest_bang = 0.00 s 5249s [6959/8505] TestDigestExtend::DifferentOFS#test_to_s = 0.00 s 5249s [6960/8505] TestDigestExtend::DifferentOFS#test_block_length = 0.00 s 5249s [6961/8505] TestDigestExtend::DifferentOFS#test_length = 0.00 s 5249s [6962/8505] TestDigestExtend::DifferentOFS#test_new = 0.00 s 5249s [6963/8505] TestCSVParseRowSeparator::DifferentOFS#test_multiple_characters = 0.00 s 5250s [6964/8505] TestDateStrftime#test_strftime__3_2 = 0.45 s 5250s [6965/8505] TestDateStrftime#test_strftime__gnuext = 0.04 s 5250s [6966/8505] TestDateStrftime#test_strftime__minus = 0.00 s 5250s [6967/8505] TestDateStrftime#test_strftime__2 = 0.00 s 5250s [6968/8505] TestDateStrftime#test_overflow = 0.00 s 5250s [6969/8505] TestDateStrftime#test_strftime__4 = 0.02 s 5250s [6970/8505] TestDateStrftime#test_strftime__gnuext_LN = 0.00 s 5250s [6971/8505] TestDateStrftime#test_strftime = 0.03 s 5250s [6972/8505] TestDateStrftime#test_strftime_milli = 0.00 s 5250s [6973/8505] TestDateStrftime#test_strftime__gnuext_z = 0.00 s 5250s [6974/8505] TestDateStrftime#test_strftime__3_1 = 0.47 s 5250s [6975/8505] TestOptionParser::ReqArg::Def3#test_abbrev = 0.01 s 5250s [6976/8505] TestOptionParser::ReqArg::Def3#test_order = 0.00 s 5250s [6977/8505] TestOptionParser::ReqArg::Def3#test_short = 0.00 s 5250s [6978/8505] TestOptionParser::ReqArg::Def3#test_hyphenize = 0.00 s 5250s [6979/8505] TestOptionParser::ReqArg::Def3#test_regexp = 0.00 s 5250s [6980/8505] TestOptionParser::ReqArg::Def3#test_nonopt_pattern = 0.00 s 5250s [6981/8505] TestOptionParser::ReqArg::Def3#test_into = 0.00 s 5250s [6982/8505] TestOptionParser::ReqArg::Def3#test_permute = 0.00 s 5250s [6983/8505] TestOptionParser::ReqArg::Def3#test_long = 0.00 s 5251s [6984/8505] TestOptionParser::ReqArg::Def3#test_require_exact = 0.01 s 5251s [6985/8505] TestRDocMarkupHardBreak#test_equals2 = 0.00 s 5251s [6986/8505] TestRDocMarkupHardBreak#test_accept = 0.00 s 5251s [6987/8505] Reline::Unicode::Test#test_take_range = 0.02 s 5251s [6988/8505] Reline::Unicode::Test#test_get_mbchar_width = 0.00 s 5251s [6989/8505] Reline::Unicode::Test#test_ambiguous_width = 0.00 s 5251s [6990/8505] TestSocketNonblock#test_recv_nonblock_error = 0.00 s 5251s [6991/8505] TestSocketNonblock#test_sendmsg_nonblock_no_exception = 0.00 s 5251s [6992/8505] TestSocketNonblock#test_sendmsg_nonblock_error = 0.00 s 5251s [6993/8505] TestSocketNonblock#test_read_nonblock = 0.00 s 5251s [6994/8505] TestSocketNonblock#test_read_nonblock_no_exception = 0.00 s 5251s [6995/8505] TestSocketNonblock#test_connect_nonblock_error = 0.00 s 5251s [6996/8505] TestSocketNonblock#test_sendmsg_nonblock_seqpacket = 0.00 s 5251s [6997/8505] TestAddressResolve#test_addrinfo_getaddrinfo_no_host_non_blocking = 0.00 s 5251s [6998/8505] TestAddressResolve#test_addrinfo_getaddrinfo_non_existing_domain_blocking = 0.11 s 5251s [6999/8505] TestAddressResolve#test_addrinfo_getaddrinfo_numeric_non_blocking = 0.00 s 5251s [7000/8505] TestCSVParseLiberalParsing::TestBackslashQuote#test_quoted_value = 0.01 s 5251s [7001/8505] TestCSVParseLiberalParsing::TestBackslashQuote#test_double_quote_outside_quote = 0.00 s 5251s [7002/8505] TestCSVParseLiberalParsing::TestBackslashQuote#test_unquoted_value_multiple_characters_col_sep = 0.01 s 5251s [7003/8505] TestCSVParseLiberalParsing::TestBackslashQuote#test_unquoted_value = 0.00 s 5251s [7004/8505] TestOptionParser::KwArg#test_kwarg = 0.01 s 5251s [7005/8505] TestOptionParser#test_order = 0.00 s 5251s [7006/8505] TestOptionParser#test_regexp = 0.00 s 5251s [7007/8505] TestOptionParser#test_nonopt_pattern = 0.00 s 5251s [7008/8505] TestOptionParser#test_into = 0.00 s 5251s [7009/8505] TestOptionParser#test_permute = 0.00 s 5251s [7010/8505] TestOptionParser#test_require_exact = 0.01 s 5251s [7011/8505] TestOptionParser::ReqArg::Def1#test_abbrev = 0.01 s 5251s [7012/8505] TestOptionParser::ReqArg::Def1#test_order = 0.01 s 5251s [7013/8505] TestOptionParser::ReqArg::Def1#test_short = 0.00 s 5251s [7014/8505] TestOptionParser::ReqArg::Def1#test_hyphenize = 0.00 s 5251s [7015/8505] TestOptionParser::ReqArg::Def1#test_regexp = 0.00 s 5251s [7016/8505] TestOptionParser::ReqArg::Def1#test_nonopt_pattern = 0.00 s 5251s [7017/8505] TestOptionParser::ReqArg::Def1#test_into = 0.00 s 5251s [7018/8505] TestOptionParser::ReqArg::Def1#test_permute = 0.00 s 5251s [7019/8505] TestOptionParser::ReqArg::Def1#test_long = 0.01 s 5251s [7020/8505] TestOptionParser::ReqArg::Def1#test_require_exact = 0.01 s 5251s [7021/8505] TestSH#test_jd = 0.00 s 5251s [7022/8505] TestSH#test_cmp = 0.00 s 5251s [7023/8505] TestSH#test_fractional = 0.00 s 5251s [7024/8505] TestSH#test_ordinal = 0.00 s 5251s [7025/8505] TestSH#test_dup = 0.00 s 5251s [7026/8505] TestSH#test_inspect = 0.00 s 5251s [7027/8505] TestSH#test_marshal192 = 0.00 s 5251s [7028/8505] TestSH#test_commercial = 0.00 s 5251s [7029/8505] TestSH#test_eqeqeq = 0.00 s 5251s [7030/8505] TestSH#test_zone = 0.00 s 5251s [7031/8505] TestSH#test_marshal18 = 0.00 s 5251s [7032/8505] TestSH#test_period = 0.00 s 5251s [7033/8505] TestSH#test_marshal16 = 0.00 s 5251s [7034/8505] TestSH#test_marshal14 = 0.00 s 5251s [7035/8505] TestSH#test_enc = 0.01 s 5251s [7036/8505] TestSH#test_to_s = 0.00 s 5251s [7037/8505] TestSH#test_different_alignments = 0.00 s 5251s [7038/8505] TestSH#test_canon24oc = 0.00 s 5251s [7039/8505] TestSH#test_new = 0.01 s 5251s [7040/8505] TestPsych#test_parse_file_default_fallback = 0.00 s 5251s [7041/8505] TestPsych#test_load_file_default_fallback = 0.00 s 5251s [7042/8505] TestPsych#test_indent = 0.00 s 5251s [7043/8505] TestPsych#test_symbolize_names = 0.01 s 5251s [7044/8505] TestPsych#test_callbacks = 0.00 s 5251s [7045/8505] TestPsych#test_load_with_fallback_hash = 0.00 s 5251s [7046/8505] TestPsych#test_load_file_with_fallback_for_false = 0.00 s 5251s [7047/8505] TestPsych#test_safe_dump_defaults = 0.01 s 5251s [7048/8505] TestPsych#test_load_with_fallback_for_false = 0.00 s 5251s [7049/8505] TestPsych#test_dump_stream = 0.01 s 5251s [7050/8505] TestPsych#test_load_default_fallback = 0.00 s 5251s [7051/8505] TestPsych#test_parse_stream_with_block_default_fallback = 0.00 s 5251s [7052/8505] TestPsych#test_line_width_no_limit = 0.00 s 5251s [7053/8505] TestPsych#test_load_file_with_fallback = 0.01 s 5251s [7054/8505] TestPsych#test_load_file_with_fallback_nil_or_false = 0.00 s 5251s [7055/8505] TestPsych#test_line_width_invalid = 0.00 s 5251s [7056/8505] TestPsych#test_domain_types = 0.01 s 5251s [7057/8505] TestPsych#test_header = 0.00 s 5251s [7058/8505] TestPsych#test_parse_stream_default_fallback = 0.00 s 5251s [7059/8505] TestPsych#test_parse = 0.00 s 5251s [7060/8505] TestPsych#test_parse_stream_with_block = 0.00 s 5251s [7061/8505] TestPsych#test_safe_dump_symbols = 0.01 s 5251s [7062/8505] TestPsych#test_load_file_with_fallback_for_nil = 0.00 s 5251s [7063/8505] TestPsych#test_safe_load_file_with_permitted_classe = 0.01 s 5251s [7064/8505] TestPsych#test_safe_dump_unpermitted_class = 0.00 s 5251s [7065/8505] TestPsych#test_libyaml_version = 0.00 s 5251s [7066/8505] TestPsych#test_version_array = 0.00 s 5251s [7067/8505] TestPsych#test_load_file_freeze = 0.00 s 5251s [7068/8505] TestPsych#test_parse_stream = 0.00 s 5251s [7069/8505] TestPsych#test_add_builtin_type = 0.00 s 5251s [7070/8505] TestPsych#test_parse_default_fallback = 0.00 s 5251s [7071/8505] TestPsych#test_version_bool = 0.00 s 5251s [7072/8505] TestPsych#test_load_stream_symbolize_names = 0.00 s 5251s [7073/8505] TestPsych#test_load_with_fallback = 0.00 s 5251s [7074/8505] TestPsych#test_safe_dump_aliases = 0.01 s 5251s [7075/8505] TestPsych#test_load_stream = 0.00 s 5251s [7076/8505] TestPsych#test_load_file_with_fallback_hash = 0.00 s 5251s [7077/8505] TestPsych#test_degenerate_strings = 0.00 s 5251s [7078/8505] TestPsych#test_version_string = 0.00 s 5251s [7079/8505] TestPsych#test_parse_file = 0.00 s 5251s [7080/8505] TestPsych#test_dump_io = 0.00 s 5251s [7081/8505] TestPsych#test_load_stream_raises_on_bad_input = 0.02 s 5251s [7082/8505] TestPsych#test_dump_file = 0.00 s 5251s [7083/8505] TestPsych#test_parse_stream_raises_on_bad_input = 0.00 s 5251s [7084/8505] TestPsych#test_load_file_symbolize_names = 0.00 s 5251s [7085/8505] TestPsych#test_canonical = 0.00 s 5251s [7086/8505] TestPsych#test_line_width_limit = 0.00 s 5251s [7087/8505] TestPsych#test_parse_raises_on_bad_input = 0.00 s 5251s [7088/8505] TestPsych#test_simple = 0.00 s 5251s [7089/8505] TestPsych#test_safe_dump_extra_permitted_classes = 0.00 s 5251s [7090/8505] TestPsych#test_load_stream_freeze = 0.00 s 5251s [7091/8505] TestPsych#test_load_file = 0.00 s 5251s [7092/8505] TestPsych#test_load_with_fallback_nil_or_false = 0.00 s 5251s [7093/8505] TestPsych#test_load_stream_default_fallback = 0.00 s 5251s [7094/8505] TestPsych#test_non_existing_class_on_deserialize = 0.01 s 5251s [7095/8505] TestPsych#test_load_argument_error = 0.00 s 5251s [7096/8505] TestPsych#test_load_with_fallback_for_nil = 0.00 s 5251s [7097/8505] TestRipper::Ripper#test_column = 0.00 s 5251s [7098/8505] TestRipper::Ripper#test_yydebug = 0.00 s 5251s [7099/8505] TestRipper::Ripper#test_end_seen_eh = 0.00 s 5251s [7100/8505] TestRipper::Ripper#test_yydebug_equals = 0.00 s 5251s [7101/8505] TestRipper::Ripper#test_parse = 0.00 s 5251s [7102/8505] TestRipper::Ripper#test_encoding = 0.00 s 5251s [7103/8505] TestRipper::Ripper#test_lineno = 0.00 s 5256s [7104/8505] TestRipper::Ripper#test_regexp_enc_error = 4.74 s 5256s [7105/8505] TestRipper::Ripper#test_regexp_with_option = 0.00 s 5256s [7106/8505] TestRipper::Ripper#test_state = 0.00 s 5256s [7107/8505] TestRipper::Ripper#test_filename = 0.00 s 5256s [7108/8505] TestRipper::Ripper#test_dedent_string = 0.00 s 5256s [7109/8505] TestFiberMutex#test_mutex_interleaved_locking = 0.20 s 5256s [7110/8505] TestFiberMutex#test_queue = 0.30 s 5257s [7111/8505] TestFiberMutex#test_mutex_thread = 0.20 s 5257s [7112/8505] TestFiberMutex#test_mutex_synchronize = 0.00 s 5257s [7113/8505] OpenSSL::TestX509Request#test_public_keyOpenSSL::X509::Request#version= has no effect on certification request 5257s OpenSSL::X509::Request#version= has no effect on certification request 5257s = 0.06 s 5257s [7114/8505] OpenSSL::TestX509Request#test_sign_and_verify_rsa_md5OpenSSL::X509::Request#version= has no effect on certification request 5257s = 0.02 s 5257s [7115/8505] OpenSSL::TestX509Request#test_subjectOpenSSL::X509::Request#version= has no effect on certification request 5257s OpenSSL::X509::Request#version= has no effect on certification request 5257s = 0.00 s 5257s [7116/8505] OpenSSL::TestX509Request#test_sign_and_verify_dsa_md5 = 0.00 s 5257s OpenSSL::X509::Request#version= has no effect on certification request 5257s [7117/8505] OpenSSL::TestX509Request#test_sign_and_verify_dsa = 0.00 s 5257s [7118/8505] OpenSSL::TestPKCS7#test_set_type_enveloped = 0.02 s 5257s [7119/8505] OpenSSL::TestPKCS7#test_degenerate_pkcs7 = 0.02 s 5257s [7120/8505] OpenSSL::TestPKCS7#test_set_type_signed = 0.01 s 5257s [7121/8505] OpenSSL::TestPKCS7#test_set_type_encrypted = 0.01 s 5257s [7122/8505] OpenSSL::TestPKCS7#test_enveloped = 0.03 s 5257s [7123/8505] OpenSSL::TestPKCS7#test_detached_sign = 0.02 s 5257s [7124/8505] OpenSSL::TestPKCS7#test_set_type_data = 0.01 s 5257s [7125/8505] OpenSSL::TestPKCS7#test_signed = 0.03 s 5257s [7126/8505] OpenSSL::TestPKCS7#test_split_content = 0.03 s 5257s [7127/8505] OpenSSL::TestPKCS7#test_set_type_signed_and_enveloped = 0.02 s 5267s [7128/8505] TestIO_Console#test_stringio_getch = 10.04 s 5267s [7129/8505] TestIO_Console#test_close = 0.00 s 5267s [7130/8505] TestIO_Console#test_getpass = 0.00 s 5267s [7131/8505] TestIO_Console#test_intr = 0.00 s 5267s [7132/8505] TestIO_Console#test_cursor_position = 0.00 s 5267s [7133/8505] TestIO_Console#test_set_winsize_invalid_dev = 0.03 s 5267s [7134/8505] TestIO_Console#test_sync = 0.00 s 5267s [7135/8505] OpenSSL::TestPKeyDSA#test_marshal = 0.00 s 5267s [7136/8505] OpenSSL::TestPKeyDSA#test_dup = 0.00 s 5267s [7137/8505] OpenSSL::TestPKeyDSA#test_sign_verify = 0.00 s 5267s [7138/8505] OpenSSL::TestPKeyDSA#test_DSAPrivateKey = 0.01 s 5267s [7139/8505] OpenSSL::TestPKeyDSA#test_DSAPrivateKey_encrypted = 0.01 s 5267s [7140/8505] Psych::TestAliasAndAnchor#test_anchor_alias_round_trip_object_with_ivars = 0.01 s 5267s [7141/8505] Psych::TestAliasAndAnchor#test_mri_compatibility_substring_with_ivars = 0.00 s 5267s [7142/8505] Psych::TestAliasAndAnchor#test_anchor_alias_round_trip = 0.00 s 5267s [7143/8505] Psych::TestAliasAndAnchor#test_mri_compatibility_object_with_ivars = 0.00 s 5267s [7144/8505] Psych::TestAliasAndAnchor#test_mri_compatibility = 0.00 s 5267s [7145/8505] Psych::TestAliasAndAnchor#test_anchor_alias_round_trip_substring_with_ivars = 0.00 s 5267s [7146/8505] Psych::TestOmap#test_square = 0.00 s 5267s [7147/8505] Psych::TestOmap#test_order = 0.00 s 5267s [7148/8505] Psych::TestOmap#test_parse_as_map = 0.00 s 5267s [7149/8505] Psych::TestOmap#test_dump = 0.00 s 5267s [7150/8505] Psych::TestOmap#test_self_referential = 0.00 s 5267s [7151/8505] Psych::TestOmap#test_keys = 0.00 s 5267s [7152/8505] Psych::TestOmap#test_round_trip = 0.01 s 5267s [7153/8505] Psych::TestOmap#test_load = 0.00 s 5267s [7154/8505] Psych::TestOmap#test_load_shorthand = 0.00 s 5267s [7155/8505] TestCSVParseRewind#test_default = 0.00 s 5267s [7156/8505] TestCSVParseRewind#test_have_headers = 0.00 s 5267s [7157/8505] TestZlibGzipFile#test_closed_p = 0.00 s 5267s [7158/8505] TestZlibGzipFile#test_os_code = 0.00 s 5267s [7159/8505] TestZlibGzipFile#test_to_io = 0.00 s 5267s [7160/8505] TestZlibGzipFile#test_level = 0.00 s 5267s [7161/8505] TestZlibGzipFile#test_comment = 0.01 s 5267s [7162/8505] TestZlibGzipFile#test_lineno = 0.00 s 5267s [7163/8505] TestZlibGzipFile#test_gzip_reader_zcat = 0.00 s 5267s [7164/8505] TestZlibGzipFile#test_crc = 0.00 s 5267s [7165/8505] TestZlibGzipFile#test_sync = 0.00 s 5267s [7166/8505] TestZlibGzipFile#test_path = 0.00 s 5267s [7167/8505] TestZlibGzipFile#test_pos = 0.00 s 5267s [7168/8505] TestZlibGzipFile#test_orig_name = 0.00 s 5267s [7169/8505] TestCSVParseLiberalParsing#test_quote_after_column_separator = 0.00 s 5267s [7170/8505] TestCSVParseLiberalParsing#test_backslash_quote = 0.00 s 5267s [7171/8505] TestCSVParseLiberalParsing#test_middle_quote_end = 0.01 s 5267s [7172/8505] TestCSVParseLiberalParsing#test_space_quote = 0.00 s 5267s [7173/8505] TestCSVParseLiberalParsing#test_middle_quote_start = 0.01 s 5267s [7174/8505] TestCSVParseLiberalParsing#test_double_quote_outside_quote = 0.01 s 5267s [7175/8505] TestCSVParseLiberalParsing#test_quote_before_column_separator = 0.00 s 5267s [7176/8505] TestFileUtilsDryRun#test_visibility_fu_default_blksize = 0.00 s 5267s [7177/8505] TestFileUtilsDryRun#test_visibility_chmod = 0.00 s 5267s [7178/8505] TestFileUtilsDryRun#test_singleton_visibility_mkdir_p = 0.00 s 5267s [7179/8505] TestFileUtilsDryRun#test_visibility_mv = 0.00 s 5267s [7180/8505] TestFileUtilsDryRun#test_singleton_visibility_copy = 0.00 s 5267s [7181/8505] TestFileUtilsDryRun#test_visibility_makedirs = 0.00 s 5267s [7182/8505] TestFileUtilsDryRun#test_visibility_uptodate? = 0.00 s 5267s [7183/8505] TestFileUtilsDryRun#test_visibility_copy_entry = 0.00 s 5267s [7184/8505] TestFileUtilsDryRun#test_visibility_rm_r = 0.00 s 5267s [7185/8505] TestFileUtilsDryRun#test_singleton_visibility_copy_file = 0.00 s 5267s [7186/8505] TestFileUtilsDryRun#test_singleton_visibility_link = 0.00 s 5267s [7187/8505] TestFileUtilsDryRun#test_singleton_visibility_rmdir = 0.00 s 5267s [7188/8505] TestFileUtilsDryRun#test_visibility_remove_dir = 0.00 s 5267s [7189/8505] TestFileUtilsDryRun#test_singleton_visibility_remove = 0.00 s 5267s [7190/8505] TestFileUtilsDryRun#test_singleton_visibility_move = 0.00 s 5267s [7191/8505] TestFileUtilsDryRun#test_visibility_mkdir = 0.00 s 5267s [7192/8505] TestFileUtilsDryRun#test_visibility_compare_file = 0.00 s 5267s [7193/8505] TestFileUtilsDryRun#test_visibility_chmod_R = 0.00 s 5267s [7194/8505] TestFileUtilsDryRun#test_visibility_rm_f = 0.00 s 5267s [7195/8505] TestFileUtilsDryRun#test_singleton_visibility_ln_sf = 0.00 s 5267s [7196/8505] TestFileUtilsDryRun#test_singleton_visibility_cp_lr = 0.00 s 5267s [7197/8505] TestFileUtilsDryRun#test_visibility_remove = 0.00 s 5267s [7198/8505] TestFileUtilsDryRun#test_singleton_visibility_mv = 0.00 s 5267s [7199/8505] TestFileUtilsDryRun#test_visibility_install = 0.00 s 5267s [7200/8505] TestFileUtilsDryRun#test_visibility_safe_unlink = 0.00 s 5267s [7201/8505] TestFileUtilsDryRun#test_singleton_visibility_getwd = 0.00 s 5267s [7202/8505] TestFileUtilsDryRun#test_singleton_visibility_fu_blksize = 0.00 s 5267s [7203/8505] TestFileUtilsDryRun#test_singleton_visibility_mkpath = 0.00 s 5267s [7204/8505] TestFileUtilsDryRun#test_visibility_fu_stream_blksize = 0.00 s 5267s [7205/8505] TestFileUtilsDryRun#test_singleton_visibility_rm_f = 0.00 s 5267s [7206/8505] TestFileUtilsDryRun#test_singleton_visibility_cd = 0.00 s 5267s [7207/8505] TestFileUtilsDryRun#test_visibility_mkpath = 0.00 s 5267s [7208/8505] TestFileUtilsDryRun#test_visibility_cp = 0.00 s 5267s [7209/8505] TestFileUtilsDryRun#test_visibility_move = 0.00 s 5267s [7210/8505] TestFileUtilsDryRun#test_visibility_fu_windows? = 0.00 s 5267s [7211/8505] TestFileUtilsDryRun#test_visibility_chdir = 0.00 s 5267s [7212/8505] TestFileUtilsDryRun#test_singleton_visibility_identical? = 0.00 s 5267s [7213/8505] TestFileUtilsDryRun#test_singleton_visibility_cp = 0.00 s 5267s [7214/8505] TestFileUtilsDryRun#test_visibility_link_entry = 0.00 s 5267s [7215/8505] TestFileUtilsDryRun#test_singleton_visibility_rm_r = 0.00 s 5267s [7216/8505] TestFileUtilsDryRun#test_singleton_visibility_makedirs = 0.00 s 5267s [7217/8505] TestFileUtilsDryRun#test_visibility_link = 0.00 s 5267s [7218/8505] TestFileUtilsDryRun#test_singleton_visibility_compare_file = 0.00 s 5267s [7219/8505] TestFileUtilsDryRun#test_visibility_touch = 0.00 s 5267s [7220/8505] TestFileUtilsDryRun#test_singleton_visibility_remove_file = 0.00 s 5267s [7221/8505] TestFileUtilsDryRun#test_visibility_symlink = 0.00 s 5267s [7222/8505] TestFileUtilsDryRun#test_singleton_visibility_chown_R = 0.00 s 5267s [7223/8505] TestFileUtilsDryRun#test_visibility_copy = 0.00 s 5267s [7224/8505] TestFileUtilsDryRun#test_singleton_visibility_chown = 0.00 s 5267s [7225/8505] TestFileUtilsDryRun#test_singleton_visibility_fu_default_blksize = 0.00 s 5267s [7226/8505] TestFileUtilsDryRun#test_visibility_cd = 0.00 s 5267s [7227/8505] TestFileUtilsDryRun#test_visibility_rm_rf = 0.00 s 5267s [7228/8505] TestFileUtilsDryRun#test_singleton_visibility_copy_stream = 0.00 s 5267s [7229/8505] TestFileUtilsDryRun#test_visibility_remove_entry_secure = 0.00 s 5267s [7230/8505] TestFileUtilsDryRun#test_singleton_visibility_rmtree = 0.00 s 5267s [7231/8505] TestFileUtilsDryRun#test_singleton_visibility_uptodate? = 0.00 s 5267s [7232/8505] TestFileUtilsDryRun#test_visibility_copy_file = 0.00 s 5267s [7233/8505] TestFileUtilsDryRun#test_singleton_visibility_chmod_R = 0.00 s 5267s [7234/8505] TestFileUtilsDryRun#test_singleton_visibility_chmod = 0.00 s 5267s [7235/8505] TestFileUtilsDryRun#test_visibility_rmtree = 0.00 s 5267s [7236/8505] TestFileUtilsDryRun#test_singleton_visibility_cp_r = 0.00 s 5267s [7237/8505] TestFileUtilsDryRun#test_visibility_remove_entry = 0.00 s 5267s [7238/8505] TestFileUtilsDryRun#test_singleton_visibility_link_entry = 0.00 s 5267s [7239/8505] TestFileUtilsDryRun#test_visibility_identical? = 0.00 s 5267s [7240/8505] TestFileUtilsDryRun#test_visibility_mkdir_p = 0.00 s 5267s [7241/8505] TestFileUtilsDryRun#test_visibility_fu_copy_stream0 = 0.00 s 5267s [7242/8505] TestFileUtilsDryRun#test_visibility_cp_lr = 0.00 s 5267s [7243/8505] TestFileUtilsDryRun#test_visibility_ln_sf = 0.00 s 5267s [7244/8505] TestFileUtilsDryRun#test_singleton_visibility_mkdir = 0.00 s 5267s [7245/8505] TestFileUtilsDryRun#test_singleton_visibility_fu_stream_blksize = 0.00 s 5267s [7246/8505] TestFileUtilsDryRun#test_visibility_compare_stream = 0.00 s 5267s [7247/8505] TestFileUtilsDryRun#test_singleton_visibility_ln_s = 0.00 s 5267s [7248/8505] TestFileUtilsDryRun#test_visibility_rmdir = 0.00 s 5267s [7249/8505] TestFileUtilsDryRun#test_visibility_fu_blksize = 0.00 s 5267s [7250/8505] TestFileUtilsDryRun#test_singleton_visibility_fu_copy_stream0 = 0.00 s 5267s [7251/8505] TestFileUtilsDryRun#test_visibility_cmp = 0.00 s 5267s [7252/8505] TestFileUtilsDryRun#test_visibility_remove_file = 0.00 s 5267s [7253/8505] TestFileUtilsDryRun#test_singleton_visibility_remove_entry_secure = 0.00 s 5267s [7254/8505] TestFileUtilsDryRun#test_singleton_visibility_chdir = 0.00 s 5267s [7255/8505] TestFileUtilsDryRun#test_singleton_visibility_remove_entry = 0.00 s 5267s [7256/8505] TestFileUtilsDryRun#test_singleton_visibility_ln = 0.00 s 5267s [7257/8505] TestFileUtilsDryRun#test_visibility_ln_s = 0.00 s 5267s [7258/8505] TestFileUtilsDryRun#test_singleton_visibility_pwd = 0.00 s 5267s [7259/8505] TestFileUtilsDryRun#test_visibility_chown_R = 0.00 s 5267s [7260/8505] TestFileUtilsDryRun#test_singleton_visibility_symlink = 0.00 s 5267s [7261/8505] TestFileUtilsDryRun#test_singleton_visibility_cmp = 0.00 s 5267s [7262/8505] TestFileUtilsDryRun#test_visibility_copy_stream = 0.00 s 5267s [7263/8505] TestFileUtilsDryRun#test_visibility_pwd = 0.00 s 5267s [7264/8505] TestFileUtilsDryRun#test_visibility_getwd = 0.00 s 5267s [7265/8505] TestFileUtilsDryRun#test_singleton_visibility_compare_stream = 0.00 s 5267s [7266/8505] TestFileUtilsDryRun#test_singleton_visibility_rm = 0.00 s 5267s [7267/8505] TestFileUtilsDryRun#test_singleton_visibility_remove_dir = 0.00 s 5267s [7268/8505] TestFileUtilsDryRun#test_visibility_cp_r = 0.00 s 5267s [7269/8505] TestFileUtilsDryRun#test_singleton_visibility_install = 0.00 s 5267s [7270/8505] TestFileUtilsDryRun#test_singleton_visibility_copy_entry = 0.00 s 5267s [7271/8505] TestFileUtilsDryRun#test_singleton_visibility_rm_rf = 0.00 s 5267s [7272/8505] TestFileUtilsDryRun#test_visibility_rm = 0.00 s 5267s [7273/8505] TestFileUtilsDryRun#test_singleton_visibility_safe_unlink = 0.00 s 5267s [7274/8505] TestFileUtilsDryRun#test_visibility_chown = 0.00 s 5267s [7275/8505] TestFileUtilsDryRun#test_singleton_visibility_fu_windows? = 0.00 s 5267s [7276/8505] TestFileUtilsDryRun#test_singleton_visibility_touch = 0.00 s 5267s [7277/8505] TestFileUtilsDryRun#test_visibility_ln = 0.00 s 5267s [7278/8505] Psych::Visitors::TestToRuby#test_mapping_with_str_tag = 0.00 s 5267s [7279/8505] Psych::Visitors::TestToRuby#test_time = 0.00 s 5267s [7280/8505] Psych::Visitors::TestToRuby#test_int_ignore = 0.00 s 5267s [7281/8505] Psych::Visitors::TestToRuby#test_range_string_triple = 0.00 s 5267s [7282/8505] Psych::Visitors::TestToRuby#test_anon_struct_legacy = 0.00 s 5267s [7283/8505] Psych::Visitors::TestToRuby#test_rational = 0.00 s 5267s [7284/8505] Psych::Visitors::TestToRuby#test_object = 0.00 s 5267s [7285/8505] Psych::Visitors::TestToRuby#test_range_string = 0.00 s 5267s [7286/8505] Psych::Visitors::TestToRuby#test_float = 0.00 s 5267s [7287/8505] Psych::Visitors::TestToRuby#test_exception = 0.00 s 5267s [7288/8505] Psych::Visitors::TestToRuby#test_regexp = 0.00 s 5267s [7289/8505] Psych::Visitors::TestToRuby#test_boolean_false = 0.00 s 5267s [7290/8505] Psych::Visitors::TestToRuby#test_alias = 0.00 s 5267s [7291/8505] Psych::Visitors::TestToRuby#test_tz_00_00_loads_without_error = 0.00 s 5267s [7292/8505] Psych::Visitors::TestToRuby#test_struct = 0.00 s 5267s [7293/8505] Psych::Visitors::TestToRuby#test_anon_struct = 0.00 s 5267s [7294/8505] Psych::Visitors::TestToRuby#test_date = 0.00 s 5267s [7295/8505] Psych::Visitors::TestToRuby#test_rational_string = 0.00 s 5267s [7296/8505] Psych::Visitors::TestToRuby#test_time_utc = 0.00 s 5267s [7297/8505] Psych::Visitors::TestToRuby#test_complex_string = 0.00 s 5267s [7298/8505] Psych::Visitors::TestToRuby#test_integer = 0.00 s 5267s [7299/8505] Psych::Visitors::TestToRuby#test_scalar = 0.00 s 5267s [7300/8505] Psych::Visitors::TestToRuby#test_exp_float = 0.00 s 5267s [7301/8505] Psych::Visitors::TestToRuby#test_sequence = 0.00 s 5267s [7302/8505] Psych::Visitors::TestToRuby#test_document = 0.00 s 5267s [7303/8505] Psych::Visitors::TestToRuby#test_mapping = 0.00 s 5267s [7304/8505] Psych::Visitors::TestToRuby#test_complex = 0.00 s 5267s [7305/8505] Psych::Visitors::TestToRuby#test_binary = 0.00 s 5267s [7306/8505] Psych::Visitors::TestToRuby#test_float_ignore = 0.01 s 5267s [7307/8505] Psych::Visitors::TestToRuby#test_stream = 0.00 s 5267s [7308/8505] Psych::Visitors::TestToRuby#test_legacy_struct = 0.00 s 5267s [7309/8505] Psych::Visitors::TestToRuby#test_boolean_true = 0.01 s 5267s [7310/8505] Psych::Visitors::TestToRuby#test_time_utc_no_z = 0.00 s 5267s [7311/8505] TestRDocRdInline#test_append_inline = 0.00 s 5267s [7312/8505] TestRDocRdInline#test_inspect = 0.00 s 5267s [7313/8505] TestRDocRdInline#test_initialize = 0.00 s 5267s [7314/8505] TestRDocRdInline#test_to_s = 0.00 s 5267s [7315/8505] TestRDocRdInline#test_append_string = 0.00 s 5267s [7316/8505] TestRDocRdInline#test_equals2 = 0.00 s 5267s [7317/8505] TestRDocRdInline#test_class_new = 0.00 s 5267s [7318/8505] TestRDocRdInline#test_initialize_inline = 0.00 s 5267s [7319/8505] Psych::TestTreeBuilder#test_alias = 0.00 s 5267s [7320/8505] Psych::TestTreeBuilder#test_scalar = 0.01 s 5267s [7321/8505] Psych::TestTreeBuilder#test_sequence = 0.00 s 5267s [7322/8505] Psych::TestTreeBuilder#test_mapping = 0.00 s 5267s [7323/8505] Psych::TestTreeBuilder#test_stream = 0.00 s 5267s [7324/8505] TestIRB::TestCompletion#test_complete_variable = 0.05 s 5267s [7325/8505] TestIRB::TestCompletion#test_complete_class_method = 0.01 s 5273s [7326/8505] TestIRB::TestCompletion#test_nonstring_module_name = 5.46 s 5273s [7327/8505] TestIRB::TestCompletion#test_complete_symbol = 0.12 s 5273s [7328/8505] TestIRB::TestCompletion#test_complete_reserved_words = 0.01 s 5273s [7329/8505] TestIRB::TestCompletion#test_complete_symbol_failure = 0.05 s 5273s [7330/8505] TestIRB::TestCompletion#test_complete_require_library_name_first = 0.00 s 5273s [7331/8505] TestIRB::TestCompletion#test_complete_require = 0.24 s 5273s [7332/8505] TestIRB::TestCompletion#test_complete_numeric = 0.00 s 5273s [7333/8505] TestIRB::TestCompletion#test_complete_invalid_three_colons = 0.01 s 5273s [7334/8505] TestIRB::TestCompletion#test_complete_absolute_constants_with_special_characters = 0.01 s 5273s [7335/8505] TestIRB::TestCompletion#test_complete_predicate? = 0.00 s 5273s [7336/8505] TC_Enumerable#test_to_set = 0.00 s 5273s [7337/8505] TestRDocRd#test_class_parse_begin_end = 0.00 s 5273s [7338/8505] TestRDocRd#test_class_parse_newline = 0.00 s 5273s [7339/8505] TestRDocRd#test_class_parse = 0.00 s 5273s [7340/8505] TestRDocAlias#test_to_s = 0.04 s 5273s [7341/8505] TestRDocExtend#test_module_extended = 0.03 s 5273s [7342/8505] TestRDocExtend#test_module = 0.03 s 5273s [7343/8505] Psych::TestYamlSpecialCases#test_empty_string = 0.00 s 5273s [7344/8505] Psych::TestYamlSpecialCases#test_n = 0.00 s 5273s [7345/8505] Psych::TestYamlSpecialCases#test_off = 0.00 s 5273s [7346/8505] Psych::TestYamlSpecialCases#test_0xC = 0.00 s 5273s [7347/8505] Psych::TestYamlSpecialCases#test_false = 0.00 s 5273s [7348/8505] Psych::TestYamlSpecialCases#test_arrows_hash = 0.00 s 5273s [7349/8505] Psych::TestYamlSpecialCases#test_arrows = 0.00 s 5273s [7350/8505] Psych::TestYamlSpecialCases#test_thousand = 0.00 s 5273s [7351/8505] Psych::TestYamlSpecialCases#test_inf = 0.00 s 5273s [7352/8505] Psych::TestYamlSpecialCases#test_8 = 0.00 s 5273s [7353/8505] Psych::TestYamlSpecialCases#test_null = 0.00 s 5273s [7354/8505] Psych::TestYamlSpecialCases#test_NaN = 0.00 s 5273s [7355/8505] Psych::TestObject#test_dump_with_tag = 0.00 s 5273s [7356/8505] Psych::TestObject#test_tag_round_trip = 0.00 s 5273s [7357/8505] Psych::TestObject#test_cyclic_reference_uses_alias = 0.00 s 5273s [7358/8505] Psych::TestObject#test_cyclic_references = 0.01 s 5273s [7359/8505] TestTupleBag#test_find_all = 0.01 s 5273s [7360/8505] TestTupleBag#test_has_expires_eh = 0.00 s 5273s [7361/8505] TestTupleBag#test_delete = 0.01 s 5273s [7362/8505] TestTupleBag#test_find_all_template = 0.00 s 5273s [7363/8505] TestTupleBag#test_find = 0.00 s 5273s [7364/8505] TestTupleBag#test_delete_unless_alive = 0.00 s 5273s [7365/8505] TestTupleBag#test_push = 0.00 s 5273s [7366/8505] TestRDocMarkupIndentedParagraph#test_text = 0.00 s 5273s [7367/8505] TestRDocMarkupIndentedParagraph#test_text_break = 0.00 s 5273s [7368/8505] TestRDocMarkupIndentedParagraph#test_initialize = 0.00 s 5273s [7369/8505] TestRDocMarkupIndentedParagraph#test_equals2 = 0.00 s 5273s [7370/8505] TestRDocMarkupIndentedParagraph#test_accept = 0.00 s 5273s [7371/8505] TestRDocRequire#test_initialize = 0.03 s 5273s [7372/8505] TestCSVWriteConvertersGenerate#test_nil_value = 0.00 s 5273s [7373/8505] TestCSVWriteConvertersGenerate#test_empty_value = 0.00 s 5273s [7374/8505] TestCSVWriteConvertersGenerate#test_one = 0.00 s 5273s [7375/8505] TestCSVWriteConvertersGenerate#test_multiple = 0.00 s 5274s [7376/8505] Psych::TestSet#test_set_self_reference = 0.03 s 5274s [7377/8505] Psych::TestSet#test_load_from_yaml = 0.00 s 5274s [7378/8505] Psych::TestSet#test_dump = 0.00 s 5274s [7379/8505] Psych::TestSet#test_roundtrip = 0.01 s 5274s [7380/8505] Psych::TestSet#test_loaded_class = 0.00 s 5274s [7381/8505] Psych::TestSet#test_set_shorthand = 0.00 s 5274s [7382/8505] TestFind::TestInclude#test_functional_call = 0.01 s 5274s [7383/8505] TestZlibGzipWriter#test_putc = 0.01 s 5274s [7384/8505] TestZlibGzipWriter#test_puts = 0.00 s 5274s [7385/8505] TestZlibGzipWriter#test_write = 0.00 s 5274s [7386/8505] TestZlibGzipWriter#test_open = 0.00 s 5274s [7387/8505] TestZlibGzipWriter#test_double_close = 0.00 s 5274s [7388/8505] TestZlibGzipWriter#test_writer_wrap = 0.00 s 5274s [7389/8505] TestZlibGzipWriter#test_zlib_writer_buffered_write = 0.00 s 5274s [7390/8505] TestZlibGzipWriter#test_invalid_new = 0.00 s 5274s [7391/8505] TestTempfile#test_basic = 0.00 s 5274s [7392/8505] TestTempfile#test_close_with_unlink_now_true_works = 0.00 s 5274s [7393/8505] TestTempfile#test_create_with_block = 0.00 s 5274s [7394/8505] TestTempfile#test_create_without_block = 0.00 s 5274s [7395/8505] TestTempfile#test_close_with_unlink_now_true_does_not_unlink_if_already_unlinked = 0.00 s 5274s [7396/8505] TestTempfile#test_close_bang_does_not_unlink_if_already_unlinked = 0.00 s 5274s [7397/8505] TestTempfile#test_default_basename = 0.00 s 5274s [7398/8505] TestTempfile#test_extend = 0.00 s 5274s [7399/8505] TestTempfile#test_concurrency = 0.04 s 5274s [7400/8505] TestTempfile#test_create_default_basename = 0.00 s 5274s [7401/8505] TestTempfile#test_unlink_silently_fails_on_windows = 0.00 s 5274s [7402/8505] TestTempfile#test_new_traversal_dir = 0.00 s 5274s [7403/8505] TestTempfile#test_saves_in_given_directory = 0.00 s 5274s [7404/8505] TestTempfile#test_size_flushes_buffer_before_determining_file_size = 0.00 s 5274s [7405/8505] TestTempfile#test_close_and_close_p = 0.00 s 5274s [7406/8505] TestTempfile#test_unlink = 0.00 s 5274s [7407/8505] TestTempfile#test_close_flushes_buffer = 0.00 s 5274s [7408/8505] TestTempfile#test_create_traversal_dir = 0.00 s 5274s [7409/8505] TestTempfile#test_binmode = 0.00 s 5277s [7410/8505] TestTempfile#test_tempfile_finalizer_does_not_run_if_unlinked = 2.99 s 5277s [7411/8505] TestTempfile#test_close_bang_works = 0.00 s 5277s [7412/8505] TestTempfile#test_unlink_before_close_works_on_posix_systems = 0.00 s 5277s [7413/8505] TestTempfile#test_leackchecker = 0.00 s 5280s [7414/8505] TestTempfile#test_tempfile_is_unlinked_when_ruby_exits = 3.32 s 5280s [7415/8505] TestTempfile#test_close_does_not_make_path_nil = 0.04 s 5280s [7416/8505] TestTempfile#test_basename = 0.01 s 5280s [7417/8505] TestTempfile#test_open_traversal_dir = 0.01 s 5280s [7418/8505] TestTempfile#test_basename_with_suffix = 0.00 s 5280s [7419/8505] TestTempfile#test_tempfile_encoding_nooption = 0.00 s 5280s [7420/8505] TestTempfile#test_size_works_if_file_is_closed = 0.00 s 5280s [7421/8505] TestTempfile#test_size_on_empty_file = 0.00 s 5280s [7422/8505] TestRDocMarkupToJoinedParagraph#test_accept_paragraph_break = 0.03 s 5280s [7423/8505] TestRDocMarkupToJoinedParagraph#test_accept_paragraph = 0.02 s 5280s [7424/8505] TestCSVParseEach::DifferentOFS#test_twice = 0.02 s 5280s [7425/8505] TestCSVParseGeneral::DifferentOFS#test_row_sep_auto_cr_lf = 0.00 s 5280s [7426/8505] TestCSVParseGeneral::DifferentOFS#test_field_size_limit_controls_lookahead = 0.00 s 5280s [7427/8505] TestCSVParseGeneral::DifferentOFS#test_mastering_regex_example = 0.00 s 5280s [7428/8505] TestCSVParseGeneral::DifferentOFS#test_malformed_csv_cr_middle_line = 0.00 s 5280s [7429/8505] TestCSVParseGeneral::DifferentOFS#test_row_sep_auto_cr = 0.00 s 5280s [7430/8505] TestCSVParseGeneral::DifferentOFS#test_aras_edge_cases = 0.01 s 5280s [7431/8505] TestCSVParseGeneral::DifferentOFS#test_the_parse_fails_fast_when_it_can_for_unescaped_quotes = 0.00 s 5280s [7432/8505] TestCSVParseGeneral::DifferentOFS#test_james_edge_cases = 0.00 s 5280s [7433/8505] TestCSVParseGeneral::DifferentOFS#test_seeked_string_io = 0.00 s 5280s [7434/8505] TestCSVParseGeneral::DifferentOFS#test_std_lib_csv = 0.03 s 5280s [7435/8505] TestCSVParseGeneral::DifferentOFS#test_non_regex_edge_cases = 0.01 s 5280s [7436/8505] TestCSVParseGeneral::DifferentOFS#test_field_size_limit_in_extended_column_exceeding = 0.00 s 5280s [7437/8505] TestCSVParseGeneral::DifferentOFS#test_malformed_csv_illegal_quote_middle_line = 0.00 s 5280s [7438/8505] TestCSVParseGeneral::DifferentOFS#test_field_size_limit_in_extended_column_not_exceeding = 0.00 s 5280s [7439/8505] TestCSVParseGeneral::DifferentOFS#test_malformed_csv_cr_first_line = 0.00 s 5280s [7440/8505] TestCSVParseGeneral::DifferentOFS#test_row_sep_auto_lf = 0.00 s 5280s [7441/8505] TestCSVParseGeneral::DifferentOFS#test_rob_edge_cases = 0.01 s 5280s [7442/8505] TestCSVParseGeneral::DifferentOFS#test_the_parse_fails_fast_when_it_can_for_unquoted_fields = 0.00 s 5280s [7443/8505] TestCSVParseGeneral::DifferentOFS#test_malformed_csv_unclosed_quote = 0.00 s 5280s [7444/8505] TestLogPeriod#test_previous_period_end = 0.01 s 5280s [7445/8505] TestLogPeriod#test_next_rotate_time = 0.00 s 5280s [7446/8505] TestLogPeriod#test_next_rotate_time_extreme_cases = 0.00 s 5280s [7447/8505] TestLogPeriod#test_previous_period_end_extreme_cases = 0.00 s 5286s [7448/8505] TestIRB::TestOption#test_end_of_option = 5.33 s 5286s [7449/8505] PrettyPrintTest::WadlerExample#test_tree_alt_50 = 0.09 s 5286s [7450/8505] PrettyPrintTest::WadlerExample#test_tree_23_43 = 0.03 s 5286s [7451/8505] PrettyPrintTest::WadlerExample#test_tree_00_19 = 0.00 s 5286s [7452/8505] PrettyPrintTest::WadlerExample#test_hello_00_06 = 0.01 s 5286s [7453/8505] PrettyPrintTest::WadlerExample#test_hello_13 = 0.00 s 5286s [7454/8505] PrettyPrintTest::WadlerExample#test_hello_07_08 = 0.00 s 5286s [7455/8505] PrettyPrintTest::WadlerExample#test_hello_09_10 = 0.00 s 5286s [7456/8505] PrettyPrintTest::WadlerExample#test_tree_alt_19_20 = 0.01 s 5286s [7457/8505] PrettyPrintTest::WadlerExample#test_tree_alt_20_49 = 0.00 s 5286s [7458/8505] PrettyPrintTest::WadlerExample#test_tree_44 = 0.00 s 5286s [7459/8505] PrettyPrintTest::WadlerExample#test_tree_20_22 = 0.00 s 5286s [7460/8505] PrettyPrintTest::WadlerExample#test_hello_11_12 = 0.00 s 5286s [7461/8505] PrettyPrintTest::WadlerExample#test_tree_alt_00_18 = 0.00 s 5286s [7462/8505] Psych::TestClass#test_cycle = 0.02 s 5286s [7463/8505] Psych::TestClass#test_cycle_anonymous_module = 0.01 s 5286s [7464/8505] Psych::TestClass#test_dump_module = 0.00 s 5286s [7465/8505] Psych::TestClass#test_dump = 0.00 s 5286s [7466/8505] Psych::TestClass#test_cycle_module = 0.00 s 5286s [7467/8505] Psych::TestClass#test_cycle_anonymous_class = 0.00 s 5286s [7468/8505] TestIRB::TestHistory#test_history_concurrent_use = 0.06 s 5286s [7469/8505] TestIRB::TestHistory#test_history_save_bignum = 0.01 s 5286s [7470/8505] TestIRB::TestHistory#test_history_save_minus_as_infinity = 0.00 s 5286s [7471/8505] TestIRB::TestHistory#test_history_save_100 = 0.00 s 5286s [7472/8505] TestIRB::TestHistory#test_history_save_1 = 0.00 s 5286s [7473/8505] TestEtc#test_getgrgid = 0.02 s 5286s [7474/8505] TestEtc#test_nprocessors = 0.00 s 5286s [7475/8505] TestEtc#test_uname = 0.00 s 5286s [7476/8505] TestEtc#test_getlogin = 0.00 s 5286s [7477/8505] TestEtc#test_sysconf = 0.00 s 5286s [7478/8505] TestEtc#test_group_with_low_level_api = 0.01 s 5286s [7479/8505] TestEtc#test_passwd_with_low_level_api = 0.00 s 5286s [7480/8505] TestEtc#test_passwd = 0.01 s 5286s [7481/8505] TestEtc#test_confstr = 0.00 s 5286s [7482/8505] TestEtc#test_pathconf = 0.00 s 5286s [7483/8505] TestEtc#test_getpwuid = 0.01 s 5286s [7484/8505] TestEtc#test_getpwnam = 0.01 s 5286s [7485/8505] TestEtc#test_ractor = 0.00 s 5286s [7486/8505] TestEtc#test_getgrnam = 0.02 s 5286s [7487/8505] TestEtc#test_group = 0.01 s 5286s [7488/8505] TestRDocText#test_flush_left = 0.02 s 5286s [7489/8505] TestRDocText#test_normalize_comment_stars_single_space = 0.00 s 5286s [7490/8505] TestRDocText#test_parse_format_rd = 0.01 s 5286s [7491/8505] TestRDocText#test_strip_stars_encoding = 0.00 s 5286s [7492/8505] TestRDocText#test_normalize_comment_hash = 0.00 s 5286s [7493/8505] TestRDocText#test_markup_string = 0.01 s 5286s [7494/8505] TestRDocText#test_to_html_encoding = 0.00 s 5286s [7495/8505] TestRDocText#test_to_html_br = 0.00 s 5286s [7496/8505] TestRDocText#test_expand_tabs = 0.00 s 5286s [7497/8505] TestRDocText#test_to_html_copyright = 0.00 s 5286s [7498/8505] TestRDocText#test_parse_empty = 0.00 s 5286s [7499/8505] TestRDocText#test_to_html_dash = 0.00 s 5286s [7500/8505] TestRDocText#test_to_html_apostrophe = 0.00 s 5286s [7501/8505] TestRDocText#test_parse = 0.00 s 5286s [7502/8505] TestRDocText#test_to_html_html_tag = 0.00 s 5286s [7503/8505] TestRDocText#test_parse_comment = 0.00 s 5286s [7504/8505] TestRDocText#test_strip_hashes = 0.00 s 5286s [7505/8505] TestRDocText#test_parse_empty_newline = 0.00 s 5286s [7506/8505] TestRDocText#test_parse_format_tomdoc = 0.00 s 5286s [7507/8505] TestRDocText#test_snippet_comment = 0.00 s 5286s [7508/8505] TestRDocText#test_strip_newlines_encoding = 0.00 s 5286s [7509/8505] TestRDocText#test_to_html_tt_tag_mismatch = 0.00 s 5286s [7510/8505] TestRDocText#test_to_html_backslash = 0.00 s 5286s [7511/8505] TestRDocText#test_strip_newlines = 0.00 s 5286s [7512/8505] TestRDocText#test_expand_tabs_encoding = 0.00 s 5286s [7513/8505] TestRDocText#test_strip_hashes_encoding = 0.00 s 5286s [7514/8505] TestRDocText#test_strip_stars_encoding2 = 0.00 s 5286s [7515/8505] TestRDocText#test_strip_stars_document_method = 0.00 s 5286s [7516/8505] TestRDocText#test_normalize_comment_stars_single_double_space = 0.00 s 5286s [7517/8505] TestRDocText#test_self_encode_fallback = 0.00 s 5286s [7518/8505] TestRDocText#test_parse_newline = 0.00 s 5286s [7519/8505] TestRDocText#test_snippet = 0.01 s 5286s [7520/8505] TestRDocText#test_to_html_double_tick = 0.00 s 5286s [7521/8505] TestRDocText#test_to_html_ellipsis = 0.00 s 5286s [7522/8505] TestRDocText#test_markup_comment = 0.00 s 5286s [7523/8505] TestRDocText#test_snippet_short = 0.00 s 5286s [7524/8505] TestRDocText#test_to_html_double_quote = 0.00 s 5286s [7525/8505] TestRDocText#test_to_html_tt_tag = 0.00 s 5286s [7526/8505] TestRDocText#test_to_html_apostrophe_entity = 0.00 s 5286s [7527/8505] TestRDocText#test_to_html_registered_trademark = 0.00 s 5286s [7528/8505] TestRDocText#test_to_html_double_quote_quot = 0.00 s 5286s [7529/8505] TestRDocText#test_strip_stars = 0.01 s 5286s [7530/8505] TestRDocText#test_parse_document = 0.00 s 5286s [7531/8505] TestRDocText#test_to_html_double_backtick = 0.01 s 5286s [7532/8505] TestRDocText#test_strip_stars_no_stars = 0.00 s 5286s [7533/8505] TestRDocText#test_flush_left_encoding = 0.00 s 5286s [7534/8505] TestRDocText#test_strip_stars_document_method_special = 0.00 s 5286s [7535/8505] TestRDocText#test_parse_format_markdown = 0.04 s 5286s [7536/8505] JSONCommonInterfaceTest#test_dump_should_modify_defaults = 0.00 s 5286s [7537/8505] JSONCommonInterfaceTest#test_load_with_options = 0.00 s 5286s [7538/8505] JSONCommonInterfaceTest#test_parse_bang = 0.00 s 5286s [7539/8505] JSONCommonInterfaceTest#test_load_file_with_option! = 0.00 s 5286s [7540/8505] JSONCommonInterfaceTest#test_load_null = 0.00 s 5286s [7541/8505] JSONCommonInterfaceTest#test_parse = 0.00 s 5286s [7542/8505] JSONCommonInterfaceTest#test_deep_const_get = 0.05 s 5286s [7543/8505] JSONCommonInterfaceTest#test_JSON = 0.02 s 5286s [7544/8505] JSONCommonInterfaceTest#test_dump = 0.02 s 5286s [7545/8505] JSONCommonInterfaceTest#test_generate = 0.00 s 5286s [7546/8505] JSONCommonInterfaceTest#test_load_file_with_option = 0.01 s 5286s [7547/8505] JSONCommonInterfaceTest#test_parser = 0.00 s 5286s [7548/8505] JSONCommonInterfaceTest#test_create_id = 0.03 s 5286s [7549/8505] JSONCommonInterfaceTest#test_pretty_generate = 0.01 s 5286s [7550/8505] JSONCommonInterfaceTest#test_state = 0.00 s 5286s [7551/8505] JSONCommonInterfaceTest#test_index = 0.01 s 5286s [7552/8505] JSONCommonInterfaceTest#test_generator = 0.00 s 5286s [7553/8505] JSONCommonInterfaceTest#test_fast_generate = 0.00 s 5286s [7554/8505] JSONCommonInterfaceTest#test_load_file = 0.01 s 5286s [7555/8505] JSONCommonInterfaceTest#test_load = 0.00 s 5287s [7556/8505] JSONCommonInterfaceTest#test_load_file! = 0.01 s 5287s [7557/8505] TestRDocConstant#test_documented_eh_alias = 0.04 s 5287s [7558/8505] TestRDocConstant#test_marshal_round_trip = 0.03 s 5287s [7559/8505] TestRDocConstant#test_is_alias_for = 0.03 s 5287s [7560/8505] TestRDocConstant#test_marshal_load = 0.03 s 5287s [7561/8505] TestRDocConstant#test_full_name = 0.03 s 5287s [7562/8505] TestRDocConstant#test_marshal_load_version_0 = 0.03 s 5287s [7563/8505] TestRDocConstant#test_documented_eh = 0.03 s 5287s [7564/8505] TestRDocConstant#test_path = 0.03 s 5287s [7565/8505] TestRDocConstant#test_marshal_dump = 0.03 s 5287s [7566/8505] TestZlib#test_gzip = 0.00 s 5287s [7567/8505] TestZlib#test_crc_table = 0.00 s 5287s [7568/8505] TestZlib#test_deflate = 0.00 s 5287s [7569/8505] TestZlib#test_crc32_combine = 0.00 s 5287s [7570/8505] TestZlib#test_inflate = 0.00 s 5287s [7571/8505] TestZlib#test_version = 0.00 s 5287s [7572/8505] TestZlib#test_adler32_combine = 0.00 s 5287s [7573/8505] Psych::Nodes::TestEnumerable#test_alias = 0.00 s 5287s [7574/8505] Psych::Nodes::TestEnumerable#test_returns_enumerator = 0.00 s 5287s [7575/8505] Psych::Nodes::TestEnumerable#test_includes_enumerable = 0.00 s 5287s [7576/8505] Psych::Nodes::TestEnumerable#test_scalar = 0.00 s 5287s [7577/8505] Psych::Nodes::TestEnumerable#test_sequence = 0.00 s 5287s [7578/8505] Psych::Nodes::TestEnumerable#test_mapping = 0.00 s 5287s [7579/8505] TestRDocRIDriver#test_add_from = 0.05 s 5287s [7580/8505] TestRDocRIDriver#test_add_method_list_none = 0.04 s 5287s [7581/8505] TestRDocRIDriver#test_display_method_inherited = 0.11 s 5287s [7582/8505] TestRDocRIDriver#test_expand_name = 0.13 s 5287s [7583/8505] TestRDocRIDriver#test_display_class_ambiguous = 0.13 s 5287s [7584/8505] TestRDocRIDriver#test_add_includes = 0.06 s 5287s [7585/8505] TestRDocRIDriver#test_add_method_overridden = 0.16 s 5288s [7586/8505] TestRDocRIDriver#test_complete_ancestor = 0.02 s 5288s [7587/8505] TestRDocRIDriver#test_filter_methods = 0.10 s 5288s [7588/8505] TestRDocRIDriver#test_list_known_classes = 0.06 s 5288s [7589/8505] TestRDocRIDriver#test_display_name = 0.04 s 5288s [7590/8505] TestRDocRIDriver#test_in_path_eh = 0.01 s 5288s [7591/8505] TestRDocRIDriver#test_add_method = 0.04 s 5288s [7592/8505] TestRDocRIDriver#test_did_you_mean = 0.06 s 5288s [7593/8505] TestRDocRIDriver#test_add_method_list_interative = 0.01 s 5288s [7594/8505] TestRDocRIDriver#test_load_methods_matching = 0.22 s 5288s [7595/8505] TestRDocRIDriver#test_add_also_in = 0.07 s 5288s [7596/8505] TestRDocRIDriver#test_ancestors_of_chained_inclusion = 0.01 s 5288s [7597/8505] TestRDocRIDriver#test_add_method_inherited = 0.10 s 5288s [7598/8505] TestRDocRIDriver#test_list_methods_matching_inherit = 0.07 s 5288s [7599/8505] TestRDocRIDriver#test_display_name_not_found_class = 0.05 s 5288s [7600/8505] TestRDocRIDriver#test_find_store = 0.01 s 5288s [7601/8505] TestRDocRIDriver#test_complete_multistore = 0.09 s 5288s [7602/8505] TestRDocRIDriver#test_parse_name_single_class = 0.00 s 5289s [7603/8505] TestRDocRIDriver#test_display_name_not_found_method = 0.05 s 5289s [7604/8505] TestRDocRIDriver#test_ancestors_of = 0.00 s 5289s [7605/8505] TestRDocRIDriver#test_output_width = 0.01 s 5289s [7606/8505] TestRDocRIDriver#test_add_method_attribute = 0.04 s 5289s [7607/8505] TestRDocRIDriver#test_load_methods_matching_inherited = 0.08 s 5289s [7608/8505] TestRDocRIDriver#test_expand_class = 0.04 s 5289s [7609/8505] TestRDocRIDriver#test_display_method_params = 0.04 s 5289s [7610/8505] TestRDocRIDriver#test_display_page_missing = 0.04 s 5289s [7611/8505] TestRDocRIDriver#test_add_class = 0.04 s 5289s [7612/8505] TestRDocRIDriver#test_load_method = 0.03 s 5289s [7613/8505] TestRDocRIDriver#test_add_method_that_is_alias_for_original = 0.03 s 5289s [7614/8505] TestRDocRIDriver#test_display_method_overridden = 0.06 s 5289s [7615/8505] TestRDocRIDriver#test_display_class_all = 0.15 s 5289s [7616/8505] TestRDocRIDriver#test_expand_class_2 = 0.02 s 5289s [7617/8505] TestRDocRIDriver#test_complete_classes = 0.05 s 5289s [7618/8505] TestRDocRIDriver#test_display_method_attribute = 0.05 s 5289s [7619/8505] TestRDocRIDriver#test_display_class_multi_no_doc = 0.05 s 5289s [7620/8505] TestRDocRIDriver#test_display_class = 0.05 s 5289s [7621/8505] TestRDocRIDriver#test_name_regexp = 0.01 s 5289s [7622/8505] TestRDocRIDriver#test_load_method_missing = 0.03 s 5289s [7623/8505] TestRDocRIDriver#test_display_class_superclass = 0.05 s 5289s [7624/8505] TestRDocRIDriver#test_parse_name_page = 0.00 s 5289s [7625/8505] TestRDocRIDriver#test_method_type = 0.00 s 5289s [7626/8505] TestRDocRIDriver#test_add_extension_modules_one = 0.04 s 5290s [7627/8505] TestRDocRIDriver#test_load_method_inherited = 0.62 s 5290s [7628/8505] TestRDocRIDriver#test_expand_class_3 = 0.03 s 5290s [7629/8505] TestRDocRIDriver#test_display_page_ambiguous = 0.04 s 5290s [7630/8505] TestRDocRIDriver#test_find_methods = 0.03 s 5290s [7631/8505] TestRDocRIDriver#test_add_also_in_empty = 0.00 s 5290s [7632/8505] TestRDocRIDriver#test_page_stdout = 0.00 s 5290s [7633/8505] TestRDocRIDriver#test_display_page = 0.03 s 5290s [7634/8505] TestRDocRIDriver#test_display_class_page = 0.00 s 5290s [7635/8505] TestRDocRIDriver#test_find_methods_method = 0.06 s 5290s [7636/8505] TestRDocRIDriver#test_complete = 0.01 s 5290s [7637/8505] TestRDocRIDriver#test_display_page_list = 0.05 s 5290s [7638/8505] TestRDocRIDriver#test_add_method_list = 0.00 s 5290s [7639/8505] TestRDocRIDriver#test_list_known_classes_name = 0.05 s 5290s [7640/8505] TestRDocRIDriver#test_parse_name_namespace = 0.02 s 5290s [7641/8505] TestRDocRIDriver#test_self_dump = 0.06 s 5290s [7642/8505] TestRDocRIDriver#test_display_page_extension = 0.05 s 5291s [7643/8505] TestRDocRIDriver#test_classes = 0.04 s 5291s [7644/8505] TestRDocRIDriver#test_display_name_not_found_special = 0.04 s 5291s [7645/8505] TestRDocRIDriver#test_filter_methods_not_found = 0.04 s 5291s [7646/8505] TestRDocRIDriver#test_add_method_documentation = 0.04 s 5291s [7647/8505] TestRDocRIDriver#test_formatter = 0.00 s 5291s [7648/8505] TestRDocRIDriver#test_add_extension_modules_many_no_doc = 0.03 s 5291s [7649/8505] TestRDocRIDriver#test_display_method = 0.03 s 5291s [7650/8505] TestRDocRIDriver#test_add_extension_modules_many = 0.03 s 5291s [7651/8505] TestRDocRIDriver#test_add_extension_modules_empty = 0.00 s 5291s [7652/8505] TestRDocRIDriver#test_display_page_ignore_directory = 0.03 s 5291s [7653/8505] TestRDocRIDriver#test_class_document = 0.04 s 5291s [7654/8505] TestRDocRIDriver#test_display = 0.00 s 5291s [7655/8505] TestRDocRIDriver#test_display_page_add_extension = 0.03 s 5291s [7656/8505] TestRDocRIDriver#test_parse_name_method = 0.00 s 5291s [7657/8505] TestRDocRIDriver#test_parse_name_special = 0.01 s 5291s [7658/8505] TestRDocRIDriver#test_parse_name_page_extenson = 0.00 s 5291s [7659/8505] TestRDocRIDriver#test_list_methods_matching_regexp = 0.05 s 5291s [7660/8505] TestRDocRIDriver#test_add_extends = 0.03 s 5291s [7661/8505] TestRDocRIDriver#test_display_class_module = 0.03 s 5291s [7662/8505] TestRDocRIDriver#test_list_methods_matching = 0.03 s 5291s [7663/8505] OpenSSL::TestCipher#test_pkcs5_keyivgen = 0.10 s 5291s [7664/8505] OpenSSL::TestCipher#test_encrypt_decrypt = 0.01 s 5291s [7665/8505] OpenSSL::TestCipher#test_aes_gcm_key_iv_order_issue = 0.01 s 5291s [7666/8505] OpenSSL::TestCipher#test_dup = 0.00 s 5291s [7667/8505] OpenSSL::TestCipher#test_update_raise_if_key_not_set = 0.00 s 5291s [7668/8505] OpenSSL::TestCipher#test_non_aead_cipher_set_auth_data = 0.00 s 5291s [7669/8505] OpenSSL::TestCipher#test_reset = 0.00 s 5291s [7670/8505] OpenSSL::TestCipher#test_initialize = 0.00 s 5291s [7671/8505] OpenSSL::TestCipher#test_random_key_iv = 0.00 s 5291s [7672/8505] OpenSSL::TestCipher#test_aes_gcm_variable_iv_len = 0.00 s 5291s [7673/8505] OpenSSL::TestCipher#test_info = 0.00 s 5291s [7674/8505] OpenSSL::TestCipher#test_authenticated = 0.00 s 5291s [7675/8505] OpenSSL::TestCipher#test_empty_data = 0.00 s 5291s [7676/8505] OpenSSL::TestCipher#test_ctr_if_exists = 0.00 s 5291s [7677/8505] TestRDocSingleClass#test_definition = 0.00 s 5291s [7678/8505] TestRDocSingleClass#test_aref_prefix = 0.00 s 5291s [7679/8505] Psych::Visitors::TestYAMLTree#test_time = 0.01 s 5291s [7680/8505] Psych::Visitors::TestYAMLTree#test_rational = 0.01 s 5291s [7681/8505] Psych::Visitors::TestYAMLTree#test_hash = 0.00 s 5291s [7682/8505] Psych::Visitors::TestYAMLTree#test_override_method = 0.00 s 5291s [7683/8505] Psych::Visitors::TestYAMLTree#test_nil = 0.01 s 5291s [7684/8505] Psych::Visitors::TestYAMLTree#test_float = 0.01 s 5291s [7685/8505] Psych::Visitors::TestYAMLTree#test_regexp = 0.01 s 5291s [7686/8505] Psych::Visitors::TestYAMLTree#test_symbol = 0.00 s 5291s [7687/8505] Psych::Visitors::TestYAMLTree#test_range_exclusive = 0.01 s 5291s [7688/8505] Psych::Visitors::TestYAMLTree#test_simple_delegator = 0.01 s 5291s [7689/8505] Psych::Visitors::TestYAMLTree#test_string = 0.00 s 5291s [7690/8505] Psych::Visitors::TestYAMLTree#test_tree_can_be_called_twice = 0.00 s 5291s [7691/8505] Psych::Visitors::TestYAMLTree#test_delegator = 0.01 s 5291s [7692/8505] Psych::Visitors::TestYAMLTree#test_struct_anon = 0.00 s 5291s [7693/8505] Psych::Visitors::TestYAMLTree#test_int = 0.01 s 5291s [7694/8505] Psych::Visitors::TestYAMLTree#test_struct = 0.01 s 5291s [7695/8505] Psych::Visitors::TestYAMLTree#test_anon_class = 0.00 s 5291s [7696/8505] Psych::Visitors::TestYAMLTree#test_date = 0.00 s 5291s [7697/8505] Psych::Visitors::TestYAMLTree#test_yaml_tree_can_take_an_emitter = 0.00 s 5291s [7698/8505] Psych::Visitors::TestYAMLTree#test_binary_formatting = 0.00 s 5291s [7699/8505] Psych::Visitors::TestYAMLTree#test_scalar = 0.03 s 5291s [7700/8505] Psych::Visitors::TestYAMLTree#test_boolean = 0.02 s 5291s [7701/8505] Psych::Visitors::TestYAMLTree#test_struct_const = 0.01 s 5291s [7702/8505] Psych::Visitors::TestYAMLTree#test_complex = 0.01 s 5291s [7703/8505] Psych::Visitors::TestYAMLTree#test_list = 0.01 s 5291s [7704/8505] Psych::Visitors::TestYAMLTree#test_object_has_no_class = 0.00 s 5291s [7705/8505] Psych::Visitors::TestYAMLTree#test_range_inclusive = 0.01 s 5291s [7706/8505] TestRDocGeneratorPOTPO#test_have_entry = 0.01 s 5291s [7707/8505] TestRDocGeneratorPOTPO#test_empty = 0.00 s 5291s [7708/8505] TestSingleton#test_clone_raises_exception = 0.00 s 5291s [7709/8505] TestSingleton#test_dup_raises_exception = 0.00 s 5291s [7710/8505] TestSingleton#test_initialize_raises_exception = 0.00 s 5291s [7711/8505] TestSingleton#test_instance_never_changes = 0.00 s 5291s [7712/8505] TestSingleton#test_marshal = 0.00 s 5291s [7713/8505] TestSingleton#test_class_level_cloning_preserves_singleton_behavior = 0.00 s 5291s [7714/8505] TestSingleton#test_include_in_module_raises_exception = 0.00 s 5291s [7715/8505] TestSingleton#test_allocate_raises_exception = 0.00 s 5291s [7716/8505] TestSingleton#test_extending_singleton_raises_exception = 0.00 s 5291s [7717/8505] TestSingleton#test_inheritance_works_with_overridden_inherited_method = 0.00 s 5291s [7718/8505] TestRDocRIPaths#test_class_each = 0.07 s 5291s [7719/8505] TestRDocRIPaths#test_class_path_nonexistent = 0.03 s 5292s [7720/8505] TestRDocRIPaths#test_class_raw_path_extra_dirs = 0.02 s 5292s [7721/8505] TestRDocRIPaths#test_class_raw_path = 0.01 s 5292s [7722/8505] TestRDocRIPaths#test_class_home_dir = 0.03 s 5292s [7723/8505] TestRDocRIPaths#test_class_gem_dir = 0.02 s 5292s [7724/8505] TestRDocRIPaths#test_class_system_dir = 0.01 s 5292s [7725/8505] TestRDocRIPaths#test_class_gemdirs_legacy = 0.02 s 5292s [7726/8505] TestRDocRIPaths#test_class_gemdirs_all = 0.01 s 5292s [7727/8505] TestRDocRIPaths#test_class_gemdirs_latest = 0.01 s 5292s [7728/8505] TestRDocRIPaths#test_class_site_dir = 0.02 s 5292s [7729/8505] TestFiberProcess#test_process_wait = 0.01 s 5292s [7730/8505] TestFiberProcess#test_system = 0.00 s 5292s [7731/8505] URI::TestFTP#test_paths = 0.00 s 5292s [7732/8505] URI::TestFTP#test_parse_invalid = 0.00 s 5292s [7733/8505] URI::TestFTP#test_parse = 0.00 s 5292s [7734/8505] URI::TestFTP#test_assemble = 0.00 s 5292s [7735/8505] URI::TestFTP#test_select = 0.00 s 5292s [7736/8505] Psych::TestMergeKeys#test_merge_seq_nil = 0.00 s 5292s [7737/8505] Psych::TestMergeKeys#test_explicit_string = 0.00 s 5292s [7738/8505] Psych::TestMergeKeys#test_merge_is_not_partial = 0.00 s 5292s [7739/8505] Psych::TestMergeKeys#test_merge_array = 0.00 s 5292s [7740/8505] Psych::TestMergeKeys#test_bad_seq_merge = 0.00 s 5292s [7741/8505] Psych::TestMergeKeys#test_mergekey_with_object = 0.00 s 5292s [7742/8505] Psych::TestMergeKeys#test_merge_key_with_bare_hash_symbolized_names = 0.00 s 5292s [7743/8505] Psych::TestMergeKeys#test_multiple_maps = 0.00 s 5292s [7744/8505] Psych::TestMergeKeys#test_merge_key = 0.00 s 5292s [7745/8505] Psych::TestMergeKeys#test_roundtrip_with_chevron_key = 0.01 s 5292s [7746/8505] Psych::TestMergeKeys#test_merge_key_with_bare_hash = 0.00 s 5292s [7747/8505] Psych::TestMergeKeys#test_override = 0.00 s 5292s [7748/8505] Psych::TestMergeKeys#test_merge_nil = 0.00 s 5292s [7749/8505] Psych::TestMergeKeys#test_missing_merge_key = 0.00 s 5292s [7750/8505] URI::TestWS#test_build = 0.00 s 5292s [7751/8505] URI::TestWS#test_normalize = 0.00 s 5292s [7752/8505] URI::TestWS#test_parse = 0.00 s 5292s [7753/8505] URI::TestWS#test_request_uri = 0.00 s 5292s [7754/8505] URI::TestWS#test_equal = 0.00 s 5292s [7755/8505] URI::TestWS#test_select = 0.00 s 5292s [7756/8505] TestBigDecimalRactor#test_ractor_shareable = 0.00 s 5292s [7757/8505] Psych::TestNull#test_null_list = 0.00 s 5292s [7758/8505] YAMLStoreTest#test_data_should_be_loaded_correctly_when_in_readwrite_mode = 0.01 s 5292s [7759/8505] YAMLStoreTest#test_data_should_be_loaded_correctly_when_in_readonly_mode = 0.01 s 5292s [7760/8505] YAMLStoreTest#test_changes_are_not_written_on_abort = 0.00 s 5292s [7761/8505] YAMLStoreTest#test_nested_transaction_raises_error = 0.01 s 5292s [7762/8505] YAMLStoreTest#test_opening_new_file_in_readwrite_mode_should_result_in_empty_values = 0.00 s 5292s [7763/8505] YAMLStoreTest#test_thread_safe = 0.05 s 5292s [7764/8505] YAMLStoreTest#test_with_options = 0.01 s 5292s [7765/8505] YAMLStoreTest#test_opening_new_file_in_readonly_mode_should_result_in_empty_values = 0.00 s 5292s [7766/8505] YAMLStoreTest#test_changes_after_commit_are_discarded = 0.01 s 5292s [7767/8505] YAMLStoreTest#test_writing_inside_readonly_transaction_raises_error = 0.00 s 5292s [7768/8505] TestRDocParserMarkdown#test_file = 0.00 s 5292s [7769/8505] TestRDocParserMarkdown#test_class_can_parse = 0.01 s 5292s [7770/8505] TestRDocParserMarkdown#test_scan = 0.02 s 5292s [7771/8505] TestOptionParser::WithPattern#test_order = 0.00 s 5292s [7772/8505] TestOptionParser::WithPattern#test_regexp = 0.00 s 5292s [7773/8505] TestOptionParser::WithPattern#test_nonopt_pattern = 0.00 s 5292s [7774/8505] TestOptionParser::WithPattern#test_into = 0.00 s 5292s [7775/8505] TestOptionParser::WithPattern#test_permute = 0.00 s 5292s [7776/8505] TestOptionParser::WithPattern#test_require_exact = 0.01 s 5292s [7777/8505] TestOptionParser::WithPattern#test_pattern = 0.00 s 5292s [7778/8505] Psych::YAMLStoreTest#test_data_should_be_loaded_correctly_when_in_readwrite_mode = 0.01 s 5292s [7779/8505] Psych::YAMLStoreTest#test_data_should_be_loaded_correctly_when_in_readonly_mode = 0.02 s 5292s [7780/8505] Psych::YAMLStoreTest#test_changes_are_not_written_on_abort = 0.00 s 5292s [7781/8505] Psych::YAMLStoreTest#test_opening_new_file_in_readwrite_mode_should_result_in_empty_values = 0.00 s 5292s [7782/8505] Psych::YAMLStoreTest#test_opening_new_file_in_readonly_mode_should_result_in_empty_values = 0.00 s 5292s [7783/8505] Psych::YAMLStoreTest#test_changes_after_commit_are_discarded = 0.01 s 5292s [7784/8505] Psych::YAMLStoreTest#test_writing_inside_readonly_transaction_raises_error = 0.00 s 5292s [7785/8505] Psych::TestSymbol#test_cycle = 0.00 s 5292s [7786/8505] Psych::TestSymbol#test_cycle_empty = 0.00 s 5292s [7787/8505] Psych::TestSymbol#test_cycle_colon = 0.00 s 5292s [7788/8505] Psych::TestSymbol#test_load_quoted = 0.00 s 5292s [7789/8505] Psych::TestSymbol#test_stringy = 0.00 s 5292s [7790/8505] Psych::TestEmitter#test_resizing_tags = 0.00 s 5292s [7791/8505] Psych::TestEmitter#test_emit_utf_8 = 0.00 s 5292s [7792/8505] Psych::TestEmitter#test_start_sequence_arg_error = 0.00 s 5292s [7793/8505] Psych::TestEmitter#test_indentation_set = 0.00 s 5292s [7794/8505] Psych::TestEmitter#test_line_width = 0.00 s 5292s [7795/8505] Psych::TestEmitter#test_start_stream_arg_error = 0.00 s 5292s [7796/8505] Psych::TestEmitter#test_scalar_arg_error = 0.01 s 5292s [7797/8505] Psych::TestEmitter#test_set_canonical = 0.00 s 5292s [7798/8505] Psych::TestEmitter#test_start_doc_arg_error = 0.00 s 5292s [7799/8505] TestCSVParseConvert#test_nil_value = 0.00 s 5292s [7800/8505] TestCSVParseConvert#test_empty_value = 0.00 s 5292s [7801/8505] TestCSVParseConvert#test_custom = 0.00 s 5292s [7802/8505] TestCSVParseConvert#test_all = 0.01 s 5292s [7803/8505] TestCSVParseConvert#test_float = 0.00 s 5292s [7804/8505] TestCSVParseConvert#test_custom_field_info_line = 0.01 s 5292s [7805/8505] TestCSVParseConvert#test_numeric = 0.01 s 5292s [7806/8505] TestCSVParseConvert#test_integer_float = 0.01 s 5292s [7807/8505] TestCSVParseConvert#test_integer = 0.00 s 5292s [7808/8505] TestCSVParseConvert#test_custom_field_info_header = 0.01 s 5292s [7809/8505] TestCSVParseConvert#test_custom_blank_field = 0.01 s 5292s [7810/8505] TestCSVParseConvert#test_float_integer = 0.01 s 5292s [7811/8505] TestCSVParseConvert#test_builtin_custom = 0.01 s 5292s [7812/8505] Reline::History::Test#test_pop = 0.01 s 5292s [7813/8505] Reline::History::Test#test_history_size_negative_unlimited = 0.00 s 5292s [7814/8505] Reline::History::Test#test_get__out_of_range = 0.01 s 5292s [7815/8505] Reline::History::Test#test_get__negative = 0.01 s 5292s [7816/8505] Reline::History::Test#test_each__enumerator = 0.00 s 5292s [7817/8505] Reline::History::Test#test_history_size_zero = 0.00 s 5292s [7818/8505] Reline::History::Test#test_empty_p = 0.00 s 5292s [7819/8505] Reline::History::Test#test_push__operator = 0.00 s 5292s [7820/8505] Reline::History::Test#test_push__plural = 0.00 s 5292s [7821/8505] Reline::History::Test#test_get = 0.00 s 5292s [7822/8505] Reline::History::Test#test_set = 0.00 s 5292s [7823/8505] Reline::History::Test#test_delete_at__out_of_range = 0.01 s 5292s [7824/8505] Reline::History::Test#test_ancestors = 0.00 s 5292s [7825/8505] Reline::History::Test#test_delete_at = 0.01 s 5292s [7826/8505] Reline::History::Test#test_to_s = 0.01 s 5292s [7827/8505] Reline::History::Test#test_each = 0.00 s 5292s [7828/8505] Reline::History::Test#test_length = 0.00 s 5292s [7829/8505] Reline::History::Test#test_set__out_of_range = 0.01 s 5292s [7830/8505] Reline::History::Test#test_push = 0.00 s 5292s [7831/8505] Reline::History::Test#test_shift = 0.00 s 5292s Finished tests in 596.967682s, 13.1180 tests/s, 354.2470 assertions/s. 5292s 7831 tests, 211474 assertions, 0 failures, 0 errors, 33 skips 5292s 5292s ruby -v: jruby 9.4.6.0 (3.1.4) 2024-03-20 9.4.6.0+ds OpenJDK 64-Bit Server VM 21.0.2+13-Ubuntu-2 on 21.0.2+13-Ubuntu-2 +jit [aarch64-linux] 5293s autopkgtest [12:22:56]: test mri-stdlib: -----------------------] 5294s autopkgtest [12:22:57]: test mri-stdlib: - - - - - - - - - - results - - - - - - - - - - 5294s mri-stdlib PASS 5294s autopkgtest [12:22:57]: @@@@@@@@@@@@@@@@@@@@ summary 5294s smoke PASS (superficial) 5294s jgem PASS 5294s jirb PASS 5294s jruby PASS 5294s spec-compiler PASS 5294s spec-ffi PASS 5294s spec-ji PASS 5294s spec-jruby PASS 5294s spec-ruby FLAKY non-zero exit status 1 5294s mri-core PASS 5294s mri-extra FLAKY non-zero exit status 1 5294s mri-stdlib PASS 5300s Creating nova instance adt-noble-arm64-jruby-20240320-105442-juju-7f2275-prod-proposed-migration-environment-2 from image adt/ubuntu-noble-arm64-server-20240320.img (UUID e0f61a12-2f1c-4e49-a68b-f68d2ad5dd10)... 5300s Creating nova instance adt-noble-arm64-jruby-20240320-105442-juju-7f2275-prod-proposed-migration-environment-2 from image adt/ubuntu-noble-arm64-server-20240320.img (UUID e0f61a12-2f1c-4e49-a68b-f68d2ad5dd10)... 5300s Creating nova instance adt-noble-arm64-jruby-20240320-105442-juju-7f2275-prod-proposed-migration-environment-2 from image adt/ubuntu-noble-arm64-server-20240320.img (UUID e0f61a12-2f1c-4e49-a68b-f68d2ad5dd10)... 5300s Creating nova instance adt-noble-arm64-jruby-20240320-105442-juju-7f2275-prod-proposed-migration-environment-2 from image adt/ubuntu-noble-arm64-server-20240320.img (UUID e0f61a12-2f1c-4e49-a68b-f68d2ad5dd10)... 5300s Creating nova instance adt-noble-arm64-jruby-20240320-105442-juju-7f2275-prod-proposed-migration-environment-2 from image adt/ubuntu-noble-arm64-server-20240320.img (UUID e0f61a12-2f1c-4e49-a68b-f68d2ad5dd10)... 5300s Creating nova instance adt-noble-arm64-jruby-20240320-105442-juju-7f2275-prod-proposed-migration-environment-2 from image adt/ubuntu-noble-arm64-server-20240320.img (UUID e0f61a12-2f1c-4e49-a68b-f68d2ad5dd10)...